load static method

Future<CatalogConfig> load({
  1. String path = defaultConfigPath,
})

Implementation

static Future<CatalogConfig> load({
  String path = defaultConfigPath,
}) async {
  final file = File(path);
  if (!file.existsSync()) {
    return CatalogConfig.defaults();
  }

  final content = await file.readAsString();
  final parsed = loadYaml(content);
  if (parsed is! YamlMap) {
    throw const FormatException('anas_catalog.yaml must be a YAML object.');
  }

  final formatRaw = parsed['format']?.toString() ?? 'json';
  final sourceRaw = parsed['source_locale']?.toString();
  final hideCatalogUiKeys = _parseBool(
    parsed['hide_catalog_ui_keys'],
    fallback: true,
  );
  final autoGenerateDictionary = _parseBool(
    parsed['auto_generate_dictionary'],
    fallback: true,
  );

  return CatalogConfig(
    version: int.tryParse(parsed['version']?.toString() ?? '') ?? 1,
    langDir: parsed['lang_dir']?.toString() ?? 'assets/lang',
    format: catalogFileFormatFromString(formatRaw),
    fallbackLocale: parsed['fallback_locale']?.toString() ?? 'en',
    sourceLocale: (sourceRaw == null || sourceRaw == 'null' || sourceRaw.trim().isEmpty) ? null : sourceRaw,
    stateFile: parsed['state_file']?.toString() ?? '.anas_localization/catalog_state.json',
    uiPort: int.tryParse(parsed['ui_port']?.toString() ?? '') ?? 4466,
    apiPort: int.tryParse(parsed['api_port']?.toString() ?? '') ?? 4467,
    openBrowser: _parseBool(parsed['open_browser'], fallback: true),
    arbFilePrefix: parsed['arb_file_prefix']?.toString() ?? 'app',
    hideCatalogUiKeys: hideCatalogUiKeys,
    autoGenerateDictionary: autoGenerateDictionary,
  );
}