From 27ddb123318cc8abeb882c63c695659d1565cece Mon Sep 17 00:00:00 2001 From: nojaf Date: Thu, 31 Jul 2025 17:11:33 +0200 Subject: [PATCH 1/3] Try and read package name from rescript.json if package.json is not present. --- rewatch/src/build/packages.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index 24eca3d82e..37668ccdd5 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -399,8 +399,12 @@ fn flatten_dependencies(dependencies: Vec) -> Vec { pub fn read_package_name(package_dir: &Path) -> Result { let package_json_path = package_dir.join("package.json"); - let package_json_contents = - fs::read_to_string(&package_json_path).map_err(|e| anyhow!("Could not read package.json: {}", e))?; + let package_json_contents = if Path::exists(&package_json_path) { + fs::read_to_string(&package_json_path).map_err(|e| anyhow!("Could not read package.json: {}", e))? + } else { + let rescript_json_path = package_dir.join("rescript.json"); + fs::read_to_string(&rescript_json_path).map_err(|e| anyhow!("Could not read rescript.json: {}", e))? + }; let package_json: serde_json::Value = serde_json::from_str(&package_json_contents) .map_err(|e| anyhow!("Could not parse package.json: {}", e))?; From 2548ec5d9a933ed6d75744b4680be50044252517 Mon Sep 17 00:00:00 2001 From: nojaf Date: Fri, 8 Aug 2025 10:20:02 +0200 Subject: [PATCH 2/3] Add changelog entry --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00091ad7d2..cbab3d2671 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ #### :nail_care: Polish +- Read package name from rescript.json if package.json is absent. https://github.com/rescript-lang/rescript/pull/7746 + #### :house: Internal - Add token viewer to `res_parser`. https://github.com/rescript-lang/rescript/pull/7751 From cd80fa2a226bddb832d82504eb0df105803207c4 Mon Sep 17 00:00:00 2001 From: nojaf Date: Fri, 8 Aug 2025 13:40:26 +0200 Subject: [PATCH 3/3] Improve error messages --- rewatch/src/build/packages.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/rewatch/src/build/packages.rs b/rewatch/src/build/packages.rs index 37668ccdd5..623e4b2757 100644 --- a/rewatch/src/build/packages.rs +++ b/rewatch/src/build/packages.rs @@ -397,17 +397,27 @@ fn flatten_dependencies(dependencies: Vec) -> Vec { } pub fn read_package_name(package_dir: &Path) -> Result { - let package_json_path = package_dir.join("package.json"); + let mut file_name = "package.json"; + let package_json_path = package_dir.join(file_name); let package_json_contents = if Path::exists(&package_json_path) { fs::read_to_string(&package_json_path).map_err(|e| anyhow!("Could not read package.json: {}", e))? } else { let rescript_json_path = package_dir.join("rescript.json"); - fs::read_to_string(&rescript_json_path).map_err(|e| anyhow!("Could not read rescript.json: {}", e))? + if Path::exists(&rescript_json_path) { + file_name = "rescript.json"; + fs::read_to_string(&rescript_json_path) + .map_err(|e| anyhow!("Could not read rescript.json: {}", e))? + } else { + return Err(anyhow!( + "There is no package.json or rescript.json file in {}", + package_dir.to_string_lossy() + )); + } }; let package_json: serde_json::Value = serde_json::from_str(&package_json_contents) - .map_err(|e| anyhow!("Could not parse package.json: {}", e))?; + .map_err(|e| anyhow!("Could not parse {}: {}", file_name, e))?; package_json["name"] .as_str()