Skip to content

Commit 1767000

Browse files
committed
Address pr feedback.
1 parent 3776cbe commit 1767000

File tree

2 files changed

+39
-34
lines changed

2 files changed

+39
-34
lines changed

cmd/crates/soroban-spec-typescript/src/boilerplate.rs

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ impl Project {
9797
let root: &Path = self.as_ref();
9898

9999
// Handle package.json with proper JSON serialization
100-
self.replace_package_json(root, contract_name)?;
100+
replace_package_json(root, contract_name)?;
101101

102102
// Handle non-JSON files with string replacement
103103
["README.md", "src/index.ts"]
@@ -112,33 +112,6 @@ impl Project {
112112
})
113113
}
114114

115-
fn replace_package_json(&self, root: &Path, contract_name: &str) -> std::io::Result<()> {
116-
let file = root.join("package.json");
117-
let contents = fs::read_to_string(&file)?;
118-
let mut json: serde_json::Value = serde_json::from_str(&contents).map_err(|e| {
119-
std::io::Error::new(
120-
std::io::ErrorKind::InvalidData,
121-
format!("failed to parse package.json template: {e}"),
122-
)
123-
})?;
124-
125-
if let Some(obj) = json.as_object_mut() {
126-
obj.insert(
127-
"name".to_string(),
128-
serde_json::Value::String(contract_name.to_string()),
129-
);
130-
}
131-
132-
let serialized = serde_json::to_string_pretty(&json).map_err(|e| {
133-
std::io::Error::new(
134-
std::io::ErrorKind::InvalidData,
135-
format!("failed to serialize package.json: {e}"),
136-
)
137-
})?;
138-
// Append trailing newline to match standard formatting
139-
fs::write(&file, format!("{serialized}\n"))
140-
}
141-
142115
fn append_index_ts(
143116
&self,
144117
spec: &[ScSpecEntry],
@@ -179,6 +152,38 @@ impl Project {
179152
}
180153
}
181154

155+
fn replace_package_json(root: &Path, contract_name: &str) -> std::io::Result<()> {
156+
let file = root.join("package.json");
157+
let contents = fs::read_to_string(&file)?;
158+
let mut json: serde_json::Value = serde_json::from_str(&contents).map_err(|e| {
159+
std::io::Error::new(
160+
std::io::ErrorKind::InvalidData,
161+
format!("failed to parse package.json template: {e}"),
162+
)
163+
})?;
164+
165+
if let Some(obj) = json.as_object_mut() {
166+
obj.insert(
167+
"name".to_string(),
168+
serde_json::Value::String(contract_name.to_string()),
169+
);
170+
} else {
171+
return Err(std::io::Error::new(
172+
std::io::ErrorKind::InvalidData,
173+
"package.json template must be a JSON object",
174+
));
175+
}
176+
177+
let serialized = serde_json::to_string_pretty(&json).map_err(|e| {
178+
std::io::Error::new(
179+
std::io::ErrorKind::InvalidData,
180+
format!("failed to serialize package.json: {e}"),
181+
)
182+
})?;
183+
// Append trailing newline to match standard formatting
184+
fs::write(&file, format!("{serialized}\n"))
185+
}
186+
182187
#[cfg(test)]
183188
mod test {
184189
use temp_dir::TempDir;
@@ -248,10 +253,10 @@ mod test {
248253
"dependencies",
249254
"devDependencies",
250255
];
251-
for key in obj.keys() {
256+
for key in expected_keys {
252257
assert!(
253-
expected_keys.contains(&key.as_str()),
254-
"unexpected key in package.json: {key}"
258+
obj.contains_key(key),
259+
"missing expected key in package.json: {key}"
255260
);
256261
}
257262
}

cmd/soroban-cli/src/commands/contract/bindings/typescript.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ pub enum Error {
3939
Spec(#[from] spec_tools::Error),
4040
#[error("Failed to get file name from path: {0:?}")]
4141
FailedToGetFileName(PathBuf),
42-
#[error("--output-dir basename is not a valid npm package name: {0}. Use only lowercase alphanumeric characters, hyphens, dots, and underscores")]
43-
InvalidContractName(String),
42+
#[error("--output-dir basename '{0}' is not a valid npm package name: {1}. Use only lowercase alphanumeric characters, hyphens, dots, and underscores")]
43+
InvalidContractName(String, String),
4444
#[error(transparent)]
4545
WasmOrContract(#[from] contract_spec::Error),
4646
#[error(transparent)]
@@ -85,7 +85,7 @@ impl Cmd {
8585
.to_str()
8686
.ok_or_else(|| Error::NotUtf8(file_name.to_os_string()))?;
8787
soroban_spec_typescript::validate_npm_package_name(contract_name)
88-
.map_err(Error::InvalidContractName)?;
88+
.map_err(|reason| Error::InvalidContractName(contract_name.to_string(), reason))?;
8989
let (resolved_address, network) = match source {
9090
contract_spec::Source::Contract {
9191
resolved_address,

0 commit comments

Comments
 (0)