diff --git a/cmd/api/main.go b/cmd/api/main.go index 63a2ff6..2a4d47c 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -55,7 +55,7 @@ func main() { } func seedEndpoint(store storage.Store, cache storage.ModCacher) { - b, err := os.ReadFile("examples/go/app.wasm") + b, err := os.ReadFile("examples/js/index.js") if err != nil { log.Fatal(err) } diff --git a/examples/go/main.go b/examples/go/main.go index 08b62cd..70acbed 100644 --- a/examples/go/main.go +++ b/examples/go/main.go @@ -17,9 +17,15 @@ func handleDashboard(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello from the dashboard handler")) } +func handleIndex(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + w.Write([]byte("login page:
Dashboard page:
")) +} + func main() { router := chi.NewMux() router.Get("/dashboard", handleDashboard) router.Get("/login", handleLogin) + router.Get("/", handleIndex) raptor.Handle(router) } diff --git a/examples/js/index.js b/examples/js/index.js index e6af6fc..70ff295 100644 --- a/examples/js/index.js +++ b/examples/js/index.js @@ -1,32 +1,19 @@ // This should come from the official SDK. // But there is no official SDK yet, so we keep it here. -function hexLog(s) { - for (let i = 0; i < s.length; i++) { - putstr(s.charCodeAt(i).toString(16).padStart(2, "0")) - } - putstr("0a") -} - -console.log = hexLog - function respond(res, status) { var buffer = new ArrayBuffer(8); var view = new DataView(buffer); view.setUint32(0, status, true); view.setUint32(4, res.length, true); - for (let i = 0; i < res.length; i++) { - putstr(res.charCodeAt(i).toString(16).padStart(2, "0")) - } - for (let i = 0; i < view.buffer.byteLength; i++) { - putstr(view.getUint8(i).toString(16).padStart(2, "0")); - } + putstr(res); + writebytes(view) } -console.log("user log here") -console.log("user log here") -console.log("user log here") -console.log("user log here") -console.log("user log here") +console.log("USER LOGS"); +console.log("USER LOGS"); +console.log("USER LOGS"); +console.log("USER LOGS"); +console.log("USER LOGS"); -respond("

From my Raptor application


some other stuff here
", 200) \ No newline at end of file +respond("Hello world!", 200) \ No newline at end of file diff --git a/internal/_testdata/helloworld.js b/internal/_testdata/helloworld.js index 90d572a..70ff295 100644 --- a/internal/_testdata/helloworld.js +++ b/internal/_testdata/helloworld.js @@ -1,26 +1,19 @@ // This should come from the official SDK. // But there is no official SDK yet, so we keep it here. -function hexLog(s) { - for (let i = 0; i < s.length; i++) { - putstr(s.charCodeAt(i).toString(16).padStart(2, "0")) - } - putstr("0a") -} - -console.log = hexLog - function respond(res, status) { var buffer = new ArrayBuffer(8); var view = new DataView(buffer); view.setUint32(0, status, true); view.setUint32(4, res.length, true); - for (let i = 0; i < res.length; i++) { - putstr(res.charCodeAt(i).toString(16).padStart(2, "0")) - } - for (let i = 0; i < view.buffer.byteLength; i++) { - putstr(view.getUint8(i).toString(16).padStart(2, "0")); - } + putstr(res); + writebytes(view) } +console.log("USER LOGS"); +console.log("USER LOGS"); +console.log("USER LOGS"); +console.log("USER LOGS"); +console.log("USER LOGS"); + respond("Hello world!", 200) \ No newline at end of file diff --git a/internal/actrs/runtime.go b/internal/actrs/runtime.go index c4ab651..2135bcc 100644 --- a/internal/actrs/runtime.go +++ b/internal/actrs/runtime.go @@ -145,7 +145,7 @@ func (r *Runtime) handleHTTPRequest(ctx *actor.Context, msg *proto.HTTPRequest) return } - logs, res, status, err := shared.ParseStdout(msg.Runtime, r.stdout) + logs, res, status, err := shared.ParseStdout(r.stdout) if err != nil { respondError(ctx, http.StatusInternalServerError, "invalid response", msg.ID) return diff --git a/internal/runtime/runtime_test.go b/internal/runtime/runtime_test.go index dffe104..6023717 100644 --- a/internal/runtime/runtime_test.go +++ b/internal/runtime/runtime_test.go @@ -42,7 +42,7 @@ func TestRuntimeInvokeJSCode(t *testing.T) { scriptArgs := []string{"", "-e", string(b)} require.Nil(t, r.Invoke(bytes.NewReader(breq), nil, scriptArgs...)) - _, res, status, err := shared.ParseStdout("js", out) + _, res, status, err := shared.ParseStdout(out) require.Nil(t, err) require.Equal(t, http.StatusOK, status) require.Equal(t, "Hello world!", string(res)) @@ -72,7 +72,7 @@ func TestRuntimeInvokeGoCode(t *testing.T) { r, err := New(context.Background(), args) require.Nil(t, err) require.Nil(t, r.Invoke(bytes.NewReader(breq), nil)) - _, res, status, err := shared.ParseStdout("go", out) + _, res, status, err := shared.ParseStdout(out) require.Nil(t, err) require.Equal(t, http.StatusOK, status) require.Equal(t, "Hello world!", string(res)) diff --git a/internal/shared/shared.go b/internal/shared/shared.go index 628627d..78465d6 100644 --- a/internal/shared/shared.go +++ b/internal/shared/shared.go @@ -21,8 +21,8 @@ const ( var errInvalidHTTPResponse = errors.New("invalid HTTP response") -func ParseStdout(runtime string, stdout io.Reader) (logs []byte, resp []byte, status int, err error) { - stdoutb, err := io.ReadAll(GetDecodedStdout(runtime, stdout)) +func ParseStdout(stdout io.Reader) (logs []byte, resp []byte, status int, err error) { + stdoutb, err := io.ReadAll(stdout) if err != nil { return } @@ -93,17 +93,6 @@ func makeProtoHeader(header http.Header) map[string]*proto.HeaderFields { return m } -func GetDecodedStdout(runtime string, stdout io.Reader) io.Reader { - switch runtime { - case "go": - return stdout - case "js": - return hex.NewDecoder(stdout) - default: - return stdout - } -} - func IsZeroUUID(id uuid.UUID) bool { return id.String() == UUIDZERO } diff --git a/internal/shared/shared_test.go b/internal/shared/shared_test.go index bed02fd..a37cb72 100644 --- a/internal/shared/shared_test.go +++ b/internal/shared/shared_test.go @@ -34,7 +34,7 @@ the big brown fox builder.WriteString(userLogs) builder.WriteString(userResp) builder.Write(buf) - if _, _, _, err := ParseStdout("go", builder); err != nil { + if _, _, _, err := ParseStdout(builder); err != nil { log.Fatal(err) } builder.Reset() @@ -54,7 +54,7 @@ func TestParseWithoutUserLogs(t *testing.T) { binary.LittleEndian.PutUint32(buf[4:8], uint32(len(userResp))) builder.Write(buf) - logs, resp, status, err := ParseStdout("go", builder) + logs, resp, status, err := ParseStdout(builder) require.Nil(t, err) require.Equal(t, int(statusCode), status) require.Equal(t, userResp, string(resp)) @@ -81,7 +81,7 @@ the big brown fox binary.LittleEndian.PutUint32(buf[4:8], uint32(len(userResp))) builder.Write(buf) - logs, resp, status, err := ParseStdout("go", builder) + logs, resp, status, err := ParseStdout(builder) require.Nil(t, err) require.Equal(t, int(statusCode), status) require.Equal(t, userResp, string(resp)) diff --git a/internal/spidermonkey/js.wasm b/internal/spidermonkey/js.wasm index 9f993a7..fda23bd 100644 Binary files a/internal/spidermonkey/js.wasm and b/internal/spidermonkey/js.wasm differ