summaryrefslogtreecommitdiffstats
path: root/packages/meshbay-client/scripts/sync-ui.js
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-08-22 11:02:15 +0200
committerChristophe Besson <cbesson@gmail.com>2026-08-22 11:02:15 +0200
commit3b677af830672759198a0bb8167b4929a9afd997 (patch)
treefa8bcde38b2c3ce72a41c8edca385ce81456dc1b /packages/meshbay-client/scripts/sync-ui.js
parent4335a515c67477a6ac33356361b4f43a5df5e642 (diff)
downloadmeshbay-3b677af830672759198a0bb8167b4929a9afd997.tar.gz
fix: move meshbay-client build scripts out of gitignored build/ dir
The root .gitignore ignores build/ (Python convention), which silently prevented sync-ui.js and its companion index.html from being committed. Rename to scripts/ so the files are tracked normally. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-client/scripts/sync-ui.js')
-rw-r--r--packages/meshbay-client/scripts/sync-ui.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/packages/meshbay-client/scripts/sync-ui.js b/packages/meshbay-client/scripts/sync-ui.js
new file mode 100644
index 0000000..d0b6eee
--- /dev/null
+++ b/packages/meshbay-client/scripts/sync-ui.js
@@ -0,0 +1,46 @@
+/**
+ * Copy the interface into this package.
+ *
+ * `packages/meshbay-hub/src/meshbay_hub/static/` is the single source of the
+ * interface, and it is *copied* here at build time rather than forked. A silent
+ * fork is the only real way to end up maintaining the UI twice, so this script
+ * refuses to leave a stale copy behind: it wipes the destination first, and CI
+ * fails if running it changes anything that was committed.
+ */
+
+'use strict';
+
+const fs = require('node:fs');
+const path = require('node:path');
+
+const SRC = path.resolve(__dirname, '..', '..', 'meshbay-hub', 'src',
+ 'meshbay_hub', 'static');
+const DEST = path.resolve(__dirname, '..', 'ui');
+
+// index.html is ours: the hub builds its own with a /a/<hash>/ prefix for cache
+// busting, which an application loading from disk does not need and must not
+// have — the prefix would point at the hub.
+const OURS = ['index.html'];
+
+// sw.js has to sit at the root of the scope it serves, which it already does.
+const SKIP = new Set(['webrtc-test.html']);
+
+function copyTree(from, to) {
+ fs.mkdirSync(to, { recursive: true });
+ for (const entry of fs.readdirSync(from, { withFileTypes: true })) {
+ if (SKIP.has(entry.name)) continue;
+ const src = path.join(from, entry.name);
+ const dst = path.join(to, entry.name);
+ if (entry.isDirectory()) copyTree(src, dst);
+ else fs.copyFileSync(src, dst);
+ }
+}
+
+fs.rmSync(DEST, { recursive: true, force: true });
+copyTree(SRC, DEST);
+for (const name of OURS) {
+ fs.copyFileSync(path.join(__dirname, name), path.join(DEST, name));
+}
+
+const count = fs.readdirSync(DEST).length;
+console.log(`ui/ rebuilt from ${path.relative(process.cwd(), SRC)} (${count} entries)`);