load static method
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');
}
}