Scouting: Add ability to scout offline

Signed-off-by: Filip Kujawa <filip.j.kujawa@gmail.com>
Change-Id: I0e0c0be033824c05b6c239d38eb79d95745fceec
diff --git a/tools/build_rules/js/BUILD b/tools/build_rules/js/BUILD
index 1bbe769..86a0288 100644
--- a/tools/build_rules/js/BUILD
+++ b/tools/build_rules/js/BUILD
@@ -24,3 +24,11 @@
         "//:node_modules/@types/node",
     ],
 )
+
+py_binary(
+    name = "assemble_service_worker_files",
+    srcs = [
+        "assemble_service_worker_files.py",
+    ],
+    visibility = ["//visibility:public"],
+)
diff --git a/tools/build_rules/js/assemble_service_worker_files.py b/tools/build_rules/js/assemble_service_worker_files.py
new file mode 100644
index 0000000..d4485d5
--- /dev/null
+++ b/tools/build_rules/js/assemble_service_worker_files.py
@@ -0,0 +1,27 @@
+import argparse
+import shutil
+import sys
+from pathlib import Path
+
+
+def main(argv):
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--input_dir", type=Path, action="append", default=[])
+    parser.add_argument("--output", type=Path, action="append", default=[])
+    parser.add_argument("--relative_output",
+                        type=Path,
+                        action="append",
+                        default=[])
+    args = parser.parse_args(argv[1:])
+
+    for relative_output, output in zip(args.relative_output, args.output):
+        for input_dir in args.input_dir:
+            input_file = input_dir / relative_output
+            if input_file.exists():
+                print(f"Copying {input_file} to {output}")
+                shutil.copy(input_file, output)
+                break
+
+
+if __name__ == "__main__":
+    sys.exit(main(sys.argv))