Serve the script as /app.js, cached until a deploy changes it
The page loaded its script inline. It now names /app.js?v=<hash> (login.js for the sign-in page), the hash of the script's contents: the script is served immutable for a year and the page no-cache, so a browser fetches the script again only when a deploy changes it and so its name. Also fixes a race in the mark-everything-read test: it waited on a badge that was seldom 0 to begin with, so a mark-unread still in flight could land after the read-all. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,9 +11,12 @@ const vm = require('vm');
|
||||
|
||||
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(/\bid=(?:"([^"]+)"|([^\s>"']+))/g)].map(m => m[1] || m[2]));
|
||||
const { html, js: script, script: file } = buildPage('index.html');
|
||||
if (!new RegExp(`<script src="?/${file.replace('.', '\\.')}\\?v=[0-9a-f]{12}"?>`).test(html)) {
|
||||
console.error(`FAIL: the page does not load /${file}?v=<hash>`); process.exit(1);
|
||||
}
|
||||
// Ids in the page, and in the markup the script builds for its dialogs.
|
||||
const ids = new Set([...(html + script).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