@@ -189,8 +189,8 @@ pub struct StepTransform {
189189 // Track all declared identifiers in module scope to avoid collisions
190190 declared_identifiers : HashSet < String > ,
191191 // Track object property step functions for hoisting in step mode
192- // (parent_var_name, prop_name, arrow_expr, span)
193- object_property_step_functions : Vec < ( String , String , ArrowExpr , swc_core:: common:: Span ) > ,
192+ // (parent_var_name, prop_name, arrow_expr, span, parent_workflow_name )
193+ object_property_step_functions : Vec < ( String , String , ArrowExpr , swc_core:: common:: Span , String ) > ,
194194 // Track nested step functions inside workflow functions for hoisting in step mode
195195 // (fn_name, fn_expr, span, closure_vars, was_arrow, parent_workflow_name)
196196 nested_step_functions : Vec < (
@@ -1230,8 +1230,13 @@ impl StepTransform {
12301230 parent_var_name : & str ,
12311231 prop_name : & str ,
12321232 is_workflow : bool ,
1233+ workflow_name : Option < & str > ,
12331234 ) -> String {
1234- let fn_name = format ! ( "{}/{}" , parent_var_name, prop_name) ;
1235+ let fn_name = if let Some ( wf_name) = workflow_name {
1236+ format ! ( "{}/{}/{}" , wf_name, parent_var_name, prop_name)
1237+ } else {
1238+ format ! ( "{}/{}" , parent_var_name, prop_name)
1239+ } ;
12351240 let prefix = if is_workflow { "workflow" } else { "step" } ;
12361241 naming:: format_name ( prefix, & self . filename , & fn_name)
12371242 }
@@ -1283,6 +1288,9 @@ impl StepTransform {
12831288 prop_key. clone ( ) ,
12841289 arrow_expr. clone ( ) ,
12851290 arrow_expr. span ,
1291+ self . current_workflow_function_name
1292+ . clone ( )
1293+ . unwrap_or_default ( ) ,
12861294 ) ) ;
12871295
12881296 let span = arrow_expr. span ;
@@ -1344,6 +1352,9 @@ impl StepTransform {
13441352 prop_key. clone ( ) ,
13451353 arrow_from_fn,
13461354 span,
1355+ self . current_workflow_function_name
1356+ . clone ( )
1357+ . unwrap_or_default ( ) ,
13471358 ) ) ;
13481359
13491360 let _ = fn_expr; // Drop the mutable reference
@@ -1413,18 +1424,27 @@ impl StepTransform {
14131424 prop_key. clone ( ) ,
14141425 arrow_from_method,
14151426 span,
1427+ self . current_workflow_function_name
1428+ . clone ( )
1429+ . unwrap_or_default ( ) ,
14161430 ) ) ;
14171431
14181432 // Now handle the transformation based on mode
14191433 match self . mode {
14201434 TransformMode :: Step => {
14211435 // In step mode, replace method with key-value property referencing the hoisted variable
1422- let hoist_var_name =
1423- format ! ( "{}${}" , parent_var_name, prop_key) ;
1436+ let hoist_var_name = if let Some ( ref workflow_name) =
1437+ self . current_workflow_function_name
1438+ {
1439+ format ! ( "{}${}${}" , workflow_name, parent_var_name, prop_key)
1440+ } else {
1441+ format ! ( "{}${}" , parent_var_name, prop_key)
1442+ } ;
14241443 let step_id = self . create_object_property_id (
14251444 parent_var_name,
14261445 & prop_key,
14271446 false ,
1447+ self . current_workflow_function_name . as_deref ( ) ,
14281448 ) ;
14291449 // Replace the method with a key-value property referencing the hoisted function
14301450 * boxed_prop = Box :: new ( Prop :: KeyValue ( KeyValueProp {
@@ -1447,6 +1467,7 @@ impl StepTransform {
14471467 parent_var_name,
14481468 & prop_key,
14491469 false ,
1470+ self . current_workflow_function_name . as_deref ( ) ,
14501471 ) ;
14511472 * boxed_prop = Box :: new ( Prop :: KeyValue ( KeyValueProp {
14521473 key : method_prop. key . clone ( ) ,
@@ -1479,12 +1500,23 @@ impl StepTransform {
14791500 prop_key : & str ,
14801501 _span : swc_core:: common:: Span ,
14811502 ) {
1482- let step_id = self . create_object_property_id ( parent_var_name, prop_key, false ) ;
1503+ let step_id = self . create_object_property_id (
1504+ parent_var_name,
1505+ prop_key,
1506+ false ,
1507+ self . current_workflow_function_name . as_deref ( ) ,
1508+ ) ;
14831509
14841510 match self . mode {
14851511 TransformMode :: Step => {
14861512 // In step mode, replace with reference to hoisted variable
1487- let hoist_var_name = format ! ( "{}${}" , parent_var_name, prop_key) ;
1513+ let hoist_var_name = if let Some ( ref workflow_name) =
1514+ self . current_workflow_function_name
1515+ {
1516+ format ! ( "{}${}${}" , workflow_name, parent_var_name, prop_key)
1517+ } else {
1518+ format ! ( "{}${}" , parent_var_name, prop_key)
1519+ } ;
14881520 * kv_prop. value = Expr :: Ident ( Ident :: new (
14891521 hoist_var_name. into ( ) ,
14901522 DUMMY_SP ,
@@ -3100,10 +3132,19 @@ impl VisitMut for StepTransform {
31003132 let hoisting_info: Vec < _ > = self
31013133 . object_property_step_functions
31023134 . iter ( )
3103- . map ( |( parent_var, prop_name, arrow_expr, _span) | {
3104- let hoist_var_name = format ! ( "{}${}" , parent_var, prop_name) ;
3135+ . map ( |( parent_var, prop_name, arrow_expr, _span, workflow_name) | {
3136+ let hoist_var_name = if !workflow_name. is_empty ( ) {
3137+ format ! ( "{}${}${}" , workflow_name, parent_var, prop_name)
3138+ } else {
3139+ format ! ( "{}${}" , parent_var, prop_name)
3140+ } ;
3141+ let wf_name = if workflow_name. is_empty ( ) {
3142+ None
3143+ } else {
3144+ Some ( workflow_name. as_str ( ) )
3145+ } ;
31053146 let step_id =
3106- self . create_object_property_id ( parent_var, prop_name, false ) ;
3147+ self . create_object_property_id ( parent_var, prop_name, false , wf_name ) ;
31073148 (
31083149 hoist_var_name,
31093150 arrow_expr. clone ( ) ,
0 commit comments