load static method

FxConfig load(
  1. String projectRoot
)

Load fx.yaml from the project root. Returns default config if missing.

Implementation

static FxConfig load(String projectRoot) {
  final File file = File('$projectRoot${Platform.pathSeparator}fx.yaml');
  if (!file.existsSync()) {
    Logger.warn('fx.yaml not found, using defaults.');
    return FxConfig(name: 'unknown');
  }

  try {
    final YamlMap yaml = loadYaml(file.readAsStringSync()) as YamlMap;
    final YamlMap? project = yaml['project'] as YamlMap?;
    final String name = (project?['name'] as String?) ?? 'unknown';

    final YamlMap? serverYaml = yaml['server'] as YamlMap?;
    final YamlMap? rustYaml = serverYaml?['rust'] as YamlMap?;

    final YamlMap? clientYaml = yaml['client'] as YamlMap?;
    final YamlMap? flutterYaml = clientYaml?['flutter'] as YamlMap?;
    final YamlMap? sdkPathYaml = flutterYaml?['sdk_path'] as YamlMap?;

    // Parse database (only if declared)
    final YamlMap? databaseYaml = yaml['database'] as YamlMap?;
    final YamlMap? mysqlYaml = databaseYaml?['mysql'] as YamlMap?;
    final DatabaseConfig? database = mysqlYaml != null
        ? DatabaseConfig(
            port: (mysqlYaml['port'] as int?) ?? 3306,
            version: mysqlYaml['version']?.toString() ?? '',
          )
        : null;

    return FxConfig(
      name: name,
      server: ServerConfig(
        path: (serverYaml?['path'] as String?) ?? 'server',
        rustSdkVersion: rustYaml?['sdk_version']?.toString() ?? '',
      ),
      client: ClientConfig(
        path: (clientYaml?['path'] as String?) ?? 'client',
        flutterSdkVersion: flutterYaml?['sdk_version']?.toString() ?? '',
        flutterSdkPathWindows: sdkPathYaml?['windows'] as String?,
        flutterSdkPathMacos: sdkPathYaml?['macos'] as String?,
        flutterSdkPathLinux: sdkPathYaml?['linux'] as String?,
      ),
      database: database,
    );
  } catch (e) {
    Logger.error('Failed to parse fx.yaml: $e');
    return FxConfig(name: 'unknown');
  }
}