o
    i                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
mZmZ dZdd	d
Zdd ZejddG dd dZG dd dejZG dd deZG dd deZG dd deZG dd deZdS )    )annotationsN   )_get_exe_version_outputdetect_exe_versionversion_tuple)z.COMz.EXEz.BATz.CMDbasenamestrreturnc           	      C  sh  t jtd| td }t |t jt jB r!t j	|s!|S t j
dkr(| S g }ttddr:|t jtj |t   t jd }rV|td |t jj t jd}|d u rct}ntdd	 |t jD }g }tt jj|D ]8}t j|}||v rqy|| |D ]#}t j||  | }t |t jt jB rt j	|s|    S qqy| S )
NscriptsEXEntfrozenFPATHPATHEXTc                 s  s    | ]}|r|V  qd S N ).0extr   r   K/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/utils/_jsruntime.py	<genexpr>*   s    z_find_exe.<locals>.<genexpr>)ospathjoin	sysconfigget_pathget_config_varaccessF_OKX_OKisdirnamegetattrsysappenddirname
executablegetcwdenvirongetextendfiltersplitpathsep_FALLBACK_PATHEXTtuplemaprealpathnormcase)	r   binarypathsr   pathextextsvisitednormedr   r   r   r   	_find_exe   s>    

 r8   c                 C  s*   | st |S tj| rtj| |S | S r   )r8   r   r   r   r   )r   r   r   r   r   _determine_runtime_path;   s
   r9   T)r   c                   @  s:   e Zd ZU ded< ded< ded< ded< dZded	< d
S )JsRuntimeInfor   r    r   versionztuple[int, ...]r   Tbool	supportedN)__name__
__module____qualname____annotations__r=   r   r   r   r   r:   C   s   
 r:   c                   @  s6   e Zd Zd
ddZejdddZejddd	Z	dS )	JsRuntimeNc                 C  s
   || _ d S r   )_path)selfr   r   r   r   __init__M   s   
zJsRuntime.__init__r	   JsRuntimeInfo | Nonec                 C  s   |   S r   )_inforD   r   r   r   infoP   s   zJsRuntime.infoc                 C  s   t r   )NotImplementedErrorrH   r   r   r   rG   T   s   zJsRuntime._infor   )r	   rF   )
r>   r?   r@   rE   	functoolscached_propertyrI   abcabstractmethodrG   r   r   r   r   rB   L   s    
rB   c                   @     e Zd ZdZdd ZdS )DenoJsRuntime)   r   r   c                 C  P   t | jd}t|dg}|sd S t|dd}t|dd}td||||| jkdS )Ndeno	--versionz^deno (\S+)unknownTlenientr    r   r;   r   r=   r9   rC   r   r   r   r:   MIN_SUPPORTED_VERSIONrD   r   outr;   vtr   r   r   rG   \      zDenoJsRuntime._infoNr>   r?   r@   rZ   rG   r   r   r   r   rP   Y       rP   c                   @  rO   )BunJsRuntime)r   r      c                 C  rR   )NbunrT   z^(\S+)rU   TrV   rX   rY   r[   r   r   r   rG   k   r^   zBunJsRuntime._infoNr_   r   r   r   r   ra   h   r`   ra   c                   @  rO   )NodeJsRuntime)   r   r   c                 C  rR   )NnoderT   z^v(\S+)rU   TrV   rX   rY   r[   r   r   r   rG   z   r^   zNodeJsRuntime._infoNr_   r   r   r   r   rd   w   r`   rd   c                   @  rO   )QuickJsRuntime)i     	   c                 C  sv   t | jd}t|dgdd}|sd S d|v }t|dd}t|dd}|r/td	||||d
kdS td||||| jkdS )Nqjsz--helpT)ignore_return_codez
QuickJS-ngz"^QuickJS(?:-ng)?\s+version\s+(\S+)rU   rV   z
quickjs-ng)r   rX   quickjsrY   )rD   r   r\   is_ngr;   r]   r   r   r   rG      s    zQuickJsRuntime._infoNr_   r   r   r   r   rg      r`   rg   )r   r   r	   r   )
__future__r   rM   dataclassesrK   os.pathr   r"   r   _utilsr   r   r   r-   r8   r9   	dataclassr:   ABCrB   rP   ra   rd   rg   r   r   r   r   <module>   s$    
+
