build method

Stream<PackagexApiStatus> build({
  1. required Directory directoryBase,
  2. required List<PackagexPlatformType> packagexPlatformTypes,
  3. required Directory? directoryBuild,
  4. required bool isApplication,
  5. required PackagexConfig? packagexConfig,
})

Implementation

Stream<PackagexApiStatus> build({
  required Directory directoryBase,
  required List<PackagexPlatformType> packagexPlatformTypes,
  required Directory? directoryBuild,
  required bool isApplication,
  required PackagexConfig? packagexConfig,
}) async* {
  packagexConfig ??= PackagexConfig({});
  yield PackagexApiStatus(
      packagexApiStatusType: PackagexApiStatusType.info,
      value:
          "Starting Build: ${packagexPlatformTypes.map((e) => e.name.toUpperCaseFirstData()).join(", ")}");

  File file_pubspec = File(path.join(directoryBase.path, "pubspec.yaml"));
  var strm = create(
    newName: path.basename(directoryBase.path),
    directoryPackage: directoryBase.parent,
    isApplication: isApplication,
    packagexConfig: packagexConfig,
  );
  await for (var event in strm) {
    yield event;
  }
  Map yaml_code =
      (yaml.loadYaml(file_pubspec.readAsStringSync(), recover: true) as Map);

  PackagexPubspec packagexPubspec = PackagexPubspec(yaml_code.clone());

  packagexPubspec.packagex.rawData.general_lib_utils_updateMapWithReplace(
      data: packagexConfig.rawData, ignoreKeys: ["@type"]);
  packagexPubspec.rawData
      .general_lib_utils_removeRecursiveByKeys(keyDatas: ["@type"]);

  Directory directory_build_packagex = directoryBuild ??
      Directory(path.join(directoryBase.path, "build", "packagex"));
  yield PackagexApiStatus(
      packagexApiStatusType: PackagexApiStatusType.info,
      value: "Directory Build: ${directory_build_packagex.uri.toFilePath()}");

  File file_script_pkgx =
      File(path.join(directoryBase.path, "lib", "packagex", "packagex.dart"));
  if (!file_script_pkgx.parent.existsSync()) {
    await file_script_pkgx.parent.create(
      recursive: true,
    );
  }
  Map json_data_package_detail = {
    "name": "${packagexPubspec.packagex.flutter_name ?? packagexPubspec.name}"
        .trim(),
    ...packagexPubspec.rawData,
    ...packagexPubspec.packagex.flutter_commands.rawData,
  };
  json_data_package_detail.removeByKeys([
    "environment",
    "dependencies",
    "dev_dependencies",
    "flutter",
    "packagex",
    "msix_config",
  ]);

  String packagex_script_project = """
// ignore_for_file: non_constant_identifier_names
import 'dart:convert';

class PackagexProject${(packagexPubspec.packagex.flutter_name ?? packagexPubspec.name ?? "").split("_").map((e) => e.toUpperCaseFirstData()).join("").toUpperCaseFirstData()} {

static bool isSame({
  required String data
}) {
  return [default_data_to_string, json.encode(default_data)].contains(data);
}

  static String get default_data_to_string {
    return (JsonEncoder.withIndent(" " * 2).convert(default_data));
  }

  static Map get default_data {
return ${JsonEncoder.withIndent(" " * 2).convert(json_data_package_detail)};
  }

}
"""
      .trim();
  await file_script_pkgx.writeAsString(packagex_script_project);

  bool is_auto_delete =
      Platform.environment["packagex_is_auto_delete"] == "true";
  if (is_auto_delete) {
    if (directory_build_packagex.existsSync()) {
      await directory_build_packagex.delete(recursive: true);
    }
    await directory_build_packagex.create(recursive: true);
  } else {
    if (directory_build_packagex.existsSync() == false) {
      await directory_build_packagex.create(recursive: true);
    }
  }

  File file_packagex_release = File(path.join(directory_build_packagex.path,
      "${packagexPubspec.packagex.flutter_name ?? packagexPubspec.name}.json"));
  await file_packagex_release
      .writeAsString(json_data_package_detail.toStringifyPretty(2));

  for (PackagexPlatformType packagex_platform_type
      in packagexPlatformTypes.toSet()) {
    PackagexPlatformType packagexPlatformType = packagex_platform_type;

    File script_cli = File(path.join(directoryBase.path, "bin",
        "${packagexPubspec.packagex.dart_target ?? packagexPubspec.name}.dart"));
    File script_app = File(path.join(directoryBase.path, "lib",
        "${packagexPubspec.packagex.flutter_target ?? "main"}.dart"));
    bool is_app = false;
    bool is_cli = false;
    if (script_app.existsSync()) {
      is_app = true;
    }
    if (script_cli.existsSync()) {
      is_cli = true;
    }

    List<String> flutter_commands = [];

    packagexPubspec.packagex.flutter_commands.rawData.forEach((key, value) {
      String key_args_flutter =
          "--${key.toString().replaceAll(RegExp(r"_"), "-")}";
      if (key_args_flutter == "--obfuscate") {
        if (value == true) {
          flutter_commands.add(key_args_flutter);
        }
      }
      if (key_args_flutter == "--split-per-abi") {
        if (value == true) {
          if (packagexPlatformType == PackagexPlatformType.android) {
            flutter_commands.add(key_args_flutter);
          }
        }
      }
      if (key_args_flutter == "--no-tree-shake-icons") {
        if (value == true) {
          flutter_commands.add(key_args_flutter);
        }
      }

      if (key_args_flutter == "--split-debug-info") {
        flutter_commands.add("${key_args_flutter}=${value}");
      }
      if (key_args_flutter == "--build-name") {
        flutter_commands.add("${key_args_flutter}=${value}");
      }
      if (key_args_flutter == "--build-number") {
        flutter_commands.add("${key_args_flutter}");
        flutter_commands.add("${value}");
      }
    });

    yield PackagexApiStatus(
        packagexApiStatusType: PackagexApiStatusType.info,
        value: "Starting Build: ${packagexPlatformType.name}");
    if (packagexPlatformType == PackagexPlatformType.android ||
        packagexPlatformType == PackagexPlatformType.linux) {
      if (packagexPlatformType == PackagexPlatformType.linux) {
        if (!Platform.isLinux) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Package linux hanya bisa di perangkat linux saja !");
          continue;
        }

        Directory directory_linux_package = Directory(path.join(
          directoryBase.path,
          "linux",
          "packagex",
        ));

        Directory directory_app_deb = Directory(path.join(
          directory_linux_package.path,
          "usr",
          "share",
          (packagexPubspec.name ?? "").replaceAll(RegExp(r"([_])"), "-"),
        ));

        if (is_app) {
          if (directory_app_deb.existsSync()) {
            await directory_app_deb.delete(recursive: true);
            await directory_app_deb.create(recursive: true);
          } else {
            await directory_app_deb.create(recursive: true);
          }
        }
        String message =
            "Set Permission: ${path.join(directory_linux_package.path, "DEBIAN")}";
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.info,
            value: "Starting ${message}");
        Process process = await Process.start(
          "chmod",
          [
            "-R",
            "775",
            path.join(directory_linux_package.path, "DEBIAN"),
          ],
          runInShell: true,
        );
        process.stderr.listen((event) {
          stderr.add(event);
        });
        process.stdout.listen((event) {
          stdout.add(event);
        });
        int exit_code = await (process.exitCode);
        if (exit_code != 0) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Failed ${message}");
          return;
        } else {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.succes,
              value: "Succes ${message}");
        }

        File file_cli = File(path.join(
          directory_linux_package.path,
          "usr",
          "bin",
          "${packagexPubspec.packagex.dart_name ?? packagexPubspec.name!.replaceAll(RegExp(r"([_])"), "-")}${(packagexPubspec.packagex.is_without_platform_name == true) ? "" : "-cli-linux"}",
        ));
        File file_app = File(path.join(directory_build_packagex.path,
            "${packagexPubspec.packagex.flutter_name ?? packagexPubspec.name}${(packagexPubspec.packagex.is_without_platform_name == true) ? "" : "-linux"}.deb"));

        if (is_cli) {
          String message = """
Compile Script Dart:

From: ${script_cli.path}
To: ${file_cli.path}
"""
              .trim();
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "dart",
            [
              "compile",
              "exe",
              script_cli.path,
              "-o",
              file_cli.path,
            ],
            workingDirectory: directoryBase.path,
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
        }
        if (is_cli) {
          String message = "Set Permission: ${file_cli.path}";
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "chmod",
            [
              "775",
              file_cli.path,
            ],
            runInShell: true,
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
        }

        if (is_app) {
          String message = " Flutter Build:";
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "flutter",
            [
              "build",
              "linux",
              "--release",
              "--target=${script_app.path}",
              ...flutter_commands,
            ],
            workingDirectory: directoryBase.path,
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
        }
        if (is_app) {
          String path_app = path.join(directoryBase.path, "build", "linux",
              "x64", "release", "bundle", ".");

          String message =
              "Copy App Files: From ${path_app} To ${directory_app_deb.path} ";
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "cp",
            [
              "-rf",
              path_app,
              directory_app_deb.path,
            ],
            workingDirectory: directoryBase.path,
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
        }

        if (is_app || is_cli) {
          String message =
              "Set Permission: chmod -R 755 ${directory_linux_package.path}";
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "chmod",
            ["-R", "775", directory_linux_package.path],
            runInShell: true,
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
        }
        if (is_app || is_cli) {
          String message = "Dpkg Build: ${file_app.path}";
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "dpkg-deb",
            [
              "--build",
              "--root-owner-group",
              directory_linux_package.path,
              file_app.path,
            ],
            workingDirectory: directoryBase.path,
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
          try {
            if (file_cli.existsSync()) {
              await file_cli.delete(recursive: true);
            }
          } catch (e) {}
        }
        await directory_app_deb.delete(recursive: true);

        continue;
      }

      if (packagexPlatformType == PackagexPlatformType.android) {
        if (is_app) {
          String message = " Flutter Build:";
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "flutter",
            [
              "build",
              "apk",
              "--release",
              "--split-per-abi",
              "--target=${script_app.path}",
              ...flutter_commands,
            ],
            workingDirectory: directoryBase.path,
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
          Directory directory_apk = Directory(path.join(
              directoryBase.path, "build", "app", "outputs", "flutter-apk"));
          List<FileSystemEntity> dirs = directory_apk.listSync();
          for (var i = 0; i < dirs.length; i++) {
            FileSystemEntity dir = dirs[i];
            try {
              if (dir is Directory) {
              } else if (dir is File) {
                if (path.extension(dir.path) != ".apk") {
                  continue;
                }
                if (path.basename(dir.path) == "app-release.apk") {
                  continue;
                }
                await dir.absolute.copy(path.join(
                    directory_build_packagex.path,
                    path.basename(dir.path).replaceAll(
                        RegExp("^(app)", caseSensitive: false),
                        "${packagexPubspec.packagex.flutter_name ?? packagexPubspec.name}")));
                await dir.absolute.delete(
                  recursive: true,
                );
              }
            } catch (e) {}
          }
        }
      }
    }
    if (packagexPlatformType == PackagexPlatformType.windows) {
      if (!Platform.isWindows) {
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.failed,
            value: "Package windows hanya bisa di perangkat windows saja !");
        continue;
      }
      File file_cli = File(
        path.join(directory_build_packagex.path,
            "${packagexPubspec.packagex.dart_name ?? packagexPubspec.name}${(packagexPubspec.packagex.is_without_platform_name == true) ? "" : "-cli-windows"}.exe"),
      );
      if (is_cli) {
        String message = """
Compile Script Dart:

From: ${script_cli.path}
To: ${file_cli.path}
"""
            .trim();
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.info,
            value: "Starting ${message}");
        Process process = await Process.start(
          "dart",
          [
            "compile",
            "exe",
            script_cli.path,
            "-o",
            file_cli.path,
          ],
          workingDirectory: directoryBase.path,
        );
        process.stderr.listen((event) {
          stderr.add(event);
        });
        process.stdout.listen((event) {
          stdout.add(event);
        });
        int exit_code = await (process.exitCode);
        if (exit_code != 0) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Failed ${message}");
          return;
        } else {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.succes,
              value: "Succes ${message}");
        }
      }

      if (is_app) {
        List<String> args_msix = [];
        List<String> msix_args = [
          "--display-name",
          "--publisher-display-name",
          "--identity-name",
          "--version",
          "--logo-path",
          "--trim-logo",
          "--capabilities",
          "--languages",
          "--file-extension",
          "--protocol-activation",
          "--app-uri-handler-hosts",
          "--execution-alias",
          "--enable-at-startup",
          "--store",
          "--certificate-path",
          "--certificate-password",
          "--publisher",
          "--signtool-options",
          "--sign-msix",
          "--install-certificate",
        ];
        packagexPubspec.msix_config.rawData.forEach((key, value) {
          if (value is String && value.isNotEmpty) {
            String key_args_msix =
                "--${key.toString().replaceAll(RegExp(r"_"), "-")}";
            if (!msix_args.contains(key_args_msix)) {
              return;
            }
            if (key_args_msix == "--version") {
              List<String> versions = value.toString().split(".");
              if (versions.length != 4) {
                value = "0.0.0.0";
              }
            }
            args_msix.add(key_args_msix);
            args_msix.add(value);
          }
        });
        String message = " Flutter Build: ";
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.info,
            value: "Starting ${message}");
        Process process = await Process.start(
          "flutter",
          [
            "pub",
            "run",
            "msix:create",
            "--windows-build-args",
            "--target=${script_app.path} ${flutter_commands.join(" ")}",
            "-o",
            directory_build_packagex.path,
            "-n",
            "${packagexPubspec.packagex.flutter_name ?? packagexPubspec.name}${(packagexPubspec.packagex.is_without_platform_name == true) ? "" : "-app-windows"}",
            ...args_msix,
          ],
          workingDirectory: directoryBase.path,
        );
        process.stderr.listen((event) {
          stderr.add(event);
        });
        process.stdout.listen((event) {
          stdout.add(event);
        });
        int exit_code = await (process.exitCode);
        if (exit_code != 0) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Failed ${message}");
          return;
        } else {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.succes,
              value: "Succes ${message}");
        }
      }
    }

    if (packagexPlatformType == PackagexPlatformType.macos) {
      if (!Platform.isMacOS) {
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.failed,
            value: "Package macos hanya bisa di perangkat macos saja !");
        // return {"@type": "error", "message": "platform_not_supported", "description": "Package macos hanya bisa di perangkat macos saja !"};
        continue;
      }
      File file_cli = File(path.join(directory_build_packagex.path,
          "${packagexPubspec.packagex.dart_name ?? packagexPubspec.name}${(packagexPubspec.packagex.is_without_platform_name == true) ? "" : "-cli-macos"}"));
      if (is_cli) {
        String message = """
Compile Script Dart:

From: ${script_cli.path}
To: ${file_cli.path}
"""
            .trim();
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.info,
            value: "Starting ${message}");
        Process process = await Process.start(
          "dart",
          [
            "compile",
            "exe",
            script_cli.path,
            "-o",
            file_cli.path,
          ],
          workingDirectory: directoryBase.path,
        );
        process.stderr.listen((event) {
          stderr.add(event);
        });
        process.stdout.listen((event) {
          stdout.add(event);
        });
        int exit_code = await (process.exitCode);
        if (exit_code != 0) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Failed ${message}");
          return;
        } else {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.succes,
              value: "Succes ${message}");
        }
      }

      if (is_app) {
        String message = " Flutter Build: ";
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.info,
            value: "Starting ${message}");
        Process process = await Process.start(
          "flutter",
          [
            "build",
            "macos",
            "--release",
            "--target=${script_app.path}",
            ...flutter_commands,
          ],
          workingDirectory: directoryBase.path,
        );
        process.stderr.listen((event) {
          stderr.add(event);
        });
        process.stdout.listen((event) {
          stdout.add(event);
        });
        int exit_code = await (process.exitCode);
        if (exit_code != 0) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Failed ${message}");
          return;
        } else {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.succes,
              value: "Succes ${message}");
        }
      }
    }

    if (packagexPlatformType == PackagexPlatformType.ios) {
      if (!Platform.isMacOS) {
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.failed,
            value: "Package ios hanya bisa di perangkat macos saja !");
        continue;
      }

      if (is_app) {
        String message = " Flutter Build:";
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.info,
            value: "Starting ${message}");
        Process process = await Process.start(
          "flutter",
          [
            "build",
            "ios",
            "--release",
            "--no-codesign",
            "--target=${script_app.path}",
            ...flutter_commands,
          ],
          workingDirectory: directoryBase.path,
        );
        process.stderr.listen((event) {
          stderr.add(event);
        });
        process.stdout.listen((event) {
          stdout.add(event);
        });
        int exit_code = await (process.exitCode);
        if (exit_code != 0) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Failed ${message}");
          return;
        } else {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.succes,
              value: "Succes ${message}");
        }
      }
      if (is_app) {
        String message = " Flutter Build:";
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.info,
            value: "Starting ${message}");
        Process process = await Process.start(
          "sh",
          [
            "-c",
            """
cd build/ios/iphoneospackagexCli(args)
mkdir Payload
cd Payload
ln -s ../Runner.app
cd ..
zip -r  ${path.join(directory_build_packagex.path, "${packagexPubspec.packagex.flutter_name ?? packagexPubspec.name}${(packagexPubspec.packagex.is_without_platform_name == true) ? "" : "-ios"}.ipa")} Payload
"""
          ],
          workingDirectory: directoryBase.path,
        );
        process.stderr.listen((event) {
          stderr.add(event);
        });
        process.stdout.listen((event) {
          stdout.add(event);
        });
        int exit_code = await (process.exitCode);
        if (exit_code != 0) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Failed ${message}");
          return;
        } else {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.succes,
              value: "Succes ${message}");
        }
      }
      continue;
    }

    if (packagexPlatformType == PackagexPlatformType.web) {
      if (is_app) {
        String message = " Flutter Build:";
        yield PackagexApiStatus(
            packagexApiStatusType: PackagexApiStatusType.info,
            value: "Starting ${message}");
        Process process = await Process.start(
          "flutter",
          [
            "build",
            "web",
            "--release",
            "--target=${script_app.path}",
            "--web-renderer",
            "html",
          ],
          workingDirectory: directoryBase.path,
        );
        process.stderr.listen((event) {
          stderr.add(event);
        });
        process.stdout.listen((event) {
          stdout.add(event);
        });
        int exit_code = await (process.exitCode);
        if (exit_code != 0) {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.failed,
              value: "Failed ${message}");
          return;
        } else {
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.succes,
              value: "Succes ${message}");
        }
      }
      if (is_app) {
        Directory directory_build_web_canvaskit = Directory(
            path.join(directoryBase.path, "build", "web", "canvaskit", "."));

        try {
          await directory_build_web_canvaskit.delete(recursive: true);
        } catch (e) {}

        if (Platform.isWindows) {
          String message = " Compress:";
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "tar",
            [
              "-cf",
              path.join(directory_build_packagex.path,
                  "${packagexPubspec.packagex.flutter_name ?? packagexPubspec.name}-web.zip"),
              "*",
            ],
            workingDirectory: path.join(directoryBase.path, "build", "web"),
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
        }

        if (Platform.isMacOS || Platform.isLinux) {
          String message = " Compress:";
          yield PackagexApiStatus(
              packagexApiStatusType: PackagexApiStatusType.info,
              value: "Starting ${message}");
          Process process = await Process.start(
            "zip",
            [
              "-r",
              path.join(directory_build_packagex.path,
                  "${packagexPubspec.packagex.flutter_name ?? packagexPubspec.name}-web.zip"),
              ".",
            ],
            workingDirectory:
                path.join(directoryBase.path, "build", "web", "."),
          );
          process.stderr.listen((event) {
            stderr.add(event);
          });
          process.stdout.listen((event) {
            stdout.add(event);
          });
          int exit_code = await (process.exitCode);
          if (exit_code != 0) {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.failed,
                value: "Failed ${message}");
            return;
          } else {
            yield PackagexApiStatus(
                packagexApiStatusType: PackagexApiStatusType.succes,
                value: "Succes ${message}");
          }
        }
      }
      continue;
    }
  }
  yield PackagexApiStatus(
      packagexApiStatusType: PackagexApiStatusType.succes,
      value:
          "Finished Build: ${packagexPlatformTypes.map((e) => e.name.toUpperCaseFirstData()).join(", ")}");
}