Skip to content

Commit dec3d55

Browse files
committed
feat: export RequestHeaders, ResponseHeaders and TypedRequest
1 parent 48fa1e6 commit dec3d55

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

src/fetch.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
// TODO: 'typed' variants of headers
1+
import type { ResponseHeaderMap } from './http'
2+
23
export interface TypedHeaders<TypedHeaderValues extends Record<string, string> | unknown> {
34
/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/append) */
45
append: <Name extends string = keyof TypedHeaderValues & string> (name: Name, value: Name extends string ? Lowercase<Name> extends keyof TypedHeaderValues ? TypedHeaderValues[Lowercase<Name>] : string : string) => void
@@ -23,7 +24,14 @@ export interface TypedHeaders<TypedHeaderValues extends Record<string, string> |
2324

2425
// type TypedHeadersClass<TypedHeaderValues extends Record<string, string>> = new (init?: TypedHeadersInit<TypedHeaderValues>) => TypedHeaders<TypedHeaderValues>
2526

26-
export interface TypedResponse<Body = unknown, Headers extends Record<string, string> | unknown = Record<string, string>> extends Omit<Response, 'json' | 'headers'> {
27+
export interface TypedResponse<Body = unknown, Headers extends Record<string, string> | unknown = ResponseHeaderMap> extends Omit<Response, 'clone' | 'headers' | 'json'> {
28+
clone: () => TypedResponse<Body, Headers>
29+
json: () => Promise<Body>
30+
headers: TypedHeaders<Headers>
31+
}
32+
33+
export interface TypedRequest<Body = unknown, Headers extends Record<string, string> | unknown = ResponseHeaderMap> extends Omit<Request, 'clone' | 'headers' | 'json'> {
34+
clone: () => TypedRequest<Headers>
2735
json: () => Promise<Body>
2836
headers: TypedHeaders<Headers>
2937
}

src/http/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1+
import type { TypedHeaders } from '../fetch'
2+
import type { RequestHeaderMap } from './headers/request'
3+
import type { ResponseHeaderMap } from './headers/response'
4+
15
export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'OPTIONS' | 'HEAD' | 'CONNECT' | 'TRACE'
26

37
export type { RequestHeaderMap, RequestHeaderName } from './headers/request'
48
export type { ResponseHeaderMap, ResponseHeaderName } from './headers/response'
59

610
export type { MimeType } from './mimes'
11+
12+
export type RequestHeaders = TypedHeaders<RequestHeaderMap>
13+
export type ResponseHeaders = TypedHeaders<ResponseHeaderMap>

src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
export type { TypedHeaders, TypedResponse } from './fetch'
1+
export type { TypedHeaders, TypedRequest, TypedResponse } from './fetch'
22

3-
export type { HTTPMethod, MimeType, RequestHeaderMap, RequestHeaderName, ResponseHeaderMap, ResponseHeaderName } from './http'
3+
export type { HTTPMethod, MimeType, RequestHeaderMap, RequestHeaderName, RequestHeaders, ResponseHeaderMap, ResponseHeaderName, ResponseHeaders } from './http'
44

55
export type { TypedFetchInput, TypedFetchPath, TypedFetchRequestInit, TypedFetchResponse } from './inference'
66

0 commit comments

Comments
 (0)