The page's script is TypeScript in web/src, built and minified with swc
- 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>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
// Executes web/index.html's script against a stub DOM and fails on anything thrown.
|
||||
// Builds web/index.html from web/src as build.rs does, runs its script against a stub DOM,
|
||||
// and fails on anything thrown.
|
||||
//
|
||||
// This exists because a ReferenceError at load once blanked the whole UI: a patch
|
||||
// anchored on a function that no longer existed, so `prefsModal` was referenced but
|
||||
@@ -6,13 +7,13 @@
|
||||
// and every server-side test passed too, because the server was fine.
|
||||
//
|
||||
// node tests/page-smoke.js
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const vm = require('vm');
|
||||
|
||||
const html = fs.readFileSync(path.join(__dirname, '..', 'web', 'index.html'), 'utf8');
|
||||
const { buildPage } = require('../web/build.mjs');
|
||||
// What ships: minified, so an id may have lost its quotes.
|
||||
const html = buildPage('index.html');
|
||||
const script = html.split('<script>')[1].split('</script>')[0];
|
||||
const ids = new Set([...html.matchAll(/id="([^"]+)"/g)].map(m => m[1]));
|
||||
const ids = new Set([...html.matchAll(/\bid=(?:"([^"]+)"|([^\s>"']+))/g)].map(m => m[1] || m[2]));
|
||||
|
||||
const missing = [];
|
||||
const el = (name) => new Proxy({ style: { setProperty(){}, getPropertyValue(){ return ''; } }, dataset: {}, classList: { add(){}, remove(){}, toggle(){}, contains(){ return false; } },
|
||||
|
||||
Reference in New Issue
Block a user