- web/src/*.ts: the script that was inline in index.html and login.html, split along its existing sections. Still one scope, concatenated in order, not modules. - web/build.mjs strips the types, puts the script in the page and minifies it with swc; build.rs runs it into OUT_DIR and web.rs include_str!s the result. 137 KB -> 106 KB. - npx tsc -p . type-checks web/src, loosely; the handful of annotations it needed change no behaviour. - The Docker build installs node and swc (npm ci --omit=dev). - Two list requests racing no longer let the older one win, and switching tabs clears the selection it closes, which made a browser test flaky. Closes #23, #24. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
15 lines
639 B
Rust
15 lines
639 B
Rust
//! Builds web/index.html and web/login.html from their TypeScript (web/build.mjs) into OUT_DIR,
|
|
//! where src/web.rs include_str!s them. Needs node and `npm ci` run first.
|
|
use std::process::Command;
|
|
|
|
fn main() {
|
|
println!("cargo:rerun-if-changed=web");
|
|
println!("cargo:rerun-if-changed=package-lock.json");
|
|
let out = std::env::var("OUT_DIR").unwrap();
|
|
let status = Command::new("node")
|
|
.args(["web/build.mjs", &out])
|
|
.status()
|
|
.expect("building the web pages needs node on PATH (and `npm ci` run once)");
|
|
assert!(status.success(), "web/build.mjs failed; run `node web/build.mjs` to see why");
|
|
}
|