
    i                        d Z ddlZddlmZmZmZmZmZ ddlm	Z	m
Z
  ej                  d      Z ej                  d      Z G d d      Zd	d
deeef   deeef   dedeeef   fdZd	d
deeef   deeef   deeef   dedeeef   f
dZy)z*Placeholder resolution for design configs.    N)AnyDictMappingMutableMappingSequence)ConfigErrorextend_pathz\$\{([A-Za-z0-9_]+)\}z^\s*\$\{([A-Za-z0-9_]+)\}\s*$c            	           e Zd ZdZdeeef   deeef   fdZede	eef   fd       Z
ddd	eeef   d
edeeef   fdZded
edee   defdZded
edee   defdZded
edee   defdZy)PlaceholderResolverz9Resolve ``${VAR}`` placeholders within nested structures.
env_lookup	root_varsc                 Z    t        |      | _        t        |xs i       | _        i | _        y N)dict_env_lookup	_raw_root_resolved_root)selfr   r   s      @/Users/bowang/.openclaw/workspace/ChatDev/utils/vars_resolver.py__init__zPlaceholderResolver.__init__   s'    
+io2..0    returnc                 f    t        | j                        }|j                  | j                         |S r   )r   r   updater   )r   mergeds     r   resolved_rootz!PlaceholderResolver.resolved_root   s)     dnn%d))*r   rootpathdatar   c                h    t        |t              st        d|      | j                  ||d       |S )NzYAML root must be a mappingr    stack)
isinstancer   r   _resolve_value)r   r    r   s      r   resolvezPlaceholderResolver.resolve   s4    $/;$GGD$b1r   valuer$   c          
         t        |t              r| j                  |||      S t        |t              r:t	        |      D ]*  \  }}| j                  |t        |d| d      |      ||<   , |S t        |t              rOt        |j                               D ]1  }t        |t        |            }| j                  ||   ||      ||<   3 |S |S )N[]r#   )	r%   str_resolve_stringlist	enumerater&   r	   r   keys)r   r(   r   r$   idxitemkey
child_paths           r   r&   z"PlaceholderResolver._resolve_value#   s    eS!''tU;;eT"&u-	T!00{41SEQR7T\a0bc
 .Le^,EJJL)(s3x8
!00sZu0Uc
 * Lr   rawc                      t         j                  |      }|r$|j                  d      } j                  |      S dt        j
                  t           dt        f fd}t        j                  ||      S )N   matchr   c                 b    | j                  d      }j                  |      }t        |      S )Nr7   )group_lookupr,   )r8   var_nameresolvedr   r   r$   s      r   replacerz5PlaceholderResolver._resolve_string.<locals>.replacer7   s,    {{1~H||HdE:Hx= r   )	_PLACEHOLDER_ONLY_PATTERN	fullmatchr:   r;   reMatchr,   _PLACEHOLDER_PATTERNsub)r   r5   r   r$   
only_matchr<   r>   s   ` ``   r   r-   z#PlaceholderResolver._resolve_string1   si    .88=
!''*H<<$66	!BHHSM 	!c 	!
 $''#66r   namec                 Z   || j                   v r| j                   |   S ||v rt        d| d|      || j                  v r@| j                  | j                  |   t	        d|      ||fz         }|| j                   |<   |S || j
                  v r| j
                  |   S t        d| d|      )Nz(Detected placeholder cycle referencing ''varsr#   zUnresolved placeholder '${z}')r   r   r   r&   r	   r   )r   rF   r   r$   r=   s        r   r;   zPlaceholderResolver._lookup>   s    4&&&&&t,,5= HaPRVWW4>>!**4>>$+?VUYAZbgkojqbq*rH(0D%O4#####D))7vSA4HHr   N)__name__
__module____qualname____doc__r   r,   r   r   propertyr   r   r   r'   r   r&   r-   r;   r"   r   r   r   r      s    C1738#4 1cAR 1
 tCH~   FL N384 s P^_bdg_gPh C s hsm PS 73 7c 7(3- 7C 7IC Is I8C= IS Ir   r   r   r   r    r   r   r   c                    t        || j                  d      xs i       }|j                  | |       |j                  | d<   |j                  S )z@Resolve placeholders in-place and return the resolved root vars.rI   r   )r   getr'   r   )r    r   r   resolvers       r   resolve_design_placeholdersrR   L   sJ    ":txx/?/E2FHT%))DL!!!r   vars_mapc                @    t        ||      }|j                  | |      S )zDResolve placeholders using an explicit vars map without mutating it.r   )r   r'   )r    r   rS   r   rQ   s        r   resolve_mapping_with_varsrU   T   s&     #:x8HDt,,r   )rM   rA   typingr   r   r   r   r   entity.configs.baser   r	   compilerC   r?   r   r,   rR   rU   r"   r   r   <module>rY      s   0 
 ? ? 8 "rzz":; &BJJ'GH ;I ;I| ou "nS#X&> "wWZ\_W_O` "hk "y}  B  DG  G  zH " 	-
c
"	- S!	- c3h		-
 	- CH	-r   