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