loadPubspecConfig function
Implementation
Config loadPubspecConfig(File pubspecFile, {File? buildFile}) {
final pubspecLocaleHint = normalize(
join(basename(pubspecFile.parent.path), basename(pubspecFile.path)),
);
log.info('v$packageVersion Loading ...');
log.info('Reading options from $pubspecLocaleHint');
VersionConstraint? sdkConstraint;
final defaultMap = loadYaml(configDefaultYamlContent) as YamlMap?;
final pubspecContent = pubspecFile.readAsStringSync();
final pubspecMap = loadYaml(pubspecContent) as YamlMap?;
if (safeCast<String>(pubspecMap?['environment']?['sdk']) case final sdk?) {
sdkConstraint = VersionConstraint.parse(sdk);
}
Map mergedMap = mergeMap([defaultMap, pubspecMap]);
YamlMap? getBuildFileOptions(File file) {
if (!file.existsSync()) {
return null;
}
final buildContent = file.readAsStringSync();
final rawMap = loadYaml(buildContent) as Map?;
final builders = rawMap?['targets']?[r'$default']?['builders'];
final optionBuildMap = (builders?['flutter_gen_runner'] ??
builders?['flutter_gen'])?['options'];
if (optionBuildMap is YamlMap && optionBuildMap.isNotEmpty) {
return optionBuildMap;
}
return null;
}
// Fallback to the build.yaml when no build file has been specified and
// the default one has valid configurations.
if (buildFile == null && getBuildFileOptions(File('build.yaml')) != null) {
buildFile = File('build.yaml');
}
if (buildFile != null) {
if (buildFile.existsSync()) {
final optionBuildMap = getBuildFileOptions(buildFile);
if (optionBuildMap != null) {
final buildMap = {'flutter_gen': optionBuildMap};
mergedMap = mergeMap([mergedMap, buildMap]);
final buildLocaleHint = normalize(
join(basename(buildFile.parent.path), basename(buildFile.path)),
);
log.info('Reading options from $buildLocaleHint');
} else {
log.severe(
'Specified ${buildFile.path} as input but the file '
'does not contain valid options, ignoring...',
);
}
} else {
log.warning(
'Specified ${buildFile.path} as input but the file '
'does not exists.',
);
}
}
final pubspec = Pubspec.fromJson(mergedMap);
final pubspecLockFile = File(
normalize(join(basename(pubspecFile.parent.path), 'pubspec.lock')),
);
final pubspecLockContent = switch (pubspecLockFile.existsSync()) {
true => pubspecLockFile.readAsStringSync(),
false => '',
};
final pubspecLockMap = loadYaml(pubspecLockContent) as YamlMap?;
if (safeCast<String>(pubspecLockMap?['sdks']?['dart']) case final sdk?) {
sdkConstraint ??= VersionConstraint.parse(sdk);
}
final analysisOptionsFile = File(
normalize(join(basename(pubspecFile.parent.path), 'analysis_options.yaml')),
);
final analysisOptionsContent = switch (analysisOptionsFile.existsSync()) {
true => analysisOptionsFile.readAsStringSync(),
false => '',
};
final analysisOptionsMap = loadYaml(analysisOptionsContent) as YamlMap?;
// final formatterTrailingCommas = switch (safeCast<String>(
// analysisOptionsMap?['formatter']?['trailing_commas'],
// )) {
// final s? => TrailingCommas.values.firstWhereOrNull((e) => e.name == s),
// _ => null,
// };
final formatterPageWidth = safeCast<int>(
analysisOptionsMap?['formatter']?['page_width'],
);
return Config._(
pubspec: pubspec,
pubspecFile: pubspecFile,
sdkConstraint: sdkConstraint,
// formatterTrailingCommas: formatterTrailingCommas,
formatterPageWidth: formatterPageWidth,
);
}