bytecodealliance / bytecodealliance/componentize-go
Feature: Ignore optional export interfaces
- Vorherrschende Sprache
- Rust
- Sterne
- 17
- Forks
- 8
- Ø Merge
- 6 Std. 57 Min.
- Gemergte PRs (30 T.)
- 5
Beschreibung
# 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
Beitragsleitfaden
Rechercherichtung
Reproduziere das Setup mit den WIT worlds, componentize-go.toml und den Dateien in gen/wit_exports, einschließlich der getrennten CLI- und HTTP-Varianten. Beginne mit dem componentize-go build command und dem gemeldeten Fehler beim Dekodieren der world und ermittle dann, wie die Auswahl der world oder optionale Exports funktionieren sollte. Erledigt ist es, wenn CLI-, HTTP- und client-only-Builds nur die von ihnen benötigten Interfaces exportieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- go, wasm
- Bereich
- build-system, tooling
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100