mirror of
https://github.com/aljazceru/goose.git
synced 2026-02-15 03:24:24 +01:00
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import path from 'node:path';
|
|
import fs from 'node:fs';
|
|
import Electron from 'electron';
|
|
import log from './logger';
|
|
|
|
export const getBinaryPath = (app: Electron.App, binaryName: string): string => {
|
|
const isWindows = process.platform === 'win32';
|
|
|
|
const possiblePaths: string[] = [];
|
|
if (isWindows) {
|
|
addPaths(isWindows, possiblePaths, `${binaryName}.exe`, app);
|
|
addPaths(isWindows, possiblePaths, `${binaryName}.cmd`, app);
|
|
} else {
|
|
addPaths(isWindows, possiblePaths, binaryName, app);
|
|
}
|
|
|
|
for (const binPath of possiblePaths) {
|
|
try {
|
|
if (fs.existsSync(binPath)) {
|
|
return binPath;
|
|
}
|
|
} catch (error) {
|
|
log.error(`Error checking path ${binPath}:`, error);
|
|
}
|
|
}
|
|
|
|
throw new Error(
|
|
`Could not find ${binaryName} binary in any of the expected locations: ${possiblePaths.join(
|
|
', '
|
|
)}`
|
|
);
|
|
};
|
|
|
|
const addPaths = (
|
|
isWindows: boolean,
|
|
possiblePaths: string[],
|
|
executableName: string,
|
|
app: Electron.App
|
|
): void => {
|
|
const isDev = process.env.NODE_ENV === 'development';
|
|
const isPackaged = app.isPackaged;
|
|
if (isDev && !isPackaged) {
|
|
possiblePaths.push(
|
|
path.join(process.cwd(), 'src', 'bin', executableName),
|
|
path.join(process.cwd(), 'bin', executableName),
|
|
path.join(process.cwd(), '..', '..', 'target', 'release', executableName)
|
|
);
|
|
} else {
|
|
possiblePaths.push(
|
|
path.join(process.resourcesPath, 'bin', executableName),
|
|
path.join(app.getAppPath(), 'resources', 'bin', executableName)
|
|
);
|
|
|
|
if (isWindows) {
|
|
possiblePaths.push(
|
|
path.join(process.resourcesPath, executableName),
|
|
path.join(app.getAppPath(), 'resources', executableName),
|
|
path.join(app.getPath('exe'), '..', 'bin', executableName)
|
|
);
|
|
}
|
|
}
|
|
};
|