forked from arthurfiorette/axios-cache-interceptor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcache-predicate.ts
55 lines (49 loc) · 1.29 KB
/
cache-predicate.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import type { AxiosResponse } from 'axios';
import type { CachePredicateObject } from './types';
export function checkPredicateObject<R>(
response: AxiosResponse<R>,
{ statusCheck, containsHeaders, responseMatch }: CachePredicateObject
): boolean {
if (statusCheck) {
if (typeof statusCheck === 'function') {
if (!statusCheck(response.status)) {
return false;
}
} else {
const [start, end] = statusCheck;
if (
response.status < start || //
response.status > end
) {
return false;
}
}
}
if (containsHeaders) {
for (const headerName in containsHeaders) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const value = containsHeaders[headerName]!;
const header = response.headers[headerName];
// At any case, if the header is not found, the predicate fails.
if (!header) {
return false;
}
switch (typeof value) {
case 'string':
if (header != value) {
return false;
}
break;
case 'function':
if (!value(header)) {
return false;
}
break;
}
}
}
if (responseMatch && !responseMatch(response.data)) {
return false;
}
return true;
}