readPubspec function

Future<PackageInfo?> readPubspec(
  1. Directory path
)

Implementation

Future<PackageInfo?> readPubspec(Directory path) async => switch (loadYaml(
  await File(
    '${path.path}${Platform.pathSeparator}pubspec.yaml',
  ).readAsString(),
)) {
  (final YamlMap doc) => switch ((
    doc['name'],
    doc['version'],
    doc['description'],
    doc['topics'],
    doc['dev_dependencies'],
    doc['app'],
    doc['platforms'],
  )) {
    (
      final String name,
      final String version,
      final String? description,
      final YamlList? topics,
      final YamlMap deps,
      final YamlMap app,
      final Object? platforms,
    ) =>
      switch ((
        deps['riddance_env'],
        app['name'],
        app['domain'],
        app['orientation'],
        app['unsupported'],
        app['permissions'],
      )) {
        (
          final String myVersion,
          final String appName,
          final String domain,
          final String? orientation,
          final Object? unsupported,
          final Object? permissions,
        ) =>
          PackageInfo(
            name,
            appName,
            version,
            domain,
            description,
            topics?.whereType<String>().toList() ?? [],
            orientation == 'portrait',
            switch ((platforms, unsupported)) {
              (final YamlList platforms, final YamlList unsupported) => [
                ...platforms.whereType<String>().where(
                  (element) => !unsupported.contains(element),
                ),
              ],
              (final YamlMap platforms, final YamlList unsupported) => [
                ...platforms.keys.whereType<String>().where(
                  (element) => !unsupported.contains(element),
                ),
              ],
              (final YamlList platforms, final String unsupported) => [
                ...platforms.whereType<String>().where(
                  (element) => element != unsupported,
                ),
              ],
              (final YamlMap platforms, final String unsupported) => [
                ...platforms.keys.whereType<String>().where(
                  (element) => element != unsupported,
                ),
              ],
              (null, final YamlList unsupported) => [
                ..._allPlatforms.where(
                  (element) => !unsupported.contains(element),
                ),
              ],
              (null, final String unsupported) => [
                ..._allPlatforms.where((element) => element != unsupported),
              ],
              (final YamlList platforms, null) => [
                ...platforms.whereType<String>(),
              ],
              (final YamlMap platforms, null) => [
                ...platforms.keys.whereType<String>(),
              ],
              _ => _allPlatforms,
            },
            switch (permissions) {
              (final YamlList permissions) => [
                ...permissions.whereType<String>(),
              ],
              _ => [],
            },
            myVersion,
          ),
        _ => null,
      },
    _ => null,
  },
  _ => null,
};