Skip to content

Commit 593af38

Browse files
committed
review
Signed-off-by: flakey5 <[email protected]>
1 parent 39bd93a commit 593af38

File tree

2 files changed

+31
-19
lines changed

2 files changed

+31
-19
lines changed

src/utils/request.ts

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,7 @@ export function parseUrl(request: Request): URL | undefined {
3030
}
3131

3232
export function parseConditionalHeaders(headers: Headers): ConditionalHeaders {
33-
let ifModifiedSince = headers.has('if-modified-since')
34-
? new Date(headers.get('if-modified-since')!)
35-
: undefined;
36-
37-
if (ifModifiedSince instanceof Date) {
38-
ifModifiedSince.setSeconds(ifModifiedSince.getSeconds() + 1);
39-
} else {
40-
// Invalid date
41-
ifModifiedSince = undefined;
42-
}
33+
const ifModifiedSince = getDateFromHeader(headers.get('if-modified-since'))
4334

4435
const ifMatch = headers.has('if-match')
4536
? headers.get('if-match')!.replaceAll('"', '')
@@ -49,14 +40,7 @@ export function parseConditionalHeaders(headers: Headers): ConditionalHeaders {
4940
? headers.get('if-none-match')!.replaceAll('"', '')
5041
: undefined;
5142

52-
let ifUnmodifiedSince = headers.has('if-unmodified-since')
53-
? new Date(headers.get('if-unmodified-since')!)
54-
: undefined;
55-
56-
if (!(ifUnmodifiedSince instanceof Date)) {
57-
// Invalid date
58-
ifUnmodifiedSince = undefined;
59-
}
43+
const ifUnmodifiedSince = getDateFromHeader(headers.get('if-unmodified-since'))
6044

6145
const range = headers.has('range')
6246
? parseRangeHeader(headers.get('range')!)
@@ -71,6 +55,17 @@ export function parseConditionalHeaders(headers: Headers): ConditionalHeaders {
7155
};
7256
}
7357

58+
function getDateFromHeader(dateString: string | null): Date | undefined {
59+
if (dateString === null) {
60+
return undefined;
61+
}
62+
63+
const date = new Date(dateString);
64+
65+
// @ts-expect-error date to number conversion
66+
return date instanceof Date && !isNaN(date) ? date : undefined;
67+
}
68+
7469
/**
7570
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range
7671
* @returns undefined if header is invalid

tests/unit/utils/request.test.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import assert from 'node:assert';
22
import { describe, it } from 'node:test';
3-
import { parseRangeHeader } from '../../../src/utils/request';
3+
import { parseConditionalHeaders, parseRangeHeader } from '../../../src/utils/request';
44

55
describe('parseRangeHeader', () => {
66
it('`bytes=0-10`', () => {
@@ -49,3 +49,20 @@ describe('parseRangeHeader', () => {
4949
assert.strictEqual(result, undefined);
5050
});
5151
});
52+
53+
describe('parseConditionalHeaders', () => {
54+
it('invalid dates', () => {
55+
const headers = new Headers({
56+
'if-modified-since': 'asd',
57+
'if-unmodified-since': 'asd'
58+
});
59+
60+
assert.deepStrictEqual(parseConditionalHeaders(headers), {
61+
ifMatch: undefined,
62+
ifNoneMatch: undefined,
63+
ifModifiedSince: undefined,
64+
ifUnmodifiedSince: undefined,
65+
range: undefined
66+
})
67+
})
68+
})

0 commit comments

Comments
 (0)