Skip to content

Commit 40be321

Browse files
authored
feat: don't insert proxy reload script on datastar initiated requests (#1235)
1 parent d7f4505 commit 40be321

File tree

2 files changed

+38
-27
lines changed

2 files changed

+38
-27
lines changed

cmd/templ/generatecmd/proxy/proxy.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,8 @@ type roundTripper struct {
242242

243243
func (rt *roundTripper) setShouldSkipResponseModificationHeader(r *http.Request, resp *http.Response) {
244244
// Instruct the modifyResponse function to skip modifying the response if the
245-
// HTTP request has come from HTMX.
246-
if r.Header.Get("HX-Request") != "true" {
245+
// HTTP request has come from HTMX or Datastar.
246+
if r.Header.Get("HX-Request") != "true" && r.Header.Get("Datastar-Request") != "true" {
247247
return
248248
}
249249
resp.Header.Set("templ-skip-modify", "true")

cmd/templ/generatecmd/proxy/proxy_test.go

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,31 +23,42 @@ import (
2323
)
2424

2525
func TestRoundTripper(t *testing.T) {
26-
t.Run("if the HX-Request header is present, set the templ-skip-modify header on the response", func(t *testing.T) {
27-
rt := &roundTripper{}
28-
req, err := http.NewRequest("GET", "http://example.com", nil)
29-
if err != nil {
30-
t.Fatalf("unexpected error creating request: %v", err)
31-
}
32-
req.Header.Set("HX-Request", "true")
33-
resp := &http.Response{Header: make(http.Header)}
34-
rt.setShouldSkipResponseModificationHeader(req, resp)
35-
if resp.Header.Get("templ-skip-modify") != "true" {
36-
t.Errorf("expected templ-skip-modify header to be true, got %v", resp.Header.Get("templ-skip-modify"))
37-
}
38-
})
39-
t.Run("if the HX-Request header is not present, do not set the templ-skip-modify header on the response", func(t *testing.T) {
40-
rt := &roundTripper{}
41-
req, err := http.NewRequest("GET", "http://example.com", nil)
42-
if err != nil {
43-
t.Fatalf("unexpected error creating request: %v", err)
44-
}
45-
resp := &http.Response{Header: make(http.Header)}
46-
rt.setShouldSkipResponseModificationHeader(req, resp)
47-
if resp.Header.Get("templ-skip-modify") != "" {
48-
t.Errorf("expected templ-skip-modify header to be empty, got %v", resp.Header.Get("templ-skip-modify"))
49-
}
50-
})
26+
tests := []struct {
27+
name string
28+
headers map[string]string
29+
expectedSkip string
30+
}{
31+
{
32+
name: "HTMX requests skip modification",
33+
headers: map[string]string{"HX-Request": "true"},
34+
expectedSkip: "true",
35+
},
36+
{
37+
name: "Datastar requests skip modification",
38+
headers: map[string]string{"Datastar-Request": "true"},
39+
expectedSkip: "true",
40+
},
41+
{
42+
name: "Non-HTMX and Datastar requests do not skip modification",
43+
headers: map[string]string{},
44+
expectedSkip: "",
45+
},
46+
}
47+
for _, tc := range tests {
48+
t.Run(tc.name, func(t *testing.T) {
49+
t.Parallel()
50+
rt := &roundTripper{}
51+
req := httptest.NewRequest("GET", "http://example.com", nil)
52+
for k, v := range tc.headers {
53+
req.Header.Set(k, v)
54+
}
55+
resp := &http.Response{Header: make(http.Header)}
56+
rt.setShouldSkipResponseModificationHeader(req, resp)
57+
if resp.Header.Get("templ-skip-modify") != tc.expectedSkip {
58+
t.Errorf("expected templ-skip-modify header to be %q, got %q", tc.expectedSkip, resp.Header.Get("templ-skip-modify"))
59+
}
60+
})
61+
}
5162
}
5263

5364
func getScriptTag(t *testing.T, nonce string) string {

0 commit comments

Comments
 (0)