fix(config): enforce strict startup config parsing

This commit is contained in:
2026-02-21 15:52:19 -08:00
parent b71a1a3d29
commit 7a869ad291
8 changed files with 140 additions and 20 deletions

View File

@@ -3,7 +3,7 @@ import assert from 'node:assert/strict';
import * as fs from 'fs';
import * as os from 'os';
import * as path from 'path';
import { ConfigService } from './service';
import { ConfigService, ConfigStartupParseError } from './service';
import { DEFAULT_CONFIG, RUNTIME_OPTION_REGISTRY } from './definitions';
import { generateConfigTemplate } from './template';
@@ -39,6 +39,24 @@ test('loads defaults when config is missing', () => {
assert.equal(config.immersionTracking.retention.vacuumIntervalDays, 7);
});
test('throws actionable startup parse error for malformed config at construction time', () => {
const dir = makeTempDir();
const configPath = path.join(dir, 'config.jsonc');
fs.writeFileSync(configPath, '{"websocket":', 'utf-8');
assert.throws(
() => new ConfigService(dir),
(error: unknown) => {
assert.ok(error instanceof ConfigStartupParseError);
assert.equal(error.path, configPath);
assert.ok(error.parseError.length > 0);
assert.ok(error.message.includes(configPath));
assert.ok(error.message.includes(error.parseError));
return true;
},
);
});
test('parses subtitleStyle.preserveLineBreaks and warns on invalid values', () => {
const validDir = makeTempDir();
fs.writeFileSync(