BloomConfig.fromMap constructor

BloomConfig.fromMap(
  1. Map map
)

Constructs a BloomConfig from a configuration map.

Implementation

factory BloomConfig.fromMap(Map<dynamic, dynamic> map) {
  final platformsMap = map['platforms'] is Map ? map['platforms'] as Map : {};
  final featuresMap = map['features'] is Map ? map['features'] as Map : {};
  final deepLinksMap = map['deep_links'] is Map
      ? map['deep_links'] as Map
      : (map['deepLinks'] is Map ? map['deepLinks'] as Map : {});
  final deploymentMap = map['deployment'] is Map ? map['deployment'] as Map : {};

  final envList = <String>[];
  if (map['environment'] is Map && map['environment']['files'] is List) {
    for (final item in map['environment']['files']) {
      envList.add(item.toString());
    }
  } else if (map['envFiles'] is List) {
    for (final item in map['envFiles']) {
      envList.add(item.toString());
    }
  } else {
    envList.addAll(['.env', '.env.local']);
  }

  final flavorsMap = <String, BloomFlavorConfig>{};
  if (map['flavors'] is Map) {
    map['flavors'].forEach((k, v) {
      if (v is Map) {
        flavorsMap[k.toString()] = BloomFlavorConfig.fromMap(k.toString(), v);
      }
    });
  }

  final pluginsMap = <String, dynamic>{};
  if (map['plugins'] is List) {
    for (final item in map['plugins']) {
      if (item is String) {
        pluginsMap[item] = <String, dynamic>{'enabled': true};
      } else if (item is Map) {
        item.forEach((k, v) => pluginsMap[k.toString()] = v);
      }
    }
  } else if (map['plugins'] is Map) {
    map['plugins'].forEach((k, v) => pluginsMap[k.toString()] = v);
  }

  const knownKeys = {
    'schema',
    'name',
    'version',
    'build_number',
    'buildNumber',
    'description',
    'mode',
    'platforms',
    'features',
    'environment',
    'envFiles',
    'flavors',
    'plugins',
    'deep_links',
    'deepLinks',
    'deployment',
  };

  final customMap = <String, dynamic>{};
  if (map['custom'] is Map) {
    (map['custom'] as Map).forEach((k, v) {
      customMap[k.toString()] = v;
    });
  }
  map.forEach((k, v) {
    if (!knownKeys.contains(k.toString()) && k.toString() != 'custom') {
      customMap[k.toString()] = v;
    }
  });

  return BloomConfig(
    schema: map['schema'] is int ? map['schema'] as int : 1,
    name: map['name']?.toString() ?? 'bloom_app',
    version: map['version']?.toString() ?? '0.1.0',
    buildNumber: map['build_number']?.toString() ?? map['buildNumber']?.toString() ?? '1',
    description: map['description']?.toString() ?? '',
    mode: map['mode']?.toString().toLowerCase() ?? 'managed',
    platforms: BloomPlatforms.fromMap(platformsMap),
    features: BloomFeatures.fromMap(featuresMap),
    deepLinks: BloomDeepLinksConfig.fromMap(deepLinksMap),
    deployment: BloomDeploymentConfig.fromMap(deploymentMap),
    envFiles: envList,
    flavors: flavorsMap,
    plugins: pluginsMap,
    custom: customMap,
  );
}