fromMap static method

(PlatformConfig?, List<(dynamic Function(String s), String)>) fromMap(
  1. YamlMap platformsObject,
  2. TargetPlatform platform,
  3. String key
)

Parses a map to PlatformConfig

Implementation

static (PlatformConfig?, List<(Function(String s), String)>) fromMap(yaml.YamlMap platformsObject, TargetPlatform platform, String key) {
  if (!platformsObject.containsKey(key)) {
    return (null, []);
  }
  yaml.YamlMap data = platformsObject[key];
  String? buildCommand;
  bool hasBuild = false;

  if (data.containsKey("build")) {
    dynamic buildData = data["build"];
    if (buildData is Map && buildData.containsKey("build_command") && buildData["build_command"].toString().isNotEmpty) {
      buildCommand = buildData["build_command"];
      hasBuild = buildCommand != null && buildCommand.isNotEmpty;
    }
  }

  // The build config is optional. A platform config can have only a publish config
  // At the moment, only iOS and Android publish config is supported
  // So, if the build config is missing and the platform is not iOS or Android, the config is invalid
  if (!hasBuild) {
    if (platform == TargetPlatform.ios || platform == TargetPlatform.android) {
      bool hasPublish = data.containsKey("publish");
      if (!hasPublish) {
        return (null, []);
      }
    } else {
      return (null, []);
    }
  }

  // The base PlatformConfig instance
  PlatformConfig pc = PlatformConfig(
    platform: platform,
    buildCommand: buildCommand ?? "",
  );

  // -=-=-=-=-=
  // Web
  // -=-=-=-=-=
  if (platform == TargetPlatform.web) {
    dynamic buildData = data["build"];
    pc.webConfig = WebConfig(
      addVersionQueryParam: (buildData['add_version_query_param'] ?? true),
      webVersioningType: WebVersioningType.getByName(buildData['query_param_versioning_type']),
    );
  }

  // -=-=-=-=-=
  // iOS
  // -=-=-=-=-=
  if (platform == TargetPlatform.ios) {
    if (data.containsKey("publish")) {
      var iosPublishValidation = ApplePublishConfig.isValid(data["publish"], TargetPlatform.ios);
      if (!iosPublishValidation.$1) {
        return (null, [(Console.logError, "Invalid publish config for iOS -> ${iosPublishValidation.$2 ?? "-"}")]);
      }
      pc.iosConfig = IOSConfig(
        publishConfig: ApplePublishConfig.fromMap(data["publish"]),
      );
    }
  }

  // -=-=-=-=-=
  // macOS
  // -=-=-=-=-=
  if (platform == TargetPlatform.macos) {
    if (data.containsKey("publish")) {
      var macosPublishValidation = ApplePublishConfig.isValid(data["publish"], TargetPlatform.macos);
      if (!macosPublishValidation.$1) {
        return (null, [(Console.logError, "Invalid publish config for macOS -> ${macosPublishValidation.$2 ?? "-"}")]);
      }
      pc.macOSConfig = MacOSConfig(
        publishConfig: ApplePublishConfig.fromMap(data["publish"]),
      );
    }
  }

  // -=-=-=-=-=
  // Android
  // -=-=-=-=-=
  if (platform == TargetPlatform.android) {
    if (data.containsKey("publish")) {
      var androidPublishValidation = AndroidPublishConfig.isValid(data["publish"], TargetPlatform.android);
      if (!androidPublishValidation.$1) {
        return (null, [(Console.logError, "Invalid publish config for Android -> ${androidPublishValidation.$2 ?? "-"}")]);
      }
      pc.androidConfig = AndroidConfig(
        publishConfig: AndroidPublishConfig.fromMap(data["publish"]),
      );
    }
  }

  // -=-=-=-=-=
  // Linux
  // -=-=-=-=-=
  if (platform == TargetPlatform.linux) {
    pc.linuxConfig = LinuxConfig();
  }

  // -=-=-=-=-=
  // Windows
  // -=-=-=-=-=
  if (platform == TargetPlatform.windows) {
    pc.windowsConfig = WindowsConfig();
  }

  return (pc, []);
}