Skip to content

Commit

Permalink
Merge pull request #24 from wacker-dev/wasi-0.2.2
Browse files Browse the repository at this point in the history
Bump WASI version to 0.2.2
  • Loading branch information
iawia002 authored Oct 10, 2024
2 parents 38797af + 7fbbb65 commit 70a5e40
Show file tree
Hide file tree
Showing 28 changed files with 119 additions and 87 deletions.
2 changes: 1 addition & 1 deletion scripts/vendor-wit.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ set -ex
# and every repository has a tag `v$tag` here. That is currently done as part
# of the WASI release process.
repos="cli clocks filesystem http io random sockets"
tag=0.2.1
tag=0.2.2
dst=waki/wit/deps

rm -rf $dst
Expand Down
2 changes: 1 addition & 1 deletion waki/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ waki-macros.workspace = true

anyhow.workspace = true
serde.workspace = true
wit-bindgen = "0.32.0"
wit-bindgen = "0.34.0"
url = "2.5.2"
http = "1.1.0"
serde_urlencoded = "0.7.1"
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/cli/command.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:cli@0.2.1;
package wasi:cli@0.2.2;

@since(version = 0.2.0)
world command {
Expand Down
12 changes: 6 additions & 6 deletions waki/wit/deps/cli/imports.wit
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package wasi:cli@0.2.1;
package wasi:cli@0.2.2;

@since(version = 0.2.0)
world imports {
@since(version = 0.2.0)
include wasi:clocks/imports@0.2.1;
include wasi:clocks/imports@0.2.2;
@since(version = 0.2.0)
include wasi:filesystem/imports@0.2.1;
include wasi:filesystem/imports@0.2.2;
@since(version = 0.2.0)
include wasi:sockets/imports@0.2.1;
include wasi:sockets/imports@0.2.2;
@since(version = 0.2.0)
include wasi:random/imports@0.2.1;
include wasi:random/imports@0.2.2;
@since(version = 0.2.0)
include wasi:io/imports@0.2.1;
include wasi:io/imports@0.2.2;

@since(version = 0.2.0)
import environment;
Expand Down
6 changes: 3 additions & 3 deletions waki/wit/deps/cli/stdio.wit
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@since(version = 0.2.0)
interface stdin {
@since(version = 0.2.0)
use wasi:io/streams@0.2.1.{input-stream};
use wasi:io/streams@0.2.2.{input-stream};

@since(version = 0.2.0)
get-stdin: func() -> input-stream;
Expand All @@ -10,7 +10,7 @@ interface stdin {
@since(version = 0.2.0)
interface stdout {
@since(version = 0.2.0)
use wasi:io/streams@0.2.1.{output-stream};
use wasi:io/streams@0.2.2.{output-stream};

@since(version = 0.2.0)
get-stdout: func() -> output-stream;
Expand All @@ -19,7 +19,7 @@ interface stdout {
@since(version = 0.2.0)
interface stderr {
@since(version = 0.2.0)
use wasi:io/streams@0.2.1.{output-stream};
use wasi:io/streams@0.2.2.{output-stream};

@since(version = 0.2.0)
get-stderr: func() -> output-stream;
Expand Down
4 changes: 2 additions & 2 deletions waki/wit/deps/clocks/monotonic-clock.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:clocks@0.2.1;
package wasi:clocks@0.2.2;
/// WASI Monotonic Clock is a clock API intended to let users measure elapsed
/// time.
///
Expand All @@ -10,7 +10,7 @@ package wasi:clocks@0.2.1;
@since(version = 0.2.0)
interface monotonic-clock {
@since(version = 0.2.0)
use wasi:io/poll@0.2.1.{pollable};
use wasi:io/poll@0.2.2.{pollable};

/// An instant in time, in nanoseconds. An instant is relative to an
/// unspecified initial value, and can only be compared to instances from
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/clocks/timezone.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:clocks@0.2.1;
package wasi:clocks@0.2.2;

@unstable(feature = clocks-timezone)
interface timezone {
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/clocks/wall-clock.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:clocks@0.2.1;
package wasi:clocks@0.2.2;
/// WASI Wall Clock is a clock API intended to let users query the current
/// time. The name "wall" makes an analogy to a "clock on the wall", which
/// is not necessarily monotonic as it may be reset.
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/clocks/world.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:clocks@0.2.1;
package wasi:clocks@0.2.2;

@since(version = 0.2.0)
world imports {
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/filesystem/preopens.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:filesystem@0.2.1;
package wasi:filesystem@0.2.2;

@since(version = 0.2.0)
interface preopens {
Expand Down
12 changes: 3 additions & 9 deletions waki/wit/deps/filesystem/types.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:filesystem@0.2.1;
package wasi:filesystem@0.2.2;
/// WASI filesystem is a filesystem API primarily intended to let users run WASI
/// programs that access their files on their existing filesystems, without
/// significant overhead.
Expand Down Expand Up @@ -26,9 +26,9 @@ package wasi:filesystem@0.2.1;
@since(version = 0.2.0)
interface types {
@since(version = 0.2.0)
use wasi:io/streams@0.2.1.{input-stream, output-stream, error};
use wasi:io/streams@0.2.2.{input-stream, output-stream, error};
@since(version = 0.2.0)
use wasi:clocks/wall-clock@0.2.1.{datetime};
use wasi:clocks/wall-clock@0.2.2.{datetime};

/// File size or length of a region within a file.
@since(version = 0.2.0)
Expand Down Expand Up @@ -523,12 +523,6 @@ interface types {

/// Open a file or directory.
///
/// The returned descriptor is not guaranteed to be the lowest-numbered
/// descriptor not currently open/ it is randomized to prevent applications
/// from depending on making assumptions about indexes, since this is
/// error-prone in multi-threaded contexts. The returned descriptor is
/// guaranteed to be less than 2**31.
///
/// If `flags` contains `descriptor-flags::mutate-directory`, and the base
/// descriptor doesn't have `descriptor-flags::mutate-directory` set,
/// `open-at` fails with `error-code::read-only`.
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/filesystem/world.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:filesystem@0.2.1;
package wasi:filesystem@0.2.2;

@since(version = 0.2.0)
world imports {
Expand Down
14 changes: 7 additions & 7 deletions waki/wit/deps/http/proxy.wit
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
package wasi:http@0.2.1;
package wasi:http@0.2.2;

/// The `wasi:http/imports` world imports all the APIs for HTTP proxies.
/// It is intended to be `include`d in other worlds.
@since(version = 0.2.0)
world imports {
/// HTTP proxies have access to time and randomness.
@since(version = 0.2.0)
import wasi:clocks/monotonic-clock@0.2.1;
import wasi:clocks/monotonic-clock@0.2.2;
@since(version = 0.2.0)
import wasi:clocks/wall-clock@0.2.1;
import wasi:clocks/wall-clock@0.2.2;
@since(version = 0.2.0)
import wasi:random/random@0.2.1;
import wasi:random/random@0.2.2;

/// Proxies have standard output and error streams which are expected to
/// terminate in a developer-facing console provided by the host.
@since(version = 0.2.0)
import wasi:cli/stdout@0.2.1;
import wasi:cli/stdout@0.2.2;
@since(version = 0.2.0)
import wasi:cli/stderr@0.2.1;
import wasi:cli/stderr@0.2.2;

/// TODO: this is a temporary workaround until component tooling is able to
/// gracefully handle the absence of stdin. Hosts must return an eof stream
/// for this import, which is what wasi-libc + tooling will do automatically
/// when this import is properly removed.
@since(version = 0.2.0)
import wasi:cli/stdin@0.2.1;
import wasi:cli/stdin@0.2.2;

/// This is the default handler to use when user code simply wants to make an
/// HTTP request (e.g., via `fetch()`).
Expand Down
82 changes: 50 additions & 32 deletions waki/wit/deps/http/types.wit
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
@since(version = 0.2.0)
interface types {
@since(version = 0.2.0)
use wasi:clocks/monotonic-clock@0.2.1.{duration};
use wasi:clocks/monotonic-clock@0.2.2.{duration};
@since(version = 0.2.0)
use wasi:io/streams@0.2.1.{input-stream, output-stream};
use wasi:io/streams@0.2.2.{input-stream, output-stream};
@since(version = 0.2.0)
use wasi:io/error@0.2.1.{error as io-error};
use wasi:io/error@0.2.2.{error as io-error};
@since(version = 0.2.0)
use wasi:io/poll@0.2.1.{pollable};
use wasi:io/poll@0.2.2.{pollable};

/// This type corresponds to HTTP standard Methods.
@since(version = 0.2.0)
Expand Down Expand Up @@ -124,12 +124,12 @@ interface types {
/// setting or appending to a `fields` resource.
@since(version = 0.2.0)
variant header-error {
/// This error indicates that a `field-key` or `field-value` was
/// This error indicates that a `field-name` or `field-value` was
/// syntactically invalid when used with an operation that sets headers in a
/// `fields`.
invalid-syntax,

/// This error indicates that a forbidden `field-key` was used when trying
/// This error indicates that a forbidden `field-name` was used when trying
/// to set a header in a `fields`.
forbidden,

Expand All @@ -138,8 +138,23 @@ interface types {
immutable,
}

/// Field names are always strings.
///
/// Field names should always be treated as case insensitive by the `fields`
/// resource for the purposes of equality checking.
@since(version = 0.2.1)
type field-name = field-key;

/// Field keys are always strings.
///
/// Field keys should always be treated as case insensitive by the `fields`
/// resource for the purposes of equality checking.
///
/// # Deprecation
///
/// This type has been deprecated in favor of the `field-name` type.
@since(version = 0.2.0)
@deprecated(version = 0.2.2)
type field-key = string;

/// Field values should always be ASCII strings. However, in
Expand Down Expand Up @@ -171,70 +186,73 @@ interface types {
///
/// The resulting `fields` is mutable.
///
/// The list represents each key-value pair in the Fields. Keys
/// The list represents each name-value pair in the Fields. Names
/// which have multiple values are represented by multiple entries in this
/// list with the same key.
/// list with the same name.
///
/// The tuple is a pair of the field key, represented as a string, and
/// The tuple is a pair of the field name, represented as a string, and
/// Value, represented as a list of bytes.
///
/// An error result will be returned if any `field-key` or `field-value` is
/// An error result will be returned if any `field-name` or `field-value` is
/// syntactically invalid, or if a field is forbidden.
@since(version = 0.2.0)
from-list: static func(
entries: list<tuple<field-key,field-value>>
entries: list<tuple<field-name,field-value>>
) -> result<fields, header-error>;

/// Get all of the values corresponding to a key. If the key is not present
/// Get all of the values corresponding to a name. If the name is not present
/// in this `fields` or is syntactically invalid, an empty list is returned.
/// However, if the key is present but empty, this is represented by a list
/// However, if the name is present but empty, this is represented by a list
/// with one or more empty field-values present.
@since(version = 0.2.0)
get: func(name: field-key) -> list<field-value>;
get: func(name: field-name) -> list<field-value>;

/// Returns `true` when the key is present in this `fields`. If the key is
/// Returns `true` when the name is present in this `fields`. If the name is
/// syntactically invalid, `false` is returned.
@since(version = 0.2.0)
has: func(name: field-key) -> bool;
has: func(name: field-name) -> bool;

/// Set all of the values for a key. Clears any existing values for that
/// key, if they have been set.
/// Set all of the values for a name. Clears any existing values for that
/// name, if they have been set.
///
/// Fails with `header-error.immutable` if the `fields` are immutable.
///
/// Fails with `header-error.invalid-syntax` if the `field-key` or any of
/// Fails with `header-error.invalid-syntax` if the `field-name` or any of
/// the `field-value`s are syntactically invalid.
@since(version = 0.2.0)
set: func(name: field-key, value: list<field-value>) -> result<_, header-error>;
set: func(name: field-name, value: list<field-value>) -> result<_, header-error>;

/// Delete all values for a key. Does nothing if no values for the key
/// Delete all values for a name. Does nothing if no values for the name
/// exist.
///
/// Fails with `header-error.immutable` if the `fields` are immutable.
///
/// Fails with `header-error.invalid-syntax` if the `field-key` is
/// Fails with `header-error.invalid-syntax` if the `field-name` is
/// syntactically invalid.
@since(version = 0.2.0)
delete: func(name: field-key) -> result<_, header-error>;
delete: func(name: field-name) -> result<_, header-error>;

/// Append a value for a key. Does not change or delete any existing
/// values for that key.
/// Append a value for a name. Does not change or delete any existing
/// values for that name.
///
/// Fails with `header-error.immutable` if the `fields` are immutable.
///
/// Fails with `header-error.invalid-syntax` if the `field-key` or
/// Fails with `header-error.invalid-syntax` if the `field-name` or
/// `field-value` are syntactically invalid.
@since(version = 0.2.0)
append: func(name: field-key, value: field-value) -> result<_, header-error>;
append: func(name: field-name, value: field-value) -> result<_, header-error>;

/// Retrieve the full set of keys and values in the Fields. Like the
/// constructor, the list represents each key-value pair.
/// Retrieve the full set of names and values in the Fields. Like the
/// constructor, the list represents each name-value pair.
///
/// The outer list represents each key-value pair in the Fields. Keys
/// The outer list represents each name-value pair in the Fields. Names
/// which have multiple values are represented by multiple entries in this
/// list with the same key.
/// list with the same name.
///
/// The names and values are always returned in the original casing and in
/// the order in which they will be serialized for transport.
@since(version = 0.2.0)
entries: func() -> list<tuple<field-key,field-value>>;
entries: func() -> list<tuple<field-name,field-value>>;

/// Make a deep copy of the Fields. Equivalent in behavior to calling the
/// `fields` constructor on the return value of `entries`. The resulting
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/io/error.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:io@0.2.1;
package wasi:io@0.2.2;

@since(version = 0.2.0)
interface error {
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/io/poll.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:io@0.2.1;
package wasi:io@0.2.2;

/// A poll API intended to let users wait for I/O events on multiple handles
/// at once.
Expand Down
6 changes: 5 additions & 1 deletion waki/wit/deps/io/streams.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:io@0.2.1;
package wasi:io@0.2.2;

/// WASI I/O is an I/O abstraction API which is currently focused on providing
/// stream types.
Expand All @@ -18,6 +18,9 @@ interface streams {
/// The last operation (a write or flush) failed before completion.
///
/// More information is available in the `error` payload.
///
/// After this, the stream will be closed. All future operations return
/// `stream-error::closed`.
last-operation-failed(error),
/// The stream is closed: no more input will be accepted by the
/// stream. A closed output-stream will return this error on all
Expand Down Expand Up @@ -205,6 +208,7 @@ interface streams {
/// The created `pollable` is a child resource of the `output-stream`.
/// Implementations may trap if the `output-stream` is dropped before
/// all derived `pollable`s created with this function are dropped.
@since(version = 0.2.0)
subscribe: func() -> pollable;

/// Write zeroes to a stream.
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/io/world.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:io@0.2.1;
package wasi:io@0.2.2;

@since(version = 0.2.0)
world imports {
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/random/insecure-seed.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:random@0.2.1;
package wasi:random@0.2.2;
/// The insecure-seed interface for seeding hash-map DoS resistance.
///
/// It is intended to be portable at least between Unix-family platforms and
Expand Down
2 changes: 1 addition & 1 deletion waki/wit/deps/random/insecure.wit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package wasi:random@0.2.1;
package wasi:random@0.2.2;
/// The insecure interface for insecure pseudo-random numbers.
///
/// It is intended to be portable at least between Unix-family platforms and
Expand Down
Loading

0 comments on commit 70a5e40

Please sign in to comment.