@ file : Suppress (" EXPERIMENT AL _ API _ USAGE ") Ċ Ċ package Ġeu . j rie . jetbrains . kotlin s hel lex t ension . shell . pip ing Ċ Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . processes . Process Command er Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . processes . execution . Process Executable Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . processes . execution . Process ExecutionContext Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . processes . pipeline . Pipeline Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . processes . process . Process Channel Unit Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . processes . process . Process Receive Channel Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . processes . process . Process Send Channel Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . shell . Execution Mode Ċ import Ġeu . j rie . jetbrains . kotlin s hel lex t ension . shell . pip ing . from . Shell Pip ing From Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . channels . Channel Ċ Ċ type alias ĠPipe Config Ġ= Ġ Ġsuspend ĠShell Pip ing . () Ġ-> ĠPipeline Ċ type alias ĠPipeline Fork Ġ= Ġsuspend Ġ( Process Receive Channel ) Ġ-> ĠUnit Ċ Ċ @ Experimental Cor outines Api Ċ interface ĠShell Pip ing Ġ: ĠShell Pip ing From , ĠShell Pip ing Through , ĠShell Pip ing To Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠList Ġof Ġall Ġpipelines Ġin Ġthis Ġshell ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpipelines : ĠList < Pipeline > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġand Ġexecutes Ġnew Ġ[ Pipeline ] Ġspecified Ġby ĠDSL Ġ[ pipe Config ] Ġand Ġexecutes Ġit Ġin Ġgiven Ġ[ mode ] ĊĠĠĠĠ Ġ* ĠPart Ġof Ġpip ing ĠDSL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġpipeline ( mode : ĠExecution Mode Ġ= ĠExecution Mode . ATTACH ED , Ġpipe Config : ĠPipe Config ) Ġ= Ġwhen Ġ( mode ) Ġ{ ĊĠĠĠĠĠĠĠ ĠExecution Mode . ATTACH ED Ġ-> Ġpipe Config (). apply Ġ{ Ġif Ġ(! closed ) Ġ{ Ġto Default End Channel ( stdout ) Ġ} Ġ} Ġ. join () ĊĠĠĠĠĠĠĠ ĠExecution Mode . DET ACHED Ġ-> Ġdetach ( pipe Config ) ĊĠĠĠĠĠĠĠ ĠExecution Mode . DA EM ON Ġ-> ĠTODO (" implement Ġdaemon Ġpipelines ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġnew Ġ[ Pipeline ] Ġspecified Ġby ĠDSL Ġ[ pipe Config ] Ġand Ġexecutes Ġit Ġas Ġdet ached Ġjob . ĊĠĠĠĠ Ġ* ĠPart Ġof Ġpip ing ĠDSL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġdetach ( pipe Config : ĠPipe Config ): ĠPipeline ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAwait s Ġthis Ġ[ Pipeline ] ĊĠĠĠĠ Ġ* ĠPart Ġof Ġpip ing ĠDSL ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠPipeline . join ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġ[ Pipeline ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED _ PARAMETER ") ĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġsuspend Ġin fix Ġfun ĠPipeline . join ( it : ĠIt ) Ġ= Ġjoin () ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġfork Std Err ( process : ĠProcess Executable , Ġfork : ĠPipeline Fork ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfork Std Err ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChannel < Process Channel Unit >( PIPELINE _ CHANNEL _ BUFFER _ SIZE ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfork ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess . after Join Ġ= Ġ{ Ġit . close () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfork Std Err ( process : ĠProcess Executable , Ġchannel : ĠProcess Send Channel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess . update Std Err ( channel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFork s Ġcurrent Ġ[ Pipeline ] Ġby Ġcreating Ġnew Ġ[ Pipeline ] Ġwith Ġstderr Ġfrom Ġlast Ġprocess Ġas Ġan Ġinput ĊĠĠĠĠ Ġ* ĠPart Ġof Ġpip ing ĠDSL ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġ[ Process Builder ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġin fix Ġfun ĠProcess Executable . fork Err ( fork : ĠPipeline Fork ) Ġ= Ġthis . also Ġ{ ĊĠĠĠĠĠĠĠ Ġfork Std Err ( this , Ġfork ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFork s Ġcurrent Ġ[ Pipeline ] Ġby Ġcreating Ġnew Ġ[ Pipeline ] Ġwith Ġstderr Ġfrom Ġlast Ġprocess Ġas Ġan Ġinput ĊĠĠĠĠ Ġ* ĠPart Ġof Ġpip ing ĠDSL ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġ[ Process Builder ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġin fix Ġfun ĠProcess Executable . fork Err ( channel : ĠProcess Send Channel ) Ġ= Ġthis . also Ġ{ ĊĠĠĠĠĠĠĠ Ġfork Std Err ( this , Ġchannel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠFork Error ExecutionContext Ġ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstdin : ĠProcess Receive Channel , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstdout : ĠProcess Send Channel , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġstderr : ĠProcess Send Channel , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcommand er : ĠProcess Command er ĊĠĠĠ Ġ) Ġ: ĠProcess ExecutionContext Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( from : ĠProcess ExecutionContext , Ġstderr : ĠProcess Send Channel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ: Ġthis ( from . stdin , Ġfrom . stdout , Ġstderr , Ġfrom . command er ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProcess Executable . update Std Err ( err : ĠProcess Send Channel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . context Ġ= ĠFork Error ExecutionContext ( this . context Ġas ĠProcess ExecutionContext , Ġerr ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠObject Ġfor Ġ[ it ] Ġalias Ċ Ġ*/ Ċ object ĠIt Ċ /** Ċ Ġ* ĠAlias Ġto Ġbe Ġused Ġin Ġpip ing ĠDSL Ġwith Ġ[ Pipeline . join ] Ċ Ġ* Ċ Ġ* ĠEx : Ġ` p 1 Ġpipe Ġp 2 Ġawait Ġall ` Ċ Ġ* Ċ Ġ* Ġ@ see ĠShell Pip ing Ċ Ġ* Ġ@ see ĠPipeline Ċ Ġ*/ Ċ type alias Ġit Ġ= ĠIt Ċ