Skip to content

Commit

Permalink
add init command
Browse files Browse the repository at this point in the history
  • Loading branch information
anonrig committed Jul 12, 2023
1 parent ed88888 commit a19e661
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 9 deletions.
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ TODO:

Commands:

- [ ] init
- [x] init: `cargo run -- init`
- [ ] add: `cargo run -- add fast-querystring`
- [ ] flags...
- [ ] remove
Expand Down
1 change: 1 addition & 0 deletions crates/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ path = "src/main.rs"

[dependencies]
pacquet_registry = { workspace = true }
pacquet_package_json = { workspace = true }

clap = { workspace = true }
rayon = { workspace = true }
Expand Down
6 changes: 5 additions & 1 deletion crates/cli/src/commands.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
use clap::{Arg, Command};

fn init_package_command() -> Command {
Command::new("init").about("Initialize a package")
}

fn add_package_command() -> Command {
Command::new("add").about("Add a package").arg(Arg::new("package"))
}
Expand All @@ -10,5 +14,5 @@ pub fn get_commands() -> Command {
.version("alpha")
.author("Yagiz Nizipli")
.arg_required_else_help(true)
.subcommand(add_package_command())
.subcommands([add_package_command(), init_package_command()])
}
4 changes: 4 additions & 0 deletions crates/cli/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
mod commands;

use pacquet_package_json::PackageJson;
use pacquet_registry::RegistryManager;

use crate::commands::get_commands;
Expand All @@ -24,6 +25,9 @@ pub async fn run_commands() {
if let Some(package_name) = subcommand.get_one::<String>("package") {
registry_manager.get_package(package_name).await.expect("TODO: panic message");
}
} else if matches.subcommand_matches("init").is_some() {
let pkg = PackageJson::from_current_directory();
pkg.create_if_needed();
}
}

Expand Down
3 changes: 2 additions & 1 deletion crates/package_json/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ license.workspace = true
repository.workspace = true

[dependencies]
serde_json= { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
34 changes: 28 additions & 6 deletions crates/package_json/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
use std::{collections::HashMap, env, ffi::OsStr, io::Write, path::PathBuf};

struct PackageJson {
use serde_json;

pub struct PackageJson {
path: PathBuf,
}

impl PackageJson {
pub fn new() -> Self {
pub fn from_current_directory() -> Self {
PackageJson {
path: env::current_dir()
.expect("current directory should exist")
Expand All @@ -14,19 +16,39 @@ impl PackageJson {
}
}

pub fn from_path(path: PathBuf) -> Self {
PackageJson { path }
}

pub fn create_if_needed(&self) {
if self.path.exists() {
return;
}

let folder_name = self.path.file_name().unwrap_or(OsStr::new(""));
let folder_name = self
.path
.parent()
.expect("should have a parent folder")
.file_name()
.unwrap_or(OsStr::new(""));

let mut file = std::fs::File::open(&self.path).unwrap();
let mut file = std::fs::File::create(&self.path).unwrap();
let empty_object: HashMap<String, String> = HashMap::new();
let mut scripts = HashMap::new();
scripts.insert("test", "echo \"Error: no test specified\" && exit 1");

let mut contents = HashMap::new();
contents.insert("name", folder_name.to_str().unwrap());
contents.insert("name", serde_json::to_value(folder_name.to_str().unwrap()).unwrap());
contents.insert("version", serde_json::to_value("1.0.0").unwrap());
contents.insert("description", serde_json::to_value("").unwrap());
contents.insert("main", serde_json::to_value("index.js").unwrap());
contents.insert("author", serde_json::to_value("").unwrap());
contents.insert("license", serde_json::to_value("MIT").unwrap());
contents.insert("scripts", serde_json::to_value(&scripts).unwrap());
contents.insert("dependencies", serde_json::to_value(&empty_object).unwrap());
contents.insert("devDependencies", serde_json::to_value(&empty_object).unwrap());

let serialized = serde_json::to_string(&contents).unwrap();
let serialized = serde_json::to_string_pretty(&contents).unwrap();
file.write_all(serialized.as_bytes()).unwrap();
}
}

0 comments on commit a19e661

Please sign in to comment.