o
    EgS                     @   s<  d 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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ejdk rBddlmZ n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zddlmZ ddlZe
dZddlZejZW n" ey   ddl mZ ddl!m"Z e
dZddl#Z#e#j$jZY nw d	Z%ej&j'Z'ej&j(Z(da)ejd d
kZ*e+ dkZ,e+ -dZ.da/dd Z0G dd de1Z2e3dd ee4e2D e2_5dd Z6dd Z7dd Z8dd Z9dd Z:e: Z;dd Z<dod!d"Z=d#d$ Z>d%d& Z?dpd'd(Z@		dqd)d*ZAd+d, ZBd-d. ZCd/d0 ZDd1d2 ZEd3d4 ZFejGd5d6 ZHdrd7d8ZId9d: ZJd;d< ZKdsd=d>ZLd?d@ ZMdAdB ZNdCdD ZOdEdF ZPdGdH ZQdIdJ ZRdKdL ZSdMdN ZTdOdP ZUdQdR ZVdSdT ZWdUdV ZXdWdX ZYdYdZ ZZd[d\ Z[d]d^ Z\d_d` Z]dadbdcZ^dddedcZ_dfZ`dgZadhZbdiZcdjZddkZedlZfdmZgehdnkre]  dS dS )tz
    nodeenv
    ~~~~~~~
    Node.js virtual environment

    :copyright: (c) 2014 by Eugene Kalinin
    :license: BSD, see LICENSE for more details.
    N)   r   )quote)SafeConfigParser	iteritems)ConfigParseritemsz1.9.1r   Windows)CYGWINMSYSFc                 C   s   | rt r| S z| dW S  ty@   z
| d | W  Y S  ty?   z| ddW  Y  Y S  ty:   Y nw Y Y | S w w )z:Convert given text to UTF-8 encoding (as far as possible).utf8cp1252)is_PY3encodeUnicodeDecodeErrordecode)text r   a/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/nodeenv.pyto_utf8D   s$   

r   c                   @   sV   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZeddd	Zed
d ZdS )Configz"
    Configuration namespace.
    latestF2makeTNc           	      C   s  t |D ]]}tj|}tj|sqt }|| d}||s#qtt	| D ]7\}}|
ds8|||s9q)t|trE|||}n|||}|rZtdtj||| t| || q)qtjdrtdd}t| d|dd   W d	   d	S 1 sw   Y  d	S d	S )
z
        Load configuration from the given files in reverse order,
        if they exist and have a [nodeenv] section.
        Additionally, load version from .node-version if file exists.
        nodeenv_zCONFIG {0}: {1} = {2}z.node-versionrnode   r   N)reversedospath
expanduserexistsr   readhas_sectionr   vars
startswith
has_option
isinstancebool
getbooleangetprintformatbasenamesetattropen	readlinesstrip)	clsconfigfilesverbose
configfileini_filesectionattrvalv_filer   r   r   _loadj   s8   




"zConfig._loadc              	   C   s4   t d t dddd ttt| D   dS )z0
        Print defaults for the README.
        z    [nodeenv]z    z
    c                 s   s*    | ]\}}| d sd||f V  qdS )r   z%s = %sNr&   ).0kvr   r   r   	<genexpr>   s    

zConfig._dump.<locals>.<genexpr>N)r,   joinsortedr   r%   )r3   r   r   r   _dump   s   zConfig._dump)F)__name__
__module____qualname____doc__r   npmwith_npmjobswithout_ssldebugprofiler   prebuiltignore_ssl_certsmirrorclassmethodr<   rD   r   r   r   r   r   X   s"    $r   c                 c   s&    | ]\}}| d s||fV  qdS )r   Nr=   )r>   r9   r:   r   r   r   rA      s    
rA   c                 C   s   |  dddS )z
    Remove new-lines and
    utf-8
 )r   replace)outr   r   r   clear_output   s   rX   c                 C   s   |  |d dS )zC
    Remove bin directory of the current environment from PATH
    :rU   )rV   )envenv_bin_dirr   r   r   remove_env_bin_from_path   s   r\   c                 C   sJ   |  ddddd }t|dkr|d dd |d< ttt|S )	z:
    Parse version string to a tuple of integer parts
    r@   rU   .Nr      +r   )rV   splitlentuplemapint)version_strr@   r   r   r   parse_version   s   rf   c                 C   s<   | j dkrtjddgtjd \}}tt|S t| j S )z7
    Parse the node version from the argparse args
    systemr   	--version)stdout)r   
subprocessPopenPIPEcommunicaterf   rX   )argsrW   errr   r   r   node_version_from_args   s   


rp   c                  C   s^   t d} | t j dd }|t j_t  }|t j t jdd}|| | 	| | S )z&
    Create logger for diagnostic
    r   c                 S   s>   |  |}t|ddrdnd}| j|t|  |   d S )N	continuedFz%sz%s
)r-   getattrstreamwriter   flush)selfrecordmsgfsr   r   r   emit   s   
zcreate_logger.<locals>.emitz%(message)s)fmt)
logging	getLoggersetLevelINFOStreamHandlerrz   DEBUG	FormattersetFormatter
addHandler)loggrrz   ch	formatterr   r   r   create_logger   s   


r   c                  C   s6  t jdd} | jddtd | jdddd	tjd
d | jdddtjdd tsr| jdddtjdd | jdddd | jdddtj	dd | jdd dtj
d!d | jd"d#dtjd$d | jd%d&d'd(d)tjd* | jd+d,d-tjd.d | jd/d0dd1d2d3d | jd4d5dd6d2d7d | jd8d9d:d;d<d | jd=d>d?d@dAdBdC | jdDdEdFd | jdGdHdIdd2dJd | jdKdLdd2dMd | jdNdOdtjdPd | jdQdRdStjdTd | jdUdVdd2dWd | jdXdYdZdd2d[d | jd\d]d^dd2d_d | jd`dadd2dbd | jdcd,dtjddd | jdedfdtjdgd | jdhdidjdkdl | S )mz.
    Make a command line argument parser.
    z%(prog)s [OPTIONS] DEST_DIR)usagerh   version)actionr   z-nz--noder   NODE_VERzThe node.js version to use, e.g., --node=0.4.3 will use the node-v0.4.3 to create the new environment. The default is last stable version (`latest`). Use `lts` to use the latest LTS release. Use `system` to use system-wide node.)destmetavardefaulthelpz--mirrorstorerQ   z1Set mirror server of nodejs.org to download from.)r   r   r   r   z-jz--jobsrK   zOSets number of parallel commands at node.js compilation. The default is 2 jobs.)r   r   r   z--load-averageload_averagezQSets maximum load average for executing parallel commands at node.js compilation.)r   r   --without-sslrL   
store_truez!Build node.js without SSL support)r   r   r   r   --debugrM   z"Build debug variant of the node.js	--profilerN   zEnable profiling for node.jsz--makez-m	make_path	MAKE_PATHzPath to make command)r   r   r   r   z--sourcerO   store_falsezInstall node.js from the sourcez-vz	--verboser5   FzVerbose modez-qz--quietquietz
Quiet modez-Cz--config-fileconfig_fileNzfLoad a different file than '~/.nodeenvrc'. Pass an empty string for no config (use built-in defaults).z-rz--requirementsrequirementsrU   FILENAMEz?Install all the packages listed in the given requirements file.)r   r   r   r   z--promptpromptz:Provides an alternative prompt prefix for this environmentz-lz--listlistz Lists available node.js versionsz--updateupdatez+Install npm packages from file without nodez
--with-npmrJ   zBuild without installing npm into the new virtual environment. Required for node.js < 0.6.3. By default, the npm included with node.js is used. Under Windows, this defaults to true.z--npmrI   NPM_VERzThe npm version to use, e.g., --npm=0.3.18 will use the npm-0.3.18.tgz tarball to install. The default is last available version (`latest`).z--no-npm-cleanno_npm_cleanz9Skip the npm 0.x cleanup.  Cleanup is enabled by default.z--python-virtualenvz-ppython_virtualenvzUse current python virtualenvz--clean-src-c	clean_srcz)Remove "src" directory after installationz--forceforcez.Force installation in a pre-existing directoryz
--prebuiltz/Install node.js from prebuilt package (default)z--ignore_ssl_certsrP   z5Ignore certificates for package downloads. - UNSAFE -DEST_DIRenv_dir?zDestination directory)r   r   nargsr   )argparseArgumentParseradd_argumentnodeenv_versionr   r   rQ   is_WINrK   rL   rM   rN   r   rO   rJ   rI   rP   )parserr   r   r   make_parser   s   	
r   Tc                 C   s   t  }| }|jdu rg d|_n|jsg |_ntj|js)|d|j |jg|_| s2|S |js@|j	s@|j
s@|d |S )z]
    Parses command line arguments.

    Set `check` to False to skip validation checks.
    N)z	./tox.iniz./setup.cfgz~/.nodeenvrcz Config file '{0}' doesn't exist!z<You must provide a DEST_DIR or use current python virtualenv)r   
parse_argsr   r   r    r"   errorr-   r   r   r   )checkr   rn   r   r   r   r   z  s"   


r   c                 C   sJ   t j| stjd| tddd t |  td dS td|  dS )z
    Create directory
    z * Creating: %s ... Trq   extradone.z * Directory %s already existsN)r   r    r"   loggerrM   dictmakedirs)r    r   r   r   mkdir  s
   
r   c                 C   s.   t jt jB t jB t jB t jB }t| | d S N)statS_IRWXUS_IXGRPS_IRGRPS_IROTHS_IXOTHr   chmod)filename	mode_0755r   r   r   make_executable  s   
r   c                 C   sz  t |}trt|tst|d}tj| sFtjd| t	ddd t
| d}|| W d   n1 s6w   Y  t|  td dS t
| d	}| }W d   n1 sZw   Y  ||v rktd
|  dS |sutd|  dS |rtd|  t
| d}|| W d   dS 1 sw   Y  dS td|  t
| d}|| W d   dS 1 sw   Y  dS )z-
    Create file and write content in it
    rS   z * Writing %s ... Tr   r   wbNr   rbz * Content %s already in placez: * File %s exists with different content;  not overwritingz * Appending data to %sabz" * Overwriting %s with new content)r   r   r(   bytesr   r    r"   r   rM   r   r0   rt   r   r#   info)r   content	overwriteappendfcr   r   r   	writefile  sD   



"r   c              	   C   s  g }g }| D ]3}t |dkr|dd d |dd  }d|v s,d|v s,d|v s,d	|v r4d
|dd }|| qd|}td|  |rMd| } tj}	|r_tj	
 }
|r^|
| nd}
ztj| tjd|	||
|d}W n ty   t d }td||f   w |j}	|	r|	 }|sn2ztr|d }n|d }W n ty   |d }Y nw || |rt| |	s|  |jr|r|D ]}t| qtd||jf |j|fS )z'
    Execute cmd line in sub-shell
    -   N   z...i rT   "'z"%s"z\"z ** Running command %s)stderrstdinri   cwdrZ   shellr   z#Error %s while executing command %smbcsr   cp866z$Command %s failed with error code %s)ra   rV   r   rB   r   rM   rj   rl   r   environcopyr   rk   STDOUT	Exceptionsysexc_infor   ri   readliner   r   rstripr   r   wait
returncodecriticalOSError)cmdshow_stdoutin_shellr   	extra_env
all_output	cmd_partspartcmd_descri   rZ   procelinesr   r   r   callit  sn    








r   c                 C   s   t | dkrdt| f S tS )N)r      z%s/v%s/)rf   src_base_url)re   r   r   r   get_root_url  s   r   c                   C   s   t ddkS )NHOST_GNU_TYPEzx86_64-pc-linux-musl)	sysconfigget_config_varr   r   r   r   is_x86_64_musl  s   r   c                   C   s   t  dkS )Nriscv64)platformmachiner   r   r   r   
is_riscv64!  s   r  c                 C   s   i ddddddddddddddd	dd
ddddddddddddddd}t   |t   d}tsCtrHd| }n
t rNd}nd| }d| |f }t| | S )Nx86i686x86_64x64amd64AMD64armv6larmv7larmv8laarch64arm64zarm64/v8armv8zarmv8.4ppc64les390xr   )rg   archz-win-%(arch)s.zipz-linux-x64-musl.tar.gzz-%(system)s-%(arch)s.tar.gzz
node-v%s%s)r   rg   lowerr   r   	is_CYGWINr   r   )r   archmapsysinfopostfixr   r   r   r   get_node_bin_url%  sV   	



r  c                 C   s   d|  }t | | S )Nznode-v%s.tar.gz)r   )r   tar_namer   r   r   get_node_src_urlF  s   r  c                  o   s2    t j| i |}z
|V  W |  dS |  w )z!Compatibility layer because py26.N)tarfiler0   close)rn   kwargstfr   r   r   tarfile_openK  s
   r  c              
   C   sx   |dkr:z
t t|  W S  ty3 } ztd| | |d8 }|dkr)|W Y d}~nd}~ww |dksdS dS )zMDo multiple attempts to avoid incomplete data in case
    of unstable networkr   z*Incomplete read while reading from {} - {}r   N)ioBytesIOurlopenr#   IncompleteReadr   warningr-   )node_url	n_attemptr   r   r   r   _download_node_fileU  s   r%  c           	         s   t jdtddd t| }t jdtddd tstr+t|}t	d}dd  nt
|d}t	d	}td
 |%}t|j}d|  fdd||D }||| W d   dS 1 sdw   Y  dS )z
    Download source code
    r]   Tr   r   namelistc                 S   s   | S r   r   )r   r   r   r   <lambda>p  s    z#download_node_src.<locals>.<lambda>)fileobj
getmembersnamez0node-v%s[^/]*/(README\.md|CHANGELOG\.md|LICENSE)c                    s$   g | ]}t  |d u r|qS r   )rematch)r>   membermember_namerexp_stringr   r   
<listcomp>z  s
    z%download_node_src.<locals>.<listcomp>N)r   r   r   r%  r   r  zipfileZipFileoperatormethodcallerr  
attrgetterr+  escaper   
extractall)	r#  src_dirrn   dl_contentsctxmembersarchivenode_verextract_listr   r.  r   download_node_srce  s(   





"r@  c                 C   sR   d}ddt |f i}t| d |}tr$ttj}tj|_tj	||dS t	|S )Nz$https://github.com/ekalinin/nodeenv/z
User-Agentznodeenv/%s (%s))context)
r   urllib2RequestrP   ssl
SSLContextPROTOCOL_TLS	CERT_NONEverify_moder   )urlhome_urlheadersreqrA  r   r   r   r     s   
r   c              	   C   s   t | D ]M}t j| |}t j||}t j|r6z
t|||| W q ty5   t|||| Y qw t j|rLt j|sKt 	t 
|| qt|| qd S r   )r   listdirr    rB   isdirshutilcopytreer   islinksymlinkreadlinkcopy2)srcdstsymlinksignoreitemr   dr   r   r   rP    s   rP  c                 C   s   t jdtddd trt| d}t| ntr+t| d}t| tt| ddt n| }|t	d|  }t

|\}t||d trXd	D ]}t| d|}tj|rWt| qEt jdtddd d
S )z1
    Copy prebuilt binaries into environment
    r]   Tr   r   Scriptsbinr   z
/node-v%s*)rI   npxnode.exeN)r   r   r   r   rB   r   r  r   CYGWIN_NODEr   globrP  r   r    r"   r   )r   r9  node_versionr   src_folder_tpl
src_folderr   r   r   r   copy_node_from_prebuilt  s&   


rd  c                    sr  i }ddg}t  fdd|}dd t||D }ttjdtjd d	kr_td
}|s0tdt	d| t
|d}	t
|	d}
t|	 tj|
sRtdd||
g d|	tjdd|d< ddt|  g} jro|d  j	rw|d  jr|d  j}t| jd|| tjdtddd t|g|  jd|| tjdtddd t|d g jd|| d S )Nzload-averagerK   c                    s   t  | ddS )N-r   )rr   rV   )xrn   r   r   r'    s    z%build_node_from_src.<locals>.<lambda>c                 S   s:   g | ]\}}|d urt |dkrd||nd|qS )Nr   z	--{0}={1}z--{0})ra   r-   )r>   r*  valuer   r   r   r1    s    z'build_node_from_src.<locals>.<listcomp>majorr   r^   python2zbPython >=3.0 virtualenv detected, but no python2 command (required for building node.js) was foundz$ * Temporarily pointing python to %stmpbinpythonlnz-sz{}:{}PATHrU   z./configurez--prefix=%sr   r   r   Tr]   r   r   z install)rc   ziprr   r   version_inforO  whichr   r   rM   rB   r   r   r    r"   r   r-   r   r+   _quoterL   r   rN   r   r5   r   r   )r   r9  node_src_dirrn   rZ   make_param_namesmake_param_values	make_optspython2_pathnode_tmpbin_dirnode_tmpbin_linkconf_cmdmake_cmdr   rg  r   build_node_from_src  sN   







r|  c                 C   s.   z	t | || W dS  ty   td  w )z`
    Download source code for node.js, unpack it
    and install it in virtual environment.
    rU   N)install_node_wrappedBaseExceptionr   r   )r   r9  rn   r   r   r   install_node  s   
r  c                 C   s  t | } t|td|j }|jrdnd}tjd||jf tddd |jr-t|j}nt	|j}t
j|sazt||| W n  tjy`   d|v rWt|dd	|| ntd
|  Y nw tjdtddd |jrvt| ||j nt| ||| td d S )Nznode-v%srO   sourcez * Install %s node (%s) Tr   r   r  r  zFailed to download from %sr]   z done.)abspathrB   r   r   rO   r   r   r   r  r  r   r    r"   r@  rB  	HTTPErrorrV   r"  rd  r|  )r   r9  rn   rs  src_typer#  r   r   r   r}    s2   
r}  c              
   C   s   t jd|j tddd ttj|jrdnd|jd}tjdd	d
	t
t| dd|jf|tjtjtjd}| \}}|jrDt | t d dS )\
    Download source code for npm, unpack it
    and install it in virtual environment.
     * Install npm.js (%s) ... Tr   r   noyes)cleannpm_installbashr   z. {0} && npm install -g npm@{1}r\  activate)rZ   r   ri   r   r   N)r   r   rI   r   r   r   r   rj   rk   r-   rr  rB   rl   r   rm   r5   )r   _src_dirrn   rZ   r   rW   r   r   r   r   install_npm%  s0   
r  c                 C   s  t jd|j tddd d|j }tt| }t| d}t|dd}t	j
|r1t| t	j
t|d	rBt	t|d	 t	j
t|d
rSt	t|d
 t|d}|| W d   n1 siw   Y  d|j }tt||| tt||dd	t|d	 tt||dd
t|d
 trtt|d
t| dd
 tt|dt| dd d}	d|	|j}
tt| ddt|
  dS dS )r  r  Tr   r   z*https://github.com/npm/cli/archive/v%s.zipr[  node_modulesrI   znpm.cmdz
npm-cli.jsr   Nzcli-%sr\  z)https://raw.githubusercontent.com/npm/cliz{}/{}/bin/npm)r   r   rI   r   r  r  r   r#   rB   r   r    r"   rO  rmtreeremover2  r3  r8  rP  r   r  r-   r   )r   r9  rn   npm_urlnpm_contentsbin_pathnode_modules_pathzipfnpm_ver
npm_gh_urlnpm_bin_urlr   r   r   install_npm_winD  sF   





r  c                 C   s   t jdtddd dd t|j D }t| dd}|jd	d
kr'|jn|jd }|jdks5|dkr>dt	| d }n
dt	| d d }|D ]}|sOqJt
|d|i g|jdd qJt d dS )z*
    Install node.js packages via npm
    z  * Install node.js packages ... Tr   r   c                 S   s   g | ]}|  qS r   )r2   )r>   packager   r   r   r1  t  s    z$install_packages.<locals>.<listcomp>r\  r  r]   r^   z.0r   z1.0.0z. z && npm install -g %(pack)sz && npm install %(pack)sz && npm activate %(pack)spack)r   r   r   r   N)r   r   r   r0   r   r1   rB   rI   countrr  r   r5   )r   rn   packagesactivate_pathreal_npm_verr   r  r   r   r   install_packagesn  s4    


r  c                 C   s`  t rtttd}t| d}t|d}t|d}ntttd}t| d}t|d}t|d}tr3t	| |j
d	kr<t|d< td
d}|jpOdtjtj|  }|j
d	krtj }|dt|d |i dD ]}	tjd|	gtj|d \}
}t|
}|r nqh|sJ d| D ]r\}}t||}|d|}|dtj| }|d|}|dtj|}|d|}trtddtj|gddd\}}|d|d }n|dd}d}|jrt|d}t|d}|| | }t |}t!|||d qtj"|s.t r&ztd |dgd!d! W d#S  t#y%   t$%d" Y d#S w t&d| d#S d#S )$z7
    Install virtual environment activation script
    )zactivate.batzdeactivate.batzActivate.ps1r[  r^  z
nodejs.exe)r  activate.fishshimr\  r   nodejsrg   libr  z(%s)rn  )r  r   rq  )ri   rZ   z-Did not find nodejs or node system executable__NODE_VIRTUAL_PROMPT____NODE_VIRTUAL_ENV____SHIM_NODE____BIN_NAME____MOD_NAME__cygpathz-wF)r   r   __NPM_CONFIG_PREFIX__r   z$NODE_VIRTUAL_ENVrU   )r   mklinkTz'Error: Failed to create nodejs.exe linkN)'r   ACTIVATE_BATDEACTIVATE_BATACTIVATE_PS1rB   ACTIVATE_SHACTIVATE_FISHSHIMr  r   r   r   r   r    r.   r  r   r   r   r\   rj   rk   rl   rm   rX   r   rV   r   r   DISABLE_PROMPTr+   ENABLE_PROMPTr)   r   r"   r   r   r   rR  )r   rn   filesbin_dir	shim_nodeshim_nodejsmod_dirr   rZ   	candidatewhich_node_outputr   r*  r   	file_pathcyg_bin_dirneed_appenddisable_promptenable_promptr   r   r   install_activate  s   











r  c                 C   sJ   t s#tt| ddd}|t W d    d S 1 sw   Y  d S d S )Nr\  predeactivatea)r   r0   rB   rt   PREDEACTIVATE_SH)r   hookr   r   r   set_predeactivate_hook  s
   "r  c                 C   s   t j| r|jstd|  |jstd t	t
t| d}t| |jdkr0t| || ntt| d tt| d tt| dd t| | t|dk sT|jrbtsXtrZtnt}|| || |jrjt| | |jrqt|  |jr{t| d	S d	S )
z3
    Creates a new environment in ``env_dir``.
    z! * Environment already exists: %sr^   rU  rg   r\  r  r  )r      r   N)r   r    r"   r   r   r   r   r   exitr   r  rB   r   r   r  r  rp   rJ   r   r  r  r  r   r  r  r   rO  r  )r   rn   r9  instfuncr   r   r   create_environment  s,   



r  c                  C   s    t dt } t|  dS )Nz%s/index.jsonzUTF-8)r   r   jsonloadsr#   r   )responser   r   r   _get_versions_json  s   r  c                   C   s   dd t  D d d d S )Nc                 S   s   g | ]	}|d   dqS )r   r@   lstrip)r>   dctr   r   r   r1  	  s    z%get_node_versions.<locals>.<listcomp>)r  r   r   r   r   get_node_versions  s   r  c                     sB   t    fddtdt dD } | D ]
}td| qdS )z;
    Prints into stdout all available node.js versions
    c                    s   g | ]
} ||d   qS )   r   )r>   posversionsr   r   r1    s    z'print_node_versions.<locals>.<listcomp>r   r  	N)r  rangera   r   r   rB   )chunks_of_8chunkr   r  r   print_node_versions  s   
r  c                   C   s   t  d d dS )z,
    Return last stable node.js version
    r   r   r@   )r  r  r   r   r   r   get_last_stable_node_version  s   r  c                   C   s   t dd t D dS )z7
    Return the last node.js version marked as LTS
    c                 s   s&    | ]}|d  r|d  dV  qdS )ltsr   r@   Nr  )r>   r@   r   r   r   rA   #  s    z,get_last_lts_node_version.<locals>.<genexpr>N)nextr  r   r   r   r   get_last_lts_node_version  s
   r  c                 C   s   | j r;ttdrtj}t|S ttdr!tjtjkr!tj}t|S dtjv r-tj}t|S td t	d t|S | j
}t|S )Nreal_prefixbase_prefixCONDA_PREFIXz!No python virtualenv is availabler^   )r   hasattrr   prefixr  r   r   r   r   r  r   r   )rn   resr   r   r   get_env_dir'  s   




r  c                  C   s   dt jv rt  dS tdd} t| j| j t } | j	 dkr-t
r-td td | jad}| jrBd| jv r>| jan| j}nt sHt rKd	}nd
}tdu rUd| a| jr_| j	 dkrdt | _n| j	 dkrot | _| jrwt  dS | jrt| }t||  dS t| }t||  dS )z
    Entry point
    z--dump-config-defaultsNF)r   rg   z4Installing system node.js on win32 is not supported!r   z://zunofficial-builds.nodejs.orgz
nodejs.orgzhttps://%s/download/releaser   r  )r   argvr   rD   r   r<   r   r5   r   r  r   r   r   r  rP   rQ   r   r   r  r  r  r   r  r   r  r  r  )rn   
src_domainr   r   r   r   main8  s>   





r  z
# disable nodeenv's prompt
# (prompt already changed by original virtualenv's script)
# https://github.com/ekalinin/nodeenv/issues/26
NODE_VIRTUAL_ENV_DISABLE_PROMPT=1
z
# disable nodeenv's prompt
# (prompt already changed by original virtualenv's script)
# https://github.com/ekalinin/nodeenv/issues/26
set NODE_VIRTUAL_ENV_DISABLE_PROMPT 1
)r  r  z'
unset NODE_VIRTUAL_ENV_DISABLE_PROMPT
z(
set -e NODE_VIRTUAL_ENV_DISABLE_PROMPT
z#!/usr/bin/env bash
export NODE_PATH='__NODE_VIRTUAL_ENV__/lib/node_modules'
export NPM_CONFIG_PREFIX='__NODE_VIRTUAL_ENV__'
export npm_config_prefix='__NODE_VIRTUAL_ENV__'
exec '__SHIM_NODE__' "$@"
aQ  
@echo off
set "NODE_VIRTUAL_ENV=__NODE_VIRTUAL_ENV__"
if not defined PROMPT (
    set "PROMPT=$P$G"
)
if defined _OLD_VIRTUAL_PROMPT (
    set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
)
if defined _OLD_VIRTUAL_NODE_PATH (
    set "NODE_PATH=%_OLD_VIRTUAL_NODE_PATH%"
)
set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
set "PROMPT=__NODE_VIRTUAL_PROMPT__ %PROMPT%"
if defined NODE_PATH (
    set "_OLD_VIRTUAL_NODE_PATH=%NODE_PATH%"
    set NODE_PATH=
)
if defined _OLD_VIRTUAL_PATH (
    set "PATH=%_OLD_VIRTUAL_PATH%"
) else (
    set "_OLD_VIRTUAL_PATH=%PATH%"
)
set "PATH=%NODE_VIRTUAL_ENV%\Scripts;%PATH%"
:END

aV  @echo off
if defined _OLD_VIRTUAL_PROMPT (
    set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
)
set _OLD_VIRTUAL_PROMPT=
if defined _OLD_VIRTUAL_NODE_PATH (
    set "NODE_PATH=%_OLD_VIRTUAL_NODE_PATH%"
    set _OLD_VIRTUAL_NODE_PATH=
)
if defined _OLD_VIRTUAL_PATH (
    set "PATH=%_OLD_VIRTUAL_PATH%"
)
set _OLD_VIRTUAL_PATH=
set NODE_VIRTUAL_ENV=
:END
aj  
function global:deactivate ([switch]$NonDestructive) {
    # Revert to original values
    if (Test-Path function:_OLD_VIRTUAL_PROMPT) {
        copy-item function:_OLD_VIRTUAL_PROMPT function:prompt
        remove-item function:_OLD_VIRTUAL_PROMPT
    }
    if (Test-Path env:_OLD_VIRTUAL_NODE_PATH) {
        copy-item env:_OLD_VIRTUAL_NODE_PATH env:NODE_PATH
        remove-item env:_OLD_VIRTUAL_NODE_PATH
    }
    if (Test-Path env:_OLD_VIRTUAL_PATH) {
        copy-item env:_OLD_VIRTUAL_PATH env:PATH
        remove-item env:_OLD_VIRTUAL_PATH
    }
    if (Test-Path env:NODE_VIRTUAL_ENV) {
        remove-item env:NODE_VIRTUAL_ENV
    }
    if (!$NonDestructive) {
        # Self destruct!
        remove-item function:deactivate
    }
}

deactivate -nondestructive
$env:NODE_VIRTUAL_ENV="__NODE_VIRTUAL_ENV__"

# Set the prompt to include the env name
# Make sure _OLD_VIRTUAL_PROMPT is global
function global:_OLD_VIRTUAL_PROMPT {""}
copy-item function:prompt function:_OLD_VIRTUAL_PROMPT
function global:prompt {
    Write-Host -NoNewline -ForegroundColor Green '__NODE_VIRTUAL_PROMPT__ '
    _OLD_VIRTUAL_PROMPT
}

# Clear NODE_PATH
if (Test-Path env:NODE_PATH) {
    copy-item env:NODE_PATH env:_OLD_VIRTUAL_NODE_PATH
    remove-item env:NODE_PATH
}

# Add the venv to the PATH
copy-item env:PATH env:_OLD_VIRTUAL_PATH
$env:PATH = "$env:NODE_VIRTUAL_ENV\Scripts;$env:PATH"
a  

# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly

deactivate_node () {
    # reset old environment variables
    if [ -n "${_OLD_NODE_VIRTUAL_PATH:-}" ] ; then
        PATH="${_OLD_NODE_VIRTUAL_PATH:-}"
        export PATH
        unset _OLD_NODE_VIRTUAL_PATH

        NODE_PATH="${_OLD_NODE_PATH:-}"
        export NODE_PATH
        unset _OLD_NODE_PATH

        NPM_CONFIG_PREFIX="${_OLD_NPM_CONFIG_PREFIX:-}"
        npm_config_prefix="${_OLD_npm_config_prefix:-}"
        export NPM_CONFIG_PREFIX
        export npm_config_prefix
        unset _OLD_NPM_CONFIG_PREFIX
        unset _OLD_npm_config_prefix
    fi

    # This should detect bash and zsh, which have a hash command that must
    # be called to get it to forget past commands.  Without forgetting
    # past commands the $PATH changes we made may not be respected
    if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
        hash -r
    fi

    if [ -n "${_OLD_NODE_VIRTUAL_PS1:-}" ] ; then
        PS1="${_OLD_NODE_VIRTUAL_PS1:-}"
        export PS1
        unset _OLD_NODE_VIRTUAL_PS1
    fi

    unset NODE_VIRTUAL_ENV
    if [ ! "${1:-}" = "nondestructive" ] ; then
    # Self destruct!
        unset -f deactivate_node
    fi
}

freeze () {
    local NPM_VER=`npm -v | cut -d '.' -f 1`
    local re="[a-zA-Z0-9\.\-]+@[0-9]+\.[0-9]+\.[0-9]+([\+\-][a-zA-Z0-9\.\-]+)*"
    if [ "$NPM_VER" = '0' ]; then
        NPM_LIST=`npm list installed active 2>/dev/null | \
                  cut -d ' ' -f 1 | grep -v npm`
    else
        local npmls="npm ls -g"
        if [ "${1:-}" = "-l" ]; then
            npmls="npm ls"
            shift
        fi
        NPM_LIST=$(eval ${npmls} | grep -E '^.{4}\w{1}'| \
                                   grep -o -E "$re"| grep -v npm)
    fi

    if [ -z "$@" ]; then
        echo "$NPM_LIST"
    else
        echo "$NPM_LIST" > $@
    fi
}

# unset irrelevant variables
deactivate_node nondestructive

# find the directory of this script
# http://stackoverflow.com/a/246128
if [ "${BASH_SOURCE:-}" ] ; then
    SOURCE="${BASH_SOURCE[0]}"

    while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
    DIR="$( command cd -P "$( dirname "$SOURCE" )" > /dev/null && pwd )"

    NODE_VIRTUAL_ENV="$(dirname "$DIR")"
else
    # dash not movable. fix use case:
    #   dash -c " . node-env/bin/activate && node -v"
    NODE_VIRTUAL_ENV="__NODE_VIRTUAL_ENV__"
fi

# NODE_VIRTUAL_ENV is the parent of the directory where this script is
export NODE_VIRTUAL_ENV

_OLD_NODE_VIRTUAL_PATH="$PATH"
PATH="$NODE_VIRTUAL_ENV/lib/node_modules/.bin:$NODE_VIRTUAL_ENV/__BIN_NAME__:$PATH"
export PATH

_OLD_NODE_PATH="${NODE_PATH:-}"
NODE_PATH="$NODE_VIRTUAL_ENV/__MOD_NAME__"
export NODE_PATH

_OLD_NPM_CONFIG_PREFIX="${NPM_CONFIG_PREFIX:-}"
_OLD_npm_config_prefix="${npm_config_prefix:-}"
NPM_CONFIG_PREFIX="__NPM_CONFIG_PREFIX__"
npm_config_prefix="__NPM_CONFIG_PREFIX__"
export NPM_CONFIG_PREFIX
export npm_config_prefix

if [ -z "${NODE_VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
    _OLD_NODE_VIRTUAL_PS1="${PS1:-}"
    if [ "x__NODE_VIRTUAL_PROMPT__" != x ] ; then
        PS1="__NODE_VIRTUAL_PROMPT__ ${PS1:-}"
    else
    if [ "`basename \"$NODE_VIRTUAL_ENV\"`" = "__" ] ; then
        # special case for Aspen magic directories
        # see http://www.zetadev.com/software/aspen/
        PS1="[`basename \`dirname \"$NODE_VIRTUAL_ENV\"\``] ${PS1:-}"
    else
        PS1="(`basename \"$NODE_VIRTUAL_ENV\"`) ${PS1:-}"
    fi
    fi
    export PS1
fi

# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands.  Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
    hash -r
fi
a  

# This file must be used with "source bin/activate.fish" *from fish*
# you cannot run it directly

function deactivate_node -d 'Exit nodeenv and return to normal environment.'
    # reset old environment variables
    if test -n "$_OLD_NODE_VIRTUAL_PATH"
        set -gx PATH $_OLD_NODE_VIRTUAL_PATH
        set -e _OLD_NODE_VIRTUAL_PATH
    end

    if test -n "$_OLD_NODE_PATH"
        set -gx NODE_PATH $_OLD_NODE_PATH
        set -e _OLD_NODE_PATH
    else
        set -e NODE_PATH
    end

    if test -n "$_OLD_NPM_CONFIG_PREFIX"
        set -gx NPM_CONFIG_PREFIX $_OLD_NPM_CONFIG_PREFIX
        set -e _OLD_NPM_CONFIG_PREFIX
    else
        set -e NPM_CONFIG_PREFIX
    end

    if test -n "$_OLD_npm_config_prefix"
        set -gx npm_config_prefix $_OLD_npm_config_prefix
        set -e _OLD_npm_config_prefix
    else
        set -e npm_config_prefix
    end

    if test -n "$_OLD_NODE_FISH_PROMPT_OVERRIDE"
        # Set an empty local `$fish_function_path` to allow the removal of
        # `fish_prompt` using `functions -e`.
        set -l fish_function_path

        # Prevents error when using nested fish instances
        if functions -q _node_old_fish_prompt
            # Erase virtualenv's `fish_prompt` and restore the original.
            functions -e fish_prompt
            functions -c _node_old_fish_prompt fish_prompt
            functions -e _node_old_fish_prompt
        end
        set -e _OLD_NODE_FISH_PROMPT_OVERRIDE
    end

    set -e NODE_VIRTUAL_ENV

    if test (count $argv) = 0 -o "$argv[1]" != "nondestructive"
        # Self destruct!
        functions -e deactivate_node
    end
end

function freeze -d 'Show a list of installed packages - like `pip freeze`'
    set -l NPM_VER (npm -v | cut -d '.' -f 1)
    set -l RE "[a-zA-Z0-9\.\-]+@[0-9]+\.[0-9]+\.[0-9]+([\+\-][a-zA-Z0-9\.\-]+)*"

    if test "$NPM_VER" = "0"
        set -g NPM_LIST (npm list installed active >/dev/null ^/dev/null |                          cut -d ' ' -f 1 | grep -v npm)
    else
        set -l NPM_LS "npm ls -g"
        if test (count $argv) -gt 0 -a "$argv[1]" = "-l"
            set NPM_LS "npm ls"
            set -e argv[1]
        end
        set -l NPM_LIST (eval $NPM_LS | grep -E '^.{4}\w{1}' |                                         grep -o -E "$re" |                                         grep -v npm)
    end

    if test (count $argv) = 0
        echo $NPM_LIST
    else
        echo $NPM_LIST > $argv[1]
    end
end

# unset irrelevant variables
deactivate_node nondestructive

# find the directory of this script
begin
    set -l SOURCE (status filename)
    while test -L "$SOURCE"
        set SOURCE (readlink "$SOURCE")
    end
    set -l DIR (dirname (realpath "$SOURCE"))

    # NODE_VIRTUAL_ENV is the parent of the directory where this script is
    set -gx NODE_VIRTUAL_ENV (dirname "$DIR")
end

set -gx _OLD_NODE_VIRTUAL_PATH $PATH
# The node_modules/.bin path doesn't exists and it will print a warning, and
# that's why we redirect stderr to /dev/null :)
set -gx PATH "$NODE_VIRTUAL_ENV/lib/node_modules/.bin" "$NODE_VIRTUAL_ENV/__BIN_NAME__" $PATH ^/dev/null

if set -q NODE_PATH
    set -gx _OLD_NODE_PATH $NODE_PATH
    set -gx NODE_PATH "$NODE_VIRTUAL_ENV/__MOD_NAME__" $NODE_PATH
else
    set -gx NODE_PATH "$NODE_VIRTUAL_ENV/__MOD_NAME__"
end

if set -q NPM_CONFIG_PREFIX
    set -gx _OLD_NPM_CONFIG_PREFIX $NPM_CONFIG_PREFIX
end
set -gx NPM_CONFIG_PREFIX "__NPM_CONFIG_PREFIX__"

if set -q npm_config_prefix
    set -gx _OLD_npm_config_prefix $npm_config_prefix
end
set -gx npm_config_prefix "__NPM_CONFIG_PREFIX__"

if test -z "$NODE_VIRTUAL_ENV_DISABLE_PROMPT"
    # Copy the current `fish_prompt` function as `_node_old_fish_prompt`.
    functions -c fish_prompt _node_old_fish_prompt

    function fish_prompt
        # Save the current $status, for fish_prompts that display it.
        set -l old_status $status

        # Prompt override provided?
        # If not, just prepend the environment name.
        if test -n "__NODE_VIRTUAL_PROMPT__"
            printf '%s%s ' "__NODE_VIRTUAL_PROMPT__" (set_color normal)
        else
            printf '%s(%s) ' (set_color normal) (basename "$NODE_VIRTUAL_ENV")
        end

        # Restore the original $status
        echo "exit $old_status" | source
        _node_old_fish_prompt
    end

    set -gx _OLD_NODE_FISH_PROMPT_OVERRIDE "$NODE_VIRTUAL_ENV"
end
zA
if type -p deactivate_node > /dev/null; then deactivate_node;fi
z#!/bin/sh

if [ -r "$1" ]; then
    SCRIPT_PATH=$(cygpath -w "$1")
    shift
    set - $SCRIPT_PATH $@
    unset SCRIPT_PATH
fi

exec $(dirname "$0")/node.exe "$@"
__main__)T)TF)TFNN)r   )FN)irH   
contextlibr  r  r   r   r+  rD  r   r|   r4  r   rj   r  rp  pipesr   rr  shlexr   r2  rO  r   r`  r   r   rB  r5  r   httplibr!  ImportErrorconfigparserurllib.requestrequesthttpclientr   r    rB   r  r   r   rg   r   r&   r  rP   r   objectr   r   r%   _defaultrX   r\   rf   rp   r   r   r   r   r   r   r   r   r   r   r  r  r  contextmanagerr  r%  r@  r   rP  rd  r|  r  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r_  rE   r   r   r   r   <module>   s   	



B

 

%
E!

	
4#*S!9	/  

