packagexCli function

FutureOr<void> packagexCli(
  1. List<String> arguments_origins
)

Implementation

FutureOr<void> packagexCli(List<String> arguments_origins) async {
  Args args = Args(arguments_origins);
  Packagex packagex = Packagex();

  List<String> commands = [
    "create",
    "build",
    "bundle",
    "install",
    "version",
    "uninstall",
    "publish",
    "read",
    "clean",
    "pub",
  ];

  commands.sort();
  if (args.arguments.isEmpty) {
    while (true) {
      if (PackagexEnvironment.is_not_interactive) {
        print(menu_help);
        exit(0);
      }
      await Future.delayed(Duration(microseconds: 1));

      String choose_data = logger.chooseOne<String>(
        "Select",
        choices: commands,
        defaultValue: commands.firstOrNull,
      );
      if (commands.contains(choose_data)) {
        args.arguments.add(choose_data);
        break;
      }
    }
  }

  bool args_is_to_json = args.contains([
    "--toJson",
    "--tojson",
    "-toJson",
    "-tojson",
  ]);
  bool args_is_force = args.contains(["-f", "--force"]);
  bool args_is_verbose = args.contains(["-v", "--verbose"]);
  bool args_is_help = args.contains(["-h", "--help"]);
  String? output_data = args["-o"];
  File file_output =
      File(output_data ?? path.join(Directory.current.path, "output.json"));
  String command = args[0] ?? "";

  String sub_command = args.after(command) ?? "";
  if (command == "help") {
    try {
      args.arguments.removeAt(0);
    } catch (e) {
      print(e);
    }
    if (args_is_help) {
    } else {
      args_is_help = true;
      args.arguments.add("-h");
    }
    command = args[0] ?? "help";
  }
  if (!commands.contains(command)) {
    print(menu_help);
    exit(0);
  }
  if (command == "version") {
    print("v0.0.9-dev");
    exit(0);
  }
  if (command == "create") {
    String name_project = await Future(() async {
      String name_proexxe = (args.after(command) ?? "").trim();
      if (name_proexxe.isNotEmpty) {
        return name_proexxe;
      }
      while (true) {
        if (PackagexEnvironment.is_not_interactive) {
          exit(0);
        }
        await Future.delayed(Duration(microseconds: 1));

        String result = logger.prompt("Name Project:").trim();

        if (result.isNotEmpty) {
          return result;
        }
      }
    });
    bool is_application = await Future(() async {
      if (args.contains("--is_application")) {
        return true;
      }
      if (PackagexEnvironment.is_not_interactive) {
        print(help_create);
        exit(0);
      }
      bool is_result = logger.chooseOne(
        "Apakah Applikasi?: ",
        choices: [true, false],
        defaultValue: false,
        display: (choice) {
          return (choice) ? "Yes" : "No";
        },
      );
      return is_result;
    });

    await packagex
        .create(
      newName: name_project,
      directoryPackage: Directory.current,
      isApplication: is_application,
      packagexConfig:
          arguments_origins.packagex_utils_extension_toPackagexConfig(),
    )
        .listen((event) {
      printed(event);
    }).asFuture();
    exit(0);
  }
  if (command == "read") {
    Directory directory_current = Directory.current;
    File file = File(p.join(directory_current.path, "pubspec.yaml"));
    Map yaml_code =
        (yaml.loadYaml(file.readAsStringSync(), recover: true) as Map);

    print(json.encode(yaml_code));
    exit(0);
  }
  if (command == "build") {
    String type_platform = (args.after(command) ?? "");

    var strm = packagex.build(
      directoryBase: Directory.current,
      packagexPlatformTypes: type_platform.toPackagexPlatformTypes(),
      packagexConfig:
          arguments_origins.packagex_utils_extension_toPackagexConfig(),
      isApplication: () {
        return false;
      }(),
      directoryBuild: () {
        String output_path =
            (args.after("-o") ?? args.after("--output") ?? "").trim();
        if (output_path.isNotEmpty) {
          return Directory(Directory(output_path).uri.toFilePath());
        }
        return null;
      }(),
    );
    await strm.listen((event) {
      printed(event);
    }).asFuture();
    exit(0);
  }
  if (command == "install") {
    String package_name = args.arguments[1];

    if (RegExp(r"^http(s)?:\/\/.*$", caseSensitive: false)
        .hashData(package_name)) {
      await packagex.installPackageFromUrl(
        url: package_name,
        onData: (data) {},
        onDone: () {},
      );
    } else {
      File file = File(package_name);
      if (file.existsSync()) {
        await packagex.installPackageFromFile(
            file: file, onData: (data) {}, onDone: () {});
      } else {
        // Platform.pathSeparator;

        await packagex.installPackage(
          name_package: package_name,
        );
      }
    }
  }

  if (command == "publish") {
    String tokenGithub = await Future(() async {
      String parse_token_github = PackagexEnvironment.github_token;
      if (RegExp(r"^(ghp_)", caseSensitive: false)
          .hasMatch(parse_token_github)) {
        return parse_token_github;
      }
      while (true) {
        if (PackagexEnvironment.is_not_interactive) {
          print(menu_help);
          exit(0);
        }
        await Future.delayed(Duration(microseconds: 1));

        String result = logger.prompt("token Github (ghp_):").trim();

        if (RegExp(r"^(ghp_)", caseSensitive: false).hasMatch(result)) {
          return result;
        }
      }
    });
    Progress progress = logger.progress("Start Publish");
    await packagex.publish(
      tokenGithub: tokenGithub,
      directoryBase: Directory.current,
      onUpdate: (update) {
        progress.update(update);
      },
    );
    progress.complete("Finished Publish");
  }

  if (command == "pub") {
    if (args.after(command) == "activate") {
      String path_package_install_pub =
          args.after("activate") ?? Directory.current.path;
      if (path_package_install_pub == ".") {
        path_package_install_pub = Directory.current.path;
      }
      Directory directory_pub_hosted_pub_dev =
          Directory(path.join(Dart.pub.hosted_directory.path, "pub.dev"));
      File file_pubspec =
          File(path.join(path_package_install_pub, "pubspec.yaml"));
      if (!file_pubspec.existsSync()) {
        print("pubspec.yaml not Found");
        exit(0);
      }
      Map yaml_code = (yaml.loadYaml(file_pubspec.readAsStringSync(),
          recover: true) as Map);
      PackagexPubspec pubspec = PackagexPubspec(yaml_code);
      String pubspec_name = pubspec.name ?? "";
      String pubspec_version = pubspec.version ?? "";
      String new_name = "${pubspec_name}-${pubspec_version}";
      Directory directory_origin_pkg = Directory(path_package_install_pub);
      Process shell = await Process.start(
        "dart",
        [
          "pub",
          "global",
          "activate",
          "--source",
          "path",
          directory_origin_pkg.path,
          "--overwrite"
        ],
      );

      shell.stderr.listen((event) {
        stderr.add(event);
      });
      shell.stdout.listen((event) {
        stdout.add(event);
      });
      int exitCode = await shell.exitCode;
      exit(exitCode);
    }

    if (args.after(command) == "install") {
      String path_package_install_pub =
          args.after("install") ?? Directory.current.path;
      if (path_package_install_pub == ".") {
        path_package_install_pub = Directory.current.path;
      }
      Directory directory_pub_hosted_pub_dev =
          Directory(path.join(Dart.pub.hosted_directory.path, "pub.dev"));
      File file_pubspec =
          File(path.join(path_package_install_pub, "pubspec.yaml"));
      if (!file_pubspec.existsSync()) {
        print("pubspec.yaml not Found");
        exit(0);
      }
      Map yaml_code = (yaml.loadYaml(file_pubspec.readAsStringSync(),
          recover: true) as Map);
      PackagexPubspec pubspec = PackagexPubspec(yaml_code);
      String pubspec_name = pubspec.name ?? "";
      String pubspec_version = pubspec.version ?? "";
      String new_name = "${pubspec_name}-${pubspec_version}";

      Directory directory_new_pub_hosted_pubdev =
          Directory(path.join(directory_pub_hosted_pub_dev.path, new_name));
      if (directory_new_pub_hosted_pubdev.existsSync()) {
        bool is_force = args.contains(["-f", "--force"]);
        if (is_force) {
          print("Force Install Package");
          print("Delete Old");
          await directory_new_pub_hosted_pubdev.delete(recursive: true);
          print("Create New");
          await directory_new_pub_hosted_pubdev.create(recursive: true);
        } else {
          print(
              "${pubspec_name} Version: ${pubspec_version} Found in use --force");
          exit(0);
        }
      } else {
        await directory_new_pub_hosted_pubdev.create(recursive: true);
      }
      print("Installing Package ${pubspec_name} Version: ${pubspec_version} ");
      Directory directory_origin_pkg = Directory(path_package_install_pub);

      directory_origin_pkg
          .copyTo(directory_new_pub_hosted_pubdev, ignoreDirList: [
        ".dart_tool",
        "build",
        ".plugin_symlinks",
        "ephemeral",
        "example",
      ]);

      print("complete");
      exit(0);
    }
  }

  exit(0);
}