initConfig function

Config initConfig()

Implementation

Config initConfig() {
  final String configFilePath =
      '${Directory.current.path}${Platform.pathSeparator}bin${Platform.pathSeparator}config.json';
  final String fallbackVersion = getVersionFromPubspec() ?? '0.0.0';
  final File configFile = File(configFilePath);

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

  if (!configFile.existsSync()) {
    return buildDefaultConfig();
  }

  try {
    final String configJsonString = configFile.readAsStringSync();
    final Map<String, dynamic> configJson = jsonDecode(configJsonString);
    final Config loadedConfig = Config.fromJson(configJson);
    loadedConfig.server ??= Server();
    loadedConfig.log ??= Log();
    final String resolvedVersion = fallbackVersion.isNotEmpty
        ? fallbackVersion
        : (loadedConfig.version.isEmpty ? '0.0.0' : loadedConfig.version);
    loadedConfig.version = resolvedVersion;
    return loadedConfig;
  } catch (_) {
    return buildDefaultConfig();
  }
}