Skip to content

Commit 541ccdd

Browse files
committed
feat: support case insensitive fetch response header access
1 parent 4b30d89 commit 541ccdd

File tree

5 files changed

+23
-5
lines changed

5 files changed

+23
-5
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ FilesSystem.fetch(
9797
): Promise<FetchResult>
9898
9999
type FetchResult = {
100+
getHeader: (header: string) => string | undefined;
100101
headers: { [key: string]: string };
101102
ok: boolean;
102103
redirected: boolean;

example/src/App.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,16 @@ export function App() {
215215
})
216216
.then((res) => {
217217
setInfo((prev) => {
218-
prev.push({
219-
key: 'fetch(https://example.com)',
220-
value: JSON.stringify(res),
221-
});
218+
prev.push(
219+
{
220+
key: 'fetch(https://example.com)',
221+
value: JSON.stringify(res),
222+
},
223+
{
224+
key: 'getHeader(cOntEnt-tYPe)',
225+
value: res.getHeader('cOntEnt-tYPe') ?? 'undefined',
226+
}
227+
);
222228
return prev.slice();
223229
});
224230
return FileSystem.readFile(Dirs.CacheDir + '/download.html');

jest/react-native-file-access.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class FileSystemMock {
9898
this.filesystem.set(init.path, `[Mock fetch data for '${resource}']`);
9999
}
100100
return {
101+
getHeader: () => undefined,
101102
headers: {},
102103
ok: true,
103104
redirected: false,

src/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,12 @@ function registerFetchListener(
7878
reject(new Error(event.message));
7979
} else if (event.state === 'complete') {
8080
listener.remove();
81+
const headersLower = new Map<string, string>();
82+
for (const [key, value] of Object.entries(event.headers)) {
83+
headersLower.set(key.toLowerCase(), value);
84+
}
8185
resolve({
86+
getHeader: (header: string) => headersLower.get(header.toLowerCase()),
8287
headers: event.headers,
8388
ok: event.ok,
8489
redirected: event.redirected,

src/types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ export type FetchInit = {
2727
};
2828

2929
export type FetchResult = {
30+
/**
31+
* Get an HTTP response header value. (Case insensitive matching.)
32+
*/
33+
getHeader: (header: string) => string | undefined;
34+
3035
/**
3136
* Response HTTP headers.
3237
*/
@@ -61,7 +66,7 @@ export type FetchResult = {
6166
export type FetchCompleteEvent = {
6267
requestId: number;
6368
state: 'complete';
64-
} & FetchResult;
69+
} & Omit<FetchResult, 'getHeader'>;
6570

6671
export type FetchErrorEvent = {
6772
requestId: number;

0 commit comments

Comments
 (0)