File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import { expect , test } from "@playwright/test" ;
2+
3+ test . describe ( "http header" , ( ) => {
4+ // couldn't get this to see the headers but verified in chrome devtools
5+ test . skip ( "should set http header" , async ( { page } ) => {
6+ const response = await page . goto ( "/http-header" ) ;
7+
8+ expect ( response ?. headers ( ) [ "test-header" ] ) . toBe ( "test-value" ) ;
9+ } ) ;
10+ } ) ;
Original file line number Diff line number Diff line change 1+ import { HttpHeader } from "@solidjs/start" ;
2+
3+ export default function HttpHeaderRoute ( ) {
4+ return (
5+ < main >
6+ < h1 > Http Header</ h1 >
7+ < HttpHeader name = "test-header" value = "test-value" />
8+ </ main >
9+ ) ;
10+ }
Original file line number Diff line number Diff line change @@ -10,9 +10,10 @@ export type {
1010 HandlerOptions ,
1111 PageEvent ,
1212 ResponseStub ,
13- ServerFunctionMeta ,
13+ ServerFunctionMeta
1414} from "./server/types.ts" ;
1515export { default as clientOnly } from "./shared/clientOnly.ts" ;
1616export { GET } from "./shared/GET.ts" ;
17+ export { HttpHeader } from "./shared/HttpHeader.tsx" ;
1718export { HttpStatusCode } from "./shared/HttpStatusCode.ts" ;
1819export { getServerFunctionMeta } from "./shared/serverFunction.ts" ;
Original file line number Diff line number Diff line change 1+ // @refresh skip
2+ import { onCleanup } from "solid-js" ;
3+ import { getRequestEvent , isServer } from "solid-js/web" ;
4+
5+ import type { PageEvent } from "../server/types.ts" ;
6+ import { appendHeader , setHeader } from "../http/index.ts" ;
7+
8+ export interface HttpHeaderProps {
9+ name : string ;
10+ value : string ;
11+ append ?: boolean ;
12+ }
13+
14+ /**
15+ *
16+ * Read more: https://docs.solidjs.com/solid-start/reference/server/http-header
17+ */
18+ export const HttpHeader = isServer
19+ ? ( props : HttpHeaderProps ) => {
20+ const event = getRequestEvent ( ) as PageEvent ;
21+
22+ if ( props . append ) appendHeader ( props . name , props . value ) ;
23+ else setHeader ( props . name , props . value ) ;
24+
25+ onCleanup ( ( ) => {
26+ // @ts -expect-error
27+ if ( event . nativeEvent . handled || event . complete ) return ;
28+ const value = event . response . headers . get ( props . name ) ;
29+ if ( ! value ) return ;
30+ if ( ! value . includes ( ", " ) ) {
31+ if ( value === props . value ) event . response . headers . delete ( props . name ) ;
32+ return ;
33+ }
34+ const values = value . split ( ", " ) ;
35+ const index = values . indexOf ( props . value ) ;
36+ index !== - 1 && values . splice ( index , 1 ) ;
37+ if ( values . length ) event . response . headers . set ( props . name , values . join ( "," ) ) ;
38+ else event . response . headers . delete ( props . name ) ;
39+ } ) ;
40+ return null ;
41+ }
42+ : ( _props : HttpHeaderProps ) => null ;
You can’t perform that action at this time.
0 commit comments