Add basic webtesting example.

Also switch the angular example to use ts_library instead of ts_project.

Change-Id: Ib94c7010bd2af4036d1a04efaf95bbab43cb9ef0
Signed-off-by: Alex Perry <alex.perry96@gmail.com>
diff --git a/tools/BUILD b/tools/BUILD
index a7d165d..d64d602 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -1,3 +1,5 @@
+load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary")
+
 package(default_visibility = ["//visibility:public"])
 
 exports_files(["test_sharding_compliant"])
@@ -72,3 +74,13 @@
     name = "has_ubsan",
     values = {"define": "have_ubsan=true"},
 )
+
+nodejs_binary(
+    name = "tsc_wrapped_with_angular",
+    data = [
+        "@npm//@angular/compiler-cli",
+        "@npm//@bazel/typescript",
+    ],
+    entry_point = "@npm//:node_modules/@bazel/typescript/internal/tsc_wrapped/tsc_wrapped.js",
+    target_compatible_with = ["@platforms//cpu:x86_64"],
+)
diff --git a/tools/dependency_rewrite b/tools/dependency_rewrite
index cc1de8c..f2172cc 100644
--- a/tools/dependency_rewrite
+++ b/tools/dependency_rewrite
@@ -6,6 +6,7 @@
 rewrite mirror.bazel.build/(.*) software.frc971.org/Build-Dependencies/mirror.bazel.build/$1
 rewrite nodejs.org/(.*) software.frc971.org/Build-Dependencies/nodejs.org/$1
 rewrite static.rust-lang.org/(.*) software.frc971.org/Build-Dependencies/static.rust-lang.org/$1
+rewrite storage.googleapis.com/(.*) software.frc971.org/Build-Dependencies/storage.googleapis.com/$1
 allow golang.org
 
 allow software.frc971.org
diff --git a/tools/platforms/BUILD b/tools/platforms/BUILD
index 4127883..37fed2e 100644
--- a/tools/platforms/BUILD
+++ b/tools/platforms/BUILD
@@ -7,6 +7,7 @@
         "@platforms//cpu:x86_64",
         "//tools/platforms/go:has_support",
         "//tools/platforms/rust:has_support",
+        "//tools/platforms/nodejs:has_support",
     ],
 )
 
@@ -18,6 +19,7 @@
         "//tools/platforms/hardware:raspberry_pi",
         "//tools/platforms/go:lacks_support",
         "//tools/platforms/rust:has_support",
+        "//tools/platforms/nodejs:lacks_support",
     ],
 )
 
@@ -29,6 +31,7 @@
         "//tools/platforms/hardware:raspberry_pi",
         "//tools/platforms/go:lacks_support",
         "//tools/platforms/rust:has_support",
+        "//tools/platforms/nodejs:lacks_support",
     ],
 )
 
@@ -40,6 +43,7 @@
         "//tools/platforms/hardware:roborio",
         "//tools/platforms/go:lacks_support",
         "//tools/platforms/rust:has_support",
+        "//tools/platforms/nodejs:lacks_support",
     ],
 )
 
@@ -50,6 +54,7 @@
         "//tools/platforms/hardware:cortex_m4f",
         "//tools/platforms/go:lacks_support",
         "//tools/platforms/rust:lacks_support",
+        "//tools/platforms/nodejs:lacks_support",
     ],
 )
 
@@ -60,6 +65,7 @@
         "//tools/platforms/hardware:cortex_m0plus",
         "//tools/platforms/go:lacks_support",
         "//tools/platforms/rust:lacks_support",
+        "//tools/platforms/nodejs:lacks_support",
     ],
 )
 
diff --git a/tools/platforms/nodejs/BUILD b/tools/platforms/nodejs/BUILD
new file mode 100644
index 0000000..3040964
--- /dev/null
+++ b/tools/platforms/nodejs/BUILD
@@ -0,0 +1,13 @@
+package(default_visibility = ["//visibility:public"])
+
+constraint_setting(name = "node_support")
+
+constraint_value(
+    name = "has_support",
+    constraint_setting = ":node_support",
+)
+
+constraint_value(
+    name = "lacks_support",
+    constraint_setting = ":node_support",
+)
diff --git a/tools/ts/BUILD b/tools/ts/BUILD
new file mode 100644
index 0000000..697e376
--- /dev/null
+++ b/tools/ts/BUILD
@@ -0,0 +1,32 @@
+load("@bazel_skylib//rules:write_file.bzl", "write_file")
+load("@build_bazel_rules_nodejs//toolchains/node:node_toolchain.bzl", "node_toolchain")
+
+write_file(
+    name = "noop_error_exit",
+    out = "noop_error_exit.sh",
+    content = [
+        "#!/bin/bash",
+        "echo 'This should never be executed. Something went wrong.' >&2",
+        "echo 'This NOOP NodeJs toolchain should never be executed. Something went wrong.' >&2",
+        "echo 'Check that your target has `target_compatible_with` set to a platform that supports NodeJs.' >&2",
+        "exit 1",
+    ],
+    is_executable = True,
+)
+
+node_toolchain(
+    name = "noop_node_toolchain_impl",
+    target_tool = ":noop_error_exit",
+)
+
+toolchain(
+    name = "noop_node_toolchain",
+    exec_compatible_with = [
+        "@platforms//os:linux",
+    ],
+    target_compatible_with = [
+        "//tools/platforms/nodejs:lacks_support",
+    ],
+    toolchain = ":noop_node_toolchain_impl",
+    toolchain_type = "@build_bazel_rules_nodejs//toolchains/node:toolchain_type",
+)