ui: add --bigtrace

Change-Id: Ie10ca7ea8104f121ca3108b451ef332956f645d0
diff --git a/ui/build.js b/ui/build.js
index f8e2d90..12e3c35 100644
--- a/ui/build.js
+++ b/ui/build.js
@@ -82,6 +82,7 @@
   watch: false,
   verbose: false,
   debug: false,
+  bigtrace: false,
   startHttpServer: false,
   httpServerListenHost: '127.0.0.1',
   httpServerListenPort: 10000,
@@ -108,6 +109,7 @@
   outGenDir: '',
   outDistDir: '',
   outExtDir: '',
+  outBigtraceDistDir: '',
 };
 
 const RULES = [
@@ -146,6 +148,7 @@
   parser.add_argument('--run-unittests', '-t', {action: 'store_true'});
   parser.add_argument('--run-integrationtests', '-T', {action: 'store_true'});
   parser.add_argument('--debug', '-d', {action: 'store_true'});
+  parser.add_argument('--bigtrace', {action: 'store_true'});
   parser.add_argument('--interactive', '-i', {action: 'store_true'});
   parser.add_argument('--rebaseline', '-r', {action: 'store_true'});
   parser.add_argument('--no-depscheck', {action: 'store_true'});
@@ -171,8 +174,12 @@
   cfg.watch = !!args.watch;
   cfg.verbose = !!args.verbose;
   cfg.debug = !!args.debug;
+  cfg.bigtrace = !!args.bigtrace;
   cfg.startHttpServer = args.serve;
   cfg.noOverrideGnArgs = !!args.no_override_gn_args;
+  if (args.bigtrace) {
+    cfg.outBigtraceDistDir = ensureDir(pjoin(cfg.outDistDir, 'bigtrace'));
+  }
   if (args.serve_host) {
     cfg.httpServerListenHost = args.serve_host;
   }
@@ -242,6 +249,9 @@
     genVersion();
     transpileTsProject('ui');
     transpileTsProject('ui/src/service_worker');
+    if (cfg.bigtrace) {
+      transpileTsProject('ui/src/bigtrace');
+    }
 
     if (cfg.watch) {
       transpileTsProject('ui', {watch: cfg.watch});
@@ -486,6 +496,9 @@
 function bundleJs(cfgName) {
   const rcfg = pjoin(ROOT_DIR, 'ui/config', cfgName);
   const args = ['-c', rcfg, '--no-indent'];
+  if (cfg.bigtrace) {
+    args.push('--environment', 'ENABLE_BIGTRACE:true');
+  }
   args.push(...(cfg.verbose ? [] : ['--silent']));
   if (cfg.watch) {
     // --waitForBundleInput is sadly quite busted so it is required ts
diff --git a/ui/config/rollup.config.js b/ui/config/rollup.config.js
index d83d2b9..c7d2a0c 100644
--- a/ui/config/rollup.config.js
+++ b/ui/config/rollup.config.js
@@ -93,10 +93,12 @@
   };
 }
 
+const maybeBigtrace = process.env['ENABLE_BIGTRACE'] ? [defBundle('bigtrace', 'dist_version/bigtrace')] : [];
+
 export default [
   defBundle('frontend', 'dist_version'),
   defBundle('engine', 'dist_version'),
   defBundle('traceconv', 'dist_version'),
   defBundle('chrome_extension', 'chrome_extension'),
   defServiceWorkerBundle(),
-];
+].concat(maybeBigtrace);
diff --git a/ui/src/bigtrace/index.ts b/ui/src/bigtrace/index.ts
new file mode 100644
index 0000000..98907ab
--- /dev/null
+++ b/ui/src/bigtrace/index.ts
@@ -0,0 +1 @@
+console.log('hello world bitrace');
\ No newline at end of file
diff --git a/ui/src/bigtrace/tsconfig.json b/ui/src/bigtrace/tsconfig.json
new file mode 100644
index 0000000..dd12b2e
--- /dev/null
+++ b/ui/src/bigtrace/tsconfig.json
@@ -0,0 +1,16 @@
+{
+  "extends": "../../tsconfig.base.json",
+  "include": [ "." ],
+  "exclude": [
+    "../gen/"
+  ],
+  "compilerOptions": {
+    "outDir": "../../out/tsc/bigtrace",
+    "lib": [
+      "dom",                               // Need to be explicitly mentioned now since we're overriding default included libs.
+      "es2021",                            // Need this to use Promise.allSettled, replaceAll, etc
+    ],
+    "esModuleInterop": true,
+    "allowSyntheticDefaultImports": true,
+  }
+}
diff --git a/ui/tsconfig.json b/ui/tsconfig.json
index e56528b..b76eb9b 100644
--- a/ui/tsconfig.json
+++ b/ui/tsconfig.json
@@ -4,6 +4,7 @@
   "exclude": [
     "./node_modules/",
     "./src/service_worker/",
+    "./src/bigtrace/",
     "./src/gen/",
     "./out"
   ],