ó
    ³‡i²  ã                   ó>   • S r SSKrSSKJr  SSKJr   " S S\5      rg)z#JavaScript framework text splitter.é    N)ÚAny)ÚRecursiveCharacterTextSplitterc                   óx   ^ • \ rS rSrSr   SS\\   S-  S\S\S\SS4
U 4S	 jjjr	S
\S\\   4U 4S jjr
SrU =r$ )ÚJSFrameworkTextSplitteré	   aB  Text splitter that handles React (JSX), Vue, and Svelte code.

This splitter extends RecursiveCharacterTextSplitter to handle
React (JSX), Vue, and Svelte code by:

1. Detecting and extracting custom component tags from the text
2. Using those tags as additional separators along with standard JS syntax

The splitter combines:

* Custom component tags as separators (e.g. <Component, <div)
* JavaScript syntax elements (function, const, if, etc)
* Standard text splitting on newlines

This allows chunks to break at natural boundaries in
React, Vue, and Svelte component code.
NÚ
separatorsÚ
chunk_sizeÚchunk_overlapÚkwargsÚreturnc                 óJ   >• [         TU ]  " SX#S.UD6  U=(       d    / U l        g)a  Initialize the JS Framework text splitter.

Args:
    separators: Optional list of custom separator strings to use
    chunk_size: Maximum size of chunks to return
    chunk_overlap: Overlap in characters between chunks
    **kwargs: Additional arguments to pass to parent class
)r	   r
   N© )ÚsuperÚ__init__Ú_separators)Úselfr   r	   r
   r   Ú	__class__s        €Úl/home/dmtnaga/Documents/work/airagagent/rag_env/lib/python3.13/site-packages/langchain_text_splitters/jsx.pyr   Ú JSFrameworkTextSplitter.__init__   s'   ø€ ô 	‰ÒÐV JÑVÈvÒVØ%×+¨ˆÕó    Útextc                 ó  >• [         R                  " SU5      n/ nU H  nXC;  d  M
  UR                  U5        M     U Vs/ s H  nSU 3PM
     nn/ SQnU R                  U-   U-   / SQ-   nXpl        [        TU ]  U5      $ s  snf )aƒ  Split text into chunks.

This method splits the text into chunks by:

* Extracting unique opening component tags using regex
* Creating separators list with extracted tags and JS separators
* Splitting the text using the separators by calling the parent class method

Args:
    text: String containing code to split

Returns:
    List of text chunks split on component and JS boundaries
z<\s*([a-zA-Z0-9]+)[^>]*>Ú<)z
export z export z

function z
async function z async function z
const z
let z
var z
class z class z
if z if z
for z for z
while z while z
switch z switch z
case z case z	
default z	 default )z<>z

z&&
z||
)ÚreÚfindallÚappendr   r   Ú
split_text)	r   r   Úopening_tagsÚcomponent_tagsÚtagÚcomponent_separatorsÚjs_separatorsr   r   s	           €r   r   Ú"JSFrameworkTextSplitter.split_text.   s§   ø€ ô" —z’zÐ"=¸tÓDˆàˆÛˆCØÕ(Ø×%Ñ% cÖ*ñ  ñ 6DÓD²^¨c ! C 5£	±^ÐÐDò
ˆð2 ×ÑØñà"ñ#ò -ñ-ð 	ð &ÔÜ‰wÑ! $Ó'Ð'ùòC  Es   Á B)r   )NiÐ  r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚlistÚstrÚintr   r   r   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r   	   sr   ø† ñð( (,ØØñ	,à˜‘I Ñ$ð,ð ð,ð ð	,ð
 ð,ð 
÷,ð ,ð$8(˜sð 8( t¨C¡y÷ 8(õ 8(r   r   )r(   r   Útypingr   Úlangchain_text_splittersr   r   r   r   r   Ú<module>r0      s    ðÙ )ã 	Ý å Cô](Ð<õ ](r   