BloomModuleManifest.fromYaml constructor

BloomModuleManifest.fromYaml(
  1. String yamlString
)

Parses a BloomModuleManifest from a raw YAML string.

Throws FormatException if yamlString cannot be parsed into a YAML map.

Implementation

factory BloomModuleManifest.fromYaml(String yamlString) {
  final doc = loadYaml(yamlString);
  if (doc is! YamlMap && doc is! Map) {
    throw FormatException('bloom.module.yaml must be a valid YAML map');
  }

  final name = doc['name']?.toString() ?? '';
  final version = doc['version']?.toString() ?? '1.0.0';
  final description = doc['description']?.toString() ?? '';

  final platformsMap = doc['platforms'] is Map || doc['platforms'] is YamlMap ? doc['platforms'] : {};
  final androidSpec = BloomModulePlatformSpec.fromYaml(platformsMap['android']);
  final iosSpec = BloomModulePlatformSpec.fromYaml(platformsMap['ios']);

  final permissionsMap = <String, BloomModulePermission>{};
  if (doc['permissions'] is Map || doc['permissions'] is YamlMap) {
    final perms = doc['permissions'] as Map;
    perms.forEach((k, v) {
      permissionsMap[k.toString()] = BloomModulePermission.fromYaml(k.toString(), v);
    });
  }

  String? pluginClass;
  if (doc['config_plugin'] is Map || doc['config_plugin'] is YamlMap) {
    pluginClass = doc['config_plugin']['class_name']?.toString();
  }

  return BloomModuleManifest(
    name: name,
    version: version,
    description: description,
    android: androidSpec,
    ios: iosSpec,
    permissions: permissionsMap,
    configPluginClassName: pluginClass,
  );
}