Call gatherDiagnostics to perform syntax/semantic/type checks

This was accidentally removed in recent refactoring https://github.com/bazelbuild/rules_typescript/commit/1b33eba25c49d2249945374255579818dc0e94df
which caused TS compilations to incorrectly succeed when the code contains errors.

Restore missing tests which would have caught the regression; these were also accidentally disabled when Bazel BUILD files were refactored.

PiperOrigin-RevId: 224869541
diff --git a/internal/BUILD.bazel b/internal/BUILD.bazel
index 3762b8c..4d3b30e 100644
--- a/internal/BUILD.bazel
+++ b/internal/BUILD.bazel
@@ -17,11 +17,11 @@
 package(default_visibility = ["//visibility:public"])
 
 exports_files([
-    "tsconfig.json",
     # Exported to be consumed for generating skydoc.
     "build_defs.bzl",
     "ts_config.bzl",
     "ts_repositories.bzl",
+    "tsetse/tsconfig.json",
 ])
 
 load("//internal:defaults.bzl", "ts_library")
@@ -98,6 +98,7 @@
         ":tsc_wrapped",
         "@npm//@types/jasmine",
         "@npm//@types/node",
+        "@npm//tsickle",
         "@npm//typescript",
     ],
 )
diff --git a/internal/tsc_wrapped/tsc_wrapped.ts b/internal/tsc_wrapped/tsc_wrapped.ts
index f2bb9ab..eb8bcbb 100644
--- a/internal/tsc_wrapped/tsc_wrapped.ts
+++ b/internal/tsc_wrapped/tsc_wrapped.ts
@@ -205,6 +205,30 @@
           compilerHost.inputFiles, options, compilerHost, oldProgram));
   cache.putProgram(bazelOpts.target, program);
 
+  if (!bazelOpts.isJsTranspilation) {
+    // If there are any TypeScript type errors abort now, so the error
+    // messages refer to the original source.  After any subsequent passes
+    // (decorator downleveling or tsickle) we do not type check.
+    let diagnostics =
+        gatherDiagnostics(options, bazelOpts, program, disabledTsetseRules);
+    if (!expectDiagnosticsWhitelist.length ||
+        expectDiagnosticsWhitelist.some(p => bazelOpts.target.startsWith(p))) {
+      diagnostics = bazelDiagnostics.filterExpected(
+          bazelOpts, diagnostics, bazelDiagnostics.uglyFormat);
+    } else if (bazelOpts.expectedDiagnostics.length > 0) {
+      console.error(
+          `Only targets under ${
+              expectDiagnosticsWhitelist.join(', ')} can use ` +
+              'expected_diagnostics, but got',
+          bazelOpts.target);
+    }
+
+    if (diagnostics.length > 0) {
+      console.error(bazelDiagnostics.format(bazelOpts.target, diagnostics));
+      debug('compilation failed at', new Error().stack!);
+      return false;
+    }
+  }
 
   const compilationTargets = program.getSourceFiles().filter(
       fileName => isCompilationTarget(bazelOpts, fileName));
diff --git a/internal/tsetse/tests/ban_expect_truthy_promise/BUILD b/internal/tsetse/tests/ban_expect_truthy_promise/BUILD
new file mode 100644
index 0000000..dc328a1
--- /dev/null
+++ b/internal/tsetse/tests/ban_expect_truthy_promise/BUILD
@@ -0,0 +1,60 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+licenses(["notice"])  # Apache 2.0
+
+load("//internal:defaults.bzl", "ts_library")
+
+error_message = "error TS21224: Value passed.*"
+
+ts_library(
+    name = "jasmine",
+    testonly = 1,
+    srcs = [
+        "jasmine_types.ts",
+    ],
+)
+
+ts_library(
+    name = "positives",
+    testonly = 1,
+    tsconfig = "//internal:tsetse/tsconfig.json",
+    srcs = [
+        "positives.ts",
+    ],
+    expected_diagnostics = [
+        "\(29,5\).*" + error_message,
+        "\(30,5\).*" + error_message,
+        "\(31,5\).*" + error_message,
+        "\(32,5\).*" + error_message,
+        "\(33,5\).*" + error_message,
+        "\(34,5\).*" + error_message,
+        "\(35,5\).*" + error_message,
+    ],
+    deps = [
+        ":jasmine",
+    ],
+)
+
+ts_library(
+    name = "negatives",
+    testonly = 1,
+    tsconfig = "//internal:tsetse/tsconfig.json",
+    srcs = [
+        "negatives.ts",
+    ],
+    deps = [
+        ":jasmine",
+    ],
+)
diff --git a/internal/tsetse/tests/ban_promise_as_condition/BUILD b/internal/tsetse/tests/ban_promise_as_condition/BUILD
new file mode 100644
index 0000000..5907da5
--- /dev/null
+++ b/internal/tsetse/tests/ban_promise_as_condition/BUILD
@@ -0,0 +1,51 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+licenses(["notice"])  # Apache 2.0
+
+load("//internal:defaults.bzl", "ts_library")
+
+error_message = "error TS21226: Found a thenable.*"
+
+ts_library(
+    name = "positives",
+    testonly = 1,
+    tsconfig = "//internal:tsetse/tsconfig.json",
+    srcs = [
+        "positives.ts",
+    ],
+    expected_diagnostics = [
+        "\(7,7\).*" + error_message,
+        "\(15,7\).*" + error_message,
+        "\(23,19\).*" + error_message,
+        "\(25,10\).*" + error_message,
+        "\(30,34\).*" + error_message,
+        "\(31,34\).*" + error_message,
+        "\(37,19\).*" + error_message,
+        "\(39,10\).*" + error_message,
+        "\(44,34\).*" + error_message,
+        "\(45,34\).*" + error_message,
+    ],
+    deps = [
+    ],
+)
+
+ts_library(
+    name = "negatives",
+    testonly = 1,
+    tsconfig = "//internal:tsetse/tsconfig.json",
+    srcs = ["negatives.ts"],
+    deps = [
+    ],
+)
diff --git a/internal/tsetse/tests/check_return_value/BUILD b/internal/tsetse/tests/check_return_value/BUILD
new file mode 100644
index 0000000..be2414a
--- /dev/null
+++ b/internal/tsetse/tests/check_return_value/BUILD
@@ -0,0 +1,66 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+licenses(["notice"])  # Apache 2.0
+
+load("//internal:defaults.bzl", "ts_library")
+
+
+error_message = "TS21222: return value is unused.\\n\\tSee http://tsetse.info/check-return-value"
+
+ts_library(
+    name = "no_expected_diagnostics_test",
+    testonly = 1,
+    srcs = ["no_expected_diagnostics.ts"],
+    tsconfig = "//internal:tsetse/tsconfig.json",
+)
+
+ts_library(
+    name = "expected_diagnostics_test",
+    testonly = 1,
+    srcs = ["expected_diagnostics.ts"],
+    expected_diagnostics = [
+        "\(6,1\).*" + error_message,
+        "\(8,1\).*" + error_message,
+        "\(12,1\).*" + error_message,
+        "\(16,1\).*" + error_message,
+        "\(19,1\).*" + error_message,
+    ],
+    tsconfig = "//internal:tsetse/tsconfig.json",
+)
+
+ts_library(
+    name = "user_defined_check_return_value",
+    testonly = 1,
+    srcs = ["user_defined_check_return_value.ts"],
+    tsconfig = "//internal:tsetse/tsconfig.json",
+)
+
+ts_library(
+    name = "unused_return_value_user_defined_function",
+    testonly = 1,
+    srcs = ["unused_return_value_user_defined_function.ts"],
+    expected_diagnostics = [
+        "\(4,1\).*" + error_message,
+        "\(5,1\).*" + error_message,
+        "\(7,1\).*" + error_message,
+        "\(9,1\).*" + error_message,
+        "\(15,1\).*" + error_message,
+    ],
+    tsconfig = "//internal:tsetse/tsconfig.json",
+    deps = [
+        ":user_defined_check_return_value",
+        "@npm//@types/jasmine",
+    ],
+)
diff --git a/internal/tsetse/tests/equals_nan/BUILD b/internal/tsetse/tests/equals_nan/BUILD
new file mode 100644
index 0000000..dd08612
--- /dev/null
+++ b/internal/tsetse/tests/equals_nan/BUILD
@@ -0,0 +1,43 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+licenses(["notice"])  # Apache 2.0
+
+load("//internal:defaults.bzl", "ts_library")
+
+
+ts_library(
+    name = "positives",
+    testonly = 1,
+    srcs = [
+        "positives.ts",
+    ],
+    expected_diagnostics = [
+        "\(2,19\): error TS21223: x === NaN is always false; use isNaN\(x\) instead",
+        "\(6,5\): error TS21223: x === NaN is always false; use isNaN\(x\) instead",
+        "\(7,5\): error TS21223: x == NaN is always false; use isNaN\(x\) instead",
+        "\(8,5\): error TS21223: x !== NaN is always true; use !isNaN\(x\) instead",
+        "\(9,5\): error TS21223: x != NaN is always true; use !isNaN\(x\) instead",
+        "\(11,1\): error TS21223: x === NaN is always false; use isNaN\(x\) instead",
+        "\(12,1\): error TS21223: x === NaN is always false; use isNaN\(x\) instead",
+    ],
+)
+
+ts_library(
+    name = "negatives",
+    testonly = 1,
+    srcs = [
+        "negatives.ts",
+    ],
+)
diff --git a/internal/tsetse/tests/must_use_promises/BUILD b/internal/tsetse/tests/must_use_promises/BUILD
new file mode 100644
index 0000000..16dddf4
--- /dev/null
+++ b/internal/tsetse/tests/must_use_promises/BUILD
@@ -0,0 +1,38 @@
+# Copyright 2017 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+licenses(["notice"])  # Apache 2.0
+
+load("//internal:defaults.bzl", "ts_library")
+
+
+error_message = "TS21225: All Promises in async functions must either be awaited or used in an expression."
+
+ts_library(
+    name = "positives",
+    testonly = 1,
+    srcs = [
+        "positives.ts",
+    ],
+    tsconfig = "//internal:tsetse/tsconfig.json",
+    expected_diagnostics = [
+        "\(29,3\)" + error_message,
+        "\(30,3\)" + error_message,
+        "\(31,3\)" + error_message,
+        "\(32,3\)" + error_message,
+        "\(34,3\)" + error_message,
+    ],
+    deps = [
+    ],
+)
diff --git a/internal/tsetse/tsconfig.json b/internal/tsetse/tsconfig.json
index cbcca14..f83ea7f 100644
--- a/internal/tsetse/tsconfig.json
+++ b/internal/tsetse/tsconfig.json
@@ -2,7 +2,6 @@
   "compilerOptions": {
     "strict": true,
     "types": [
-      "node"
     ],
     "lib": [
       "dom",