cli: Add `types` setting to Anchor.toml workspace (#1032)

This commit is contained in:
FlorianMilcendeau 2021-11-18 00:04:14 +01:00 committed by GitHub
parent e7e8f4da9b
commit 7a7db5bc0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 3 deletions

View File

@ -264,6 +264,8 @@ pub struct WorkspaceConfig {
pub members: Vec<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub exclude: Vec<String>,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub types: String,
}
impl Config {

View File

@ -569,6 +569,10 @@ pub fn build(
};
fs::create_dir_all(idl_ts_out.as_ref().unwrap())?;
if !&cfg.workspace.types.is_empty() {
fs::create_dir_all(cfg_parent.join(&cfg.workspace.types))?;
};
let solana_version = match solana_version.is_some() {
true => solana_version,
false => cfg.solana_version.clone(),
@ -672,7 +676,7 @@ fn build_cwd(
Some(p) => std::env::set_current_dir(&p)?,
};
match verifiable {
false => _build_cwd(idl_out, idl_ts_out, cargo_args),
false => _build_cwd(cfg, idl_out, idl_ts_out, cargo_args),
true => build_cwd_verifiable(cfg, cargo_toml, solana_version, stdout, stderr),
}
}
@ -691,6 +695,9 @@ fn build_cwd_verifiable(
fs::create_dir_all(workspace_dir.join("target/verifiable"))?;
fs::create_dir_all(workspace_dir.join("target/idl"))?;
fs::create_dir_all(workspace_dir.join("target/types"))?;
if !&cfg.workspace.types.is_empty() {
fs::create_dir_all(workspace_dir.join(&cfg.workspace.types))?;
}
let container_name = "anchor-program";
@ -747,6 +754,17 @@ fn build_cwd_verifiable(
println!("Writing the .ts file");
let ts_file = workspace_dir.join(format!("target/types/{}.ts", idl.name));
fs::write(&ts_file, template::idl_ts(&idl)?)?;
// Copy out the TypeScript type.
if !&cfg.workspace.types.is_empty() {
fs::copy(
ts_file,
workspace_dir
.join(&cfg.workspace.types)
.join(idl.name)
.with_extension("ts"),
)?;
}
}
println!("Build success");
@ -911,6 +929,7 @@ fn docker_build(
}
fn _build_cwd(
cfg: &WithPath<Config>,
idl_out: Option<PathBuf>,
idl_ts_out: Option<PathBuf>,
cargo_args: Vec<String>,
@ -941,9 +960,19 @@ fn _build_cwd(
// Write out the JSON file.
write_idl(&idl, OutFile::File(out))?;
// Write out the TypeScript type.
fs::write(ts_out, template::idl_ts(&idl)?)?;
fs::write(&ts_out, template::idl_ts(&idl)?)?;
// Copy out the TypeScript type.
let cfg_parent = cfg.path().parent().expect("Invalid Anchor.toml");
if !&cfg.workspace.types.is_empty() {
fs::copy(
&ts_out,
cfg_parent
.join(&cfg.workspace.types)
.join(&idl.name)
.with_extension("ts"),
)?;
}
}
Ok(())