Server-Bibliothek
vor 17 Std. 98bce1b0da675715b2e5482c0ad61ba21135f62f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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');
}