Files
autodoc/scripts/electron-launcher.js
T
Iisyourdad 814a593887
Template tests / tests (push) Failing after 3s
Resolve Electron binary directly at startup
2026-06-10 18:58:07 -05:00

95 lines
2.5 KiB
JavaScript

'use strict';
const fs = require('node:fs');
const path = require('node:path');
function resolveElectronPackageRoot() {
try {
return path.dirname(require.resolve('electron/package.json'));
} catch {
return null;
}
}
function readElectronPathHint(packageRoot) {
const pathFile = path.join(packageRoot, 'path.txt');
if (!fs.existsSync(pathFile)) return null;
const hint = fs.readFileSync(pathFile, 'utf8').trim();
return hint || null;
}
function platformBinaryCandidates(platform) {
switch (platform) {
case 'win32':
return ['electron.exe'];
case 'darwin':
return ['Electron.app/Contents/MacOS/Electron'];
case 'linux':
case 'freebsd':
case 'openbsd':
return ['electron'];
default:
return ['electron'];
}
}
function buildMissingElectronError({ packageRoot, distDir, candidatePaths }) {
const tried = candidatePaths.map((candidate) => ` - ${candidate}`).join('\n');
return [
'Electron could not be started because the desktop runtime is missing.',
'',
`Looked under: ${packageRoot}`,
`Expected the binary in: ${distDir}`,
'',
'Try reinstalling dependencies from the repo root:',
'',
' npm install',
'',
'If that does not help, delete node_modules/electron and install again.',
'',
'Searched:',
tried,
].join('\n');
}
function resolveElectronBinary({
packageRoot = resolveElectronPackageRoot(),
platform = process.platform,
overrideDistPath = process.env.ELECTRON_OVERRIDE_DIST_PATH || null,
} = {}) {
if (!packageRoot && !overrideDistPath) {
throw new Error(
'Electron could not be started because node_modules/electron is not installed.\n\n' +
'Run `npm install` from the repo root, then try `npm start` again.'
);
}
const distDir = overrideDistPath || path.join(packageRoot, 'dist');
const candidatePaths = [];
const pathHint = packageRoot ? readElectronPathHint(packageRoot) : null;
if (pathHint) {
candidatePaths.push(path.join(distDir, pathHint));
}
for (const relativePath of platformBinaryCandidates(platform)) {
candidatePaths.push(path.join(distDir, relativePath));
}
const resolved = candidatePaths.find((candidate) => fs.existsSync(candidate));
if (!resolved) {
throw new Error(buildMissingElectronError({ packageRoot, distDir, candidatePaths }));
}
return resolved;
}
module.exports = {
buildMissingElectronError,
readElectronPathHint,
resolveElectronBinary,
resolveElectronPackageRoot,
platformBinaryCandidates,
};