import * as path from 'path';
|
|
/** Läuft die Anwendung als gebündelte Einzeldatei (Node SEA / exe)? */
|
export function istEinzeldatei(): boolean {
|
try {
|
return (require('node:sea') as { isSea(): boolean }).isSea();
|
} catch {
|
return false; // node:sea nicht verfügbar -> normaler Node-Start
|
}
|
}
|
|
const ANWENDUNGSNAME = 'Software-Bibliothek';
|
|
/**
|
* Ordner für Konfiguration und Daten der Anwendung.
|
*
|
* Bewusst neutral unter `%ProgramData%` (üblicher Ort für maschinenweite
|
* Anwendungsdaten unter Windows) statt neben der exe oder gar im Quellcode-
|
* Verzeichnis: So liegen die Daten immer am selben Ort, egal wo die exe
|
* abgelegt oder wohin sie verschoben wird — und ein Entwicklungslauf
|
* verschmutzt das Projektverzeichnis nicht.
|
*
|
* Der Datenordner selbst lässt sich in den Einstellungen frei umlegen.
|
*/
|
export function anwendungsDatenOrdner(): string {
|
const programmDaten = process.env.ProgramData?.trim();
|
if (programmDaten) {
|
return path.join(programmDaten, ANWENDUNGSNAME);
|
}
|
// Kein Windows bzw. Variable nicht gesetzt: neben der Anwendung ablegen.
|
return path.join(anwendungsOrdner(), `.${ANWENDUNGSNAME.toLowerCase()}`);
|
}
|
|
/** Ordner der Anwendung selbst: als exe der Ordner neben der exe, sonst die Projekt-Wurzel. */
|
export function anwendungsOrdner(): string {
|
if (istEinzeldatei()) {
|
return path.dirname(process.execPath);
|
}
|
return path.join(__dirname, '..', '..', '..');
|
}
|
|
/** Ordner mit der gebauten Oberfläche (nur im Nicht-exe-Betrieb genutzt). */
|
export function oberflaechenOrdner(): string {
|
return path.join(__dirname, '..', '..', 'bibliothek-client', 'dist');
|
}
|