1*133a0ef4SChris Fallinpackage wasi:[email protected]; 2*133a0ef4SChris Fallin 3*133a0ef4SChris Fallin@since(version = 0.2.0) 4*133a0ef4SChris Fallininterface environment { 5*133a0ef4SChris Fallin /// Get the POSIX-style environment variables. 6*133a0ef4SChris Fallin /// 7*133a0ef4SChris Fallin /// Each environment variable is provided as a pair of string variable names 8*133a0ef4SChris Fallin /// and string value. 9*133a0ef4SChris Fallin /// 10*133a0ef4SChris Fallin /// Morally, these are a value import, but until value imports are available 11*133a0ef4SChris Fallin /// in the component model, this import function should return the same 12*133a0ef4SChris Fallin /// values each time it is called. 13*133a0ef4SChris Fallin @since(version = 0.2.0) 14*133a0ef4SChris Fallin get-environment: func() -> list<tuple<string, string>>; 15*133a0ef4SChris Fallin 16*133a0ef4SChris Fallin /// Get the POSIX-style arguments to the program. 17*133a0ef4SChris Fallin @since(version = 0.2.0) 18*133a0ef4SChris Fallin get-arguments: func() -> list<string>; 19*133a0ef4SChris Fallin 20*133a0ef4SChris Fallin /// Return a path that programs should use as their initial current working 21*133a0ef4SChris Fallin /// directory, interpreting `.` as shorthand for this. 22*133a0ef4SChris Fallin @since(version = 0.2.0) 23*133a0ef4SChris Fallin initial-cwd: func() -> option<string>; 24*133a0ef4SChris Fallin} 25*133a0ef4SChris Fallin 26*133a0ef4SChris Fallin@since(version = 0.2.0) 27*133a0ef4SChris Fallininterface exit { 28*133a0ef4SChris Fallin /// Exit the current instance and any linked instances. 29*133a0ef4SChris Fallin @since(version = 0.2.0) 30*133a0ef4SChris Fallin exit: func(status: result); 31*133a0ef4SChris Fallin 32*133a0ef4SChris Fallin /// Exit the current instance and any linked instances, reporting the 33*133a0ef4SChris Fallin /// specified status code to the host. 34*133a0ef4SChris Fallin /// 35*133a0ef4SChris Fallin /// The meaning of the code depends on the context, with 0 usually meaning 36*133a0ef4SChris Fallin /// "success", and other values indicating various types of failure. 37*133a0ef4SChris Fallin /// 38*133a0ef4SChris Fallin /// This function does not return; the effect is analogous to a trap, but 39*133a0ef4SChris Fallin /// without the connotation that something bad has happened. 40*133a0ef4SChris Fallin @unstable(feature = cli-exit-with-code) 41*133a0ef4SChris Fallin exit-with-code: func(status-code: u8); 42*133a0ef4SChris Fallin} 43*133a0ef4SChris Fallin 44*133a0ef4SChris Fallin@since(version = 0.2.0) 45*133a0ef4SChris Fallininterface run { 46*133a0ef4SChris Fallin /// Run the program. 47*133a0ef4SChris Fallin @since(version = 0.2.0) 48*133a0ef4SChris Fallin run: func() -> result; 49*133a0ef4SChris Fallin} 50*133a0ef4SChris Fallin 51*133a0ef4SChris Fallin@since(version = 0.2.0) 52*133a0ef4SChris Fallininterface stdin { 53*133a0ef4SChris Fallin @since(version = 0.2.0) 54*133a0ef4SChris Fallin use wasi:io/streams@0.2.6.{input-stream}; 55*133a0ef4SChris Fallin 56*133a0ef4SChris Fallin @since(version = 0.2.0) 57*133a0ef4SChris Fallin get-stdin: func() -> input-stream; 58*133a0ef4SChris Fallin} 59*133a0ef4SChris Fallin 60*133a0ef4SChris Fallin@since(version = 0.2.0) 61*133a0ef4SChris Fallininterface stdout { 62*133a0ef4SChris Fallin @since(version = 0.2.0) 63*133a0ef4SChris Fallin use wasi:io/streams@0.2.6.{output-stream}; 64*133a0ef4SChris Fallin 65*133a0ef4SChris Fallin @since(version = 0.2.0) 66*133a0ef4SChris Fallin get-stdout: func() -> output-stream; 67*133a0ef4SChris Fallin} 68*133a0ef4SChris Fallin 69*133a0ef4SChris Fallin@since(version = 0.2.0) 70*133a0ef4SChris Fallininterface stderr { 71*133a0ef4SChris Fallin @since(version = 0.2.0) 72*133a0ef4SChris Fallin use wasi:io/streams@0.2.6.{output-stream}; 73*133a0ef4SChris Fallin 74*133a0ef4SChris Fallin @since(version = 0.2.0) 75*133a0ef4SChris Fallin get-stderr: func() -> output-stream; 76*133a0ef4SChris Fallin} 77*133a0ef4SChris Fallin 78*133a0ef4SChris Fallin/// Terminal input. 79*133a0ef4SChris Fallin/// 80*133a0ef4SChris Fallin/// In the future, this may include functions for disabling echoing, 81*133a0ef4SChris Fallin/// disabling input buffering so that keyboard events are sent through 82*133a0ef4SChris Fallin/// immediately, querying supported features, and so on. 83*133a0ef4SChris Fallin@since(version = 0.2.0) 84*133a0ef4SChris Fallininterface terminal-input { 85*133a0ef4SChris Fallin /// The input side of a terminal. 86*133a0ef4SChris Fallin @since(version = 0.2.0) 87*133a0ef4SChris Fallin resource terminal-input; 88*133a0ef4SChris Fallin} 89*133a0ef4SChris Fallin 90*133a0ef4SChris Fallin/// Terminal output. 91*133a0ef4SChris Fallin/// 92*133a0ef4SChris Fallin/// In the future, this may include functions for querying the terminal 93*133a0ef4SChris Fallin/// size, being notified of terminal size changes, querying supported 94*133a0ef4SChris Fallin/// features, and so on. 95*133a0ef4SChris Fallin@since(version = 0.2.0) 96*133a0ef4SChris Fallininterface terminal-output { 97*133a0ef4SChris Fallin /// The output side of a terminal. 98*133a0ef4SChris Fallin @since(version = 0.2.0) 99*133a0ef4SChris Fallin resource terminal-output; 100*133a0ef4SChris Fallin} 101*133a0ef4SChris Fallin 102*133a0ef4SChris Fallin/// An interface providing an optional `terminal-input` for stdin as a 103*133a0ef4SChris Fallin/// link-time authority. 104*133a0ef4SChris Fallin@since(version = 0.2.0) 105*133a0ef4SChris Fallininterface terminal-stdin { 106*133a0ef4SChris Fallin @since(version = 0.2.0) 107*133a0ef4SChris Fallin use terminal-input.{terminal-input}; 108*133a0ef4SChris Fallin 109*133a0ef4SChris Fallin /// If stdin is connected to a terminal, return a `terminal-input` handle 110*133a0ef4SChris Fallin /// allowing further interaction with it. 111*133a0ef4SChris Fallin @since(version = 0.2.0) 112*133a0ef4SChris Fallin get-terminal-stdin: func() -> option<terminal-input>; 113*133a0ef4SChris Fallin} 114*133a0ef4SChris Fallin 115*133a0ef4SChris Fallin/// An interface providing an optional `terminal-output` for stdout as a 116*133a0ef4SChris Fallin/// link-time authority. 117*133a0ef4SChris Fallin@since(version = 0.2.0) 118*133a0ef4SChris Fallininterface terminal-stdout { 119*133a0ef4SChris Fallin @since(version = 0.2.0) 120*133a0ef4SChris Fallin use terminal-output.{terminal-output}; 121*133a0ef4SChris Fallin 122*133a0ef4SChris Fallin /// If stdout is connected to a terminal, return a `terminal-output` handle 123*133a0ef4SChris Fallin /// allowing further interaction with it. 124*133a0ef4SChris Fallin @since(version = 0.2.0) 125*133a0ef4SChris Fallin get-terminal-stdout: func() -> option<terminal-output>; 126*133a0ef4SChris Fallin} 127*133a0ef4SChris Fallin 128*133a0ef4SChris Fallin/// An interface providing an optional `terminal-output` for stderr as a 129*133a0ef4SChris Fallin/// link-time authority. 130*133a0ef4SChris Fallin@since(version = 0.2.0) 131*133a0ef4SChris Fallininterface terminal-stderr { 132*133a0ef4SChris Fallin @since(version = 0.2.0) 133*133a0ef4SChris Fallin use terminal-output.{terminal-output}; 134*133a0ef4SChris Fallin 135*133a0ef4SChris Fallin /// If stderr is connected to a terminal, return a `terminal-output` handle 136*133a0ef4SChris Fallin /// allowing further interaction with it. 137*133a0ef4SChris Fallin @since(version = 0.2.0) 138*133a0ef4SChris Fallin get-terminal-stderr: func() -> option<terminal-output>; 139*133a0ef4SChris Fallin} 140*133a0ef4SChris Fallin 141*133a0ef4SChris Fallin@since(version = 0.2.0) 142*133a0ef4SChris Fallinworld imports { 143*133a0ef4SChris Fallin @since(version = 0.2.0) 144*133a0ef4SChris Fallin import environment; 145*133a0ef4SChris Fallin @since(version = 0.2.0) 146*133a0ef4SChris Fallin import exit; 147*133a0ef4SChris Fallin @since(version = 0.2.0) 148*133a0ef4SChris Fallin import wasi:io/error@0.2.6; 149*133a0ef4SChris Fallin @since(version = 0.2.0) 150*133a0ef4SChris Fallin import wasi:io/poll@0.2.6; 151*133a0ef4SChris Fallin @since(version = 0.2.0) 152*133a0ef4SChris Fallin import wasi:io/streams@0.2.6; 153*133a0ef4SChris Fallin @since(version = 0.2.0) 154*133a0ef4SChris Fallin import stdin; 155*133a0ef4SChris Fallin @since(version = 0.2.0) 156*133a0ef4SChris Fallin import stdout; 157*133a0ef4SChris Fallin @since(version = 0.2.0) 158*133a0ef4SChris Fallin import stderr; 159*133a0ef4SChris Fallin @since(version = 0.2.0) 160*133a0ef4SChris Fallin import terminal-input; 161*133a0ef4SChris Fallin @since(version = 0.2.0) 162*133a0ef4SChris Fallin import terminal-output; 163*133a0ef4SChris Fallin @since(version = 0.2.0) 164*133a0ef4SChris Fallin import terminal-stdin; 165*133a0ef4SChris Fallin @since(version = 0.2.0) 166*133a0ef4SChris Fallin import terminal-stdout; 167*133a0ef4SChris Fallin @since(version = 0.2.0) 168*133a0ef4SChris Fallin import terminal-stderr; 169*133a0ef4SChris Fallin @since(version = 0.2.0) 170*133a0ef4SChris Fallin import wasi:clocks/monotonic-clock@0.2.6; 171*133a0ef4SChris Fallin @since(version = 0.2.0) 172*133a0ef4SChris Fallin import wasi:clocks/wall-clock@0.2.6; 173*133a0ef4SChris Fallin @unstable(feature = clocks-timezone) 174*133a0ef4SChris Fallin import wasi:clocks/timezone@0.2.6; 175*133a0ef4SChris Fallin @since(version = 0.2.0) 176*133a0ef4SChris Fallin import wasi:filesystem/types@0.2.6; 177*133a0ef4SChris Fallin @since(version = 0.2.0) 178*133a0ef4SChris Fallin import wasi:filesystem/preopens@0.2.6; 179*133a0ef4SChris Fallin @since(version = 0.2.0) 180*133a0ef4SChris Fallin import wasi:sockets/network@0.2.6; 181*133a0ef4SChris Fallin @since(version = 0.2.0) 182*133a0ef4SChris Fallin import wasi:sockets/instance-network@0.2.6; 183*133a0ef4SChris Fallin @since(version = 0.2.0) 184*133a0ef4SChris Fallin import wasi:sockets/udp@0.2.6; 185*133a0ef4SChris Fallin @since(version = 0.2.0) 186*133a0ef4SChris Fallin import wasi:sockets/udp-create-socket@0.2.6; 187*133a0ef4SChris Fallin @since(version = 0.2.0) 188*133a0ef4SChris Fallin import wasi:sockets/tcp@0.2.6; 189*133a0ef4SChris Fallin @since(version = 0.2.0) 190*133a0ef4SChris Fallin import wasi:sockets/tcp-create-socket@0.2.6; 191*133a0ef4SChris Fallin @since(version = 0.2.0) 192*133a0ef4SChris Fallin import wasi:sockets/ip-name-lookup@0.2.6; 193*133a0ef4SChris Fallin @since(version = 0.2.0) 194*133a0ef4SChris Fallin import wasi:random/random@0.2.6; 195*133a0ef4SChris Fallin @since(version = 0.2.0) 196*133a0ef4SChris Fallin import wasi:random/insecure@0.2.6; 197*133a0ef4SChris Fallin @since(version = 0.2.0) 198*133a0ef4SChris Fallin import wasi:random/insecure-seed@0.2.6; 199*133a0ef4SChris Fallin} 200*133a0ef4SChris Fallin@since(version = 0.2.0) 201*133a0ef4SChris Fallinworld command { 202*133a0ef4SChris Fallin @since(version = 0.2.0) 203*133a0ef4SChris Fallin import environment; 204*133a0ef4SChris Fallin @since(version = 0.2.0) 205*133a0ef4SChris Fallin import exit; 206*133a0ef4SChris Fallin @since(version = 0.2.0) 207*133a0ef4SChris Fallin import wasi:io/error@0.2.6; 208*133a0ef4SChris Fallin @since(version = 0.2.0) 209*133a0ef4SChris Fallin import wasi:io/poll@0.2.6; 210*133a0ef4SChris Fallin @since(version = 0.2.0) 211*133a0ef4SChris Fallin import wasi:io/streams@0.2.6; 212*133a0ef4SChris Fallin @since(version = 0.2.0) 213*133a0ef4SChris Fallin import stdin; 214*133a0ef4SChris Fallin @since(version = 0.2.0) 215*133a0ef4SChris Fallin import stdout; 216*133a0ef4SChris Fallin @since(version = 0.2.0) 217*133a0ef4SChris Fallin import stderr; 218*133a0ef4SChris Fallin @since(version = 0.2.0) 219*133a0ef4SChris Fallin import terminal-input; 220*133a0ef4SChris Fallin @since(version = 0.2.0) 221*133a0ef4SChris Fallin import terminal-output; 222*133a0ef4SChris Fallin @since(version = 0.2.0) 223*133a0ef4SChris Fallin import terminal-stdin; 224*133a0ef4SChris Fallin @since(version = 0.2.0) 225*133a0ef4SChris Fallin import terminal-stdout; 226*133a0ef4SChris Fallin @since(version = 0.2.0) 227*133a0ef4SChris Fallin import terminal-stderr; 228*133a0ef4SChris Fallin @since(version = 0.2.0) 229*133a0ef4SChris Fallin import wasi:clocks/monotonic-clock@0.2.6; 230*133a0ef4SChris Fallin @since(version = 0.2.0) 231*133a0ef4SChris Fallin import wasi:clocks/wall-clock@0.2.6; 232*133a0ef4SChris Fallin @unstable(feature = clocks-timezone) 233*133a0ef4SChris Fallin import wasi:clocks/timezone@0.2.6; 234*133a0ef4SChris Fallin @since(version = 0.2.0) 235*133a0ef4SChris Fallin import wasi:filesystem/types@0.2.6; 236*133a0ef4SChris Fallin @since(version = 0.2.0) 237*133a0ef4SChris Fallin import wasi:filesystem/preopens@0.2.6; 238*133a0ef4SChris Fallin @since(version = 0.2.0) 239*133a0ef4SChris Fallin import wasi:sockets/network@0.2.6; 240*133a0ef4SChris Fallin @since(version = 0.2.0) 241*133a0ef4SChris Fallin import wasi:sockets/instance-network@0.2.6; 242*133a0ef4SChris Fallin @since(version = 0.2.0) 243*133a0ef4SChris Fallin import wasi:sockets/udp@0.2.6; 244*133a0ef4SChris Fallin @since(version = 0.2.0) 245*133a0ef4SChris Fallin import wasi:sockets/udp-create-socket@0.2.6; 246*133a0ef4SChris Fallin @since(version = 0.2.0) 247*133a0ef4SChris Fallin import wasi:sockets/tcp@0.2.6; 248*133a0ef4SChris Fallin @since(version = 0.2.0) 249*133a0ef4SChris Fallin import wasi:sockets/tcp-create-socket@0.2.6; 250*133a0ef4SChris Fallin @since(version = 0.2.0) 251*133a0ef4SChris Fallin import wasi:sockets/ip-name-lookup@0.2.6; 252*133a0ef4SChris Fallin @since(version = 0.2.0) 253*133a0ef4SChris Fallin import wasi:random/random@0.2.6; 254*133a0ef4SChris Fallin @since(version = 0.2.0) 255*133a0ef4SChris Fallin import wasi:random/insecure@0.2.6; 256*133a0ef4SChris Fallin @since(version = 0.2.0) 257*133a0ef4SChris Fallin import wasi:random/insecure-seed@0.2.6; 258*133a0ef4SChris Fallin 259*133a0ef4SChris Fallin @since(version = 0.2.0) 260*133a0ef4SChris Fallin export run; 261*133a0ef4SChris Fallin} 262