loadConfig function
Loads spry.config.dart and merges the supplied overrides.
Implementation
Future<BuildConfig> loadConfig({
String? configPath,
Map<String, dynamic> overrides = const {},
}) async {
final rootDir = p.normalize(
p.absolute(_string(overrides['rootDir']) ?? Directory.current.path),
);
final file = File(
p.normalize(p.absolute(rootDir, configPath ?? 'spry.config.dart')),
);
var config = BuildConfig(rootDir: rootDir);
if (await file.exists()) {
final result = await Process.run(Platform.resolvedExecutable, [
'run',
file.path,
], workingDirectory: rootDir);
if (result.exitCode != 0) {
throw LoadConfigException(
'Failed to run spry.config.dart:\n${result.stderr}',
);
}
final stdoutText = (result.stdout as String).trim();
if (stdoutText.isEmpty) {
throw const LoadConfigException(
'spry.config.dart did not emit any configuration JSON.',
);
}
final json = jsonDecode(stdoutText);
if (json is! Map<String, dynamic>) {
throw const LoadConfigException(
'spry.config.dart must emit a JSON object.',
);
}
config = BuildConfig.fromJson(json, rootDir: rootDir);
}
return config.merge(overrides);
}