
    Vi5              
          S r SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SS	K
Jr  SS
K
Jr  SSK
Jr  SSKJr  \ " S S5      5       r\" \\	" S5      \-	  \	" S5      \-	  R%                  5       5      R'                  S 5      rS\\S4   S\\S4   S\\\S4   \\S4   4   4S jrS\S\S\4S jr\ " S S5      5       r\\\4   rS\S\4S jrS\S\S\4S jrS\S\S\4S jrS\S\S\4S  jrg)!z
Custom parser and comparator for Maven versions
Based on https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN400
    N)	dataclass)Tuple)Union)
ParseError)string)any_str)integer)pair)triple)SemgrepErrorc                   >    \ rS rSr% \\S'   \\S'   \\S4   \S'   Srg)VersionCore   majorminor.incrementals N)__name__
__module____qualname____firstlineno__int__annotations__r   __static_attributes__r       g/home/james-whalen/.local/share/pipx/venvs/semgrep/lib/python3.13/site-packages/semdep/maven_version.pyr   r      s    JJS/!r   r   .c                 @    [        U S   U S   [        U S   5      5      $ )Nr         )r   tuple)xs    r   <lambda>r#   *   s    AaD!A$ad4r   first.secondreturnc                     [        U 5      [        U5      :  a  XS[        U 5      [        U5      -
  -  -   4$ [        U5      [        U 5      :  a  U S[        U5      [        U 5      -
  -  -   U4$ X4$ )N)r   )len)r$   r%   s     r   normalize_incrementalsr)   -   sn     5zCKts5zCK'?@@@@	Vs5z	!ts6{SZ788&@@}r   c                 D   U R                   UR                   :w  a  U R                   UR                   -
  $ U R                  UR                  :w  a  U R                  UR                  -
  $ [        [        U R                  UR                  5      6  H  u  p#X#:w  d  M  X#-
  s  $    g)Nr   )r   r   zipr)   r   )r$   r%   inc1inc2s       r   compare_version_corer.   8   s    {{fll"{{V\\))		${{V\\))	 2 2F4G4G	H
 <;	
 r   c                   4    \ rS rSr% \\S'   \\S'   \\S'   Srg)ParsedMavenVersionE   core	qualifierraw_versionr   N)r   r   r   r   r   r   strr   r   r   r   r0   r0   E   s    
Nr   r0   versionc                      [        [        [        5      R                  U 5      n[        US   US   U S9$ ! [         a    U s $ f = f)Nr   r   )r2   r3   r4   )r
   parse_version_corer   parser   r0   )r6   ms     r   parse_maven_versionr;   O   sP    #W-33G<
 1Q41Q4WMM	   s   #6 AAr"   yc                     X:X  a  gX:  a  gg)Nr   r   r   )r"   r<   s     r   cmp_strr?   Y   s    v	
r   c                 L   [        U [        5      (       a  [        U[        5      (       a  [        U R                  UR                  5      nUS:w  a  U$ U R                  S:X  a  UR                  S:w  a  gUR                  S:X  a  U R                  S:w  a  gU R                  S:X  a  UR                  S:w  a  gUR                  S:X  a  U R                  S:w  a  g[        U R                  UR                  5      $ [        U [        5      (       a$  [        U[        5      (       a  U R                  nUnOk[        U[        5      (       a$  [        U [        5      (       a  U nUR                  nO2[        U [        5      (       d   e[        U[        5      (       d   eU nUn[        X45      $ )zO
Return less than 0 if first < second
0 if ==
greater than 0 if first > second
r    r   r>   z	-SNAPSHOT)
isinstancer0   r.   r2   r3   r?   r5   r4   )r$   r%   core_cmp	first_raw
second_raws        r   cmp_maven_versionsrF   b   sW    %+,,FDV1W1W'

FKK@q=O__"v'7'72'=#2(=
 __+0@0@K0O,K1O5??F,<,<==e/00Z5L5L))IJ 233
5#8N8NI++JeS))))fc****IJy--r   	specifierc                    [         R                  " S5      nUR                  U 5      nU(       d  [        SU  35      eUR	                  S5      n[        UR	                  S5      5      n[        U5      nUS:X  a  [        Xe5      S:H  $ US:X  a  [        Xe5      S:g  $ US:X  a  [        Xe5      S:*  $ US	:X  a  [        Xe5      S:  $ US
:X  a  [        Xe5      S:  $ US:X  a  [        Xe5      S:  $ [        SU  35      e)z
Returns if version satisfies specifier requirement

i.e. specifier: '< 1.0.0', version: 0.1.0 returns true

See https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN400
z1(?P<operator>(==|!=|<=|>=|<|>))\s*(?P<version>.*)z/unknown package version comparison expression: operatorr6   z==r   z!=z<=<z>=>)recompilematchr   groupr;   rF   )rG   r6   specifier_regexmatchedrI   specifier_versionparsed_versions          r   compare_maven_specifierrT      s    jj@O ##I.G=i[I
 	
 }}Z(H+GMM),DE(1N4!.DII	T	!.DII	T	!.DII	S!.DqHH	T	!.DII	S!.DqHH=i[I
 	
r   ) __doc__rL   dataclassesr   typingr   r   semdep.external.parsyr   r   semdep.parsers.utilr   r	   r
   r   semgrep.errorr   r   manymapr8   r   r)   r.   r0   r5   MavenVersionr;   r?   rF   boolrT   r   r   r   <module>r_      sw   
 !   , ( ' ' $ & & " " " 
3K7C[G!!# #45	 c?$)#s(O
5c?E#s(O+,
 
[ 
S 
    ',-N N Ns s s %.l %.L %.S %.P#
s #
S #
T #
r   