From f8c41f74f8c1bda0fdd82c07357ae601b6b2f62e Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Sun, 3 Mar 2024 11:15:39 -0500 Subject: [PATCH] fix(bindings): insert `types` after `main` if it exists --- cli/src/generate/grammar_files.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/cli/src/generate/grammar_files.rs b/cli/src/generate/grammar_files.rs index 0bfc777b..016ceffb 100644 --- a/cli/src/generate/grammar_files.rs +++ b/cli/src/generate/grammar_files.rs @@ -81,6 +81,22 @@ pub fn path_in_ignore(repo_path: &Path) -> bool { .any(|dir| repo_path.ends_with(dir)) } +fn insert_after( + map: Map, + key: &str, + after: &str, + value: Value, +) -> Map { + let mut entries = map.into_iter().collect::>(); + let after_index = entries + .iter() + .position(|(k, _)| k == after) + .unwrap_or(entries.len() - 1) + + 1; + entries.insert(after_index, (key.to_string(), value)); + entries.into_iter().collect() +} + pub fn generate_grammar_files( repo_path: &Path, language_name: &str, @@ -114,10 +130,15 @@ pub fn generate_grammar_files( "node-addon-api".to_string(), Value::String("^7.1.0".to_string()), ); - package_json.insert( - "types".to_string(), + + // insert `types` right after `main` + package_json = insert_after( + package_json, + "types", + "main", Value::String("bindings/node".to_string()), ); + let mut package_json_str = serde_json::to_string_pretty(&package_json)?; package_json_str.push('\n'); write_file(path, package_json_str)?;