package Ġfr . jav atic . y af ull . router Ċ Ċ import Ġfr . jav atic . kotlin Sdk Extensions . uri Component Encoded Ċ Ċ sealed Ġclass ĠBrowser Path Builder ( private Ġval Ġpath Elements : ĠMutable List < Browser Path Element >) Ġ{ ĊĠĠĠ Ġclass ĠRoot Ġinternal Ġconstructor () Ġ: ĠBrowser Path Builder ( mutable ListOf ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġliteral ( value : ĠString ) Ġ= Ġadd Literal ( value ) ĊĠĠĠĠĠĠĠ Ġfun Ġwildcard () Ġ= Ġadd Wildcard () ĊĠĠĠĠĠĠĠ Ġfun Ġseparator () Ġ= Ġadd Separator () ĊĠĠĠĠĠĠĠ Ġfun Ġparameter ( param : ĠBrowser Parameter Path <* >) Ġ= Ġadd Parameter ( param ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLast Is Literal Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpath Elements : ĠMutable List < Browser Path Element > ĊĠĠĠ Ġ) Ġ: ĠBrowser Path Builder ( path Elements ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġliteral ( value : ĠString ) Ġ= Ġadd Literal ( value ) ĊĠĠĠĠĠĠĠ Ġfun Ġwildcard () Ġ= Ġadd Wildcard () ĊĠĠĠĠĠĠĠ Ġfun Ġseparator () Ġ= Ġadd Separator () ĊĠĠĠĠĠĠĠ Ġfun Ġparameter ( param : ĠBrowser Parameter Path <* >) Ġ= Ġadd Parameter ( param ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLast Is Wildcard Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpath Elements : ĠMutable List < Browser Path Element > ĊĠĠĠ Ġ) Ġ: ĠBrowser Path Builder ( path Elements ) ĊĊĠĠĠ Ġclass ĠLast Is Separator Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpath Elements : ĠMutable List < Browser Path Element > ĊĠĠĠ Ġ) Ġ: ĠBrowser Path Builder ( path Elements ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġliteral ( value : ĠString ) Ġ= Ġadd Literal ( value ) ĊĠĠĠĠĠĠĠ Ġfun Ġwildcard () Ġ= Ġadd Wildcard () ĊĠĠĠĠĠĠĠ Ġfun Ġparameter ( param : ĠBrowser Parameter Path <* >) Ġ= Ġadd Parameter ( param ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠLast Is Parameter Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġpath Elements : ĠMutable List < Browser Path Element > ĊĠĠĠ Ġ) Ġ: ĠBrowser Path Builder ( path Elements ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġliteral ( value : ĠString ) Ġ= Ġadd Literal ( value ) ĊĠĠĠĠĠĠĠ Ġfun Ġseparator () Ġ= Ġadd Separator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd Literal ( value : ĠString ): ĠLast Is Literal Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Elements . add ( create Literal ( value )) ĊĠĠĠĠĠĠĠ Ġreturn ĠLast Is Literal ( path Elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd Wildcard (): ĠLast Is Wildcard Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Elements . add ( Browser Path Element . Wildcard ) ĊĠĠĠĠĠĠĠ Ġreturn ĠLast Is Wildcard ( path Elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd Separator (): ĠLast Is Separator Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Elements . add ( Browser Path Element . Separator ) ĊĠĠĠĠĠĠĠ Ġreturn ĠLast Is Separator ( path Elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġadd Parameter ( parameter Path : ĠBrowser Parameter Path < *> ): ĠLast Is Parameter Ġ{ ĊĠĠĠĠĠĠĠ Ġpath Elements . add ( Browser Path Element . Parameter ( parameter Path )) ĊĠĠĠĠĠĠĠ Ġreturn ĠLast Is Parameter ( path Elements ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠList < Browser Path Element > Ġ= Ġpath Elements ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate (): ĠRoot Ġ= ĠRoot () ĊĠĠĠĠĠĠĠ Ġfun Ġbuild From Path ( path : ĠString ?): ĠList < Browser Path Element > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path Ġ== Ġnull ) Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsanitized Path Ġ= Ġpath ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwildcard Suffix Ġ= Ġempty List < Browser Path Element >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . endsWith ("* ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsanitized Path Ġ= Ġpath . drop Last ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwildcard Suffix Ġ= ĠlistOf ( Browser Path Element . Wildcard ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsanitized Path Ġ= ĠHttp Utils . normalize Path ( sanit ized Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sanit ized Path Ġ== Ġ"/") Ġreturn ĠlistOf ( Browser Path Element . Separator ) Ġ+ Ġwildcard Suffix ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild List Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġsanitized Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( c ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'/' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sb . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( create Literal ( sb . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Browser Path Element . Separator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsb . append ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sb . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( create Literal ( sb . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ Ġwildcard Suffix ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Literal ( value : ĠString ): ĠBrowser Path Element . Literal Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( value . isNotEmpty ()) Ġ{ Ġ" Literal Ġcan 't Ġbe Ġempty " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire (! value . contains ('/ ')) Ġ{ Ġ" Literal Ġcan 't Ġcontains Ġ`/ `" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBrowser Path Element . Literal ( value . uri Component Encoded ( null )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ