initConfig function

Config initConfig({
  1. String? configFilePath,
  2. bool strict = false,
})

Implementation

Config initConfig({String? configFilePath, bool strict = false}) {
  final resolvedConfigFilePath =
      configFilePath ??
      '${Directory.current.path}${Platform.pathSeparator}bin${Platform.pathSeparator}config.json';
  const String fallbackVersion = daemonVersion;
  final File configFile = File(resolvedConfigFilePath);

  Config buildDefaultConfig() =>
      Config(version: fallbackVersion, server: Server(), log: Log());

  if (!configFile.existsSync()) {
    if (strict) {
      throw FileSystemException(
        'Config file does not exist',
        resolvedConfigFilePath,
      );
    }
    return buildDefaultConfig();
  }

  try {
    final String configJsonString = configFile.readAsStringSync();
    final Map<String, dynamic> configJson = jsonDecode(configJsonString);
    configJson['version'] = fallbackVersion;
    final Config loadedConfig = Config.fromJson(configJson);
    loadedConfig.server ??= Server();
    loadedConfig.log ??= Log();
    loadedConfig.version = fallbackVersion;
    return loadedConfig;
  } catch (_) {
    if (strict) rethrow;
    return buildDefaultConfig();
  }
}