diff --git a/crates/brk_binder/src/javascript.rs b/crates/brk_binder/src/javascript.rs index b1eb8aa06..cae12c641 100644 --- a/crates/brk_binder/src/javascript.rs +++ b/crates/brk_binder/src/javascript.rs @@ -576,18 +576,20 @@ fn generate_tree_initializer( match child_node { TreeNode::Leaf(leaf) => { + // Use leaf.name() (vec.name()) for API path, not tree path + let metric_path = format!("/{}", leaf.name()); if let Some(accessor) = metadata.find_index_set_pattern(leaf.indexes()) { writeln!( output, "{}{}: create{}(this, '{}'){}", - indent_str, field_name, accessor.name, child_path, comma + indent_str, field_name, accessor.name, metric_path, comma ) .unwrap(); } else { writeln!( output, "{}{}: new MetricNode(this, '{}'){}", - indent_str, field_name, child_path, comma + indent_str, field_name, metric_path, comma ) .unwrap(); } diff --git a/crates/brk_binder/src/types.rs b/crates/brk_binder/src/types.rs index b2a2cb134..76fa4b8e7 100644 --- a/crates/brk_binder/src/types.rs +++ b/crates/brk_binder/src/types.rs @@ -35,6 +35,14 @@ pub struct StructuralPattern { pub fields: Vec, } +impl StructuralPattern { + /// Returns true if this pattern contains any leaf fields (fields with indexes). + /// Patterns with leaves can't use factory functions because leaf.name() is instance-specific. + pub fn contains_leaves(&self) -> bool { + self.fields.iter().any(|f| !f.indexes.is_empty()) + } +} + /// A field in a structural pattern #[derive(Debug, Clone, PartialOrd, Ord)] pub struct PatternField {