Dans Chromium, l'installation du service worker échouait (« Cache.add() encountered a network error » sur wasm/engine.data) quand le Worker du moteur téléchargeait les mêmes 8,7 Mo au même moment : l'application n'était alors pas disponible hors ligne. Repéré par make test-browser, reproduit dans quatre essais sur cinq sans ce changement, jamais avec. Évite aussi de télécharger deux fois ces données à la première visite. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
49 lines
2.0 KiB
TypeScript
49 lines
2.0 KiB
TypeScript
// Point d'entrée de l'application dans le navigateur (index.html) : le seul
|
|
// endroit qui assemble le domaine, le moteur, le stockage et l'interface
|
|
// (ADR 0007, vérifié par dependency-cruiser).
|
|
//
|
|
// Copyright (C) 2026 les auteurs d'Ustagammon.
|
|
// Licence : GPLv3 ou ultérieure (voir LICENSE).
|
|
|
|
import { Game } from "./domain/game/game.js";
|
|
import { createWasmEngine } from "./engine/wasm-engine.js";
|
|
import { startEngineWorker } from "./engine/worker-run.js";
|
|
import { createGameStore } from "./storage/game-store.js";
|
|
import { startApp } from "./ui/app.js";
|
|
|
|
// Ce fichier est servi sous app/ ; le Worker et le service worker sont à la
|
|
// racine du site.
|
|
const worker = startEngineWorker(new URL("../engine-worker.mjs", import.meta.url));
|
|
const engine = createWasmEngine(worker.run);
|
|
const store = createGameStore(window.localStorage);
|
|
|
|
startApp({
|
|
engineReady: worker.ready,
|
|
newGame: () => Game.start(engine),
|
|
savedGame: () => {
|
|
const journal = store.load();
|
|
if (journal === null) {
|
|
return null;
|
|
}
|
|
try {
|
|
return Game.resume(engine, journal);
|
|
} catch {
|
|
return null; // partie illisible : on en commence une nouvelle
|
|
}
|
|
},
|
|
saveGame: (journal) => store.save(journal),
|
|
confirm: (question) => window.confirm(question),
|
|
});
|
|
|
|
// Hors ligne : le service worker met tout le site en cache. Le navigateur le
|
|
// refuse hors https (sauf localhost) : l'application marche alors sans.
|
|
// Il est enregistré une fois le moteur chargé : si le Worker et le service
|
|
// worker téléchargent les données du moteur (8,7 Mo) en même temps, Chromium
|
|
// fait échouer l'installation (« Cache.add() encountered a network error »),
|
|
// et l'application n'est pas disponible hors ligne. Cela évite aussi de
|
|
// télécharger deux fois ces données à la première visite.
|
|
if ("serviceWorker" in navigator) {
|
|
const sw = new URL("../sw.js", import.meta.url);
|
|
worker.ready.then(() => navigator.serviceWorker.register(sw)).catch(() => {});
|
|
}
|