diff options
Diffstat (limited to 'cli/tools/init/mod.rs')
-rw-r--r-- | cli/tools/init/mod.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/cli/tools/init/mod.rs b/cli/tools/init/mod.rs new file mode 100644 index 000000000..e47b88702 --- /dev/null +++ b/cli/tools/init/mod.rs @@ -0,0 +1,49 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. + +use crate::args::InitFlags; +use crate::compat; +use deno_core::{anyhow::Context, error::AnyError}; +use std::io::Write; +use std::path::Path; + +fn create_file( + dir: &Path, + filename: &str, + content: &str, +) -> Result<(), AnyError> { + let mut file = std::fs::OpenOptions::new() + .write(true) + .create_new(true) + .open(dir.join(filename)) + .with_context(|| format!("Failed to create {} file", filename))?; + file.write_all(content.as_bytes())?; + Ok(()) +} + +pub async fn init_project(init_flags: InitFlags) -> Result<(), AnyError> { + let cwd = + std::env::current_dir().context("Can't read current working directory.")?; + let dir = if let Some(dir) = &init_flags.dir { + let dir = cwd.join(dir); + std::fs::create_dir_all(&dir)?; + dir + } else { + cwd + }; + + let main_ts = include_str!("./templates/main.ts"); + create_file(&dir, "main.ts", main_ts)?; + + let main_test_ts = include_str!("./templates/main_test.ts") + .replace("{CURRENT_STD_URL}", compat::STD_URL_STR); + create_file(&dir, "main_test.ts", &main_test_ts)?; + + println!("✅ Project initialized"); + println!("Run these commands to get started"); + if let Some(dir) = init_flags.dir { + println!(" cd {}", dir); + } + println!(" deno run main.ts"); + println!(" deno test"); + Ok(()) +} |