Ë
    ÁvžjYi ã                   óˆ  — 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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ZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lm Z  ddl!m"Z"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC ddlDmEZE ddlFmGZGmHZH ddlImJZJmKZKmLZLmMZMmNZNmOZO  ej                   d«      ZQ e
j¤                   e
j¦                  eGd«      «      ZT e
j¦                  eTd«      ZUdZVdZW G d„ de5«      ZXd„ ZYd„ ZZd„ Z[d „ Z\d^d!„Z]d^d"„Z^d^d#„Z_d^d$„Z`d%„ Zad^d&„Zbd^d'„Zc G d(„ d)e=«      Zdd*„ Zed^d+„Zfd_d,„Zgd`d-„Zhdad.„Zid^d/„Zj	 	 	 	 	 	 	 	 dbd1„Zkd^d2„Zldcd3„Zmdcd4„Znddd5„Zodcd6„Zpdcd7„Zqd^d8„Zrd^d9„Zsd^d:„Ztd^d;„Zud^d<„Zvd^d=„Zwd>„ Zx G d?„ d@«      ZydA„ ZzdB„ Z{d^dC„Z|dD„ Z}dE„ Z~dF„ ZdG„ Z€dH„ Z�dI„ Z‚dJ„ ZƒdK„ Z„dedL„Z…dedM„Z†d^dN„Z‡ ed0¬O«       G dP„ dQ«      «       Zˆd^dReˆfdS„Z‰dT„ ZŠdUe‹fdV„ZŒdW„ Z�dX„ ZŽdY„ Z�dZ„ Z�dfd[„Z‘d\„ Z’e“d]k(  r	 eceG«       yy)gzJupyterLab command handleré    N)Údeepcopy)Ú	dataclass)Úglob)ÚPath)ÚTemporaryDirectory)ÚEvent)ÚOptional)ÚURLError)ÚRequestÚquoteÚurljoinÚurlopen)Újupyter_config_dir)ÚGREEN_ENABLEDÚGREEN_OKÚRED_DISABLEDÚRED_X)Úget_allowed_levelsÚget_federated_extensionsÚget_package_urlÚget_page_configÚget_static_page_configÚwrite_page_config)ÚProcessÚWatchHelperÚlist2cmdlineÚwhich)ÚVersion)ÚBoolÚ	HasTraitsÚInstanceÚListÚUnicodeÚdefault)Ú__version__©Ú
CoreConfig)ÚHEREÚ	YARN_PATH)ÚRangeÚgtÚgteÚltÚlteÚmake_semverz'.*theme-light-extension/style/theme.cssz..Údev_modezpin@zhttps://registry.yarnpkg.comc                   ó   — e Zd Zdd„Zd„ Zy)ÚProgressProcessNc                 óæ  — t        |t        t        f«      sd}t        |«      ‚|r|j	                  «       rd}t        |«      ‚t        |«      | _        d| _        || _        | j                  j                  dt        |«      › �«       | j                  ||t        j                  t        j                  dd¬«      | _        |xs
 t!        «       | _        t$        j&                  j)                  | «       y)	aã  Start a subprocess that can be run asynchronously.

        Parameters
        ----------
        cmd: list
            The command to run.
        logger: :class:`~logger.Logger`, optional
            The logger instance.
        cwd: string, optional
            The cwd of the process.
        kill_event: :class:`~threading.Event`, optional
            An event used to kill the process operation.
        env: dict, optional
            The environment for the process.
        zCommand must be given as a listzProcess abortedÚ z> Túutf-8)ÚcwdÚenvÚstderrÚstdoutÚuniversal_newlinesÚencodingN)Ú
isinstanceÚlistÚtupleÚ
ValueErrorÚis_setÚ_ensure_loggerÚloggerÚ
_last_lineÚcmdÚdebugr   Ú_create_processÚ
subprocessÚSTDOUTÚPIPEÚprocr   Ú_kill_eventr   Ú_procsÚadd)ÚselfrD   rB   r6   Ú
kill_eventr7   Úmsgs          úd/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jupyterlab/commands.pyÚ__init__zProgressProcess.__init__F   sÍ   € ô  ˜#¤¤e˜}Ô-Ø3ˆCÜ˜S“/Ð!á˜*×+Ñ+Ô-Ø#ˆCÜ˜S“/Ð!ä$ VÓ,ˆŒØˆŒØˆŒØ�‰×Ñ˜Bœ|¨CÓ0Ð1Ð2Ô3à×(Ñ(ØØÜ×$Ñ$Ü—?‘?Ø#Øð )ó 
ˆŒ	ð &Ò0¬«ˆÔä�‰×Ñ˜4Õ ó    c                 óü  — g }| j                   }| j                  }t        j                  g d¢«      }|j	                  «       €Êt
        j                  j                  t        |«      «       t
        j                  j                  «        t
        j                  j                  d«       |j                  «       r| j                  «        d}t        |«      ‚	 |j                  d¬«      \  }}|j                  |«       |j	                  «       €ŒÊ| j"                  j%                  dj'                  |«      «       t
        j                  j                  «        | j                  «       S # t        j                   $ r Y �ŒHw xY w)N)Ú-Ú\Ú|Ú/ÚzProcess was abortedgš™™™™™¹?)ÚtimeoutÚ
)rJ   rK   Ú	itertoolsÚcycleÚpollÚsysr9   ÚwriteÚnextÚflushr@   Ú	terminater?   ÚcommunicateÚappendrG   ÚTimeoutExpiredrB   rE   Újoin)rN   ÚcacherJ   rO   ÚspinnerrP   ÚoutÚ_s           rQ   ÚwaitzProgressProcess.waito   s  € ØˆØ�y‰yˆØ×%Ñ%ˆ
Ü—/‘/Ò"7Ó8ˆØ�i‰i‹kÐ!Ü�J‰J×ÑœT '›]Ô+Ü�J‰J×ÑÔÜ�J‰J×Ñ˜TÔ"Ø× Ñ Ô"Ø—‘Ô Ø+�Ü  “oÐ%ðØ×)Ñ)°#Ð)Ó6‘��QØ—‘˜SÔ!ð �i‰i‹kÑ!ð 	�‰×Ñ˜$Ÿ)™) EÓ*Ô+Ü�
‰
×ÑÔØ�~‰~ÓÐøô	 ×,Ñ,ò Úðús   Ã&E$ Å$E;Å:E;)NNNN)Ú__name__Ú
__module__Ú__qualname__rR   rl   © rS   rQ   r2   r2   E   s   „ ó'!óR rS   r2   c                  óL   — t        j                  t        j                  | Ž «      S )z!Join paths to create a real path.)ÚospÚabspathrg   )Úargss    rQ   Úpjoinru   †   s   € ä�;‰;”s—x‘x �Ó'Ð'rS   c                  óœ   — t         j                  j                  d«      } | xs t        t	        «       dd«      } t        j                  | «      S )z6Get the configured JupyterLab user settings directory.ÚJUPYTERLAB_SETTINGS_DIRÚlabzuser-settings©ÚosÚenvironÚgetru   r   rr   rs   )Úsettings_dirs    rQ   Úget_user_settings_dirr~   ‹   s;   € ä—:‘:—>‘>Ð";Ó<€LØÒV¤5Ô);Ó)=¸uÀoÓ#V€LÜ�;‰;�|Ó$Ð$rS   c                  óœ   — t         j                  j                  d«      } | xs t        t	        «       dd«      } t        j                  | «      S )z3Get the configured JupyterLab workspaces directory.ÚJUPYTERLAB_WORKSPACES_DIRrx   Ú
workspacesry   )Úworkspaces_dirs    rQ   Úget_workspaces_dirrƒ   ’   s;   € ä—Z‘Z—^‘^Ð$?Ó@€NØ#ÒW¤uÔ-?Ó-AÀ5È,Ó'W€NÜ�;‰;�~Ó&Ð&rS   c                  óŒ  — t         j                  j                  d«      r3t        t	        t         j                  d   «      j                  «       «      S t        t        j                  ddd«      } t        t        d«      rt        j                  «        t        t        dd«      }t        j                  |«      r | j                  |«      st        |ddd«      } nKt        j                  j                  d«      r,t        j                   | «      st        j                   d	«      rd	} t        t	        | «      j                  «       «      S )
z,Get the configured JupyterLab app directory.ÚJUPYTERLAB_DIRÚshareÚjupyterrx   ÚgetuserbaseÚ	USER_BASENz/usrz/usr/local/share/jupyter/lab)rz   r{   r|   Ústrr   Úresolveru   r_   ÚprefixÚhasattrÚsiterˆ   Úgetattrr(   Ú
startswithrr   Úexists)Úapp_dirÚuserbases     rQ   Úget_app_dirr”   ™   së   € ô 
‡z�z‡~�~Ð&Ô'ô ”4œŸ
™
Ð#3Ñ4Ó5×=Ñ=Ó?Ó@Ð@ô ”C—J‘J ¨°EÓ:€Gô Œt�]Ô#Ü×ÑÔÜ”t˜[¨$Ó/€HÜ‡��xÔ ¨×);Ñ);¸HÔ)EÜ˜ '¨9°eÓ<‰ô 	�
‰
×Ñ˜fÔ%Ü—
‘
˜7Ô#Ü�J‰JÐ5Ô6à0ˆô Œt�G‹}×$Ñ$Ó&Ó'Ð'rS   c           	      ó¦   — t        dt        dddddg| |¬«      j                  «       dk7  }|r%t        dt        g| |¬«      }|j                  «        y	y	)
a>  `yarn-deduplicate` with the `fewer` strategy to minimize total
    packages installed in a given staging directory

    This means a extension (or dependency) _could_ cause a downgrade of an
    version expected at publication time, but core should aggressively set
    pins above, for example, known-bad versions
    ÚnodeÚdlxzyarn-berry-deduplicatez-sÚfewerHighestz--fail©r6   rB   r   N)r2   r)   rl   )ÚpathrB   Ú	had_dupesÚ	yarn_procs       rQ   Údedupe_yarnr�   ¹   sk   € ô 	àÜØØ(ØØØðð Øô	
÷ ‰$‹&Øñ	ð ñ" Ü# V¬YÐ$7¸TÈ&ÔQˆ	Ø�‰Õð rS   c                 óà   — t        |«      }t        dt        ddg| |¬«      }|j                  «       }|dk7  r4t        dt        g| |¬«      }|j                  «        t	        t
        |«       |dk7  S )z_Ensure that node_modules is up to date.

    Returns true if the node_modules was updated.
    r–   z--immutablez--immutable-cacher™   r   )rA   r2   r)   rl   r�   Ú	REPO_ROOT)r6   rB   rœ   Úrets       rQ   Úensure_node_modulesr¡   ×   sq   € ô
 ˜FÓ#€FÜØ	”˜MÐ+>Ð?ÀSÐQWô€Ið �.‰.Ó
€Cð ˆa‚xÜ# V¬YÐ$7¸SÈÔPˆ	Ø�‰ÔÜ”I˜vÔ&à�!‰8€OrS   c                 óØ   — t        | «      } t        t        d«      }t        t        | «      st        j                  |«      s*t        dt        dgt        | ¬«      }|j                  «        yy)z)Ensure that the dev assets are available.Ústaticr–   Úbuildr™   N)
rA   ru   ÚDEV_DIRr¡   rŸ   rr   r‘   r2   r)   rl   )rB   Útargetrœ   s      rQ   Ú
ensure_devr§   ë   sU   € ä˜FÓ#€FÜ”7˜HÓ%€Fô œ9 fÔ-´S·Z±ZÀÔ5GÜ# V¬Y¸Ð$@ÄiÐX^Ô_ˆ	Ø�‰Õð 6HrS   c                 óê   — t        t        d«      }t        | «      } t        t        dd«      }t        j                  |«      s2t        || «       t        dt        dg|| ¬«      }|j                  «        yy)z*Ensure that the core assets are available.Ústagingr£   ú
index.htmlr–   r¤   r™   N)	ru   r(   rA   rr   r‘   r¡   r2   r)   rl   )rB   r©   r¦   rœ   s       rQ   Úensure_corer«   ö   sc   € ä”D˜)Ó$€GÜ˜FÓ#€Fô ”4˜ <Ó0€FÜ�:‰:�fÔÜ˜G VÔ,Ü# V¬Y¸Ð$@ÀgÐV\Ô]ˆ	Ø�‰Õð rS   c                 óZ   — t        j                  t        | dd«      «      ryd| › d�ddg}|S )z€Ensure that an application directory is available.

    If it does not exist, return a list of messages to prompt the user.
    r£   rª   Nz,JupyterLab application assets not found in "Ú"z:Please run `jlpm run build:core` then `jupyter lab build` z or use a different app directory)rr   r‘   ru   )r’   Úmsgss     rQ   Ú
ensure_appr¯     s>   € ô
 ‡z�z”%˜ ¨<Ó8Ô9Øð 7°w°i¸qÐAØDØ*ð€Dð
 €KrS   c                 óÌ   — t        | «      } t        t        | «       t        j                  t        j
                  t        dd«      «      }d}t        dt        ddg|| |¬«      }|gS )zÔRun watch mode for the source packages.

    Parameters
    ----------
    logger: :class:`~logger.Logger`, optional
        The logger instance.

    Returns
    -------
    A list of `WatchHelper` objects.
    ÚpackagesÚmetapackagez/.* Found 0 errors\. Watching for file changes\.r–   ÚrunÚwatch©r6   rB   Ústartup_regex)rA   r¡   rŸ   rr   rs   rg   r   r)   )rB   Úts_dirÚts_regexÚts_procs       rQ   Úwatch_packagesrº     sb   € ô ˜FÓ#€FÜœ	 6Ô*ä�[‰[œŸ™¤)¨Z¸ÓGÓH€Fð B€HÜØ	”˜E 7Ð+°ÀÐV^ô€Gð ˆ9ÐrS   c                 óx   — t        | «      } t        | «      }t        dt        ddgt        | t
        ¬«      }g |¢|‘S )zÑRun watch mode in a given directory.

    Parameters
    ----------
    logger: :class:`~logger.Logger`, optional
        The logger instance.

    Returns
    -------
    A list of `WatchHelper` objects.
    r–   r³   r´   rµ   )rA   rº   r   r)   r¥   ÚWEBPACK_EXPECT)rB   Úpackage_procsÚwp_procs      rQ   Ú	watch_devr¿   -  sK   € ô ˜FÓ#€Fä" 6Ó*€Mô Ø	”˜E 7Ð+ÜØÜ$ô	€Gð %ˆ]Ð$˜GÐ$Ð$rS   c                   óx  ‡ — e Zd ZdZdˆ fd„	Z ed¬«      Z edd¬«      Z e	e
j                  d¬«      Z e	ed¬«      Z e	ed	d
¬«      Z e e«       d¬«      Z ed¬«      Z edd¬«      Z edd¬«      Z edd¬«      Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Zˆ xZS )Ú
AppOptionszOptions object for build systemc                 ót   •— |�||d<   |�||d<   d|v r|d   s|j                  d«       t        ‰| �  di |¤Ž y )NÚcore_configrB   r’   rp   )ÚpopÚsuperrR   )rN   rB   rÃ   ÚkwargsÚ	__class__s       €rQ   rR   zAppOptions.__init__K  sP   ø€ ØÐ"Ø$/ˆF�=Ñ!ØÐØ%ˆF�8Ñð ˜Ñ v¨iÒ'8Ø�J‰J�yÔ!ä‰ÑÑ"˜6Ó"rS   zThe application directory)ÚhelpTzKWhether to shadow the default app_dir if that is set to a non-default valuezThe logger to usezConfiguration for core datarp   zEvent for aborting call)rt   rÈ   z7The paths to look in for prebuilt JupyterLab extensionszNPM packages registry URLFz*Splice source packages into app directory.zŒIf true, perform only a quick check that the lab build is up to date. If false, perform a thorough check, which verifies extension contents.zIncrease verbosity level.rB   c                 ó,   — t        j                  d«      S )NÚ
jupyterlab©ÚloggingÚ	getLogger©rN   s    rQ   Ú_default_loggerzAppOptions._default_loggerv  s   € ä× Ñ  Ó.Ð.rS   r’   c                 ó   — t        «       S ©N)r”   rÎ   s    rQ   Ú_default_app_dirzAppOptions._default_app_dir|  s
   € ä‹}ÐrS   rÃ   c                 ó   — t        «       S rÑ   r&   rÎ   s    rQ   Ú_default_core_configzAppOptions._default_core_config€  s
   € ä‹|ÐrS   Úregistryc                 ó^   — t        | j                  «      d   }|j                  dt        «      S )Núyarn configrÕ   )Ú_yarn_configrB   r|   ÚYARN_DEFAULT_REGISTRY©rN   Úconfigs     rQ   Ú_default_registryzAppOptions._default_registry„  s'   € ä˜dŸk™kÓ*¨=Ñ9ˆØ�z‰z˜*Ô&;Ó<Ð<rS   ©NN)rm   rn   ro   Ú__doc__rR   r#   r’   r   Úuse_sys_dirr!   rÌ   ÚLoggerrB   r'   rÃ   r   rO   r"   Úlabextensions_pathrÕ   Úsplice_sourceÚskip_full_build_checkÚverboser$   rÏ   rÒ   rÔ   rÜ   Ú__classcell__)rÇ   s   @rQ   rÁ   rÁ   H  s	  ø„ Ù)õ
#ñ Ð6Ô7€GáØØ[ô€Kñ
 �g—n‘nÐ+>Ô?€Fá˜:Ð,IÔJ€Ká˜% bÐ/HÔI€JáÙ‹	ÐQôÐñ Ð7Ô8€Há˜Ð%QÔR€Má ØðVôÐñ �5Ð:Ô;€GáˆXÓñ/ó ð/ñ
 ˆYÓñó ðñ ˆ]Óñó ðñ ˆZÓñ=ó ô=rS   rÁ   c                 óh   — | €
t        «       S t        | j                  t         «      r| S t        di | ¤ŽS )z-Helper to use deprecated kwargs for AppOptionrp   )rÁ   Ú
issubclassrÇ   )Úoptionss    rQ   Ú_ensure_optionsré   Š  s2   € à€Ü‹|ÐÜ	�G×%Ñ%¤zÔ	2ØˆäÑ$˜GÑ$Ð$rS   c                 óÄ   — t        | «      } t        | j                  «       t        | «      }| j                  rt        | j                  «      ng }||j                  «       z   S )zÒWatch the application.

    Parameters
    ----------
    app_options: :class:`AppOptions`, optional
        The application options.

    Returns
    -------
    A list of processes to run asynchronously.
    )ré   Ú_node_checkrB   Ú_AppHandlerrâ   rº   r´   )Úapp_optionsÚhandlerr½   s      rQ   r´   r´   ”  sR   € ô " +Ó.€KÜ�×"Ñ"Ô#Ü˜+Ó&€Gà:E×:SÒ:S”N ;×#5Ñ#5Ô6ÐY[€Mà˜7Ÿ=™=›?Ñ*Ð*rS   c                 ó~   — t        |«      }t        |j                  «       t        |«      }|j	                  | |¬«      S )z�Install an extension package into JupyterLab.

    The extension is first validated.

    Returns `True` if a rebuild is recommended, `False` otherwise.
    ©Úpin)ré   rë   rB   rì   Úinstall_extension)Ú	extensionrí   rñ   rî   s       rQ   rò   rò   ©  s<   € ô " +Ó.€KÜ�×"Ñ"Ô#Ü˜+Ó&€GØ×$Ñ$ Y°CÐ$Ó8Ð8rS   c                 ó¢   — t        |«      }t        |j                  «       t        |«      }|du r|j	                  «       S |j                  | «      S )zpUninstall an extension by name or path.

    Returns `True` if a rebuild is recommended, `False` otherwise.
    T)ré   rë   rB   rì   Úuninstall_all_extensionsÚuninstall_extension)Únamerí   Úall_rî   s       rQ   rö   rö   ¶  sM   € ô
 " +Ó.€KÜ�×"Ñ"Ô#Ü˜+Ó&€GØˆt�|Ø×/Ñ/Ó1Ð1Ø×&Ñ& tÓ,Ð,rS   c                 ó¢   — t        |«      }t        |j                  «       t        |«      }|du r|j	                  «       S |j                  | «      S )z÷Update an extension by name, or all extensions.
    Either `name` must be given as a string, or `all_` must be `True`.
    If `all_` is `True`, the value of `name` is ignored.
    Returns `True` if a rebuild is recommended, `False` otherwise.
    T)ré   rë   rB   rì   Úupdate_all_extensionsÚupdate_extension)r÷   rø   r’   rí   rî   s        rQ   rû   rû   Ã  sM   € ô " +Ó.€KÜ�×"Ñ"Ô#Ü˜+Ó&€GØˆt�|Ø×,Ñ,Ó.Ð.Ø×#Ñ# DÓ)Ð)rS   c                 óÒ  — t        | «      } | j                  }| j                  }|j                  d|› d�«       |t	        t
        d«      k(  rd}t        |«      ‚|t	        t
        d«      k(  rd}t        |«      ‚t        | dd«      r"|j                  d	|› d�«       t        ||«       n~g d
¢}|D �cg c]  }t        | |«      sŒ|‘Œ }}|D ]Y  }t	        ||«      }t        j                  |«      r"|j                  d|› d�«       t        ||«       ŒF|j                  |› d�«       Œ[ |j                  d«       t        | dd«      st        | dd«      r|j                  d«       yyc c}w )z+Clean the JupyterLab application directory.ú	Cleaning z...ÚdevzCannot clean the dev appÚcorezCannot clean the core appÚallFzRemoving everything in )Ú
extensionsÚsettingsr©   r£   z	Removing z not present, skipping...zSuccess!r  zIAll of your extensions have been removed, and will need to be reinstalledN)ré   rB   r’   Úinforu   r(   r?   r�   Ú_rmtree_starrr   r‘   Ú_rmtree)	rí   rB   r’   rP   Úpossible_targetsÚtÚtargetsr÷   r¦   s	            rQ   Úcleanr	  Ñ  sX  € ä! +Ó.€KØ×Ñ€FØ×!Ñ!€Gà
‡K�K�)˜G˜9 CÐ(Ô)Ø”%œ˜eÓ$Ò$Ø(ˆÜ˜‹oÐØ”%œ˜fÓ%Ò%Ø)ˆÜ˜‹oÐäˆ{˜E 5Ô)Ø�‰Ð-¨g¨Y°cÐ:Ô;Ü�W˜fÕ%âJÐÙ.ÓJÑ.˜´'¸+ÀqÕ2I’1Ð.ˆÐJãˆDÜ˜7 DÓ)ˆFÜ�z‰z˜&Ô!Ø—‘˜i¨ v¨SÐ1Ô2Ü˜ Õ'à—‘˜t˜fÐ$=Ð>Õ?ð ð ‡K�K�
ÔÜˆ{˜E 5Ô)¬W°[À,ÐPUÔ-VØ�‰Ð_Õ`ð .Wùò Ks   Â0E$ÃE$Tc                 ó†   — t        |«      }t        |j                  «       t        |«      }|j	                  | |||||¬«      S )z!Build the JupyterLab application.)r÷   ÚversionÚ
static_urlÚ
productionÚminimizeÚclean_staging)ré   rë   rB   rì   r¤   )	r÷   r  r  rO   r  rí   r  r  rî   s	            rQ   r¤   r¤   ó  sN   € ô " +Ó.€KÜ�×"Ñ"Ô#Ü˜+Ó&€GØ�=‰=ØØØØØØ#ð ó ð rS   c                 óP   — t        | «      }|j                  «        |j                  S )z.Get a dictionary of information about the app.)rì   Ú_ensure_disabled_infor  ©rí   rî   s     rQ   Úget_app_infor    s"   € ä˜+Ó&€GØ×!Ñ!Ô#Ø�<‰<ÐrS   c                 ó@   — t        |«      }|j                  | d|¬«      S )znEnable a JupyterLab extension/plugin.

    Returns `True` if a rebuild is recommended, `False` otherwise.
    F©Úlevel©rì   Útoggle_extension©ró   rí   r  rî   s       rQ   Úenable_extensionr    s&   € ô
 ˜+Ó&€GØ×#Ñ# I¨u¸EÐ#ÓBÐBrS   c                 ó@   — t        |«      }|j                  | d|¬«      S )zoDisable a JupyterLab extension/plugin.

    Returns `True` if a rebuild is recommended, `False` otherwise.
    Tr  r  r  s       rQ   Údisable_extensionr    s&   € ô
 ˜+Ó&€GØ×#Ñ# I¨t¸5Ð#ÓAÐArS   c                 ó<   — t        |«      }|j                  | |«      S )z7Check if a JupyterLab extension is enabled or disabled.)rì   Úcheck_extension)ró   Ú	installedrí   rî   s       rQ   r  r  $  s   € ä˜+Ó&€GØ×"Ñ" 9¨iÓ8Ð8rS   c                 ó@   — t        |«      }|j                  | d|¬«      S )z#Lock a JupyterLab extension/plugin.Tr  ©rì   Útoggle_extension_lockr  s       rQ   Úlock_extensionr#  *  s$   € ä˜+Ó&€GØ×(Ñ(¨°DÀÐ(ÓFÐFrS   c                 ó@   — t        |«      }|j                  | d|¬«      S )z%Unlock a JupyterLab extension/plugin.Fr  r!  r  s       rQ   Úunlock_extensionr%  0  s$   € ä˜+Ó&€GØ×(Ñ(¨°EÀÐ(ÓGÐGrS   c                 óx   — t        | «      } t        | j                  «       t        | «      }|j	                  «       S )zSDetermine whether JupyterLab should be built.

    Returns a list of messages.
    )ré   rë   rB   rì   Úbuild_checkr  s     rQ   r'  r'  6  s5   € ô
 " +Ó.€KÜ�×"Ñ"Ô#Ü˜+Ó&€GØ×ÑÓ Ð rS   c                 ó8   — t        | «      }|j                  «       S )zList the extensions.)rì   Úlist_extensionsr  s     rQ   r)  r)  A  s   € ä˜+Ó&€GØ×"Ñ"Ó$Ð$rS   c                 ó:   — t        |«      }|j                  | «      S )zuLink a package against the JupyterLab build.

    Returns `True` if a rebuild is recommended, `False` otherwise.
    )rì   Úlink_package)rš   rí   rî   s      rQ   r+  r+  G  s   € ô
 ˜+Ó&€GØ×Ñ Ó%Ð%rS   c                 ó:   — t        |«      }|j                  | «      S )zzUnlink a package from JupyterLab by path or name.

    Returns `True` if a rebuild is recommended, `False` otherwise.
    )rì   Úunlink_package)Úpackagerí   rî   s      rQ   r-  r-  P  s   € ô
 ˜+Ó&€GØ×!Ñ! 'Ó*Ð*rS   c                 ó6   — t        | «      }|j                  d   S )zGet the application version.r  )rì   r  r  s     rQ   Úget_app_versionr0  Y  s   € ä˜+Ó&€GØ�<‰<˜	Ñ"Ð"rS   c                 ó:   — t        |«      }|j                  | «      S )z8Get the latest compatible version of a list of packages.)rì   Ú"latest_compatible_package_versions)Únamesrí   rî   s      rQ   Ú&get_latest_compatible_package_versionsr4  _  s   € ä˜+Ó&€GØ×5Ñ5°eÓ<Ð<rS   c                 ó†  — t        j                  | d«      5 }|j                  d«      5 }t        j                  |j                  «       j                  d«      «      }ddd«       |j                  «       D �cg c]  }|j                  t        d«      d ‘Œ c}d<   ddd«       |S # 1 sw Y   ŒJxY wc c}w # 1 sw Y   S xY w)z0Read the package data in a given target tarball.Úrzpackage/package.jsonÚutf8Nzpackage/Újupyterlab_extracted_files)
ÚtarfileÚopenÚextractfileÚjsonÚloadsÚreadÚdecodeÚ
getmembersrš   Úlen)r¦   ÚtarÚfÚdatas       rQ   Úread_packagerE  e  sœ   € ä	�‰�f˜cÔ	" cØ�_‰_Ð3Ô4¸Ü—:‘:˜aŸf™f›hŸo™o¨fÓ5Ó6ˆD÷ 5àQT×Q_ÑQ_ÔQaÓ-bÑQaÈA¨a¯f©f´S¸³_Ð5FÒ.GÐQaÑ-bˆÐ)Ñ*÷ 
#ð €K÷ 5Ð4üâ-b÷ 
#ð €Kús.   —B6©3B%ÁB6Á6B1ÂB6Â%B.	Â*B6Â6C c                   óP  — e Zd Zd„ Zd3d„Z	 	 	 	 	 	 d4d„Zd„ Zd„ Zd5d„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd6d„Zd7d„Zd7d„Zd7d„Zd8d„Zd„ Zd„ Zd„ Zd„ Zd9d„Zd8d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d „ Z!d!„ Z"d"„ Z#d#„ Z$d$„ Z%d%e&d&e'd'e'd(e&fd)„Z(d*„ Z)d+„ Z*d,„ Z+d5d-„Z,d5d.„Z-d/„ Z.d0„ Z/d1„ Z0d2„ Z1y):rì   c                 óä  — t        |«      }|| _        |j                  | _        |j                  r
t	        «       n| j                  | _        |j                  | _        t        |j                  j                  «      | _
        |j                  | _        |j                  | _        |j                  | _        |j                  | _        |j                  | _        | j!                  «       | _        	 | j%                  d¬«       y# t&        t(        f$ rb 	 | j                  j#                  d«       | j%                  d¬«       Y y# t&        t(        f$ r | j                  j+                  d«       Y Y yw xY ww xY w)zCreate a new _AppHandler objectÚ
sys_prefixr  za`sys_prefix` level settings are read-only, using `user` level for migration to `lockedExtensions`ÚuserzyBoth `sys_prefix` and `user` level settings are read-only, cannot auto-migrate `disabledExtensions` to `lockedExtensions`N)ré   Ú_optionsr’   rß   r”   Úsys_dirrB   r   rÃ   Ú_dataÚ	core_datará   rä   rO   rÕ   rã   Ú_get_app_infor  Ú _maybe_mirror_disabled_in_lockedÚPermissionErrorÚOSErrorÚwarning)rN   rè   s     rQ   rR   z_AppHandler.__init__t  s.  € ä! 'Ó*ˆØˆŒØ—‘ˆŒØ(/×(;Ò(;”{”}ÀÇÁˆŒØ—n‘nˆŒä! '×"5Ñ"5×";Ñ";Ó<ˆŒØ")×"<Ñ"<ˆÔØ—‘ˆŒØ!×,Ñ,ˆŒØ×(Ñ(ˆŒØ%,×%BÑ%BˆÔ"ð ×&Ñ&Ó(ˆŒ	ð	Ø×1Ñ1¸Ð1ÕEøÜ¤Ð)ò 		ðØ—‘× Ñ Øwôð ×5Ñ5¸FÐ5ÖCøÜ#¤WÐ-ò Ø—‘×#Ñ#ð P÷ðúð		ús*   Ã+C> Ã>E/Ä-D=Ä=*E+Å'E/Å*E+Å+E/Nc                 ó¬  — t        |«      }| j                  d   }|| j                  d   v rm| j                  «       }|j                  dg «      }||v rF| j                  j                  d|› �«       |j                  |«       ||d<   | j                  |«       yy| j                  «        t        «       5 }| j                  |||¬«      }ddd«       d	   }	|d
   r;| j                  «       }|j                  di «      }
|d   |
|	<   | j                  |«       |	|v r0||	   }|d   |d   k7  r |d   dk(  rt        j
                  |d   «       y# 1 sw Y   ŒƒxY w)z©Install an extension package into JupyterLab.

        The extension is first validated.

        Returns `True` if a rebuild is recommended, `False` otherwise.
        r  Úcore_extensionsÚuninstalled_core_extensionszInstalling core extension TFrð   Nr÷   Úis_dirÚlocal_extensionsÚsourcerš   ÚlocationÚapp)Ú_normalize_pathr  Ú_read_build_configr|   rB   ÚremoveÚ_write_build_configÚ_ensure_app_dirsr   Ú_install_extensionÚ
setdefaultrz   )rN   ró   Úexistingrñ   r  rÛ   ÚuninstalledÚtempdirr  r÷   ÚlocalÚothers               rQ   rò   z_AppHandler.install_extension“  sn  € ô $ IÓ.ˆ	Ø—Y‘Y˜|Ñ,ˆ
ð ˜Ÿ	™	Ð"3Ñ4Ñ4Ø×,Ñ,Ó.ˆFØ Ÿ*™*Ð%BÀBÓGˆKØ˜KÑ'Ø—‘× Ñ Ð#=¸i¸[Ð!IÔJØ×"Ñ" 9Ô-Ø8C�Ð4Ñ5Ø×(Ñ(¨Ô0ØØð 	×ÑÔô  Ô! WØ×*Ñ*¨9°gÀ3Ð*ÓGˆD÷ "ð �F‰|ˆð �Š>Ø×,Ñ,Ó.ˆFØ×%Ñ%Ð&8¸"Ó=ˆEØ˜x™.ˆE�$‰KØ×$Ñ$ VÔ,ð �:ÑØ˜tÑ$ˆEØ�V‰}  V¡Ò,°°zÑ1BÀeÒ1KÜ—	‘	˜% ™-Ô(à÷% "Ð!ús   Â3E
Å
Ec                 óJ  — |€!| j                   d   xs | j                   d    }|sd}| j                  j                  r9t        t        | j
                  ¬«       | j                  dt        dgt        ¬«       |rd	nd
g}|r|j                  |rdnd«       | j
                  j                  ddj                  |«      › d�«       | j                  }| j                  ||||¬«       t        |d«      }	| j                  dt        dg|	¬«      }
|
dk7  r(d}| j
                  j                  |«       t        |«      ‚t        |	| j
                  «       d|rdnd› |rdnd› �}| j                  dt        d|g|	¬«      }
|
dk7  r(d}| j
                  j                  |«       t        |«      ‚y)zBuild the application.NÚlinked_packagesrW  F©rB   r–   zbuild:packages©r6   r  ÚdevelopmentÚ	minimizedznot minimizedzBuilding jupyterlab assets (ú, Ú))r÷   r  r  r	  r©   Úinstallr   z"npm dependencies failed to installzbuild:Úprodrþ   z	:minimizer4   r³   zJupyterLab failed to build)r  rJ  râ   r¡   rŸ   rB   Ú_runr)   re   rg   r’   Ú_populate_stagingru   rE   ÚRuntimeErrorr�   )rN   r÷   r  r  r  r  r  r  r’   r©   r    rP   Úcommands                rQ   r¤   z_AppHandler.buildÁ  s™  € ð ÐØ"Ÿi™iÐ(9Ñ:Ò[¸d¿i¹iÐHZÑ>[Ð\ˆJáØˆHð �=‰=×&Ò&Ü¤	°$·+±+Õ>Ø�I‰I�vœyÐ*:Ð;ÄˆIÔKá *‘°Ð>ˆÙØ�K‰K¡x™°_ÔEØ�‰×ÑÐ7¸¿	¹	À$»Ð7HÈÐJÔKð —,‘,ˆà×ÑØ˜w°:À]ð 	ô 	
ô ˜ Ó+ˆð �i‰i˜¤¨IÐ6¸GˆiÓDˆØ�!Š8Ø6ˆCØ�K‰K×Ñ˜cÔ"Ü˜sÓ#Ð#ô 	�G˜TŸ[™[Ô)Ø¡Z™6°UÐ;É8¹KÐY[Ð;\Ð]ˆØ�i‰i˜¤¨E°7Ð;ÀˆiÓIˆØ�!Š8Ø.ˆCØ�K‰K×Ñ˜cÔ"Ü˜sÓ#Ð#ð rS   c                 ó&  — t        | j                  d«      }| j                  «        | j                  dt        dg|¬«       t        || j                  «       t        dt        ddgt        | j                  d«      t        | j                  ¬«      }|gS )zXStart the application watcher and then run the watch in
        the background.
        r©   r–   ro  rj  r³   r´   )r6   r¶   rB   )	ru   r’   rr  rq  r)   r�   rB   r   r¼   )rN   r©   rJ   s      rQ   r´   z_AppHandler.watchô  s~   € ô ˜Ÿ™ iÓ0ˆà×ÑÔ ð 	�	‰	�6œ9 iÐ0°gˆ	Ô>Ü�G˜TŸ[™[Ô)äØ”Y  wÐ/Ü�d—l‘l IÓ.Ü(Ø—;‘;ô	
ˆð ˆvˆrS   c                 ó  — | j                  «        | j                  }| j                  }|d   }|j                  d|› �«       |d   s|d   r| j                  «       |d<   |d   r| j	                  «        |d   r5|j                  d«       | j                  |d«       | j                  |d«       |d	   }|r;|j                  d
«       t        |«      D ]  }|j                  d|› d||   › �«       Œ |d   }|r@|j                  d«       t        |«      D ]!  }||   d   }|j                  d|› d|› �«       Œ# |d   }	|	r<|j                  d«       t        |	«      D �
cg c]  }
|j                  d|
› �«      ‘Œ c}
 t        |d   «      t        |d   «      z   t        |d   «      z   }|d   D �cg c]  }|j                  d«      d   |v sŒ|‘Œ }}|r>|j                  d«       t        |«      D ]  }
|
|v r|
dz  }
|j                  d|
› �«       Œ! g }| j                  d   D ]K  }| j                  d   |   d   }| j                  d   |   d   }t        ||d«      rŒ;|j                  |«       ŒM |r<|j                  d«       t        |«      D �cg c]  }|j                  d|› �«      ‘Œ c} | j                  d¬«      }|r4|j                  d«       |D �
cg c]  }
|j                  d|
› �«      ‘Œ c}
 yyc c}
w c c}w c c}w c c}
w )z"Print an output of the extensions.r  zJupyterLab vÚfederated_extensionsr  Úcompat_errorsz+Other labextensions (built into JupyterLab)rZ  r_   rW  z
   local extensions:ú        ú: rh  z
   linked packages:rX  Úuninstalled_corez
Uninstalled core extensions:z    rT  ÚdisabledÚ:r   z
Disabled extensions:z (all plugins)Úshadowed_extsTzO
The following source extensions are overshadowed by older prebuilt extensions:)Úfastz3
Build recommended, please run `jupyter lab build`:N)r  rB   r  Ú_get_extension_compatÚ_list_federated_extensionsÚ_list_extensionsÚsortedr=   Ú	partitionr,   re   r'  )rN   rB   r  r  re  r÷   rh  ÚkeyrX  r{  ÚitemÚall_extsÚir|  Úimproper_shadowedÚext_nameÚsource_versionÚprebuilt_versionÚmessagess                      rQ   r)  z_AppHandler.list_extensions  sB  € à×"Ñ"Ô$Ø—‘ˆØ�y‰yˆØ�y‘/ˆØ�‰�l 7 )Ð,Ô-àÐ&Ò'¨4°Ò+=Ø$(×$>Ñ$>Ó$@ˆD�Ñ!àÐ&Ò'Ø×+Ñ+Ô-à�ÒØ�K‰KÐEÔFØ×!Ñ! $¨Ô.Ø×!Ñ! $¨Ô.àÐ'Ñ(ˆÙØ�K‰KÐ0Ô1Ü˜už�Ø—‘˜h t f¨B¨u°T©{¨mÐ<Õ=ð &ð Ð0Ñ1ˆÙØ�K‰KÐ/Ô0Ü˜oÖ.�Ø(¨Ñ-¨hÑ7�Ø—‘˜h s e¨2¨f¨XÐ6Õ7ð /ð  Ð 2Ñ3ÐÙØ�K‰KÐ8Ô9Ü4:Ð;KÔ4LÓMÑ4L¨DˆV�[‰[˜4 ˜v˜Õ'Ð4LÒMô �Ð,Ñ-Ó.Ü�4˜Ñ%Ó&ñ'ä�4Ð)Ñ*Ó+ñ,ð 	ð  $ JÒ/ÓSÑ/˜!°1·;±;¸sÓ3CÀAÑ3FÈ(Ò3R’AÐ/ˆÐSÙØ�K‰KÐ0Ô1Ü˜xÖ(�à˜8Ñ#ØÐ,Ñ,�DØ—‘˜d 4 &˜MÕ*ð	 )ð ÐØŸ	™	 /Ô2ˆHØ!ŸY™Y |Ñ4°XÑ>¸yÑIˆNØ#Ÿy™yÐ)?Ñ@ÀÑJÈ9ÑUÐÜÐ'¨¸Õ>Ø!×(Ñ(¨Õ2ð	 3ñ Ø�K‰KØbôô 5;Ð;LÔ4MÓNÑ4M¨DˆV�[‰[˜4 ˜v˜Õ'Ð4MÒNà×#Ñ#¨Ð#Ó.ˆÙØ�K‰KÐNÔOÙ4<Ó=±H¨DˆV�[‰[˜4 ˜v˜Õ'°HÓ=ð ùòA Nùò Tùò* Oùò
 >s   ÅK5Æ-K:Ç	K:ÊK?ËLc                 ó(  — |€| j                   }| j                  }| j                  d   }| j                  d   }g }t        |dd«      }t	        j
                  |«      sdgS | j                  d   }|d   }|j                  di «      }	|j                  d	d
«      }
|
j                  d«      s(|d	   }t        |
«      t        |«      k7  rd|
› d|› d�}|gS | j                  d   }| j                  |¬«      }|d   }|j                  di «      }dD ]X  }||   D ]#  }||v rŒ|||   vsŒ|j                  |› d�«       Œ% ||   D ]#  }||v rŒ|||   vsŒ|j                  |› d�«       Œ% ŒZ t        t        d«      }|j                  «       D ]_  \  }}|	j                  |d
«      j                  |«      rŒ(||	vrŒ-||v s||v rŒ6|	|   |k7  sŒ?|› d|	|   › d||   › �}|j                  |«       Œa |j                  «       D ]@  \  }}|s||v rŒt        |d«      }| j                  |||«      sŒ-|j                  |› d�«       ŒB |j                  «       D ]D  \  }}|s||v rŒt        |dd«      }| j                  ||d   |«      sŒ1|j                  |› d�«       ŒF |S )z[Determine whether JupyterLab should be built.

        Returns a list of messages.
        rW  rh  r£   úpackage.jsonzNo built applicationÚstatic_datarÊ   Údependenciesr  r4   ú-splicedzVersion mismatch: z
 (built), z
 (current)r~  )Úsilent)r  ÚmimeExtensionsz needs to be included in buildz needs to be removed from buildr±   z changed from z to r  z content changedr©   rX  )rã   r’   r  ru   rr   r‘   r|   Úendswithr   Ú_get_package_templatere   rŸ   Úitemsr�   Ú_check_local)rN   r  r’   re  Úlinkedr�  Úpkg_pathr�  Úold_jlabÚold_depsÚstatic_versionÚcore_versionrP   r~  Únew_packageÚnew_jlabÚnew_depsÚext_typeÚextÚsrc_pkg_dirÚpkgÚdepr÷   rX  Údnamer†  s                             rQ   r'  z_AppHandler.build_checkO  sí  € ð
 ˆ<Ø×-Ñ-ˆDØ—,‘,ˆØ—	‘	Ð,Ñ-ˆØ—‘Ð,Ñ-ˆØˆô ˜ (¨NÓ;ˆÜ�z‰z˜(Ô#Ø*Ð+Ð+à—i‘i Ñ.ˆØ˜|Ñ,ˆØ—?‘? >°2Ó6ˆð "Ÿ™ i°Ó4ˆØ×&Ñ& zÔ2Ø# IÑ.ˆLÜ�~Ó&¬'°,Ó*?Ò?Ø*¨>Ð*:¸*À\ÀNÐR\Ð]�Ø�u�àŸ	™	 /Ñ2ˆð ×0Ñ0¸Ð0Ó=ˆØ˜|Ñ,ˆØ—?‘? >°2Ó6ˆã8ˆHà Ô)�Ø˜-Ñ'ØØ˜h xÑ0Ò0Ø—O‘O s eÐ+IÐ$JÕKð	 *ð   Ô)�Ø˜-Ñ'ØØ˜h xÑ0Ò0Ø—O‘O s eÐ+JÐ$KÕLñ	 *ð 9ô  œI zÓ2ˆØ Ÿ™Ö(‰HˆC�Ø�|‰|˜C Ó$×/Ñ/°Ô<ØØ˜(Ñ"Øà�e‰|˜s f™}ØØ˜‰} Ó#Ø˜˜^¨H°S©M¨?¸$¸xÈ¹}¸oÐN�Ø—‘ Õ$ð )ð "ŸK™KžM‰LˆD�&Ù�t˜}Ñ,ØÜ˜' <Ó0ˆEØ× Ñ   v¨uÕ5Ø—‘ 4 &Ð(8Ð 9Õ:ð *ð !Ÿ,™,ž.‰JˆD�$Ù�t˜}Ñ,ØÜ˜' 9Ð.?Ó@ˆEØ× Ñ   t¨H¡~°uÕ=Ø—‘ 4 &Ð(8Ð 9Õ:ð )ð ˆrS   c                 óP  — | j                   }| j                  }||d   v ra|d   |   j                  di «      j                  dd«      r#|d   |   d   d   }|j                  d|› �«       y|j                  d|› d�«       y||d	   v rc| j	                  «       }|j                  d
g «      }||vr<|j                  d|› �«       |j                  |«       ||d
<   | j                  |«       yy|d   }|d   j                  «       D ]Œ  \  }}	|	d   }
||k(  sŒd|› dt        j                  |
«      › �}|j                  |«       t        j                  |
«       ||v r6| j	                  «       }|j                  di «      }	|	|= | j                  |«        y |j                  d|› d�«       y)zpUninstall an extension by name.

        Returns `True` if a rebuild is recommended, `False` otherwise.
        rw  ro  ÚuninstallInstructionsNz,JupyterLab cannot uninstall this extension. zJupyterLab cannot uninstall z~ since it was installed outside of JupyterLab. Use the same method used to install this extension to uninstall this extension.FrT  rU  zUninstalling core extension TrW  r  rš   zUninstalling z from úNo labextension named "ú" installed)r  rB   r|   Úerrorr\  re   r^  r—  rr   Údirnamerz   r]  ra  rR  )rN   r÷   r  rB   ÚinstructionsrÛ   rc  re  ÚextnamerD  rš   rP   s               rQ   rö   z_AppHandler.uninstall_extension¢  sî  € ð
 �y‰yˆØ—‘ˆà�4Ð.Ñ/Ñ/àÐ+Ñ,¨TÑ2ß‘�Y Ó#ß‘Ð,¨dÓ3ð4ð  $Ð$:Ñ;¸DÑAÀ)ÑLØ+ñ �ð —‘ÐKÈLÈ>ÐZÔ[ð
 ð —‘Ø2°4°&ð  9wð  xôð ð �4Ð)Ñ*Ñ*Ø×,Ñ,Ó.ˆFØ Ÿ*™*Ð%BÀBÓGˆKØ˜;Ñ&Ø—‘Ð:¸4¸&ÐAÔBØ×"Ñ" 4Ô(Ø8C�Ð4Ñ5Ø×(Ñ(¨Ô0ØØàÐ'Ñ(ˆà! ,Ñ/×5Ñ5Ö7‰MˆG�TØ˜‘<ˆDØ˜$‹Ø% d V¨6´#·+±+¸dÓ2CÐ1DÐE�Ø—‘˜CÔ Ü—	‘	˜$”à˜eÑ#Ø!×4Ñ4Ó6�FØ!×,Ñ,Ð-?ÀÓD�DØ˜W˜Ø×,Ñ,¨VÔ4Ùð 8ð 	�‰Ð0°°°kÐBÔCØrS   c                 ó‚   — d}| j                   d   j                  «       D ]  \  }}| j                  |«      }|xs |}Œ |S )ziUninstalls all extensions

        Returns `True` if a rebuild is recommended, `False` otherwise
        Fr  )r  r—  rö   )rN   Úshould_rebuildr¯  rk   rc  s        rQ   rõ   z$_AppHandler.uninstall_all_extensionsÙ  sK   € ð
 ˆØŸ)™) LÑ1×7Ñ7Ö9‰JˆG�QØ×2Ñ2°7Ó;ˆKØ+Ò:¨{‰Nð :ð ÐrS   c                 ó¦   — d}| j                   d   j                  «       D ].  \  }}|| j                   d   v rŒ| j                  |«      }|xs |}Œ0 |S )zqUpdate all non-local extensions.

        Returns `True` if a rebuild is recommended, `False` otherwise.
        Fr  rW  )r  r—  Ú_update_extension)rN   r±  r¯  rk   Úupdateds        rQ   rú   z!_AppHandler.update_all_extensionsä  s`   € ð
 ˆØŸ)™) LÑ1×7Ñ7Ö9‰JˆG�QØ˜$Ÿ)™)Ð$6Ñ7Ñ7ØØ×,Ñ,¨WÓ5ˆGà+Ò6¨w‰Nð :ð ÐrS   c                 ó†   — || j                   d   vr | j                  j                  d|› d�«       y| j                  |«      S )úmUpdate an extension by name.

        Returns `True` if a rebuild is recommended, `False` otherwise.
        r  rª  r«  F)r  rB   rR  r³  )rN   r÷   s     rQ   rû   z_AppHandler.update_extensionò  sE   € ð
 �t—y‘y Ñ.Ñ.Ø�K‰K×ÑÐ"9¸$¸¸{Ð KÔLØØ×%Ñ% dÓ+Ð+rS   c                 ó´  — | j                   d   |   }|d   r | j                  j                  d|› d�«       y	 | j                  |«      }|€ | j                  j                  d|› d�«       y||d   k(  r | j                  j                  d	|›d
�«       y| j                  j                  d|› d|› �«       | j                  |› d|› �«      S # t        $ r Y yw xY w)r¶  r  Úalias_package_sourcez$Skipping updating pinned extension 'z'.Fz No compatible version found for Ú!r  z
Extension z already up to datez	Updating z to version Ú@)r  rB   rR  Ú"_latest_compatible_package_versionr
   rò   )rN   r÷   rD  Úlatests       rQ   r³  z_AppHandler._update_extensionü  sô   € ð
 �y‰y˜Ñ& tÑ,ˆØÐ&Ò'Ø�K‰K×ÑÐ"FÀtÀfÈBÐ OÔPØð	Ø×<Ñ<¸TÓBˆFð ˆ>Ø�K‰K×ÑÐ"BÀ4À&ÈÐ JÔKØØ�T˜)‘_Ò$Ø�K‰K×Ñ˜z¨$¨Ð1DÐEÔFØØ�‰×Ñ˜9 T F¨,°v°hÐ?Ô@Ø×%Ñ%¨¨¨a°¨xÐ&8Ó9Ð9øô ò 	Ùð	ús   ¹C Ã	CÃCc                 óP  — t        |«      }t        j                  |«      rt        j                  |«      sd|› d�}t	        |«      ‚t        «       5 }| j                  ||«      }ddd«       t        d   «      }|s| j                  |«      S | j                  j                  d|› d�«       |D �cg c]   }| j                  j                  d|› �«      ‘Œ" c} | j                  «       }|j                  di «      }|d	   ||d
   <   | j                  |«       y# 1 sw Y   Œ´xY wc c}w )zrLink a package at the given path.

        Returns `True` if a rebuild is recommended, `False` otherwise.
        zCannot install "z" only link local directoriesNrD  zInstalling zA as a linked package because it does not have extension metadata:ú   rh  rX  r÷   T)r[  rr   r‘   Úisdirr?   r   Ú_extract_packageÚ_validate_extensionrò   rB   rR  r\  ra  r^  )	rN   rš   rP   rd  r  r�  ÚmrÛ   r™  s	            rQ   r+  z_AppHandler.link_package  s  € ô
 ˜tÓ$ˆÜ�z‰z˜$Ô¤s§y¡y°¤Ø$ T FÐ*GÐHˆCÜ˜S“/Ð!äÔ! WØ×(Ñ(¨¨wÓ7ˆD÷ "ô ' t¨F¡|Ó4ˆÙØ×)Ñ)¨$Ó/Ð/ð 	�‰×ÑØ˜$˜Ð`Ðaô	
ñ 2:Ó:±¨Aˆ�‰×	Ñ	˜s 1 #˜YÕ	'°Ò:ð ×(Ñ(Ó*ˆØ×"Ñ"Ð#4°bÓ9ˆØ# H™~ˆˆt�F‰|ÑØ× Ñ  Ô(à÷' "Ð!üò 	;s   ÁDÂ0%D#ÄD c                 óº  — t        |«      }| j                  «       }|j                  di «      }d}|j                  «       D ]  \  }}|||hv sŒ|}Œ |r||= nb|j                  di «      }|j                  «       D ]  \  }}|||hv sŒ|}Œ |r-||= | j                  d   |   d   }t        j                  |«       |sd|› �}t        |«      ‚| j                  |«       y)zÉUnlink a package by name or at the given path.

        A ValueError is raised if the path is not an unlinkable package.

        Returns `True` if a rebuild is recommended, `False` otherwise.
        rh  NrW  r  rš   zNo linked package for T)	r[  r\  ra  r—  r  rz   r]  r?   r^  )	rN   rš   rÛ   r™  Úfoundr÷   rX  re  rP   s	            rQ   r-  z_AppHandler.unlink_package1  sö   € ô ˜tÓ$ˆØ×(Ñ(Ó*ˆØ×"Ñ"Ð#4°bÓ9ˆàˆØ"ŸL™LžN‰LˆD�&Ø˜˜f�~Ò%Ø‘ð +ñ Ø�u‘à×%Ñ%Ð&8¸"Ó=ˆEØ %§¡¦‘��fØ˜D &˜>Ò)Ø ‘Eð !.ñ Ø˜%�LØ—y‘y Ñ.¨uÑ5°fÑ=�Ü—	‘	˜$”áØ*¨4¨&Ð1ˆCÜ˜S“/Ð!à× Ñ  Ô(ØrS   c                 ó¼   — t        j                  | j                  d«      }t        || j                  |d¬«      }|j                  di «      }|j                  |d«      S )Nr  T)Úapp_settings_dirrB   r  Úinclude_higher_levelsÚlockedExtensionsF)rr   rg   r’   r   rB   r|   )rN   ró   r  rÇ  rÆ  Úpage_configÚlockeds          rQ   Ú_is_extension_lockedz _AppHandler._is_extension_lockedT  sU   € ÜŸ8™8 D§L¡L°*Ó=ÐÜ,Ø-Ø—;‘;ØØ"&ô	
ˆð —‘Ð!3°RÓ8ˆØ�z‰z˜) UÓ+Ð+rS   c                 ó  — t        j                  | j                  d«      }|dk7  rOt        «       }| j	                  |||j                  |«      dz      d¬«      r| j                  j                  d«       yt        || j                  d¬	«      }t        || j                  |¬	«      }|j                  d
i «      }|j                  d
i «      }	d}
|j                  |d«      }|r
|sd|	|<   d}
n|s	|rd|	|<   d}
|
r|	|d
<   t        ||¬«       |
S )zsEnable or disable a lab extension.

        Returns `True` if a rebuild is recommended, `False` otherwise.
        r  Úsystemé   T©r  rÇ  z8Extension locked at a higher level, cannot toggle statusFr   ©rÆ  rB   r  ÚdisabledExtensionsr  ©rr   rg   r’   r   rË  ÚindexrB   r  r   r|   r   )rN   ró   Úvaluer  rÆ  ÚallowedÚcomplete_page_configÚlevel_page_configr|  Údisabled_at_levelÚdid_somethingÚis_disableds               rQ   r  z_AppHandler.toggle_extension`  s'  € ô
 Ÿ8™8 D§L¡L°*Ó=Ðð
 �HÒÜ(Ó*ˆGØ×(Ñ(Ø ¨¯©°uÓ)=ÀÑ)AÑ!BÐZ^ð )ô ð —‘× Ñ Ð![Ô\Øä5Ø-°d·k±kÈô 
Ðô 3Ø-°d·k±kÈô
Ðð (×+Ñ+Ð,@À"ÓEˆØ-×1Ñ1Ð2FÈÓKÐØˆØ—l‘l 9¨eÓ4ˆá™Ø+/Ð˜iÑ(Ø ‰MÙ™;Ø+0Ð˜iÑ(Ø ˆMáØ6GÐÐ2Ñ3ÜÐ/°uÕ=ØÐrS   c                 ó  — t        j                  | j                  d«      }t        || j                  |¬«      }d|v ry|j                  di «      }t        |t        «      rt        j                  |d«      }|sy||d<   t        ||¬«       y)a  Lock all extensions that were previously disabled.

        This exists to facilitate migration from 4.0 (which did not include lock
        function) to 4.1 which exposes the plugin management to users in UI.

        Returns `True` if migration happened, `False` otherwise.
        r  rÐ  rÈ  FrÑ  Tr  )rr   rg   r’   r   rB   r|   r<   r=   ÚdictÚfromkeysr   )rN   r  rÆ  rÉ  r|  s        rQ   rO  z,_AppHandler._maybe_mirror_disabled_in_locked‹  sˆ   € ô Ÿ8™8 D§L¡L°*Ó=Ðä,Ø-°d·k±kÈô
ˆð  Ñ,àð —?‘?Ð#7¸Ó<ˆÜ�h¤Ô%Ü—}‘} X¨tÓ4ˆHñ Øà*2ˆÐ&Ñ'Ü˜+¨UÕ3ØrS   c                 ón  — t        j                  | j                  d«      }|dk7  rOt        «       }| j	                  |||j                  |«      dz      d¬«      r| j                  j                  d«       yt        || j                  |¬«      }|j                  d	i «      }|||<   ||d	<   t        ||¬
«       y)z)Lock or unlock a lab extension (/plugin).r  rÍ  rÎ  TrÏ  z1Extension locked at a higher level, cannot toggleFrÐ  rÈ  r  NrÒ  )rN   ró   rÔ  r  rÆ  rÕ  rÉ  rÊ  s           rQ   r"  z!_AppHandler.toggle_extension_lock©  s¶   € äŸ8™8 D§L¡L°*Ó=Ðð �HÒÜ(Ó*ˆGØ×(Ñ(Ø ¨¯©°uÓ)=ÀÑ)AÑ!BÐZ^ð )ô ð —‘× Ñ Ð!TÔUØä,Ø-°d·k±kÈô
ˆð —‘Ð!3°RÓ8ˆØ!ˆˆyÑØ*0ˆÐ&Ñ'Ü˜+¨UÖ3rS   c                 óì   — | j                  «        | j                  }||d   v r| j                  |||«      S ||d   v r%| j                  j                  |› dt        › �«       y| j                  |||«      S )z/Check if a lab extension is enabled or disabledrT  rh  r}  T)r  r  Ú_check_core_extensionrB   r   Ú_check_common_extension)rN   ró   Úcheck_installed_onlyr  s       rQ   r  z_AppHandler.check_extensionÀ  s   € à×"Ñ"Ô$Ø�y‰yˆà˜Ð.Ñ/Ñ/Ø×-Ñ-¨i¸Ð?SÓTÐTà˜Ð.Ñ/Ñ/Ø�K‰K×Ñ 	˜{¨!¬M¨?Ð;Ô<Øà×+Ñ+¨I°tÐ=QÓRÐRrS   c                 óJ  — ||d   v r%| j                   j                  |› dt        › �«       y|r%| j                   j                  |› dt        › �«       y||d   v r%| j                   j                  |› dt        › �«       y| j                   j                  |› dt
        › �«       y)z0Check if a core extension is enabled or disabledr{  r}  Frz  TÚdisabled_core)rB   r  r   r   r   r   )rN   ró   r  râ  s       rQ   rà  z!_AppHandler._check_core_extensionÎ  s    € à˜Ð/Ñ0Ñ0Ø�K‰K×Ñ 	˜{¨!¬E¨7Ð3Ô4ØÙØ�K‰K×Ñ 	˜{¨"¬X¨JÐ7Ô8ØØ˜˜_Ñ-Ñ-Ø�K‰K×Ñ 	˜{¨"¬\¨NÐ;Ô<ØØ�‰×Ñ˜I˜; a¬ Ð7Ô8ØrS   c                 óÐ  — ||d   vr%| j                   j                  |› dt        › �«       y| j                  «       |   }|r&| j                   j                  |› dt        › d�«       y|r%| j                   j                  |› dt        › �«       yt        ||d   «      r%| j                   j                  |› dt        › �«       y| j                   j                  |› dt        › �«       y)z=Check if a common (non-core) extension is enabled or disabledr  r}  Fz (compatibility errors)rz  Tr|  )rB   r  r   r€  r   Ú_is_disabledr   r   )rN   ró   r  râ  Úerrorss        rQ   rá  z#_AppHandler._check_common_extensionÜ  sÚ   € à˜D Ñ.Ñ.Ø�K‰K×Ñ 	˜{¨!¬E¨7Ð3Ô4Øà×+Ñ+Ó-¨iÑ8ˆÙØ�K‰K×Ñ 	˜{¨!¬E¨7Ð2IÐJÔKØáØ�K‰K×Ñ 	˜{¨"¬X¨JÐ7Ô8Øä˜	 4¨
Ñ#3Ô4Ø�K‰K×Ñ 	˜{¨"¬\¨NÐ;Ô<Øà�‰×Ñ˜I˜; a¬ Ð7Ô8ØrS   c                 óì  — i }| j                   x|d<   }| j                  |«      x|d<   }| j                  «       |d<   | j                  «       |d<   g x|d<   }g x|d<   }|j	                  «       D ];  \  }}||d   v |d<   |d   d	k(  r|j                  |«       Œ* |j
                  |«       Œ= | j                  «       |d
<   t        | j                  «      |d<   |d   xs |}|d   d   |d<   |d   j                  dd«      |d<   | j                  |d<   | j                  |d<   t        | j                   «      |d<   t        | j                  «      |d<   |d   D �	cg c]  }	|	|d   v sŒ|	‘Œ c}	|d<   |S c c}	w )zGet information about the app.rM  r  rW  rh  Úapp_extensionsÚsys_extensionsÚis_localrY  rZ  r{  r�  rÊ   r  Ú	staticUrlr4   rK  r’   rT  rw  r~  )rM  Ú_get_extensionsÚ_get_local_extensionsÚ_get_linked_packagesr—  re   Ú _get_uninstalled_core_extensionsÚ_get_static_datar’   r|   rK  Ú_get_core_extensionsr   rá   )
rN   r  rM  r  rZ  r_   r÷   rD  Úapp_datar£  s
             rQ   rN  z_AppHandler._get_app_infoò  s¹  € ð ˆØ(,¯©Ð6ˆˆ[Ñ˜IØ*.×*>Ñ*>¸yÓ*IÐIˆˆ\Ñ˜Zà#'×#=Ñ#=Ó#?ˆÐÑ Ø"&×";Ñ";Ó"=ˆÐÑØ')Ð)ˆÐÑ Ø')Ð)ˆÐÑ Ø$×*Ñ*Ö,‰JˆD�$Ø# tÐ,>Ñ'?Ð?ˆD�ÑØ�JÑ 5Ò(Ø—
‘
˜4Õ à�—
‘
˜4Õ ð -ð $(×#HÑ#HÓ#JˆÐÑ ä.¨t¯|©|Ó<ˆˆ]ÑØ˜Ñ&Ò3¨)ˆØ" <Ñ0°Ñ;ˆˆY‰Ø$ \Ñ2×6Ñ6°{ÀBÓGˆˆ[ÑàŸ,™,ˆˆY‰ØŸ,™,ˆˆY‰ä"6°t·~±~Ó"FˆÐÑä'?À×@WÑ@WÓ'XˆÐ#Ñ$à Ò-ó!
Ù-�C°¸Ð=SÑ8TÒ1TŠCÐ-ñ!
ˆˆ_Ñð ˆùò!
s   ÅE1Å%E1c                 óö  — | j                   }d|v ry | j                  }t        j                  | j                  d«      }t        ||| j                  ¬«      }|j                  di «      }t        |t        «      rt        j                  |d«      }||d<   |j                  di «      }t        |t        «      rt        j                  |d«      }||d<   g }|d   D ]  }||d   v sŒ|j                  |«       Œ ||d	<   y )
Nr|  r  )rÆ  rB   rÑ  TrÈ  rÊ  rT  rä  )r  rá   rr   rg   r’   r   rB   r|   r<   r=   rÜ  rÝ  re   )	rN   r  rá   rÆ  rÉ  r|  rÊ  rä  r…  s	            rQ   r  z!_AppHandler._ensure_disabled_info  sö   € Ø�y‰yˆØ˜ÑØà!×4Ñ4ÐÜŸ8™8 D§L¡L°*Ó=Ðä%ØÐ1AÈ$Ï+É+ô
ˆð —?‘?Ð#7¸Ó<ˆô �h¤Ô%Ü—}‘} X¨tÓ4ˆHà#ˆˆZÑà—‘Ð!3°RÓ8ˆÜ�fœdÔ#Ü—]‘] 6¨4Ó0ˆFØˆˆX‰àˆØÐ)Ô*ˆCØ�d˜:Ñ&Ò&Ø×$Ñ$ SÕ)ð +ð !.ˆˆ_ÒrS   c                 óÖ  — | j                   }t        |d«      }|rIt        j                  |«      r4| j                  j                  d|› �«       t        || j                  «       | j                  «        |s| j
                  d   d   d   }| j                  j                  }|r+| j                  j                  d«       t        }t        dz   }nt        t        d«      }t        |d«      }	t        j                  |	«      rlt        |	«      5 }
t        j                   |
«      }d	d	d	«       d   j#                  dd
«      |k7  r+t        || j                  «       t%        j&                  |«       dD ].  }t        ||«      }t)        j*                  t        ||«      |«       Œ0 dD ]3  }t        ||«      }t)        j*                  t        t        d|«      |«       Œ5 t        |d«      }t        j                  |«      rt        || j                  «       	 t)        j,                  t        |d«      |«       t        |d«      }t        j                  |«      rt        || j                  «       t%        j&                  |«       | j
                  d   }d}| j
                  d   j3                  «       D ]f  \  }}||vr9| j5                  «       }|j7                  di «      }||= | j9                  |«       d}ŒCt        |d«      }| j;                  |||||   d«       Œh |r| j=                  «       | j
                  d<   | j
                  d   }|j3                  «       D ])  \  }}t        |d«      }| j;                  ||d   ||d«       Œ+ | j?                  «       }|d   }|r||d<   |r||d<   |r||d<   |�rtA        t        tB        ddd«      «      D ]„  }t        jD                  t        jF                  |«      «      }t        jH                  tK        |«      jM                  d¬«      «      }|d   }||d   v r||d   |<   ||d   |<   ||d   v sŒ}||d   |<   Œ† t        jF                  t        tB        d«      «      }||d    d!<   t        jN                  |d"d#d«      }t        |d"«      }t        j                  |«      rt)        jP                  |d¬$«       t        |d«      }	t        |	d%«      5 }
t        jR                  ||
d&¬'«       d	d	d	«       t        |d(«      }t        t        dd(«      } t        j                  |«      sLt)        j*                  | |«       t%        jT                  |tV        jX                  tV        jZ                  z  «       y	y	# 1 sw Y   �Œ_xY w# t(        j.                  $ r?}dt1        |«      vxr dt1        |«      v}|st        j                  |«      s‚ Y d	}~�Œ©d	}~ww xY w# 1 sw Y   ŒêxY w))z+Set up the assets in the staging directory.r©   rý   rM  rÊ   r  z)Splicing dev packages into app directory.r’  r�  Nr4   )úindex.jszbootstrap.jszpublicpath.jszwebpack.config.jszwebpack.prod.config.jszwebpack.prod.minimize.config.js)z.yarnrc.ymlzyarn.jsÚ	templatesz
[Errno 22]z	[Errno 5]rh  r  FrW  TrX  r÷   rì  r±   Ú*r5   )r;   r‘  ÚlinkedPackagesÚresolutionsÚbuilderÚdevDependenciesz@jupyterlab/builderÚnode_modulesz@jupyterlab)Úignore_errorsÚwé   ©Úindentz	yarn.lock).r’   ru   rr   r‘   rB   r  r  r_  rJ  râ   rE   r¥   r%   r(   r:  r<  Úloadr|   rz   ÚmakedirsÚshutilÚcopyÚcopytreeÚErrorrŠ   r—  r\  ra  r^  Ú_update_localrî  r–  r   rŸ   r­  rs   r=  r   Ú	read_textrg   ÚrmtreeÚdumpÚchmodÚstatÚS_IWRITEÚS_IREAD)!rN   r÷   r  r  r	  r’   r©   râ   Ú
source_dirrš  ÚfidrD  Úfnamer¦   r÷  r¬  Ú
real_errorÚ
linked_dirr  Úremovedr…  rX  rÛ   r§  r™  r†  Újlabrš   Ú
local_pathÚpkg_datarý  Ú	lock_pathÚlock_templates!                                    rQ   rr  z_AppHandler._populate_staging6  s-  € à—,‘,ˆÜ˜ Ó+ˆÙ”S—Z‘Z Ô(Ø�K‰K×Ñ˜y¨¨	Ð2Ô3Ü�G˜TŸ[™[Ô)à×ÑÔÙØ—i‘i Ñ,¨\Ñ:¸9ÑEˆGàŸ™×3Ñ3ˆÙØ�K‰K×ÑÐIÔJÜ ˆJÜ! JÑ.‰Gäœt YÓ/ˆJô ˜ .Ó1ˆä�:‰:�hÔÜ�h” 3Ü—y‘y “~�÷  à�LÑ!×%Ñ% i°Ó4¸Ò?Ü˜ §¡Ô-Ü—‘˜GÔ$ó
ˆEô ˜7 EÓ*ˆFÜ�K‰Kœ˜j¨%Ó0°&Õ9ð
ó 0ˆEÜ˜7 EÓ*ˆFÜ�K‰Kœœd I¨uÓ5°vÕ>ð 0ô
 ˜' ;Ó/ˆ	Ü�:‰:�iÔ Ü�I˜tŸ{™{Ô+ð		Ü�O‰OœE *¨kÓ:¸IÔFô ˜7Ð$5Ó6ˆ
Ü�:‰:�jÔ!Ü�J §¡Ô,Ü
�‰�JÔð —Y‘Y˜|Ñ,ˆ
ØˆØŸ9™9Ð%7Ñ8×>Ñ>Ö@‰KˆC�à˜*Ñ$Ø×0Ñ0Ó2�Ø×(Ñ(Ð);¸RÓ@�Ø˜�IØ×(Ñ(¨Ô0Ø�ØÜ˜' <Ó0ˆEØ×Ñ˜s F¨E°:¸c±?ÐDVÕWð Añ Ø,0×,FÑ,FÓ,HˆD�I‰IÐ(Ñ)ð —‘Ð,Ñ-ˆØŸ™ž‰IˆC�Ü˜'Ð#4Ó5ˆEØ×Ñ˜s D¨¡N°E¸4ÐARÕSð (ð
 ×)Ñ)Ó+ˆØ�LÑ!ˆáØ%ˆD�‰OáØˆD�‰LáØ *ˆD�Ñò äœU¤9¨j¸#¸~ÓNÖO�Ü Ÿ[™[¬¯©°TÓ):Ó;�
ÜŸ:™:¤d¨4£j×&:Ñ&:ÀGÐ&:Ó&LÓM�Ø Ñ'�Ø˜4 Ñ/Ñ/Ø1;�D˜Ñ(¨Ñ.Ø3=�DÐ)Ñ*¨4Ñ0Ø˜4 Ñ.Ò.Ø0:�D˜Ñ'¨Ò-ð Pô Ÿ™¤U¬9°iÓ%@ÓAˆJØ=GˆDÐ"Ñ#Ð$9Ñ:Ü—X‘X˜g ~°}ÀiÓPˆFô ! ¨.Ó9ˆLÜ�z‰z˜,Ô'Ü—‘˜l¸$Õ?ô ˜ .Ó1ˆÜ�(˜CÔ  CÜ�I‰I�d˜C¨Õ*÷ !ô ˜' ;Ó/ˆ	Üœd I¨{Ó;ˆÜ�z‰z˜)Ô$Ü�K‰K˜ yÔ1Ü�H‰H�Y¤§¡´·±Ñ <Õ=ð %÷c  ‘ûô8 �|‰|ò 	ð
 &¬S°«ZÐ7ÒY¸KÌsÐSXËzÐ<YˆJÙ¤§¡¨IÔ!6Øõ "7ûð	ú÷^ !Ð ús0   Ä
U=È V
 ÓWÕ=VÖ
WÖ4W×W×W(c                 óL  ‡ — ‰ j                   }t        ‰ j                  d   «      }‰ j                  d   }‰ j                  d   }‰ j                  d   }‰ j                  d   }|d   }ˆ fd„}	i |d<   |j                  «       D ]0  \  }
}|
|v rŒ||d   |
<   d	‰ j                  d   |
   d
   z   |d   |
<   Œ2 |j                  «       D ]W  \  }
}|
|v rŒt	        ‰ j
                  dd«      }t	        ||d   «      } |	|«      |d   |
<   |d   |d   |
<    |	|«      |d   |
<   ŒY i |d   d<   ‰ j                  «       }|j                  «       D ]n  \  }
}||
   }|r|st        ||
|d   |«       Œ! |	|d
   «      |d   |
<   |d   }dD ]3  }|j                  |d«      }|sŒ|du rd}|||dz      |
<   ||d   d   |
<   Œ5 Œp ‰ j                  d   D ][  }||d   v r|d   d   j                  |«       n||d   v r|d   d   j                  |«       ||d   v sŒH|d   j                  |«       Œ] |S )z3Get the template the for staging package.json file.rM  rW  rh  r  r~  rÊ   c                 ó4  •— t        j                  | t        j                  t        j                  t	        ‰j
                  d«      «      «      «      } d| j                  t        j                  d«      z   } t        j                  dk(  r| j                  «       } | S )Nr©   úfile:rX   Únt)rr   Úrelpathrs   Úrealpathru   r’   Úreplacerz   Úsepr÷   Úlower)rš   rN   s    €rQ   Úformat_pathz6_AppHandler._get_package_template.<locals>.format_pathÎ  se   ø€ Ü—;‘;˜t¤S§[¡[´·±¼eÀDÇLÁLÐR[Ó>\Ó1]Ó%^Ó_ˆDØ˜TŸ\™\¬"¯&©&°#Ó6Ñ6ˆDÜ�w‰w˜$ŠØ—z‘z“|�ØˆKrS   rù  r  rš   rú  r©   Úfilenamer‘  rX  ÚextensionMetadatar  )ró   ÚmimeExtensionFTr4   Úsr{  r”  )
rB   r   r  r—  ru   r’   r€  Ú_log_single_compat_errorsr|   rÄ   )rN   r“  rB   rD  re  r™  r  r~  r  r%  r…  rX  r†  rš   rx  rÔ  rç  Ú	jlab_datar£  s   `                  rQ   r–  z!_AppHandler._get_package_templateÃ  s°  ø€ à—‘ˆä˜Ÿ	™	 +Ñ.Ó/ˆØ—	‘	Ð,Ñ-ˆØ—‘Ð,Ñ-ˆØ—Y‘Y˜|Ñ,ˆ
ØŸ	™	 /Ñ2ˆØ�LÑ!ˆô	ð "$ˆÐÑð !Ÿ;™;ž=‰KˆC�Ø�mÑ#ØØ*0ˆDÐ!Ñ" 3Ñ'Ø'.°·±¸<Ñ1HÈÑ1MÈfÑ1UÑ'UˆD�Ñ Ò$ð	 )ð  Ÿ™ž‰IˆC�Ø�mÑ#ØÜ˜Ÿ™ yÐ2CÓDˆDÜ˜˜t JÑ/Ó0ˆDÙ(3°DÓ(9ˆD�Ñ  Ñ%Ø*.¨x©.ˆDÐ!Ñ" 3Ñ'Ù'2°4Ó'8ˆD�Ñ Ò$ð (ð 35ˆˆ\ÑÐ.Ñ/ð ×2Ñ2Ó4ˆØ$×*Ñ*Ö,‰JˆC�à" 3Ñ'ˆFÙÙÜ-¨f°c¸5ÀÑ;KÈVÔTØá(3°E¸&±MÓ(BˆD�Ñ  Ñ%à˜lÑ+ˆIÛ6�Ø—m‘m D¨%Ó0�ÙØØ˜$‘;Ø�CØ(+��T˜C‘ZÑ  Ñ%ð @I��\Ñ"Ð#6Ñ7¸Ò<ñ 7ð -ð. —I‘IÐ0Ô1ˆDØ�t˜LÑ)Ñ)Ø�\Ñ" <Ñ0×4Ñ4°TÕ:Ø˜Ð.Ñ/Ñ/Ø�\Ñ"Ð#3Ñ4×8Ñ8¸Ô>à�t˜NÑ+Ò+Ø�^Ñ$×(Ñ(¨Õ.ð 2ð ˆrS   c                 ó°   — t        «       5 }| j                  ||«      }t        ||d   «      }t        j                  |«       cddd«       S # 1 sw Y   yxY w)zwCheck if a local package has changed.

        `dname` is the directory name of existing package tar archives.
        r&  N)r   rÀ  ru   rr   r‘   )rN   r÷   rX  r§  rd  r  r¦   s          rQ   r˜  z_AppHandler._check_local  sL   € ô  Ô! WØ×(Ñ(¨°Ó9ˆDô
 ˜5 $ zÑ"2Ó3ˆFÜ—z‘z &Ó)Ð)÷ "×!Ò!ús   ‹7AÁAc           	      ó¨  — |d   }t        j                  t        ||«      «      sd}t        «       5 }| j	                  ||«      }|d   |k(  r|cddd«       S t        j                  |d   t        ||d   «      «       ddd«       |rt        j                  t        ||«      «       d   |d<   t        |d   |d   «      |d<   |d   S # 1 sw Y   ŒLxY w)z5Update a local dependency.  Return `True` if changed.r&  r4   Nrš   Útar_dir)	rr   r‘   ru   r   rÀ  r  Úmoverz   r]  )	rN   r÷   rX  r§  rD  Údtyperb  rd  r  s	            rQ   r	  z_AppHandler._update_local  sÓ   € ð ˜
Ñ#ˆÜ�z‰zœ%  xÓ0Ô1ØˆHäÔ! WØ×(Ñ(¨°Ó9ˆDð �JÑ 8Ò+Ø÷ "Ñ!ô �K‰K˜˜V™¤e¨E°4¸
Ñ3CÓ&DÔE÷ "ñ Ü�I‰I”e˜E 8Ó,Ô-à 
Ñ+ˆˆZÑÜ˜T )™_¨d°:Ñ.>Ó?ˆˆV‰Ø�JÑÐ÷ "Ð!ús   ±CÁ&CÃCc                 óD  — | j                   }i }t        | j                  d«      }t        | j                   d«      }| j                  | j                  |«      }t        |d«      }||k(  st	        j
                  |«      s|S |j                  | j                  ||«      «       |S )z'Get the extensions for the application.r  )r’   ru   rK  Ú_get_extensions_in_dirrr   r‘   Úupdate)rN   rM  r’   r  Úsys_pathÚapp_paths         rQ   rí  z_AppHandler._get_extensions5  s�   € à—,‘,ˆØˆ
ô ˜Ÿ™ |Ó4ˆÜ˜Ÿ™ |Ó4ˆà×0Ñ0°·±¸yÓIˆ
ô ˜ ,Ó/ˆØ�xÒ¤s§z¡z°(Ô';ØÐà×Ñ˜$×5Ñ5°g¸yÓIÔJàÐrS   c                 óB  — i }|| j                   k(  rdnd}t        t        |dd«      «      D ]ð  }t        |«      }|j	                  di «      }|d   }|j	                  di «      }	t        j                  |«      }
t        j                  |«      }|j                  t        «      r|t        t        «      t        d«        }nd	}t        |«      }|j	                  d
d«      |
t        j                  |
«      ||d   |r|nd	|	|t        j                  |
«      |dœ
||xs |<   Œò |S )z(Get the extensions in a given directory.rZ  r_   r  ú*.tgzr‘  r÷   rÊ   ú.tgzNÚdescriptionr4   r  )
r9  rš   r&  Úurlr  r¸  rÊ   r‘  r.  rY  )r’   r   ru   rE  r|   rr   rs   Úbasenamer�   Ú
PIN_PREFIXrA  r   r­  )rN   r§  rM  r  rY  r¦   rD  Údepsr÷   r  rš   r&  Úaliasr:  s                 rQ   r2  z"_AppHandler._get_extensions_in_dirI  s  € àˆ
Ø! T§\¡\Ò1‘5°uˆÜœ5 ¨°gÓ>Ö?ˆFÜ Ó'ˆDØ—8‘8˜N¨BÓ/ˆDØ˜‘<ˆDØ—8‘8˜L¨"Ó-ˆDÜ—;‘;˜vÓ&ˆDä—|‘| FÓ+ˆHØ×"Ñ"¤:Ô.Ø ¤¤Z£´C¸³K°<Ð@‘à�Ü! $Ó'ˆCà#Ÿx™x¨°rÓ:ØÜŸL™L¨Ó.ØØ 	™?á05©¸4Ø"Ø $ÜŸ;™; tÓ,Ø$ñ)ˆJ�u’} Ò%ð @ð4 ÐrS   c                 óP  — i }| j                   d   }t        «       }| j                   d   j                  «       D ]+  \  }}|d   }t        |||«      ||<   |j	                  |«       Œ- | j                   d   j                  «       D ]  \  }}||v rŒ|d   }t        |||«      ||<   Œ! |S )z%Get the extension compatibility info.rM  rw  r‘  r  )r  Úsetr—  Ú_validate_compatibilityrM   )rN   ÚcompatrM  Úseenr÷   rD  r=  s          rQ   r€  z!_AppHandler._get_extension_compati  s´   € àˆØ—I‘I˜kÑ*ˆ	Ü‹uˆØŸ)™)Ð$:Ñ;×AÑAÖC‰JˆD�$Ø˜Ñ'ˆDÜ2°4¸¸yÓIˆF�4‰LØ�H‰H�T�Nð Dð Ÿ)™) LÑ1×7Ñ7Ö9‰JˆD�$Ø�t‰|ØØ˜Ñ'ˆDÜ2°4¸¸yÓIˆF�4ŠLð	 :ð
 ˆrS   c                 ó$   — | j                  d«      S )z%Get the locally installed extensions.rW  )Ú_get_local_datarÎ   s    rQ   rî  z!_AppHandler._get_local_extensionsy  s   € à×#Ñ#Ð$6Ó7Ð7rS   c                 ó  — | j                  d«      }t        | j                  dd«      }|j                  «       D ]  \  }}|d|dœ||<   Œ t	        j
                  |«      s|S t        t        |d«      «      D ]Ž  }t	        j                  |«      }t        |«      }|d   }||vr4| j                  j                  d|› �«       t        j                  |«       Œ`||   }t	        j                  |«      |d<   ||d	<   |d
   |d
<   ||d<   Œ� |S )zGet the linked packages.rh  r©   r4   )rX  r&  r.  r7  r÷   z!Removing orphaned linked package r&  rš   r  rD  )rE  ru   r’   r—  rr   r‘   r   rs   rE  rB   rR  rz   r]  r;  )rN   r  r§  r÷   rX  rš   rD  r†  s           rQ   rï  z _AppHandler._get_linked_packages}  s  € à×#Ñ#Ð$5Ó6ˆÜ�d—l‘l IÐ/@ÓAˆØ ŸJ™JžL‰LˆD�&Ø$*¸ÀuÑMˆD�ŠJð )ô �z‰z˜%Ô ØˆKäœ˜u gÓ.Ö/ˆDÜ—;‘;˜tÓ$ˆDÜ Ó%ˆDØ˜‘<ˆDØ˜4ÑØ—‘×#Ñ#Ð&GÈÀvÐ$NÔOÜ—	‘	˜$”ØØ˜‘:ˆDÜ"Ÿ|™|¨DÓ1ˆD�ÑØˆD�‰LØ" 9™oˆD�‰OØˆD�ŠLð 0ð ˆrS   c                 óF   — | j                  «       }|j                  dg «      S )z$Get the uninstalled core extensions.rU  )r\  r|   rÚ   s     rQ   rð  z,_AppHandler._get_uninstalled_core_extensions–  s"   € à×(Ñ(Ó*ˆØ�z‰zÐ7¸Ó<Ð<rS   c                 ó  — g d¢}|D ]D  }t        | j                  |«      }t        j                  |«      rŒ/	 t	        j
                  |«       ŒF y# t        $ r(}|j                  t        j                  k7  r‚ Y d}~Œtd}~ww xY w)z-Ensure that the application directories exist)r  r  r©   ÚschemasÚthemesN)	ru   r’   rr   r‘   rz   r  rQ  ÚerrnoÚEEXIST)rN   Údirsr§  rš   Úes        rQ   r_  z_AppHandler._ensure_app_dirs›  sh   € âIˆÛˆEÜ˜Ÿ™ uÓ-ˆDÜ—:‘:˜dÕ#ðÜ—K‘K Õ%ñ	 øô
 ò Ø—w‘w¤%§,¡,Ò.Øô /ûðús   ·AÁ	B ÁA;Á;B c           
      óô  — | j                  «        | j                  }||› d�   }|sy||› d�   }i }|j                  d|› d|› �«       t        |«      D ]z  }||d   v rŒ|d   |   }|d   }	|d	   |   }
| j	                  ||||
«      }|d
   }|r|j                  d|› d|› d|	› |› �«       n|j                  d|› d|	› |› �«       |
sŒt|	|
f||<   Œ| t        ||| j                  «       |j                  d«       y)z$List the extensions of a given type.Ú_extensionsNÚ_dirr¾  z dir: rw  r  r  rx  r¸  ry  Ú ú vr4   )r  rB   r  rƒ  Ú_compose_extra_statusÚ_log_multiple_compat_errorsrä   )rN   r  r¢  rB   r3  r§  Úerror_accumulatorr÷   rD  r  rç  Úextrar¸  s                rQ   r‚  z_AppHandler._list_extensions§  s@  € à×"Ñ"Ô$Ø—‘ˆØ˜�z Ð-Ñ.ˆÙØà˜�z Ð&Ñ'ˆàÐà�‰�c˜(˜ 6¨%¨Ð1Ô2Ü˜5–MˆDØ�tÐ2Ñ3Ñ3ØØ˜Ñ% dÑ+ˆDØ˜9‘oˆGØ˜/Ñ*¨4Ñ0ˆFØ×.Ñ.¨t°T¸4ÀÓHˆEð $(Ð(>Ñ#?Ð Ù#Ø—‘˜h t f¨AÐ.BÐ-CÀ2ÀgÀYÈuÈgÐVÕWà—‘˜h t f¨B¨w¨i¸°wÐ?Ô@ÚØ+2°FÐ*;Ð! $Ò'ð "ô$ 	$ FÐ,=¸t¿|¹|ÔLð 	�‰�B�rS   c           	      óš  — | j                  «        | j                  }| j                  }i }t        j	                  | j
                  d«      }|d   j                  «       D ]
  }d||d   <   Œ |j                  «       D ]·  \  }}|sŒ	|j                  |«       |d   D ]…  }|d   |   }	|	d   |k7  rŒ|	d   }
|d   |   }| j                  |||	|«      }|	j                  d«      }|r|dj                  |d	   |d
   «      z  }|j                  d|› d|
› |› �«       |sŒ|
|f||<   Œ‡ |j                  d«       Œ¹ t        ||| j                  «       y )NFrw  TÚext_dirr  rx  ro  z	 ({}, {})ÚpackageManagerÚpackageNamery  rS  r4   )r  r  rB   rÜ  rÝ  rá   Úvaluesr—  rT  r|   ÚformatrU  rä   )rN   r  rB   rV  Úext_dirsrÔ  rY  Úhas_extsr÷   rD  r  rç  rW  ro  s                 rQ   r�  z&_AppHandler._list_federated_extensionsË  so  € Ø×"Ñ"Ô$Ø�y‰yˆØ—‘ˆàÐä—=‘= ×!8Ñ!8¸%Ó@ˆØÐ0Ñ1×8Ñ8Ö:ˆEØ)-ˆH�U˜9Ñ%Ò&ð ;ð "*§¡Ö!1ÑˆG�XÙØØ�K‰K˜Ô ØÐ3Ô4�ØÐ2Ñ3°DÑ9�Ø˜	‘? gÒ-ØØ˜y™/�Ø˜oÑ.¨tÑ4�Ø×2Ñ2°4¸¸tÀVÓL�àŸ(™( 9Ó-�ÙØ˜[×/Ñ/°Ð8HÑ0IÈ7ÐS`ÑKaÓbÑb�EØ—‘˜h t f¨B¨w¨i¸°wÐ?Ô@ÚØ/6¸Ð.?Ð% dÒ+ð 5ð �K‰K˜�Oð' "2ô, 	$ FÐ,=¸t¿|¹|ÕLrS   r÷   r  rD  Úreturnc                 óZ  — d}t        ||d   «      r|dt        › �z  }n|dt        › �z  }|r|dt        › �z  }n|dt        › �z  }|d   r|dz  }t        ||d   «      }|j                  r|dz  }|S |j                  r-dj                  t        |j                  «      «      }|d	|› d
�z  }|S )Nr4   r|  rR  rë  rø  rÊ  u    ðŸ”’ (all plugins locked)rm  u    ðŸ”’ (plugins: z locked))
ræ  r   r   r   r   Ú
_is_lockedÚentire_extension_lockedÚlocked_pluginsrg   rƒ  )rN   r÷   r  rD  rç  rW  Úlock_statusÚplugin_lists           rQ   rT  z!_AppHandler._compose_extra_statusî  sÔ   € ØˆÜ˜˜d :Ñ.Ô/Ø�qœ˜Ð'Ñ'‰Eà�qœ˜Ð(Ñ(ˆEÙØ�qœ˜�[Ñ ‰Eà�qœ˜
�^Ñ#ˆEØ�
ÒØ�S‰LˆEÜ   t¨H¡~Ó6ˆØ×.Ò.ØÐ1Ñ1ˆEð ˆð ×'Ò'ØŸ)™)¤F¨;×+EÑ+EÓ$FÓGˆKØÐ'¨ }°HÐ=Ñ=ˆEØˆrS   c                 óÊ   — t        | j                  dd«      }t        j                  |«      si S t	        |«      5 }t        j                  |«      cddd«       S # 1 sw Y   yxY w)z*Get the build config data for the app dir.r  úbuild_config.jsonN)ru   r’   rr   r‘   r:  r<  r  )rN   r¦   r  s      rQ   r\  z_AppHandler._read_build_config  sD   € ä�t—|‘| ZÐ1DÓEˆÜ�z‰z˜&Ô!ØˆIä�f” Ü—y‘y “~÷ —’ús   ºAÁA"c                 óÄ   — | j                  «        t        | j                  dd«      }t        |d«      5 }t	        j
                  ||d¬«       ddd«       y# 1 sw Y   yxY w)z&Write the build config to the app dir.r  rh  rÿ  r   r  N)r_  ru   r’   r:  r<  r  )rN   rÛ   r¦   r  s       rQ   r^  z_AppHandler._write_build_config  sI   € à×ÑÔÜ�t—|‘| ZÐ1DÓEˆÜ�&˜#Ô #Ü�I‰I�f˜c¨!Õ,÷ ×Ñús   ´AÁAc                 ór  — | j                  «       }|j                  |i «      }g }|j                  «       D ],  \  }}t        j                  |«      rŒ|j                  |«       Œ. |D ];  }|j                  dd«      }d|› d|› d�}| j                  j                  |«       ||= Œ= |r| j                  |«       |S )z5Get the local data for extensions or linked packages.rk   rR  z**Note: Removing dead z "r­   )
r\  ra  r—  rr   r‘   re   r"  rB   rR  r^  )	rN   rX  rÛ   rD  Údeadr÷   Úsource_Ú	link_typerP   s	            rQ   rE  z_AppHandler._get_local_data  s´   € à×(Ñ(Ó*ˆà× Ñ  ¨Ó,ˆØˆØ!ŸZ™Zž\‰MˆD�'Ü—:‘:˜gÕ&Ø—‘˜DÕ!ð *ó ˆDØŸ™ s¨CÓ0ˆIØ*¨9¨+°R¸°v¸QÐ?ˆCØ�K‰K×Ñ Ô$Ø�T‘
ð	 ñ Ø×$Ñ$ VÔ,àˆrS   c                 óF  — | j                  |||¬«      }|d   }d|dd vxr |d    }|d   }t        |«      }|r9dj                  |«      }	d	|› d
|	› �}
|r	 | j                  |«      }nt        |
«      ‚|j                  di «      }t        ||| j                  «      }|rât        |d   |d   |«      }
|rÂ	 | j                  |«      }|ri|rg| j                  j                  d|› �«       | j                  j                  d|› �«       t        «       5 }| j                  |› d|› �|«      cddd«       S dj                  |
j                  «       dd «      }dj                  | j                  |«      d|f«      }
t        |
«      ‚t!        | j"                  d|d   «      }t%        j&                  |«      rt)        j*                  |«       t-        j.                  |d   |«       ||d<   |S # t        $ r t        |
«      d‚w xY w# t        $ r t        |
«      d‚w xY w# 1 sw Y   ŒïxY w)zBInstall an extension with validation and return the name and path.rð   rD  rº  rÎ  NrV  r÷   r[   r­   z" is not a valid extension:
r‘  r  zIncompatible extension:
zFound compatible version: é   r4   z

r  r&  rš   )rÀ  rÁ  rg   r»  r
   r?   r|   rA  rM  Ú_format_compatibility_errorsrB   rE   r   r`  Ú
splitlinesÚ%_format_no_compatible_package_versionru   r’   rr   r‘   rz   r]  r  r/  )rN   ró   rd  rñ   r  rD  Úallow_fallbackr÷   r�  Úall_messagesrP   r  r=  rç  Útempdir2Ú	conflictsr¦   s                    rQ   r`  z_AppHandler._install_extension'  s6  € à×$Ñ$ Y°¸SÐ$ÓAˆØ�F‰|ˆð  I¨a¨b MÐ1ÒH¸$¸x¹.Ð6HˆØ�F‰|ˆô ' tÓ,ˆÙØŸ9™9 XÓ.ˆLØ�i�[Ð =¸l¸^ÐLˆCÙð4Ø"×EÑEÀdÓK‘Gô ! “oÐ%ð �x‰x˜¨Ó+ˆÜ(¨°D¸$¿.¹.ÓIˆÙÜ.¨t°F©|¸TÀ)¹_ÈfÓUˆCÙð4Ø"×EÑEÀdÓK�Gñ
 ™tØ—K‘K×%Ñ%Ð(AÀ$ÀÐ&HÔIØ—K‘K×%Ñ%Ð(BÀ7À)Ð&LÔMÜ+Ô-°Ø#×6Ñ6¸$¸¸qÀÀ	Ð7JÈHÓU÷ .Ñ-ð !ŸI™I c§n¡nÓ&6°q°rÐ&:Ó;�	Ø—g‘g˜t×IÑIÈ$ÓOÐQWÐYbÐcÓd�ä˜S“/Ð!ô �t—|‘| \°4¸
Ñ3CÓDˆÜ�:‰:�fÔÜ�I‰I�fÔä�‰�D˜‘L &Ô)àˆˆV‰ØˆøôK  ò 4Ü$ S›/¨tÐ3ð4ûô  ò 4ä$ S›/¨tÐ3ð4ú÷ .Ð-ús$   ÁG% Â5G> ÄHÇ%G;Ç>HÈH c                 ó  — t        j                  |«      xr t        j                  |«      }|r9t        j                  t        |d«      «      s| j	                  dt
        dg|¬«       ||dœ}| j	                  t        d«      d|g|¬«      }|dk7  rd	|› d
�}t        |«      ‚t        t        |d«      «      d   }t        |«      |d<   |rBt        |«      x|d<   }	|j                  dd|	› d�«      }
t        j                  ||
«       |
|d<   n||d<   |rH|d   }t        t        j                  |«      t        › |› d�«      }t        j                  ||«       ||d<   t        j                   |d   «      |d<   |d   d   |d<   |d   d   |d<   |S )zÇCall `npm pack` for an extension.

        The pack command will download the package tar if `source` is
        a package name, or run `npm pack` locally if `source` is a
        directory.
        rý  r–   ro  rj  )rX  rV  ÚnpmÚpackr   r­   ú" is not a valid npm packager7  rD  Úshar8  rU   rš   r&  r÷   r  )rr   r‘   r¿  ru   rq  r)   r   r?   r   rE  Ú_tarsumr"  r  r/  r­  r<  r;  )rN   rX  rd  rñ   rV  r  r    rP   rš   r{  r¦   Úold_pathÚnew_paths                rQ   rÀ  z_AppHandler._extract_packageb  s‡  € ô —‘˜FÓ#Ò9¬¯	©	°&Ó(9ˆÙœ#Ÿ*™*¤U¨6°>Ó%BÔCØ�I‰I�vœy¨)Ð4¸&ˆIÔAà ¨FÑ3ˆà�i‰iœ˜u› v¨vÐ6¸GˆiÓDˆØ�!Š8Ø�f�XÐ9Ð:ˆCÜ˜S“/Ð!ä”E˜' 7Ó+Ó,¨QÑ/ˆÜ# DÓ)ˆˆV‰ÙÜ '¨£Ð-ˆD�‰K˜#Ø—\‘\ &¨A¨c¨U°$¨-Ó8ˆFÜ�K‰K˜˜fÔ%Ø!ˆD�ŠLàˆD�‰LÙØ˜F‘|ˆHÜœSŸ[™[¨Ó2´z°lÀ3À%ÀtÐ4LÓMˆHÜ�K‰K˜ (Ô+Ø#ˆD�‰LäŸ<™<¨¨V©Ó5ˆˆZÑØ˜F‘| FÑ+ˆˆV‰Ø˜v™, yÑ1ˆˆY‰àˆrS   c                 ó  — | j                   d   }	 t        | j                  || j                  «      }|j                  di «      }d„ }t        |j                  «       |d¬«      D ]Š  \  }}|j                  di «      }t        |||«      }	|	rŒ(d|v r"| j                  j                  d	|› d
|› �«       ŒNt        «       5 }
| j                  |› d
|› �|
«      }ddd«       t        d   «      r y|c S  y# t        $ r Y yw xY w# 1 sw Y   Œ.xY w)ú.Get the latest compatible version of a packagerM  NÚversionsc                 ó"   — t        | d   d¬«      S ©Nr   T)Úprerelease_first©Ú_semver_key©Ú	key_values    rQ   Úsort_keyz@_AppHandler._latest_compatible_package_version.<locals>.sort_key“  s   € Ü˜y¨™|¸dÔCÐCrS   T©r…  Úreverser‘  Ú
deprecatedz@Disregarding compatible version of package as it is deprecated: rº  rD  )r  Ú_fetch_package_metadatarÕ   rB   r
   r|   rƒ  r—  rA  rE   r   rÀ  rÁ  )rN   r÷   rM  Úmetadatar�  r‰  r  rD  r=  rç  rd  r  s               rQ   r»  z._AppHandler._latest_compatible_package_version‰  s  € à—I‘I˜kÑ*ˆ	ð	Ü.¨t¯}©}¸dÀDÇKÁKÓPˆHð —<‘< 
¨BÓ/ˆò	Dô $ H§N¡NÓ$4¸(ÈD×Q‰MˆG�TØ—8‘8˜N¨BÓ/ˆDÜ,¨T°4¸ÓCˆFÚð   4Ñ'Ø—K‘K×%Ñ%ØZÐ[_ÐZ`Ð`aÐbiÐajÐkôð ä'Ô)¨WØ×0Ñ0°D°6¸¸7¸)Ð1DÀgÓN�D÷ *ä& t¨F¡|Ô4áà’ñ% Røô ò 	Ùð	ú÷( *Ð)ús   ‘!C1 Â;D Ã1	C=Ã<C=Ä D		c                 ó8  — | j                   d   }g }|D ]›  }	 t        | j                  || j                  «      }|j                  di «      }d„ }t        |j                  «       |d¬«      D ]C  \  }}	d|	v rŒ|	j                  di «      }
t        ||
|«      }|rŒ-|j                  |› d|› �«        Œ› Œ� i }|s|S t        «       5 }| j                  t        d	«      d
g|¢|¬«      }|dk7  rd|› d�}t        |«      ‚|D ]v  }|d   j                  dd«      |dd j                  dd«      j                  dd«      z   dz   }t        t!        j"                  ||«      «      }	t%        |	«      rŒl|	d   ||	d   <   Œx 	 ddd«       |S # t        $ r Y �Œww xY w# 1 sw Y   |S xY w)zÉGet the latest compatible versions of several packages

        Like _latest_compatible_package_version, but optimized for
        retrieving the latest version for several packages in one go.
        rM  r�  c                 ó"   — t        | d   d¬«      S rƒ  r…  r‡  s    rQ   r‰  z@_AppHandler.latest_compatible_package_versions.<locals>.sort_key»  ó   € Ü" 9¨Q¡<À$ÔGÐGrS   TrŠ  rŒ  r‘  rº  rx  ry  rj  r   r­   rz  r4   rÎ  NrU   rX   r8  r  r÷   )r  r�  rÕ   rB   r
   r|   rƒ  r—  rA  re   r   rq  r   r?   r"  rE  rr   rg   rÁ  )rN   r3  rM  Úkeysr÷   rŽ  r�  r‰  r  rD  r=  rç  rd  r    rP   r…  r  s                    rQ   r2  z._AppHandler.latest_compatible_package_versionsª  s¾  € ð —I‘I˜kÑ*ˆ	àˆÛˆDðÜ2°4·=±=À$ÈÏÉÓT�ð  —|‘| J°Ó3ˆHòHô "(¨¯©Ó(8¸hÐPT×!U‘�˜à 4Ñ'Øà—x‘x °Ó3�Ü0°°t¸YÓG�Úà—K‘K 4 &¨¨'¨Ð 3Ô4Ùñ "Vð ð. ˆÙØˆOÜÔ! WØ—)‘)œU 5›\¨6Ð9°DÐ9¸w�)ÓGˆCØ�aŠxØ˜$˜Ð;Ð<�Ü  “oÐ%ã�à˜‘F—N‘N 3¨Ó+¨c°!°"¨g¯o©o¸cÀ3Ó.G×.OÑ.OÐPSÐUXÓ.YÑYÐ\bÑbð ô $¤C§H¡H¨W°eÓ$<Ó=�ä*¨4Õ0à-1°)©_�H˜T &™\Ò*ñ ÷ "ð ˆøôM ò Úðú÷. "ð ˆús$   ˜!E?ÃB$FÅ'FÅ?	FÆFÆFc                 ó0  — | j                   d   }d}d}	 t        | j                  || j                  «      }|j	                  di «      }d„ }t        t        |j                  «       |d¬«      «      }|d   d   j	                  d	i «      }	|d
   }
|d   d   }|	j                  «       D ]-  \  }}||v sŒt        |
|   |d¬«      }|xs |dk  }|xs |dkD  }Œ/ 	 |rd|› d�S d|› d�g}|r|j                  d«       dj                  |«      S # t        $ r Y Œ>w xY w)r€  rM  Fr�  c                 ó"   — t        | d   d¬«      S rƒ  r…  r‡  s    rQ   r‰  zC_AppHandler._format_no_compatible_package_version.<locals>.sort_keyî  r‘  rS   TrŠ  r   rÎ  r‘  rú  rÊ   ÚsingletonPackages©Údrop_prerelease1úThe extension "z:" does not yet support the current version of JupyterLab.
zNo version of zJ could be found that is compatible with the current version of JupyterLab.)z9However, it seems to support a new version of JupyterLab.zConsider upgrading JupyterLab.rR  )r  r�  rÕ   rB   r|   r>   rƒ  r—  Ú_compare_rangesr
   Úextendrg   )rN   r÷   rM  Úlab_newer_than_latestÚlatest_newer_than_labrŽ  r�  r‰  ÚstoreÚlatest_depsÚ	core_depsÚ
singletonsr…  rÔ  ÚcÚpartss                   rQ   rr  z1_AppHandler._format_no_compatible_package_versionÞ  s`  € à—I‘I˜kÑ*ˆ	à %Ðð !&Ðð	KÜ.¨t¯}©}¸dÀDÇKÁKÓPˆHð  —|‘| J°Ó3ˆHòHô œ& §¡Ó!1°xÈÔNÓOˆEØ ™( 1™+Ÿ/™/¨.¸"Ó=ˆKØ! -Ñ0ˆIØ" <Ñ0Ð1DÑEˆJà)×/Ñ/Ö1‘
��UØ˜*Ò$ô (¨	°#©¸ÐPTÔU�AØ,AÒ,JÀQÈÁUÐ)Ø,AÒ,JÀQÈÁUÑ)ñ 2ñ !ð " $ Ð'bÐcðð
 ˜T˜Fð #1ð 1ð
ˆñ !Ø�L‰Lðôð �x‰x˜‹ÐøôU ò 	Ùð	ús   •!D	 Ä		DÄDc                 óÄ   — | j                   j                  «       rd}t        |«      ‚| j                  |d<   | j                   |d<   t	        |fi |¤Ž}|j                  «       S )z]Run the command using our logger and abort callback.

        Returns the exit code.
        zCommand was killedrB   rO   )rO   r@   r?   rB   r2   rl   )rN   rD   rÆ   rP   rJ   s        rQ   rq  z_AppHandler._run  sZ   € ð
 �?‰?×!Ñ!Ô#Ø&ˆCÜ˜S“/Ð!àŸ;™;ˆˆxÑØ#Ÿ™ˆˆ|ÑÜ˜sÑ- fÑ-ˆØ�y‰y‹{ÐrS   rÝ   )NNNFTTrÑ   )rH  T)rH  ©F)NNNF)2rm   rn   ro   rR   rò   r¤   r´   r)  r'  rö   rõ   rú   rû   r³  r+  r-  rË  r  rO  r"  r  rà  rá  rN  r  rr  r–  r˜  r	  rí  r2  r€  rî  rï  rð  r_  r‚  r�  rŠ   rÜ  rT  r\  r^  rE  r`  rÀ  r»  r2  rr  rq  rp   rS   rQ   rì   rì   s  s-  „ òó>,ð` ØØØØØó1$òfò(E>óNQòf5òn	òò,ò:ò,ò>!óF
,ó)óVó<4ó.Sòòò,"òH.ó@K>óZIòV*ò ò0ò(ò@ò 8òò2=ò

ò"òH!MðF¨#ð °Tð Àð ÐRUó ò(&ò-òó*9óv%òNòB2òh4ólrS   rì   c                 ó  — t        d«      }	 t        j                  |dgt        ¬«      }| j	                  |j                  d«      «       y# t        $ r/ t        «       j                  }|d   d   }d|› d�}t        |«      d‚w xY w)	z;Check for the existence of nodejs with the correct version.r–   znode-version-check.jsrj  r5   ÚengineszPlease install nodejs z\ before continuing. nodejs may be installed using conda or directly from the nodejs website.N)
r   rG   Úcheck_outputr(   rE   r?  Ú	Exceptionr'   rL  r?   )rB   r–   ÚoutputrD  ÚverrP   s         rQ   rë   rë   #  sˆ   € ä�‹=€Dð(Ü×(Ñ(¨$Ð0GÐ)HÌdÔSˆØ�‰�V—]‘] 7Ó+Õ,øÜò (Ü‹|×!Ñ!ˆØ�9‰o˜fÑ%ˆØ& s eð  ,Hð  IˆÜ˜‹o 4Ð'ð	(ús   �=A Á8Bc           	      óP  — i i dœ}	 t        d«      }	 t        j                  |t
        ddgt        j                  t        ¬«      }|j                  d«      }t        |j                  «       «      }	 |D ]T  }t        j                  |«      }|d   d	k(  sŒ!|d
   }t        j                  t        |«      «      }	|	d   dk(  sŒM|	d
   ||<   ŒV 	 | j                  d«       |S # t        $ r | j                  d«       |cY S w xY w# t        $ r Y Œ@w xY w# t        j                  $ r^}
| j!                  dj#                  |
j$                  j                  d«      |
j&                  j                  d«      «      «       Y d}
~
|S d}
~
wt(        $ r}
| j!                  d|
›�«       Y d}
~
|S d}
~
ww xY w)zšGet the yarn configuration.

    Returns
    -------
    {"yarn config": dict, "npm config": dict}
    if unsuccessful, the subdictionaries are empty
    )r×   z
npm configr–   z9NodeJS was not found. Yarn user configuration is ignored.rÛ   z--json)r8   r6   r5   Útyper  rD  ÚinspectzYarn configuration loaded.z(Fail to get yarn configuration. {!s}{!s}Nz Fail to get yarn configuration. )r   r?   rE   rG   r§  r)   rI   r(   r?  Úiterrq  r<  r=  ra   ÚStopIterationÚCalledProcessErrorr¬  r]  r8   r©  r¨  )rB   Úconfigurationr–   Úoutput_binaryr©  ÚlinesÚliner  r…  r­  rN  s              rQ   rØ   rØ   0  sž  € ð %'°bÑ9€MðÜ�V‹}ˆð
?Ü"×/Ñ/Ø”9˜h¨Ð1Ü—?‘?Üô
ˆð
 ×%Ñ% gÓ.ˆÜ�V×&Ñ&Ó(Ó)ˆð		Û�Ü—z‘z $Ó'�Ø˜‘< 6Ó)Ø˜v™,�CÜ"Ÿj™j¬¨e«Ó5�GØ˜v‘¨)Ó3Ø-4°V©_˜ cÒ*ñ ð 	�‰Ð1Ô2ð ÐøôA ò Ø�‰ÐPÔQØÒðûô( ò 	Ùð	ûô ×(Ñ(ò 
Ø�‰Ø6×=Ñ=Ø—‘—‘ Ó(¨!¯(©(¯/©/¸'Ó*Bó÷	
ð 	
ð Ðûô ò ?Ø�‰Ð7¸°uÐ=×>Ð>àÐûð?úsf   ‡C “AD Á0"C? Â+C? Â?
C? Ã	D ÃC<Ã;C<Ã?	DÄD Ä
DÄD ÄF%Ä!AE:Å:F%ÆF Æ F%c                 ó4   — | xs t        j                  d«      S )zEnsure that we have a loggerrÊ   rË   ri  s    rQ   rA   rA   ^  s   € àÒ4”W×&Ñ& |Ó4Ð4rS   c                 ó„   — t        j                  | «      } t        j                  | «      rt        j                  | «      } | S )z,Normalize a given extension if it is a path.)rr   Ú
expanduserr‘   rs   )ró   s    rQ   r[  r[  c  s0   € ä—‘˜yÓ)€IÜ
‡z�z�)ÔÜ—K‘K 	Ó*ˆ	ØÐrS   c                 ó>   ‡— ˆfd„}t        j                  | |¬«       y)zRemove a tree, logging errorsc                  ó,   •— ‰j                  d| ¬«       y )NzError in shutil.rmtree©Úexc_info)rE   )r»  rB   s    €rQ   Úonerrorz_rmtree.<locals>.onerrorn  s   ø€ Ø�‰Ð-¸ˆÕArS   )r¼  N)r  r  )rš   rB   r¼  s    ` rQ   r  r  k  s   ø€ ôBô ‡M�M�$ Ö(rS   c                 ó˜   — 	 t        j                  | «       y# t        $ r( |j                  dt	        j
                  «       ¬«       Y yw xY w)zRemove a file, logging errorszError in os.unlinkrº  N)rz   Úunlinkr¨  rE   r_   r»  )rš   rB   s     rQ   Ú_unlinkr¿  t  s;   € ðDÜ
�	‰	�$�øÜò DØ�‰Ð)´C·L±L³NˆÖCðDús   ‚ ˜.A	ÁA	c                 ó  — t        j                  | «      D ]q  }t        j                  | |«      }t        j                  |«      st        j
                  |«      rt        ||«       ŒPt        j                  |«      sŒft        ||«       Œs y)z3Remove all files/trees within a dir, logging errorsN)	rz   Úlistdirrr   rg   ÚisfileÚislinkr¿  r¿  r  )rš   rB   r&  Ú	file_paths       rQ   r  r  |  s\   € ä—J‘J˜tÖ$ˆÜ—H‘H˜T 8Ó,ˆ	Ü�:‰:�iÔ ¤C§J¡J¨yÔ$9Ü�I˜vÕ&Ü�Y‰Y�yÕ!Ü�I˜vÕ&ñ %rS   c                 ó:  ‡‡	— | j                  dd«      }|€dgS t        |t        «      sdgS |j                  dd«      }|j                  dd«      }|j                  dd	«      Š	|j                  d
d	«      Šg }|s|s|j                  d«       ||k(  rd}|j                  |«       | d   }| j                  dd«      }|j	                  d«      s|dz  }|du r|}n|r|j	                  d«      s|dz  }|du r|}n|r|j	                  d«      s|dz  }|r||vr|j                  d|› d�«       |r||vr|j                  d|› d�«       ‰	r)t        ˆ	fd„|D «       «      s|j                  d‰	› d�«       ‰r)t        ˆfd„|D «       «      s|j                  d‰› d�«       |S )z`Detect if a package is an extension using its metadata.

    Returns any problems it finds.
    rÊ   NzNo `jupyterlab` keyz*The `jupyterlab` key must be a JSON objectró   Fr(  Ú	themePathr4   Ú	schemaDirz-No `extension` or `mimeExtension` key presentz?`mimeExtension` and `extension` must point to different modulesr8  Úmainrö  z.jsTzMissing extension module "r­   zMissing mimeExtension module "c              3   ód   •K  — | ]'  }|j                  t        t        ‰«      «      «      –— Œ) y ­wrÑ   ©r�   rŠ   r   )Ú.0rC  Ú
theme_paths     €rQ   Ú	<genexpr>z&_validate_extension.<locals>.<genexpr>²  ó%   øè ø€ ÐQÉ5Àa˜aŸl™l¬3¬t°JÓ/?Ó+@×AÉ5ùó   ƒ-0zthemePath is empty: "c              3   ód   •K  — | ]'  }|j                  t        t        ‰«      «      «      –— Œ) y ­wrÑ   rÊ  )rË  rC  Ú
schema_dirs     €rQ   rÍ  z&_validate_extension.<locals>.<genexpr>µ  rÎ  rÏ  zschemaDir is empty: ")r|   r<   rÜ  re   r•  Úany)
rD  r  ró   Úmime_extensionr�  rP   ÚfilesrÈ  rÑ  rÌ  s
           @@rQ   rÁ  rÁ  †  s¶  ù€ ð
 �8‰8�L $Ó'€DØ€|Ø%Ð&Ð&Ü�dœDÔ!Ø<Ð=Ð=Ø—‘˜ eÓ,€IØ—X‘X˜o¨uÓ5€NØ—‘˜+ rÓ*€JØ—‘˜+ rÓ*€Jà€HÙ™^Ø�‰ÐGÔHà�NÒ"ØOˆØ�‰˜ÔàÐ-Ñ.€EØ�8‰8�F˜JÓ'€DØ�=‰=˜ÔØ�‰ˆà�DÑØ‰	Ù	˜9×-Ñ-¨eÔ4Ø�UÑˆ	à˜ÑØ‰Ù	 × 7Ñ 7¸Ô >Ø˜%Ñˆá�Y eÑ+Ø�‰Ð4°Y°K¸qÐAÔBá˜.°Ñ5Ø�‰Ð8¸Ð8HÈÐJÔKáœ#ÓQÉ5ÓQÔQØ�‰Ð/°
¨|¸1Ð=Ô>áœ#ÓQÉ5ÓQÔQØ�‰Ð/°
¨|¸1Ð=Ô>à€OrS   c                 ó¶  — d}t        j                  d«      }t        j                  | d«      5 }|D ]g  }|j	                  «       sŒ|j                  |«      5 }|r8|j                  |«      }|r%|j                  |«       |j                  |«      }|rŒ%ddd«       Œi 	 ddd«       |j                  «       S # 1 sw Y   ŒŒxY w# 1 sw Y   |j                  «       S xY w)z6
    Compute the recursive sha sum of a tar file.
    i � Úsha1r6  N)	ÚhashlibÚnewr9  r:  rÂ  r;  r>  r3  Ú	hexdigest)Ú
input_fileÚ
chunk_sizeÚhrB  ÚmemberrC  rD  s          rQ   r|  r|  »  sµ   € ð €JÜ�‰�FÓ€Aä	�‰�j #Ô	&¨#ÛˆFØ—=‘=”?ØØ—‘ Ô(¨AÙØŸ6™6 *Ó-�DÙØŸ™ œØ Ÿv™v jÓ1˜ò ÷ )Ð(ñ ÷ 
'ð �;‰;‹=Ð÷ )Ð(ú÷	 
'ð �;‰;‹=Ðús#   ®(C Á:B4Â
C Â4B=Â9C Ã Cc                 ó´   — t        | dd«      }t        j                  |«      r*t        |«      5 }t	        j
                  |«      cddd«       S y# 1 sw Y   yxY w)z$Get the data for the app static dir.r£   r�  N)ru   rr   r‘   r:  r<  r  )r’   r¦   r  s      rQ   rñ  rñ  Ð  sD   € ä�7˜H nÓ5€FÜ
‡z�z�&ÔÜ�&Œ\˜SÜ—9‘9˜S“>÷ ‰\ð ÷ ˆ\ús   ®AÁAc                 ó¸   — |d   }|d   d   }g }|j                  «       D ]7  \  }}||v sŒt        ||   |d¬«      }|du sŒ!|j                  |||   |f«       Œ9 |S )z+Validate the compatibility of an extension.rú  rÊ   r•  Tr–  F)r—  Ú_test_overlapre   )	ró   r=  rM  rŸ  r   rç  r…  rÔ  Úoverlaps	            rQ   rA  rA  Ú  sw   € à˜-Ñ(€IØ˜<Ñ(Ð)<Ñ=€Jà€Fà—j‘j–l‰
ˆˆUØ�*Òô $ I¨c¡N°EÈDÔQˆGØ˜%ÒØ—‘˜s I¨c¡N°EÐ:Õ;ð #ð €MrS   c                 ó0   — t        | |||¬«      }|€y|dk(  S )z�Test whether two version specs overlap.

    Returns `None` if we cannot determine compatibility,
    otherwise whether there is an overlap
    )r—  Údrop_prerelease2Nr   ©r™  )Úspec1Úspec2r—  rã  Úcmps        rQ   rà  rà  í  s,   € ô ØˆuÐ'7ÐJZô€Cð €{ØØ�!‰8€OrS   c                 ó~  — t        | d«      }t        |d«      }|j                  r|j                  syd}t        j                  |j                  |j                  «      D �]Õ  \  }}|d   j
                  }	|d   j
                  }
|d   j
                  }|d   j
                  }|	j                  r|r|	j                  d«      }	|j                  r|r|j                  d«      }|d   j                  }|d   j                  }|j                  d«      s|j                  d«      rŒÂ|	|
k(  rt        nt        }||k(  rt        nt        }|	|
k(  rt        nt        }|	|
k(  rt        nt        }d„ }|	|
k(  r|j                  d	«      r|}||k(  r|j                  d	«      r|}t        |	|d«      r
 ||	|d«      s? ||
|d«      r
 ||
|d«      s+t        ||	d«      r
 |||
d«      s |||	d«      r |||
d«      r yt        ||
d«      r|du rd
}n|dk(  rd}�Œ®t        |	|d«      r|du rd}n|d
k(  rd}�ŒËd}t        |«      ‚ |du rd}|S )zïTest whether two version specs overlap.

    Returns `None` if we cannot determine compatibility,
    otherwise return 0 if there is an overlap, 1 if
    spec1 is lower/older than spec2, and -1 if spec1
    is higher/newer than spec2.
    TNFr   éÿÿÿÿÚpatchÚ<c                  ó   — y)NTrp   )ÚxÚyÚzs      rQ   Únoopz_compare_ranges.<locals>.noop)	  s   € ØrS   Ú>rÎ  z(Unexpected case comparing version ranges)r*   Úranger\   Úproductr@  ÚsemverÚ
prereleaseÚincÚoperatorr�   r.   r-   r,   r+   ÚAssertionError)rå  ræ  r—  rã  Úr1Úr2Úreturn_valueÚr1setÚr2setÚx1Úx2Úy1Úy2Úo1Úo2ÚlxÚlyÚgxÚgyrð  rP   s                        rQ   r™  r™  û  sA  € ô 
ˆu�dÓ	€BÜ	ˆu�dÓ	€Bð �8Š8˜2Ÿ8š8Øð €Lô "×)Ñ)¨"¯&©&°"·&±&×9‰ˆˆuØ�1‰X�_‰_ˆØ�2‰Y×ÑˆØ�1‰X�_‰_ˆØ�2‰Y×Ñˆà�=Š=Ñ-Ø—‘˜“ˆBà�=Š=Ñ-Ø—‘˜“ˆBà�1‰X×ÑˆØ�1‰X×Ñˆð �=‰=˜Ô §¡¨sÔ!3Øð ˜"’H�S¤"ˆØ˜"’H�S¤"ˆØ˜"’H�S¤"ˆØ˜"’H�S¤"ˆò	ð �Š8˜Ÿ™ cÔ*ØˆBØ�Š8˜Ÿ™ cÔ*ØˆBô ��R˜Ô¡2 b¨"¨dÔ#3Ù�2�r˜4Ô ¡R¨¨B°Ô%5Ü�B˜˜DÔ!¡b¨¨R°Ô&6Ù�2�r˜4Ô ¡R¨¨B°Ô%5ñ äˆr�2�tÔØ˜uÑ$à ‘Ø Ò#à#�Ùäˆr�2�tÔØ˜uÑ$Ø!‘Ø Ò"à#�Ùà8ˆÜ˜SÓ!Ð!ð} :ð@ �uÑØˆØÐrS   c                 ó¤   — |xs i }|j                  «       D ]7  \  }}|du rŒ| |k(  r yt        j                  |«      j                  | «      €Œ7 y y)z%Test whether the package is disabled.FT)r—  ÚreÚcompileÚmatch)r÷   r|  ÚpatternrÔ  s       rQ   ræ  ræ  T	  sV   € àŠ~˜2€HØ"Ÿ.™.Ö*‰ˆ�à�E‰>ØØ�7Š?ÙÜ�:‰:�gÓ×$Ñ$ TÓ*Ñ6Ùð +ð rS   )Úfrozenc                   ó2   — e Zd ZU eed<   dZeee      ed<   y)Ú
LockStatusrc  Nrd  )	rm   rn   ro   ÚboolÚ__annotations__rd  r	   Ú	frozensetrŠ   rp   rS   rQ   r  r  b	  s   … à!Ó!à/3€N�H˜Y s™^Ñ,Ô3rS   r  r`  c                 óò   — |xs i }t        «       }|j                  «       D ]H  \  }}|du rŒ| |k(  rt        d¬«      c S |j                  d«      d   }| |k(  sŒ8|j	                  |«       ŒJ t        d|¬«      S )zjTest whether the package is locked.

    If only a subset of extension plugins is locked return them.
    FT)rc  r}  r   )rc  rd  )r@  r—  r  r„  rM   )r÷   rÊ  rd  ÚlockrÔ  Úextension_parts         rQ   rb  rb  i	  s|   € ð
 Š\�r€FÜ“U€NØ—|‘|–~‰ˆˆeà�E‰>ØØ�4Š<Ü°dÔ;Ò;ØŸ™¨Ó,¨QÑ/ˆØ�>Ó!Ø×Ñ˜tÕ$ð &ô ¨eÀNÔSÐSrS   c                 óì  — g }d}d}|D ]v  }|\  }}}	t        t        |d«      «      }t        t        |	d«      «      }	|j                  |||	f«       t        |t	        |«      dz   «      }t        |t	        |«      dz   «      }Œx d| › d|› d�}
|
dz  }
|
dj                  |«      z  }
|
d	j                  |«      z  }
|
d
z  }
|D ]2  \  }}}	|
|j                  |«      |	j                  |«      z   |z   dz   z  }
Œ4 |
S )z*Format a message for compatibility errors.é
   TrÎ  z
"rº  z/" is not compatible with the current JupyterLabz
Conflicting Dependencies:
Ú
JupyterLabÚ	ExtensionzPackage
r[   )rŠ   r*   re   ÚmaxrA  Úljust)r÷   r  rç  r®   Úl0Úl1r¬  r¥  r  r£  rP   s              rQ   rp  rp  }	  s  € à€DØ	€BØ	€BÛˆØ‰ˆˆT�3Ü”5˜˜tÓ$Ó%ˆÜ”%˜˜TÓ"Ó#ˆØ�‰�S˜$ Ð$Ô%Ü�”S˜“X ‘\Ó"ˆÜ�”S˜“Y ‘]Ó#‰ð ð �ˆv�Q�w�iÐNÐ
O€CØÐ*Ñ*€CØˆ<×Ñ˜bÓ!Ñ!€CØˆ;×Ñ˜RÓ Ñ €CØˆ;Ñ€Cã‰ˆˆT�3Øˆt�z‰z˜"‹~ §	¡	¨"£Ñ-°Ñ3°dÑ:Ñ:‰ð ð €JrS   rä   c                 ód  — g }|j                  «       D ]*  \  }\  }}t        |«      }|dkD  sŒ|j                  |«       Œ, |r,| j                  dj	                  dg|¢d|sdndz   ‘«      «       |j                  «       D ]0  \  }\  }}||v r|sŒt        |||«      }	| j                  |	› d�«       Œ2 y)	z8Log compatibility errors for multiple extensions at oncer   z	
        z‚
   The following extensions may be outdated or specify dependencies that are incompatible with the current version of jupyterlab:zK
   If you are a user, check if an update is available for these packages.
zJ   If you are a developer, re-run with `--verbose` flag for more details.
z   See below for the details.
r[   N)r—  Ú_compat_error_agere   rR  rg   rp  )
rB   Ú
errors_maprä   Úoutdatedr÷   rk   rç  Úager  rP   s
             rQ   rU  rU  –	  sÞ   € ð €Hà'×-Ñ-Ö/Ñˆ‰kˆq�&Ü Ó'ˆØ�‹7Ø�O‰O˜DÕ!ð 0ñ
 Ø�‰Ø×Ñð Zð	àð	ð dñ  'ñ fà>ñ	ð	óô	
ð" $.×#3Ñ#3Ö#5ÑˆÑˆw˜Ø�8Ñ¡GØÜ*¨4°¸&ÓAˆØ�‰˜#˜˜b�zÕ"ñ	 $6rS   c                 ó’   — t        |«      }|dkD  r| j                  d|› d�«       yt        |||«      }| j                  |› d�«       y)z/Log compatibility errors for a single extensionr   r˜  z" is outdated.
r[   N)r  rR  rp  )rB   r÷   r  rç  r"  rP   s         rQ   r*  r*  ¹	  sK   € ô ˜FÓ
#€CØ
ˆQ‚wØ�‰˜¨¨Ð.>Ð?Õ@ä*¨4°¸&ÓAˆØ�‰˜#˜˜b�zÕ"rS   c                 óv   — d}d}| D ]&  \  }}}t        ||d¬«      }|xs |dk  }|xs |dkD  }Œ( |r|sy|r|syy)zýCompare all incompatibilities for an extension.

    Returns a number > 0 if all extensions are older than that supported by lab.
    Returns a number < 0 if all extensions are newer than that supported by lab.
    Returns 0 otherwise (i.e. a mix).
    FTr–  r   rÎ  ré  rä  )rç  Ú	any_olderÚ	any_newerrk   r  r£  r¡  s          rQ   r  r  Ä	  s_   € ð €Ià€Iã‰ˆˆ4�ô ˜C ¸Ô=ˆØÒ&  Q¡ˆ	ØÒ&  Q¡‰	ð ñ ™ØÙ	™9ØØrS   c                 óF   — | d   }t        |d   «      t        |d   «      z   S )zGet the core extensions.rÊ   r  r”  )r=   )rM  rD  s     rQ   rò  rò  Þ	  s,   € à�\Ñ"€DÜ��\Ñ"Ó#¤d¨4Ð0@Ñ+AÓ&BÑBÐBrS   c              #   óR   K  — | D ]  }t        |t        «      rd|f–— Œ|f–— Œ  y­w)az  Sort key for prereleases.

    Precedence for two pre-release versions with the same
    major, minor, and patch version MUST be determined by
    comparing each dot separated identifier from left to
    right until a difference is found as follows:
    identifiers consisting of only digits are compare
    numerically and identifiers with letters or hyphens
    are compared lexically in ASCII sort order. Numeric
    identifiers always have lower precedence than non-
    numeric identifiers. A larger set of pre-release
    fields has a higher precedence than a smaller set,
    if all of the preceding identifiers are equal.
    r4   N)r<   Úint)rõ  Úentrys     rQ   Ú_semver_prerelease_keyr+  ä	  s/   è ø€ ó ˆÜ�eœSÔ!à�u�+Óð �(‹Nñ ùs   ‚%'c                 ó   — t        | d«      }|r|j                  rdndnd}g |¢|j                  ‘|j                  ‘|j                  ‘­}|s|j                  rg |¢d‘­nd}|j                  r!|t        t        |j                  «      «      z   }|S )aË  A sort key-function for sorting semver version string.

    The default sorting order is ascending (0.x -> 1.x -> 2.x).

    If `prerelease_first`, pre-releases will come before
    ALL other semver keys (not just those with same version).
    I.e (1.0-pre, 2.0-pre -> 0.x -> 1.x -> 2.x).

    Otherwise it will sort in the standard way that it simply
    comes before any release with shared version string
    (0.x -> 1.0-pre -> 1.x -> 2.0-pre -> 2.x).
    T)r   )rÎ  rp   r   )r/   rõ  ÚmajorÚminorrê  r>   r+  )r  r„  Úvr…  s       rQ   r†  r†  ü	  sƒ   € ô 	�G˜TÓ"€AÙ.>�1—<’<‰4¡TÀB€CØ
+ˆCÐ
+�—‘Ð
+˜!Ÿ'™'Ð
+ 1§7¡7Ñ
+€CÙàŸ<š<ˆi�ˆi�QŠi¨TˆØ‡|‚|Ø”EÔ0°·±Ó>Ó?Ñ?ˆà€JrS   c           	      ó
  — t        t        | t        |d¬«      «      ddi¬«      }	 |j                  d|j                  › �«       	 t        j                  t        |«      «      5 }t        j                  |j                  «       j                  d«      «      cddd«       S # t
        $ r% |j                  d|j                  «       › �«       Y Œˆw xY w# 1 sw Y   yxY w# t        $ r}|j                  d	|›d
|›�«       ‚ d}~ww xY w)z6Fetch the metadata for a package from the npm registryrº  )ÚsafeÚAcceptzHapplication/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*)ÚheaderszFetching URL: r5   Nz%Failed to fetch package metadata for rz  )r   r   r   rE   Úfull_urlÚAttributeErrorÚget_full_urlÚ
contextlibÚclosingr   r<  r=  r>  r?  r
   rR  )rÕ   r÷   rB   ÚreqÚresponseÚexcs         rQ   r�  r�  
  så   € ä
Ü�œ% ¨3Ô/Ó0àÐað
ô€Cð<Ø�‰�~ c§l¡l ^Ð4Ô5ðÜ×Ñ¤¨£Ô-°Ü—:‘:˜hŸm™m›o×4Ñ4°WÓ=Ó>÷ .Ñ-øô ò <Ø�‰�~ c×&6Ñ&6Ó&8Ð%9Ð:Ö;ð<ú÷ .Ð-ûäò Ø�‰Ð>¸t¸hÀbÈÈÐPÔQØûðúsG   ¦B ÁC Á#2CÂ	C Â+CÃCÃCÃC ÃC Ã	DÃ%C=Ã=DÚ__main__rÑ   rÝ   )NNF)NFNN)NNNNFNTT)NrH  )FN)FFr¤  )”rÞ   r7  rK  r×  r\   r<  rÌ   rz   Úos.pathrš   rr   r	  r  rŽ   r  rG   r_   r9  r  r   Údataclassesr   r   Úpathlibr   Útempfiler   Ú	threadingr   Útypingr	   Úurllib.errorr
   Úurllib.requestr   r   r   r   Újupyter_core.pathsr   Ú(jupyter_server.extension.serverextensionr   r   r   r   Újupyterlab_server.configr   r   r   r   r   r   Újupyterlab_server.processr   r   r   r   Úpackaging.versionr   Ú	traitletsr   r    r!   r"   r#   r$   Újupyterlab._versionr%   Újupyterlab.coreconfigr'   Újupyterlab.jlpmappr(   r)   Újupyterlab.semverr*   r+   r,   r-   r.   r/   r
  r¼   rs   rg   rŸ   r¥   r<  rÙ   r2   ru   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)  r+  r-  r0  r4  rE  rì   rë   rØ   rA   r[  r  r¿  r  rÁ  r|  rñ  rA  rà  r™  ræ  r  rb  rp  r  rU  r*  r  rò  r+  r†  r�  rm   rp   rS   rQ   Ú<module>rO     s  ðÙ  ó Û Û Û Û Û Û 	Ý Û 	Û Û Û Û Û 
Û Ý Ý !Ý Ý Ý 'Ý Ý Ý !ß ;Ó ;å 1ß aÓ a÷÷ ÷ PÓ OÝ %ß G× Gå +Ý ,ß .ß B× Bð �—‘ÐFÓG€ð ˆC�K‰K˜˜Ÿ™  tÓ,Ó-€	ð ˆ#�(‰(�9˜jÓ
)€ð €
ð 7Ð ô> �gô > òB(ò
%ò'ò(ó@ó<ó(ó
òó ó4%ô6?=�ô ?=òD%ó+ó*
9ó
-ó*óaðF 
ØØØØØØØóó0óCóBó9óGóHó!ó%ó&ó+ó#ó=ò÷mñ mò`-
(ò+ó\5ò
ò)òDò'ò2òjò*òó&óVórñ �$Ô÷4ð 4ó ð4ñT Zó Tò(ð2 #¸Tó  #òF#òò4Còó0ò2ð( ˆzÒÙˆd…Oð rS   