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