
    hh                     B    d dl mZmZmZ d dlmZ  G d de          ZdS )    )AnyListTuple)CodeSegmenterc                   h     e Zd ZdZdef fdZdefdZdedefdZ	de
e         fdZdefd	Z xZS )
JavaScriptSegmenterzCode segmenter for JavaScript.codec                     t                                          |           | j                                        | _        	 dd l}d S # t          $ r t          d          w xY w)Nr   zVCould not import esprima Python package. Please install it with `pip install esprima`.)super__init__r	   
splitlinessource_linesesprimaImportError)selfr	   r   	__class__s      }/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/langchain_community/document_loaders/parsers/language/javascript.pyr   zJavaScriptSegmenter.__init__   sv     I0022	NNNNN 	 	 	@  	s   A A"returnc                 f    dd l }	 |                    | j                   dS # |j        $ r Y dS w xY w)Nr   TF)r   parseScriptr	   Error)r   r   s     r   is_validzJavaScriptSegmenter.is_valid   sO    		***4} 	 	 	55	s   " 
00nodec                     |j         j        j        dz
  }|j         j        j        }d                    | j        ||                   S )N   
)locstartlineendjoinr   )r   r   r   r    s       r   _extract_codez!JavaScriptSegmenter._extract_code    s=    #a'hlyy*595666    c                     dd l }|                    | j        d          }g }|j        D ]P}t	          ||j        j        |j        j        f          r(|                    | 	                    |                     Q|S )Nr   Tr   )
r   r   r	   body
isinstancenodesFunctionDeclarationClassDeclarationappendr"   )r   r   treefunctions_classesr   s        r   extract_functions_classesz-JavaScriptSegmenter.extract_functions_classes%   s    ""49$"77I 	C 	CD2GM4RS  C "((););D)A)ABBB  r#   c                    dd l }|                    | j        d          }| j        d d          }g }|j        D ]u}t          ||j        j        |j        j        f          rM|j	        j
        j        dz
  |j	        j        j        }}d||          ||<   |                    |dz   |f           vt          |          D ]\  }}||dz   |= d                    d |D                       S )Nr   Tr%   r   z// Code for: r   c              3      K   | ]}|V  d S )N ).0r   s     r   	<genexpr>z4JavaScriptSegmenter.simplify_code.<locals>.<genexpr>H   s"      ;;$;;;;;;r#   )r   r   r	   r   r&   r'   r(   r)   r*   r   r   r   r    r+   reversedr!   )r   r   r,   simplified_linesindices_to_delr   r   r    s           r   simplify_codez!JavaScriptSegmenter.simplify_code4   s   ""49$"77,QQQ/02I 	8 	8D2GM4RS  8 "X^014dhl6Gs*S:J5:Q*S*S '%%uqy#&6777">22 	2 	2JE3 S11yy;;*:;;;;;;r#   )__name__
__module____qualname____doc__strr   boolr   r   r"   r   r.   r7   __classcell__)r   s   @r   r   r      s        ((
S 
 
 
 
 
 
$    7# 7# 7 7 7 7
!49 ! ! ! !<s < < < < < < < <r#   r   N)typingr   r   r   Dlangchain_community.document_loaders.parsers.language.code_segmenterr   r   r1   r#   r   <module>rA      s    # # # # # # # # # #     
@< @< @< @< @<- @< @< @< @< @<r#   