B
    a`                 @   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ddlZddlZddlZddlZddlZddlZy0ddlmZ ddlZe
dZddlZejZW nH ek
r   ddlmZ ddlmZ e
dZddlZej jZY nX ddl!m"Z" 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 Z/G dd de0Z1e2dd ee3e1D e1_4dd Z5dd Z6dd Z7dd Z8e8 Z9dfddZ:dd Z;d d! Z<dgd"d#Z=dhd$d%Z>d&d' Z?d(d) Z@d*d+ ZAd,d- ZBejCd.d/ ZDd0d1 ZEd2d3 ZFdid4d5ZGd6d7 ZHd8d9 ZId:d; ZJd<d= ZKd>d? ZLd@dA ZMdBdC ZNdDdE ZOdFdG ZPdHdI ZQdJdK ZRdLdM ZSdNdO ZTdPdQ ZUdRdS ZVdTdU ZWdVdW ZXdXdYdZZYd[d\dZZZd]Z[d^Z\d_Z]d`Z^daZ_dbZ`dcZaddZbecdekreX  dS )jz
    nodeenv
    ~~~~~~~
    Node.js virtual environment

    :copyright: (c) 2014 by Eugene Kalinin
    :license: BSD, see LICENSE for more details.
    N)SafeConfigParser	iteritems)ConfigParseritems)parse_versionz1.6.0   Windows)ZCYGWINZMSYSFc             C   sz   | rt r| S y
| dS  tk
rt   y| d | S  tk
rn   y| ddS  tk
rh   Y nX Y nX Y nX | S )z:Convert given text to UTF-8 encoding (as far as possible).utf8cp1252)is_PY3encodeUnicodeDecodeErrordecode)text r   +/tmp/pip-unpacked-wheel-k8j2m_3d/nodeenv.pyto_utf8C   s    

r   c               @   sR   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edddZed	d
 ZdS )Configz"
    Configuration namespace.
    latestF2makeTc             C   s   xt |D ]}tj|}tj|s(q
t }|| d}||sHq
x~tt	| D ]n\}}|
dsV|||svqVt|tr|||}n|||}|rtdtj||| t| || qVW q
W dS )z
        Load configuration from the given files in reverse order,
        if they exist and have a [nodeenv] section.
        nodeenv_zCONFIG {0}: {1} = {2}N)reversedospath
expanduserexistsr   readhas_sectionr   vars
startswith
has_option
isinstancebool
getbooleangetprintformatbasenamesetattr)clsZconfigfilesverboseZ
configfileZini_filesectionattrvalr   r   r   _loadh   s(    



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    )r+   r   r   r   _dump   s    zConfig._dumpN)F)__name__
__module____qualname____doc__nodenpmwith_npmjobswithout_ssldebugprofiler   prebuiltignore_ssl_certsclassmethodr0   r7   r   r   r   r   r   W   s   r   c             c   s$   | ]\}}| d s||fV  qdS )r   N)r!   )r1   r.   r/   r   r   r   r4      s    r4   c             C   s   |  dddS )z
    Remove new-lines and
    zutf-8
 )r   replace)outr   r   r   clear_output   s    rJ   c             C   s   |  |d dS )zC
    Remove bin directory of the current environment from PATH
    :rG   )rH   )envZenv_bin_dirr   r   r   remove_env_bin_from_path   s    rM   c             C   sD   | j dkr:tjddgtjd \}}tt|ddS t| j S )z:
    Parse the node version from the optparse options
    systemr<   z	--version)stdoutr3   rG   )r<   
subprocessPopenPIPEcommunicater   rJ   rH   )optrI   errr   r   r   node_version_from_opt   s
    
rV   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StreamHandlerr`   DEBUG	FormattersetFormatter
addHandler)Zloggrr`   ch	formatterr   r   r   create_logger   s    


rm   Tc             C   s  t jtdd}|jddddtjdd |jd	d
ddd ts|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,d-dd.d/d0d1 |jd2d3dd4d/d5d1 |jd6d7d8d9d:d |jd;d<d=d>d?d@dA |jdBdCdDd |jdEdFdGdd/dHd |jdIdJdd/dKd |jdLdMdtjdNd |jdOdPdQtjdRd |jdSdTdd/dUd |jdVdWdXdd/dYd |jdZd[d\dd/d]d |jd^d_dd/d`d |jdad)dtjdbd |jdcdddtjded | \}}|jd9kr4dfdgdhg|_n<|jsDg |_n,tj|jsf|di|j |jg|_| s~||fS |js|js|s|dj t|dkkr|dldm| ||fS )nz]
    Parses command line arguments.

    Set `check` to False to skip validation checks.
    z%prog [OPTIONS] ENV_DIR)versionusagez-nz--noder<   Z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storemirrorz1Set mirror server of nodejs.org to download from.)actionrp   rs   z-jz--jobsr?   zOSets number of parallel commands at node.js compilation. The default is 2 jobs.)rp   rr   rs   z--load-averageZload_averagezQSets maximum load average for executing parallel commands at node.js compilation.)rp   rs   z--without-sslr@   
store_truez!Build node.js without SSL support)rp   rv   rr   rs   z--debugrA   z"Build debug variant of the node.jsz	--profilerB   zEnable profiling for node.jsz--makez-m	make_pathZ	MAKE_PATHzPath to make command)rp   rq   rs   rr   z--sourcerC   store_falsezInstall node.js from the sourcez-vz	--verboser,   FzVerbose mode)rv   rp   rr   rs   z-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requirementsrG   ZFILENAMEz?Install all the packages listed in the given requirements file.)rp   rr   rq   rs   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-npmr>   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--npmr=   Z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-srcz-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_certsrD   z5Ignore certificates for package downloads. - UNSAFE -z	./tox.iniz./setup.cfgz~/.nodeenvrcz Config file '{0}' doesn't exist!z<You must provide a DEST_DIR or use current python virtualenv   z9There must be only one argument: DEST_DIR (you gave: {0}) )optparseOptionParsernodeenv_version
add_optionr   r<   is_WINr?   r@   rA   rB   r   rC   r>   r=   rD   
parse_argsr{   r   r   r   errorr(   r~   r   lenr5   )checkparseroptionsargsr   r   r   r      s    




r   c             C   sH   t j| s8tjd| tddd t |  td ntd|  dS )z
    Create directory
    z * Creating: %s ... T)rW   )extrazdone.z * Directory %s already existsN)r   r   r   loggerrA   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)filenameZ	mode_0755r   r   r   make_executable  s    r   c          	   C   s(  t |}tr"t|tkr"t|d}tj| sztjd| t	ddd t
| d}|| W dQ R X t|  td dS t
| d	}| }W dQ R X ||krtd
|  dS |std|  dS |rtd|  t
| d}|| W dQ R X dS td|  t
| d}|| W dQ R X dS )z-
    Create file and write content in it
    zutf-8z * Writing %s ... T)rW   )r   wbNzdone.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   typebytesr   r   r   r   rA   r   openrZ   r   r   info)rp   content	overwriteappendfcr   r   r   	writefile  s6    

r   c          	   C   s  g }g }xn| D ]f}t |dkr:|dd d |dd  }d|ksZd|ksZd|ksZd	|krjd
|dd }|| qW d|}td|  |rd| } tj}	|rtj	
 }
|r|
| nd}
ytj| tjd|	||
|d}W n6 tk
r   t d }td||f   Y nX |j}	x|	r|	 }|s:P y(trR|d }n|d }W n$ tk
r   |d }Y nX || |r$t| q$W |  |jr|rx|D ]}t| qW td||jf |j|fS )z'
    Execute cmd line in sub-shell
    -   N   z...ir   rF   "'z"%s"z\"z ** Running command %s)stderrstdinrO   cwdrL   shellr   z#Error %s while executing command %smbcsr	   cp866z$Command %s failed with error code %s)r   rH   r   r5   r   rA   rP   rR   r   environcopyr   rQ   STDOUT	Exceptionsysexc_infor   rO   readliner   r   rstripr   r   wait
returncodecriticalOSError)cmdshow_stdoutin_shellr   Z	extra_env
all_outputZ	cmd_partspartZcmd_descrO   rL   procelinesr   r   r   callit  s`    
 





r   c             C   s$   t | t dkrdt| f S tS d S )Nz0.5.0z%s/v%s/)r   src_base_url)rn   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|   dddddddddddddddd}t   |t   d	}tsFtrPd
| }nt r\d}nd| }d| |f }t| | S )Nx86Zx64armv6larmv7larm64ppc64les390x)r   i686x86_64amd64ZAMD64r   r   Zarmv8laarch64r   zarm64/v8Zarmv8zarmv8.4r   r   )rN   archz-win-%(arch)s.zipz-linux-x64-musl.tar.gzz-%(system)s-%(arch)s.tar.gzz
node-v%s%s)platformrN   lowermachiner   	is_CYGWINr   r   )rn   ZarchmapZsysinfoZpostfixr   r   r   r   get_node_bin_url  s0    

r   c             C   s   d|  }t | | S )Nznode-v%s.tar.gz)r   )rn   tar_namer   r   r   get_node_src_url%  s    r   c              o   s&   t j| |}z
|V  W d|  X dS )z!Compatibility layer because py26.N)tarfiler   close)r   kwargstfr   r   r   tarfile_open*  s    
r   c       
   
      s  t jdtddd ytt|  }W n8 tk
rb } zt d	|  |j
}W dd}~X Y nX t jdtddd tstrt|}td}dd	  nt|d
}td}td |>}t|j}d|  fdd||D }	|||	 W dQ R X dS )z
    Download source code
    .T)rW   )r   z$Incomplete read while readingfrom {}Nnamelistc             S   s   | S )Nr   )r   r   r   r   <lambda>D      z#download_node_src.<locals>.<lambda>)fileobj
getmembersnamez0node-v%s[^/]*/(README\.md|CHANGELOG\.md|LICENSE)c                s$   g | ]}t  |d kr|qS )N)rematch)r1   member)member_namerexp_stringr   r   
<listcomp>O  s   z%download_node_src.<locals>.<listcomp>)r   r   r   ioBytesIOurlopenr   IncompleteReadwarningr(   partialr   r   zipfileZipFileoperatormethodcallerr   
attrgetterr   escaper<   
extractall)
node_urlsrc_dirrT   Zdl_contentsr   ctxmembersarchiveZnode_verZextract_listr   )r   r   r   download_node_src4  s,    





r	  c             C   sN   d}ddt |f i}t| d |}trDt }tj|_tj||dS t|S )Nz$https://github.com/ekalinin/nodeenv/z
User-Agentznodeenv/%s (%s))context)	r   urllib2RequestrD   ssl
SSLContext	CERT_NONEverify_moder   )urlZhome_urlheadersreqr
  r   r   r   r   V  s    r   c          	   C   s   xt | D ]}t j| |}t j||}t j|rryt|||| W q tk
rn   t|||| Y qX qt j|rt j|st 	t 
|| qt|| qW d S )N)r   listdirr   r5   isdirshutilcopytreer   islinksymlinkreadlinkcopy2)srcdstsymlinksignoreitemr   dr   r   r   r  d  s    r  c             C   s   t jdtddd tr,t| d}t| n.trVt| d}t| tt| ddt n| }|t	d|  }t

|\}t||d trx,d	D ]$}t| d|}tj|rt| qW t jdtddd d
S )z1
    Copy prebuilt binaries into environment
    r   T)rW   )r   Scriptsbinr<   z
/node-v%s*)r=   Znpxznode.exeN)r   r   r   r   r5   r   r   r   CYGWIN_NODEr   globr  r   r   r   r   )env_dirr  Znode_versionrp   Zsrc_folder_tplZ
src_folderr   r   r   r   copy_node_from_prebuiltv  s$    



r'  c          	      s  i }ddg}t  fdd|}dd t||D }ttjdtjd d	kry&td
dg jd||\}}	|	d }
W n  ttfk
r   tdY nX t	
d|
 t|d}t|d}t| tj|stdd|
|g d|tjdd|d< ddt|  g} jr|d  j
r&|d  jr8|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-averager?   c                s   t  | ddS )N-r   )rX   rH   )x)rT   r   r   r     r   z%build_node_from_src.<locals>.<lambda>c             S   s:   g | ]2\}}|d k	rt |dkr,d||nd|qS )Nr   z	--{0}={1}z--{0})r   r(   )r1   r   valuer   r   r   r     s   z'build_node_from_src.<locals>.<listcomp>majorr      whichZpython2TzbPython >=3.0 virtualenv detected, but no python2 command (required for building node.js) was foundz$ * Temporarily pointing python to %sZtmpbinpythonlnz-sz{}:{}PATHrG   z./configurez--prefix=%sz--without-sslz--debugz	--profiler   )rW   )r   z install)mapziprX   r   version_infor   r,   r   
IndexErrorr   rA   r5   r   r   r   r   r(   r   r&   pipesquoter@   r   rB   rx   r   r   )r&  r  node_src_dirrT   rL   Zmake_param_namesZmake_param_valuesZ	make_optsr   Zwhich_python2_outputZpython2_pathZnode_tmpbin_dirZnode_tmpbin_linkZconf_cmdZmake_cmdr   )rT   r   build_node_from_src  sJ    





r8  c             C   s6   yt | || W n  tk
r0   td  Y nX dS )z`
    Download source code for node.js, unpack it
    and install it in virtual environment.
    rG   N)install_node_wrappedBaseExceptionr   r   )r&  r  rT   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rZt|j}n
t	|j}t
j|s|t||| tjdtddd |jrt| ||j nt| ||| td	 d S )
Nznode-v%srC   sourcez * Install %s node (%s) T)rW   )r   r   z done.)abspathr5   r   r<   rC   r   r   r   r   r   r   r   r   r	  r'  r8  )r&  r  rT   r7  Zsrc_typer  r   r   r   r9    s    
r9  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rt | t d dS )z\
    Download source code for npm, unpack it
    and install it in virtual environment.
    z * Install npm.js (%s) ... T)rW   )r   noyes)cleanZnpm_installZbashz-cz. {0} && npm install -g npm@{1}r#  activate)rL   r   rO   r   zdone.N)r   r   r=   r   r   r   r   rP   rQ   r(   r5  r6  r5   rR   r   rS   r,   )r&  Z_src_dirrT   rL   r   rI   r   r   r   r   install_npm  s&    


rB  c          	   C   s  t jd|j tddd d|j }tt| }t| d}t|dd}t	j
|rbt| t	j
t|d	rt	t|d	 t	j
t|d
rt	t|d
 t|d}|| W dQ R X 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 )z\
    Download source code for npm, unpack it
    and install it in virtual environment.
    z * Install npm.js (%s) ... T)rW   )r   z*https://github.com/npm/cli/archive/v%s.zipr"  node_modulesr=   znpm.cmdz
npm-cli.jsrNzcli-%sr#  z)https://raw.githubusercontent.com/npm/cliz{}/{}/bin/npm)r   r   r=   r   r   r   r   r   r5   r   r   r   r  rmtreeremover   r   r  r  r   r   r(   r   )r&  r  rT   Znpm_urlZnpm_contentsZbin_pathZnode_modules_pathZzipfZnpm_verZ
npm_gh_urlZnpm_bin_urlr   r   r   install_npm_win  s8    



rG  c             C   s   t jdtddd dd t|j D }t| dd}|jd	d
krN|jn|jd }|jdksj|dkr~dt	
| d }ndt	
| d d }x,|D ]$}|sqt|d|i g|jdd qW t d dS )z*
    Install node.js packages via npm
    z  * Install node.js packages ... T)rW   )r   c             S   s   g | ]}|  qS r   )strip)r1   packager   r   r   r   B  s    z$install_packages.<locals>.<listcomp>r#  rA  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   zdone.N)r   r   r   r   r|   	readlinesr5   r=   countr5  r6  r   r,   )r&  rT   packagesZactivate_pathZreal_npm_verr   rI  r   r   r   install_packages<  s"     
rN  c             C   sl  t r0tttd}t| d}t|d}t|d}n*tttd}t| d}t|d}t|d}trft	| |j
d	krxt|d< td
d}|jpdtjtj|  }|j
d	krtj }|dt|d |i x8dD ]0}	tjd|	gtj|d \}
}t|
}|rP qW |stdx| D ]\}}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 q W tj#|sht r\ytd |dgd!d! W n  t$k
rX   t%&d" Y nX nt'd| d#S )$z7
    Install virtual environment activation script
    )zactivate.batzdeactivate.batzActivate.ps1r"  znode.exez
nodejs.exe)rA  zactivate.fishZshimr#  r<   nodejsrN   librC  z(%s)r0  )rO  r<   r-  )rO   rL   z-Did not find nodejs or node system executableZ__NODE_VIRTUAL_PROMPT__Z__NODE_VIRTUAL_ENV__Z__SHIM_NODE__Z__BIN_NAME__Z__MOD_NAME__Zcygpathz-wF)r   r   Z__NPM_CONFIG_PREFIX__r   z$NODE_VIRTUAL_ENVrG   )r   ZmklinkTz'Error: Failed to create nodejs.exe linkN)(r   ACTIVATE_BATDEACTIVATE_BATACTIVATE_PS1r5   ACTIVATE_SHACTIVATE_FISHSHIMr   r   r<   r}   r   r   r)   r=  r   r   r   rM   rP   rQ   rR   rS   rJ   AssertionErrorr   rH   r   r   DISABLE_PROMPTr&   ENABLE_PROMPTr$   r   r   r   r   r   r  )r&  rT   filesbin_dirZ	shim_nodeZshim_nodejsZmod_dirr}   rL   	candidateZwhich_node_outputr   r   r   	file_pathZcyg_bin_dirZneed_appendZdisable_promptZenable_promptr   r   r   install_activateW  sv    









r^  c          	   C   s0   t s,tt| ddd}|t W d Q R X d S )Nr#  Zpredeactivatea)r   r   r5   rZ   PREDEACTIVATE_SH)r&  hookr   r   r   set_predeactivate_hook  s    rb  c             C   s   t j| r.|js.td|  |js.td t	t
t| d}t| |jdkr`t| || n,tt| d tt| d tt| dd t| | t|tdk s|jrtstrtnt}|| || |jrt| | |jrt|  |jrt| d	S )
z3
    Creates a new environment in ``env_dir``.
    z! * Environment already exists: %sr,  r  rN   r#  rP  rC  z0.6.3N)r   r   r   r   r   r   r   r   exitr   r=  r5   r   r<   r;  r^  rV   r   r>   r   r   rG  rB  r|   rN  rb  r   r  rE  )r&  rT   r  Zinstfuncr   r   r   create_environment  s*    



rd  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    rh  c               C   s   dd t  D d d d S )Nc             S   s   g | ]}|d   dqS )rn   r3   )lstrip)r1   dctr   r   r   r     s    z%get_node_versions.<locals>.<listcomp>)rh  r   r   r   r   get_node_versions  s    rl  c                 sF   t    fddtdt dD } x| D ]}td| q*W dS )z;
    Prints into stdout all available node.js versions
    c                s   g | ]} ||d   qS )   r   )r1   pos)versionsr   r   r     s    z'print_node_versions.<locals>.<listcomp>r   rm  	N)rl  ranger   r   r   r5   )Zchunks_of_8chunkr   )ro  r   print_node_versions  s    
rs  c               C   s   t  d d dS )z,
    Return last stable node.js version
    r   rn   r3   )rh  ri  r   r   r   r   get_last_stable_node_version  s    rt  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 )ltsrn   r3   N)ri  )r1   r3   r   r   r   r4     s    z,get_last_lts_node_version.<locals>.<genexpr>N)nextrh  r   r   r   r   get_last_lts_node_version  s    rw  c             C   sn   | j r^ttdrtj}qfttdr6tjtjkr6tj}qfdtjkrHtj}qftd t	d n|d }t
|S )Nreal_prefixbase_prefixZCONDA_PREFIXz!No python virtualenv is availabler,  r   )r   hasattrr   prefixry  r   r   r   r   rc  r   )rT   r   resr   r   r   get_env_dir  s    


r}  c              C   s$  dt jkrt  dS tdd\} }t| j| j t \} }| j	 dkrbt
rbtd td | jad}| jrd| jkr| jaq| j}nt rd	}nd
}tdkrd| a| jr| j	 dkrt | _n| j	 dkrt | _| jrt  n2| jrt| |}t||  nt| |}t||  dS )z
    Entry point
    z--dump-config-defaultsNF)r   rN   z4Installing system node.js on win32 is not supported!r   z://zunofficial-builds.nodejs.orgz
nodejs.orgzhttps://%s/download/releaser   ru  )r   argvr   r7   r   r0   r{   r,   r<   r   r   r   r   rc  rD   ru   r   r   rt  rw  r~   rs  r   r}  rN  rd  )rT   r   Z
src_domainr&  r   r   r   main  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
)rA  zactivate.fishz'
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"
ah  

# 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

        # Erase virtualenv's `fish_prompt` and restore the original.
        functions -e fish_prompt
        functions -c _old_fish_prompt fish_prompt
        functions -e _old_fish_prompt
        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 `_old_fish_prompt`.
    functions -c fish_prompt _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
        _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)FN)dr;   
contextlibr   re  r   r   r   r  r   rb   r   r   rP   r   r5  r   r   r  r   r%  r   r   r  r   r   httplibr   ImportErrorconfigparserurllib.requestrequesthttpclientpkg_resourcesr   r   r   r5   r=  r   r3  r   rN   r   r!   r   rD   r   objectr   r   r    _defaultrJ   rM   rV   rm   r   r   r   r   r   r   r   r   r   r   contextmanagerr   r	  r   r  r'  r8  r;  r9  rB  rG  rN  r^  rb  rd  rh  rl  rs  rt  rw  r}  r  rX  rY  rV  rQ  rR  rS  rT  rU  r`  r$  r8   r   r   r   r   <module>   s   


<
 )
% 
D 
"
8*S!>/ 
