2f867b8e6c
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 15s
CI / ui (pull_request) Successful in 1m10s
CI / conformance (pull_request) Successful in 10s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m41s
An installed PWA (standalone web + confirmed email) warms the dictionaries for the player's enabled variants while online — on lobby entry and on a variant-preference change — using the per-variant version the profile now advertises, so a later switch to offline mode already has the data. - dict/preload.ts: pure preloadDicts (retry + linear backoff, honours the session dictionary miss-breaker); node-tested. - dict/preloadrun.ts: lazy browser orchestration (real getDawg), imported dynamically so the loader and move generator stay out of the main bundle. - offline.svelte.ts: kickDictPreload, gated by the pure, tested offlinePreloadEligible, plus the reactive first-lobby preload warning. - Header shows a poor-connection notice in the ad-banner slot on a first-lobby preload failure (offline.preloadWarning, en/ru). - App-entry bundle budget 112->113 for the irreducible main-side wiring (documented in bundle-size.mjs); the heavy parts remain lazy chunks. Docs: ARCHITECTURE offline-mode + dict-preload mechanism.
25 lines
1.3 KiB
TypeScript
25 lines
1.3 KiB
TypeScript
// Browser-only orchestration for the offline dictionary preload. Kept apart from the pure
|
|
// preloadDicts (preload.ts) — which unit-tests in the node env — and lazily imported by
|
|
// offline.svelte.ts's kickDictPreload, so the dict loader/generator it pulls in stays out of the
|
|
// main bundle. It supplies the real side effects (getDawg, the session miss-breaker) and raises the
|
|
// in-lobby notice when a first-lobby preload cannot fetch every enabled variant's dictionary.
|
|
|
|
import type { Profile } from '../model';
|
|
import { preloadDicts } from './preload';
|
|
import { getDawg, dictLoadingDisabled } from '../dict';
|
|
import { setDictPreloadWarning } from '../offline.svelte';
|
|
|
|
/**
|
|
* runPreload warms the dictionaries for the profile's enabled variants (using the versions the
|
|
* profile advertises) via the real dict loader, so a later switch to offline mode has the data.
|
|
* When warnOnFail is set (the first lobby entry), it raises the in-lobby notice if a variant is
|
|
* still missing afterwards, and clears it on a run where every variant is available.
|
|
*/
|
|
export async function runPreload(prof: Profile, warnOnFail: boolean): Promise<void> {
|
|
const res = await preloadDicts(prof.dictVersions, prof.variantPreferences, {
|
|
getDawg,
|
|
disabled: dictLoadingDisabled,
|
|
});
|
|
if (warnOnFail) setDictPreloadWarning(res.failed.length > 0);
|
|
}
|