feat(goja): implement fetch API and fix websocket concurrency

fix(goja): handle ignored error returns in fetch API

docs: add fetch API type definitions to global-types
This commit is contained in:
dragon
2026-01-29 14:01:16 +08:00
parent a60f123bee
commit c630b7e34f
5 changed files with 164 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ package tests
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
@@ -87,6 +88,37 @@ routes:
assert.Equal(t, "abc", string(data))
}
func Test_GoJa_Fetch(t *testing.T) {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Test", "test-header")
_, _ = w.Write([]byte("fetched-content"))
}))
defer ts.Close()
server := core.NewDefaultTestServer()
defer server.Close()
server.AddFile("org1/repo1/gh-pages/index.js", `
(async()=>{
const res = await fetch('%s')
response.setHeader('X-Fetched-Header', res.headers['X-Test'] || res.headers['x-test'])
const text = await res.text()
response.write(text)
})()
`, ts.URL)
server.AddFile("org1/repo1/gh-pages/index.html", "dummy")
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
routes:
- path: "**"
js:
exec: "index.js"
`)
data, resp, err := server.OpenFile("https://org1.example.com/repo1/fetch")
assert.NoError(t, err)
assert.Equal(t, "fetched-content", string(data))
assert.Equal(t, "test-header", resp.Header.Get("X-Fetched-Header"))
}
func Benchmark_GoJa_Request(b *testing.B) {
b.Setenv("BM", "1")
server := core.NewDefaultTestServer()