import { app } from 'electron'; import { join } from 'node:path'; import { existsSync } from 'node:fs'; // Résolution des chemins runtime : dev (depuis le repo) vs packagé (extraResources). // __dirname pointe sur dist/ (bundle esbuild) une fois construit. /** Entrée du serveur daemon (son dist/index.js). */ export function resolveServerEntry(): string { if (app.isPackaged) { // packagé : le tarball du daemon est extrait sous resources/server/package/ return join(process.resourcesPath, 'server', 'package', 'dist', 'index.js'); } // dev : packages/desktop/dist/main.js -> packages/server/dist/index.js return join(__dirname, '..', '..', 'server', 'dist', 'index.js'); } /** Logo de l'app (fenêtre, tray, barre des tâches) : le mark Arboretum embarqué. */ export function resolveIconPath(): string { // packagé : extraResources copie resources/icon.png à la racine de resources/. // dev : depuis dist/main.js -> ../resources/icon.png. return app.isPackaged ? join(process.resourcesPath, 'icon.png') : join(__dirname, '..', 'resources', 'icon.png'); } /** * Icône de barre système. macOS exige une image « template » (monochrome) dans la barre de menus ; * ailleurs on retombe sur le logo couleur. `null` si l'asset n'est pas présent (build sans * régénération des icônes) : l'appelant utilise alors resolveIconPath(). */ export function resolveTrayIconPath(): string | null { if (process.platform !== 'darwin') return null; const path = app.isPackaged ? join(process.resourcesPath, 'trayTemplate.png') : join(__dirname, '..', 'resources', 'trayTemplate.png'); return existsSync(path) ? path : null; } /** Binaire Node qui exécute le daemon (>= 22.16 : node:sqlite + ABI node-pty maîtrisé). */ export function resolveNodeBin(): string { if (app.isPackaged) { return process.platform === 'win32' ? join(process.resourcesPath, 'node', 'node.exe') : join(process.resourcesPath, 'node', 'bin', 'node'); } // dev : node du PATH (mêmes prebuilds node-pty que le repo). return process.platform === 'win32' ? 'node.exe' : 'node'; }