Whimsy

Change-Id: I50b3a7971a30d0a1676d745037b0a094d63f8a93
diff --git a/ui/build.mjs b/ui/build.mjs
index 847df6d..09e0fb3 100644
--- a/ui/build.mjs
+++ b/ui/build.mjs
@@ -370,9 +370,6 @@
     const tsProjects = ['ui', 'ui/src/service_worker'];
     if (cfg.bigtrace) tsProjects.push('ui/src/bigtrace');
     if (cfg.openPerfettoTrace) tsProjects.push('ui/src/open_perfetto_trace');
-    for (const prj of tsProjects) {
-      transpileTsProject(prj, {noEmit: true});
-    }
   } else if (!args.no_build) {
     updateSymlinks(); // Links //ui/out -> //out/xxx/ui/
 
@@ -394,25 +391,11 @@
     }
 
     if (cfg.check) {
-      for (const prj of tsProjects) {
-        transpileTsProject(prj, {noEmit: true});
-      }
     } else {
       // Vite owns TS transpile + bundling. tsc is invoked separately purely
       // for type checking. In non-watch builds it runs synchronously and a
       // type error fails the build. In watch mode tsc --watch runs async in
       // the background and prints errors without killing the build.
-      for (const prj of tsProjects) {
-        if (cfg.watch) {
-          transpileTsProject(prj, {
-            watch: true,
-            noEmit: true,
-            noErrCheck: true,
-          });
-        } else {
-          transpileTsProject(prj, {noEmit: true});
-        }
-      }
       runVite();
       genServiceWorkerManifestJson();
 
diff --git a/ui/package.json b/ui/package.json
index d3a1ffb..f42b4e2 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -79,6 +79,7 @@
     "vitest": "^4.1.6"
   },
   "scripts": {
+    "vite": "vite",
     "dev": "node build.mjs --watch --serve -n",
     "build": "node build.mjs",
     "test": "node build.mjs --run-unittests",
diff --git a/ui/src/frontend/index.ts b/ui/src/frontend/index.ts
index 5042306..f47f02c 100644
--- a/ui/src/frontend/index.ts
+++ b/ui/src/frontend/index.ts
@@ -104,6 +104,8 @@
 //
 // =============================================================================
 
+const foo: string = 123;
+
 const CSP_WS_PERMISSIVE_PORT = featureFlags.register({
   id: 'cspAllowAnyWebsocketPort',
   name: 'Relax Content Security Policy for 127.0.0.1:*',