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 "../../../../packages/start/src/shared/HttpHeader" ;
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,11 @@ 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" ;
20+
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+ import type { PageEvent } from "../server/types" ;
5+
6+ export interface HttpHeaderProps {
7+ name : string ;
8+ value : string ;
9+ append ?: boolean ;
10+ }
11+
12+ /**
13+ *
14+ * Read more: https://docs.solidjs.com/solid-start/reference/server/http-header
15+ */
16+ export const HttpHeader = isServer
17+ ? ( props : HttpHeaderProps ) => {
18+ const event = getRequestEvent ( ) as PageEvent ;
19+
20+ if ( props . append ) event . response . headers . append ( props . name , props . value ) ;
21+ else event . response . headers . set ( props . name , props . value ) ;
22+
23+ onCleanup ( ( ) => {
24+ // @ts -expect-error
25+ if ( event . nativeEvent . handled || event . complete ) return ;
26+ const value = event . response . headers . get ( props . name ) ;
27+ if ( ! value ) return ;
28+ if ( ! value . includes ( ", " ) ) {
29+ if ( value === props . value ) event . response . headers . delete ( props . name ) ;
30+ return ;
31+ }
32+ const values = value . split ( ", " ) ;
33+ const index = values . indexOf ( props . value ) ;
34+ index !== - 1 && values . splice ( index , 1 ) ;
35+ if ( values . length ) event . response . headers . set ( props . name , values . join ( "," ) ) ;
36+ else event . response . headers . delete ( props . name ) ;
37+ } ) ;
38+ return null ;
39+ }
40+ : ( _props : HttpHeaderProps ) => null ;
You can’t perform that action at this time.
0 commit comments