feat(desktop): prefer the bundled renderer, own update prompts (#3341)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-09 03:01:15 +02:00
1 parent 7a5b9a0ded
commit 5072488f1e
33 files changed
+2197 -113

No files matched your search

+23
View File
@@ -23,6 +23,7 @@ const SPLASH_DIST_DIR = path.join(DIST_DIR, 'splash');
const SPLASH_PRELOAD_FILE_NAME = 'splash.cjs';
const REQUIRED_RENDERER_ENTRIES = Object.freeze(['index.html', 'assets']);
const BUNDLED_RENDERER_ENTRIES = Object.freeze([...REQUIRED_RENDERER_ENTRIES, 'version.json']);
const BUNDLED_RENDERER_VERSION_PATTERN = /^\d+\.\d+\.\d+$/u;
const FORBIDDEN_RENDERER_ENTRIES = Object.freeze(['sw.js', 'sw.js.map']);
const SUPPORTED_BUILD_ARGUMENTS = Object.freeze(['--shared-assets', '--use-shared-renderer']);
const MAIN_BOOTSTRAP_ENTRY_NAME = 'index';
@@ -97,6 +98,24 @@ class BundledRendererMissingError extends Error {
}
}
class BundledRendererVersionError extends Error {
constructor(bundledVersion, buildVersion) {
super(
`The bundled renderer reports version ${JSON.stringify(bundledVersion)} and this shell is ${JSON.stringify(buildVersion)}. A shell that loads modules must bundle the renderer built for the same numeric version, because it serves whichever of the two is newer.`,
);
this.name = 'BundledRendererVersionError';
}
}
function readBundledRendererVersion() {
try {
const parsed = JSON.parse(fs.readFileSync(path.join(RENDERER_DIST_DIR, 'version.json'), 'utf8'));
return typeof parsed?.version === 'string' ? parsed.version : '';
} catch {
return '';
}
}
class RendererServiceWorkerPresentError extends Error {
constructor(present) {
super(
@@ -847,6 +866,10 @@ function prunePackedRendererModules() {
if (missing.length > 0) {
throw new BundledRendererMissingError(RENDERER_DIST_DIR, missing);
}
const bundledVersion = readBundledRendererVersion();
if (!BUNDLED_RENDERER_VERSION_PATTERN.test(bundledVersion) || bundledVersion !== embeddedBuildVersion) {
throw new BundledRendererVersionError(bundledVersion, embeddedBuildVersion);
}
console.log(` Bundled renderer pruned in ${Date.now() - startedAt}ms`);
}