package Ġh oney . config . dsl Ċ Ċ import Ġh oney . install . Process Watch Ċ import Ġh oney . install . exec Ċ import Ġh oney . pack . Version Ċ import Ġh oney . pack . Version Parser Ċ import Ġh oney . pack . Version Range Ċ import Ġkotlinx . coroutines . experimental . run Blocking Ċ Ċ class ĠRequire DSL Builder Ġ{ ĊĠ Ġval Ġlist Ġ= ĠArrayList < Pair < String , ĠString >>() ĊĠ Ġval Ġvia List Ġ= ĠArrayList < Triple < String , ĠString , ĠVersion Parser >>() ĊĊĠ Ġin fix Ġfun ĠString . version ( version Template : ĠString ): ĠPair < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġpair Ġ= ĠPair ( this , Ġversion Template ) ĊĠĠĠ Ġlist . add ( pair ) ĊĊĠĠĠ Ġreturn Ġpair ĊĠ Ġ} ĊĊĠ Ġin fix Ġfun ĠPair < String , ĠString >. via ( parser : ĠVersion Parser ) Ġ{ ĊĠĠĠ Ġlist . remove At ( list . last Index ) ĊĠĠĠ Ġvia List . add ( Triple ( first , Ġsecond , Ġparser )) ĊĊĠ Ġ} ĊĊĠ Ġfun Ġverify () Ġ{ ĊĠĠĠ Ġprintln (" checking Ġsystem Ġrequirements ") ĊĊĠĠĠ Ġlist . forEach Ġ{ Ġ( command , Ġrange S ) Ġ-> ĊĠĠĠĠĠ Ġval Ġversion S Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ ĠProcess Watch ( Process Builder ( command , Ġ"-- version "). inherit IO (). start ()). await ( 1 0 0 0 ) ĊĠĠĠĠĠ Ġ}. toString () ĊĊĠĠĠĠĠ Ġval Ġparsed Version Ġ= ĠVersion . parse ( version S ) ĊĊĠĠĠĠĠ Ġval Ġrange Ġ= ĠVersion Range . parse ( range S ) ĊĊĠĠĠĠĠ Ġif Ġ(! range . contains ( parsed Version )) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠException (" version Ġdidn 't Ġmatch Ġfor Ġ$ command : Ġfound Ġ$ parsed Version , Ġexpected : Ġ$ range ") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġprintln ("[ ok ] Ġfound Ġ$ command Ġversion Ġ$ parsed Version ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠ Ġvia List . forEach Ġ{ Ġ( command , Ġrange S , Ġparser ) Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġversion S Ġ= Ġ"$ command Ġ${ parser . version Param }". exec (). toString () ĊĊĠĠĠĠĠĠĠ Ġval Ġparsed Version Ġ= Ġparser . parse ( version S ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= ĠVersion Range . parse ( range S ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! range . contains ( parsed Version )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" version Ġdidn 't Ġmatch Ġfor Ġ$ command : Ġfound Ġ$ parsed Version , Ġexpected : Ġ$ range ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln ("[ ok ] Ġfound Ġ$ command Ġversion Ġ$ parsed Version ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }