@@ -198,6 +198,28 @@ def _lookup(ref_name: str, context: str) -> Any:
198198 )
199199 return import_map [ref_name ]
200200
201+ def _resolve_dict_value (d : dict [str , Any ], key : str ) -> None :
202+ """Resolve ``$import`` in a dict value: ``key: {$import: name, ...inline}``."""
203+ val = d [key ]
204+ if not isinstance (val , dict ) or _IMPORT_KEY not in val :
205+ return
206+ ref = val .pop (_IMPORT_KEY )
207+ inline_keys = dict (val )
208+ ref_names = ref if isinstance (ref , list ) else [ref ]
209+
210+ merged : dict [str , Any ] = {}
211+ for rname in ref_names :
212+ snippet = _lookup (rname , f"{ key } of { d } " )
213+ if not isinstance (snippet , dict ):
214+ raise ValueError (
215+ f"$import { rname !r} in { key } must resolve to a dict, "
216+ f"got { type (snippet ).__name__ } ."
217+ )
218+ merged .update (snippet )
219+
220+ merged .update (inline_keys )
221+ d [key ] = merged
222+
201223 def _resolve_list (entries : list [Any ]) -> list [Any ]:
202224 """Resolve $import markers in a list of entries."""
203225 resolved : list [Any ] = []
@@ -215,27 +237,11 @@ def _resolve_list(entries: list[Any]) -> list[Any]:
215237 f"list, got { type (imported ).__name__ } ."
216238 )
217239 resolved .extend (imported )
218- elif (
219- isinstance (entry , dict )
220- and isinstance (entry .get ("cfg" ), dict )
221- and _IMPORT_KEY in entry ["cfg" ]
222- ):
223- ref = entry ["cfg" ].pop (_IMPORT_KEY )
224- inline_keys = dict (entry ["cfg" ])
225- ref_names = ref if isinstance (ref , list ) else [ref ]
226-
227- merged : dict [str , Any ] = {}
228- for rname in ref_names :
229- snippet = _lookup (rname , f"cfg of { entry } " )
230- if not isinstance (snippet , dict ):
231- raise ValueError (
232- f"$import { rname !r} in cfg must resolve to a dict, "
233- f"got { type (snippet ).__name__ } ."
234- )
235- merged .update (snippet )
236-
237- merged .update (inline_keys )
238- entry ["cfg" ] = merged
240+ elif isinstance (entry , dict ):
241+ # Resolve $import in any dict value within the entry
242+ for key in list (entry ):
243+ if isinstance (entry .get (key ), dict ) and _IMPORT_KEY in entry [key ]:
244+ _resolve_dict_value (entry , key )
239245 resolved .append (entry )
240246 else :
241247 resolved .append (entry )
0 commit comments