Project Files
docs / components / config-manager.md
[!ABSTRACT] Epigraf "Zarządza konfiguracją pluginu — ścieżka data-root, delimiter CSV, encoding. Zapewnia spójne ustawienia dla wszystkich komponentów."
| Pole | Wartość |
|---|---|
| Nazwa | Config Manager |
| Moduł | src/config.ts |
| Wersja | 1.0.0 |
| Status | Draft |
| Zależny od | — |
| Używany przez | Wszystkie komponenty engine i tools |
Centralne zarządzanie konfiguracją pluginu z walidacją, wartościami domyślnymi i wsparciem dla LM Studio Configuration Panel.
data-plugin.config.json~, ./)getConfig(): PluginConfigloadConfig(): Promise<PluginConfig>data-plugin.config.json. Jeśli plik nie istnieje — zwraca domyślną.saveConfig(config: PluginConfig): Promise<void>initDataRoot(): Promise<void>databases/. Wywoływane w activate().getDataRoot(): string~/.).updateConfig(updates: Partial<PluginConfig>): Promise<void>| Parametr | Typ | Opis |
|---|---|---|
config | PluginConfig | Pełny obiekt konfiguracji |
updates | Partial<PluginConfig> | Częściowa aktualizacja |
| Funkcja | Zwraca |
|---|---|
getConfig | PluginConfig |
loadConfig | Promise<PluginConfig> |
saveConfig | Promise<void> |
initDataRoot | Promise<void> |
getDataRoot | string |
updateConfig | Promise<void> |
data-plugin.config.json| Biblioteka | Wersja | Użycie |
|---|---|---|
path | (Node.js) | Normalizacja ścieżek |
os | (Node.js) | Rozwijanie ~ (homedir) |
fs/promises | (Node.js) | Odczyt/zapis config.json |
| Scenariusz | Kod | Zachowanie |
|---|---|---|
| Uszkodzony config.json | CONFIG_PARSE_ERROR | Fallback do DEFAULT_CONFIG + log warning |
| Brak dostępu do data-root | DATA_ROOT_ACCESS_ERROR | Rzuć błąd przy initDataRoot |
| Nieprawidłowy delimiter | INVALID_CONFIG_VALUE | Walidacja przy save — rzuć błąd |
| Given | When | Then |
| :----------------------- | :---------------------------------- | :------------------------------------------- | ----------------------------- |
| Brak pliku config | loadConfig() | Zwraca DEFAULT_CONFIG |
| Istniejący config.json | loadConfig() | Zwraca zmerge'owany config (user + defaults) |
| Uszkodzony JSON w config | loadConfig() | Fallback do default, log warning |
| Data-root nie istnieje | initDataRoot() | Tworzy katalog + databases/ |
| Data-root istnieje | initDataRoot() | Nie robi nic (no-op) |
| Zmiana delimitera | updateConfig({ csv: { delimiter: " | " } }) | Zapisuje tylko zmienione pole |
| getConfig() po update | getConfig() | Zwraca zaktualizowaną wartość |
tmp/config-test/data-plugin.config.json z częściowymi ustawieniamidata-plugin.config.json (niepoprawny JSON)../../TDD.md — §6 State Management, §11 Performanceplugin.json — rejestruje konfigurację w LM Studiocsv-engine.md — używa getConfig().csv.* dla opcji parsowaniainterface PluginConfig {
dataRoot: string; // Ścieżka do katalogu danych
csv: {
delimiter: string; // Domyślnie ","
encoding: string; // Domyślnie "utf-8"
bom: boolean; // BOM dla Excel (domyślnie true)
quoteChar: string; // Domyślnie '"'
escapeChar: string; // Domyślnie '"'
};
ui: {
locale: string; // Domyślnie "en"
dateFormat: string; // Domyślnie "ISO"
};
performance: {
cacheSize: number; // Liczba tabel w cache (domyślnie 10)
maxRowsPerPage: number; // Domyślnie 100
maxBatchInsert: number; // Domyślnie 1000
};
}
// Domyślna konfiguracja
const DEFAULT_CONFIG: PluginConfig = {
dataRoot: "~/.lmstudio/plugins/data-plugin/data",
csv: {
delimiter: ",",
encoding: "utf-8",
bom: true,
quoteChar: '"',
escapeChar: '"',
},
ui: {
locale: "en",
dateFormat: "ISO",
},
performance: {
cacheSize: 10,
maxRowsPerPage: 100,
maxBatchInsert: 1000,
},
};
{
"dataRoot": "~/my-data",
"csv": {
"delimiter": ";",
"bom": true
},
"performance": {
"maxRowsPerPage": 50
}
}
import { getConfig, initDataRoot, updateConfig } from "./config";
// W activate()
await initDataRoot(); // Tworzy data-root/databases/
// Pobranie konfiguracji
const config = getConfig();
console.log(config.dataRoot); // "/home/user/.lmstudio/plugins/data-plugin/data"
console.log(config.csv.delimiter); // ","
// Zmiana delimitera przez Configuration Panel
await updateConfig({
csv: { delimiter: ";" },
});
const csvEngineOptions = {
delimiter: getConfig().csv.delimiter,
bom: getConfig().csv.bom,
};
stateDiagram-v2
[*] -→ Uninitialized
Uninitialized -→ Loading: loadConfig() / first getConfig()
Loading -→ Ready: config loaded / defaults created
Loading -→ Error: corrupt config file
Error -→ Ready: fallback to defaults
Ready -→ Updating: updateConfig()
Updating -→ Saving: write to disk
Saving -→ Ready: success
Uninitialized -→ Init: initDataRoot()
Init -→ Ready: dirs created
Init -→ Error: permission denied