bytecodealliance / bytecodealliance/componentize-go
Feature: Ignore optional export interfaces
- Dominant language
- Rust
- Stars
- 17
- Forks
- 8
- Avg merge
- 6h 57m
- Merged PRs (30d)
- 5
Description
# Description
Currently running into a little issue with an SDK I'm writing. This SDK wraps, among other things, the `wasi:cli` and the `wasi:http` interfaces. The setup is something as follows.
WIT:
```
package jamesstocktonj1:componentize-sdk;
world http {
export wasi:http/incoming-handler@0.2.6;
}
world cli {
export wasi:cli/run@0.2.6;
}
world all {
include sdk;
include http;
include cli;
}
```
Componentize Go Toml:
```toml
wit_paths = ["./wit"]
worlds = [
"sdk",
"http",
"cli"
]
```
## Issue 1
When I import this package (for example the `net/wasihttp` path), it builds a component which exports BOTH `wasi:http` and `wasi:cli` and then same is true when trying to write a CLI application.
I've tried splitting the `gen/wit_exports` file into `gen/wit_exports_cli` and `gen/wit_exports_http` but `componentize-go` complains that:
```
Error: failed to encode component from module
Caused by:
0: failed to decode world from module
1: module was not valid
2: failed to find export of interface `wasi:cli/run@0.2.6` function `run`
```
## Issue 2
We also have a scenario where we want to export neither CLI or HTTP but instead just want to use the `http.Client` interface. This again causes the component to export both interface although neither are needed.
### Summary
- How can we make certain wit interfaces optional?
- Would it be possible to have optional exports depending on what Go module path is imported?
- Having a `go.mod` and `componentize-go.toml` for each path would be possible but quite wasteful
- Can this be done without having to specify a specific interface? e.g. `componentize-go --world foo build ...`
- Can we fix this in the Componentize Go build side?
For more context this is the SDK in question:
https://github.com/jamesstocktonj1/componentize-sdk
Contributor guide
Assessment
This issue has not been assessed yet.