Skip to content

Commit 6d31376

Browse files
committed
fix handler file names
1 parent 9ca5cf3 commit 6d31376

File tree

3 files changed

+112
-112
lines changed

3 files changed

+112
-112
lines changed

handler.go

Lines changed: 13 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,27 @@
1-
//go:build js && wasm
1+
//go:build !js
22

33
package workers
44

55
import (
6-
"context"
76
"fmt"
8-
"io"
97
"net/http"
10-
"syscall/js"
11-
12-
"github.com/syumai/workers/internal/jshttp"
13-
"github.com/syumai/workers/internal/jsutil"
14-
"github.com/syumai/workers/internal/runtimecontext"
15-
)
16-
17-
var (
18-
httpHandler http.Handler
19-
closeCh = make(chan struct{})
8+
"os"
209
)
2110

22-
func init() {
23-
var handleRequestCallback js.Func
24-
handleRequestCallback = js.FuncOf(func(this js.Value, args []js.Value) any {
25-
reqObj := args[0]
26-
var cb js.Func
27-
cb = js.FuncOf(func(_ js.Value, pArgs []js.Value) any {
28-
defer cb.Release()
29-
resolve := pArgs[0]
30-
reject := pArgs[1]
31-
go func() {
32-
if len(args) > 1 {
33-
reject.Invoke(jsutil.Errorf("too many args given to handleRequest: %d", len(args)))
34-
return
35-
}
36-
res, err := handleRequest(reqObj)
37-
if err != nil {
38-
reject.Invoke(jsutil.Error(err.Error()))
39-
return
40-
}
41-
resolve.Invoke(res)
42-
}()
43-
return js.Undefined()
44-
})
45-
return jsutil.NewPromise(cb)
46-
})
47-
jsutil.Binding.Set("handleRequest", handleRequestCallback)
48-
}
49-
50-
type appCloser struct {
51-
io.ReadCloser
52-
}
53-
54-
func (c *appCloser) Close() error {
55-
defer close(closeCh)
56-
return c.ReadCloser.Close()
57-
}
58-
59-
// handleRequest accepts a Request object and returns Response object.
60-
func handleRequest(reqObj js.Value) (js.Value, error) {
61-
if httpHandler == nil {
62-
return js.Value{}, fmt.Errorf("Serve must be called before handleRequest.")
63-
}
64-
req, err := jshttp.ToRequest(reqObj)
65-
if err != nil {
66-
return js.Value{}, err
67-
}
68-
ctx := runtimecontext.New(context.Background(), reqObj)
69-
req = req.WithContext(ctx)
70-
reader, writer := io.Pipe()
71-
w := &jshttp.ResponseWriter{
72-
HeaderValue: http.Header{},
73-
StatusCode: http.StatusOK,
74-
Reader: &appCloser{reader},
75-
Writer: writer,
76-
ReadyCh: make(chan struct{}),
77-
}
78-
go func() {
79-
defer w.Ready()
80-
defer writer.Close()
81-
httpHandler.ServeHTTP(w, req)
82-
}()
83-
<-w.ReadyCh
84-
return w.ToJSResponse(), nil
85-
}
86-
87-
//go:wasmimport workers ready
88-
func ready()
89-
90-
// Server serves http.Handler on a JS runtime.
11+
// Server serves http.Handler as a normal HTTP server.
9112
// if the given handler is nil, http.DefaultServeMux will be used.
13+
// As a port number, PORT environment variable or default value (9900) is used.
14+
// This function is implemented for non-JS environments for debugging purposes.
9215
func Serve(handler http.Handler) {
9316
if handler == nil {
9417
handler = http.DefaultServeMux
9518
}
96-
httpHandler = handler
97-
ready()
98-
<-closeCh
19+
port := os.Getenv("PORT")
20+
if port == "" {
21+
port = "9900"
22+
}
23+
addr := fmt.Sprintf(":%s", port)
24+
fmt.Printf("listening on: http://localhost%s\n", addr)
25+
fmt.Fprintln(os.Stderr, "warn: this server is currently running in non-JS mode. to enable JS-related features, please use the make command in the syumai/workers template.")
26+
http.ListenAndServe(addr, handler)
9927
}

handler_js.go

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
//go:build js && wasm
2+
3+
package workers
4+
5+
import (
6+
"context"
7+
"fmt"
8+
"io"
9+
"net/http"
10+
"syscall/js"
11+
12+
"github.com/syumai/workers/internal/jshttp"
13+
"github.com/syumai/workers/internal/jsutil"
14+
"github.com/syumai/workers/internal/runtimecontext"
15+
)
16+
17+
var (
18+
httpHandler http.Handler
19+
closeCh = make(chan struct{})
20+
)
21+
22+
func init() {
23+
var handleRequestCallback js.Func
24+
handleRequestCallback = js.FuncOf(func(this js.Value, args []js.Value) any {
25+
reqObj := args[0]
26+
var cb js.Func
27+
cb = js.FuncOf(func(_ js.Value, pArgs []js.Value) any {
28+
defer cb.Release()
29+
resolve := pArgs[0]
30+
reject := pArgs[1]
31+
go func() {
32+
if len(args) > 1 {
33+
reject.Invoke(jsutil.Errorf("too many args given to handleRequest: %d", len(args)))
34+
return
35+
}
36+
res, err := handleRequest(reqObj)
37+
if err != nil {
38+
reject.Invoke(jsutil.Error(err.Error()))
39+
return
40+
}
41+
resolve.Invoke(res)
42+
}()
43+
return js.Undefined()
44+
})
45+
return jsutil.NewPromise(cb)
46+
})
47+
jsutil.Binding.Set("handleRequest", handleRequestCallback)
48+
}
49+
50+
type appCloser struct {
51+
io.ReadCloser
52+
}
53+
54+
func (c *appCloser) Close() error {
55+
defer close(closeCh)
56+
return c.ReadCloser.Close()
57+
}
58+
59+
// handleRequest accepts a Request object and returns Response object.
60+
func handleRequest(reqObj js.Value) (js.Value, error) {
61+
if httpHandler == nil {
62+
return js.Value{}, fmt.Errorf("Serve must be called before handleRequest.")
63+
}
64+
req, err := jshttp.ToRequest(reqObj)
65+
if err != nil {
66+
return js.Value{}, err
67+
}
68+
ctx := runtimecontext.New(context.Background(), reqObj)
69+
req = req.WithContext(ctx)
70+
reader, writer := io.Pipe()
71+
w := &jshttp.ResponseWriter{
72+
HeaderValue: http.Header{},
73+
StatusCode: http.StatusOK,
74+
Reader: &appCloser{reader},
75+
Writer: writer,
76+
ReadyCh: make(chan struct{}),
77+
}
78+
go func() {
79+
defer w.Ready()
80+
defer writer.Close()
81+
httpHandler.ServeHTTP(w, req)
82+
}()
83+
<-w.ReadyCh
84+
return w.ToJSResponse(), nil
85+
}
86+
87+
//go:wasmimport workers ready
88+
func ready()
89+
90+
// Server serves http.Handler on a JS runtime.
91+
// if the given handler is nil, http.DefaultServeMux will be used.
92+
func Serve(handler http.Handler) {
93+
if handler == nil {
94+
handler = http.DefaultServeMux
95+
}
96+
httpHandler = handler
97+
ready()
98+
<-closeCh
99+
}

handler_without_js.go

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)