Fix crash on missing config sections

This commit is contained in:
Marko Korhonen 2023-11-23 20:46:58 +02:00
parent acb07d0cdc
commit f8cf9bad7d
Signed by: FunctionalHacker
GPG key ID: A7F78BCB859CD890
3 changed files with 19 additions and 17 deletions

View file

@ -27,7 +27,7 @@ const defaultConfig: RawConfig = {
hadLunch: true, hadLunch: true,
}, },
askInput: { askInput: {
workDayLength: true, workDayDuration: true,
startTime: true, startTime: true,
stopTime: true, stopTime: true,
logged: true, logged: true,
@ -38,30 +38,32 @@ const getConfig = (): WtcConfig => {
const configDir = xdgConfig || path.join(process.env.HOME ?? './', '.config'); const configDir = xdgConfig || path.join(process.env.HOME ?? './', '.config');
let configFilePath = path.join(configDir, 'wtc', 'config.toml'); let configFilePath = path.join(configDir, 'wtc', 'config.toml');
let configData: RawConfig; let configData: Partial<RawConfig>;
if (fs.existsSync(configFilePath)) { if (fs.existsSync(configFilePath)) {
configData = toml.parse(fs.readFileSync(configFilePath, 'utf8')) as unknown as RawConfig; configData = toml.parse(fs.readFileSync(configFilePath, 'utf8')) as unknown as RawConfig;
} else { } else {
configData = defaultConfig; configData = defaultConfig;
} }
const { language, timestampFormat, unpaidLunchBreakDuration, defaults, askInput } = configData;
return { return {
language: configData.language ?? defaultConfig.language, language: language ?? defaultConfig.language,
timestampFormat: configData.timestampFormat ?? defaultConfig.timestampFormat, timestampFormat: timestampFormat ?? defaultConfig.timestampFormat,
unpaidLunchBreakDuration: !configData.unpaidLunchBreakDuration ? undefined : parseDuration(configData.unpaidLunchBreakDuration), unpaidLunchBreakDuration: !unpaidLunchBreakDuration
? undefined
: parseDuration(unpaidLunchBreakDuration),
defaults: { defaults: {
workDayDuration: parseDuration( workDayDuration: parseDuration(defaults?.workDayDuration ?? defaultConfig.defaults.workDayDuration),
configData.defaults.workDayDuration ?? defaultConfig.defaults.workDayDuration, startTime: parseTimestamp(defaults?.startTime ?? defaultConfig.defaults.startTime),
), stopTime: parseTimestamp(defaults?.stopTime ?? defaultConfig.defaults.stopTime),
startTime: parseTimestamp(configData.defaults.startTime ?? defaultConfig.defaults.startTime), hadLunch: defaults?.hadLunch ?? defaultConfig.defaults.hadLunch,
stopTime: parseTimestamp(configData.defaults.stopTime ?? defaultConfig.defaults.stopTime),
hadLunch: configData.defaults.hadLunch ?? defaultConfig.defaults.hadLunch,
}, },
askInput: { askInput: {
workDayLength: configData.askInput.workDayLength ?? defaultConfig.askInput.workDayLength, workDayDuration: askInput?.workDayDuration ?? defaultConfig.askInput.workDayDuration,
startTime: configData.askInput.startTime ?? defaultConfig.askInput.startTime, startTime: askInput?.startTime ?? defaultConfig.askInput.startTime,
stopTime: configData.askInput.stopTime ?? defaultConfig.askInput.stopTime, stopTime: askInput?.stopTime ?? defaultConfig.askInput.stopTime,
logged: configData.askInput.logged ?? defaultConfig.askInput.logged, logged: askInput?.logged ?? defaultConfig.askInput.logged,
}, },
}; };
}; };

View file

@ -30,7 +30,7 @@ const input = async (config: WtcConfig): Promise<WtcPromptResult> => {
// Get work day duration // Get work day duration
let workDayDuration: Duration | undefined = undefined; let workDayDuration: Duration | undefined = undefined;
if (askInput.workDayLength) { if (askInput.workDayDuration) {
const durationAnswer = await rl.question( const durationAnswer = await rl.question(
msg( msg(
MessageKey.promptWorkDayDuration, MessageKey.promptWorkDayDuration,

View file

@ -13,7 +13,7 @@ export default interface WtcConfig {
hadLunch: boolean; hadLunch: boolean;
}; };
askInput: { askInput: {
workDayLength: boolean; workDayDuration: boolean;
startTime: boolean; startTime: boolean;
stopTime: boolean; stopTime: boolean;
logged: boolean; logged: boolean;