loadPubspecConfig function

Config loadPubspecConfig(
  1. File pubspecFile, {
  2. File? buildFile,
})

Implementation

Config loadPubspecConfig(File pubspecFile, {File? buildFile}) {
  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;
  }

  final pubspecLocaleHint = normalize(
    join(basename(pubspecFile.parent.path), basename(pubspecFile.path)),
  );

  log.info('v$packageVersion Loading ...');
  log.info('Reading options from $pubspecLocaleHint');

  final pubspecContent = pubspecFile.readAsStringSync();
  Map? buildOptions;

  // 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) {
        buildOptions = optionBuildMap;
        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 pubspecLockFile = File(
    normalize(join(pubspecFile.parent.path, 'pubspec.lock')),
  );
  final pubspecLockContent = switch (pubspecLockFile.existsSync()) {
    true => pubspecLockFile.readAsStringSync(),
    false => '',
  };

  final analysisOptionsFile = File(
    normalize(join(pubspecFile.parent.path, 'analysis_options.yaml')),
  );
  final analysisOptionsContent = switch (analysisOptionsFile.existsSync()) {
    true => analysisOptionsFile.readAsStringSync(),
    false => '',
  };

  return loadPubspecConfigFromInput(
    ConfigLoadInput(
      pubspecFile: pubspecFile,
      pubspecContent: pubspecContent,
      buildOptions: buildOptions,
      pubspecLockContent: pubspecLockContent,
      analysisOptionsContent: analysisOptionsContent,
    ),
  );
}