packagexCli function
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_help = args.contains(["-h", "--help"]);
String command = args[0] ?? "";
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;
}
File file_pubspec =
File(path.join(path_package_install_pub, "pubspec.yaml"));
if (!file_pubspec.existsSync()) {
print("pubspec.yaml not Found");
exit(0);
}
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);
}