Skip to content

Commit 02107fe

Browse files
authored
chore: improve getFieldValue (#2785)
* chore: improve getFieldValue * remove * Update benchmarks/cacheGetFieldValues.mjs
1 parent fd66cf0 commit 02107fe

File tree

5 files changed

+48
-12
lines changed

5 files changed

+48
-12
lines changed

benchmarks/cacheGetFieldValues.mjs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { bench, group, run } from 'mitata'
2+
import { getFieldValues } from '../lib/cache/util.js'
3+
4+
const values = [
5+
'',
6+
'foo',
7+
'invälid',
8+
'foo, ',
9+
'foo, bar',
10+
'foo, bar, baz',
11+
'foo, bar, baz, ',
12+
'foo, bar, baz, , '
13+
]
14+
15+
group('getFieldValues', () => {
16+
bench('getFieldValues', () => {
17+
for (let i = 0; i < values.length; ++i) {
18+
getFieldValues(values[i])
19+
}
20+
})
21+
})
22+
23+
await run()

lib/cache/cache.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict'
22

33
const { kConstruct } = require('./symbols')
4-
const { urlEquals, fieldValues: getFieldValues } = require('./util')
4+
const { urlEquals, getFieldValues } = require('./util')
55
const { kEnumerableProperty, isDisturbed } = require('../core/util')
66
const { webidl } = require('../fetch/webidl')
77
const { Response, cloneResponse, fromInnerResponse } = require('../fetch/response')

lib/cache/util.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,23 @@ function urlEquals (A, B, excludeFragment = false) {
2323
* @see https://github.com/chromium/chromium/blob/694d20d134cb553d8d89e5500b9148012b1ba299/content/browser/cache_storage/cache_storage_cache.cc#L260-L262
2424
* @param {string} header
2525
*/
26-
function fieldValues (header) {
26+
function getFieldValues (header) {
2727
assert(header !== null)
2828

2929
const values = []
3030

3131
for (let value of header.split(',')) {
3232
value = value.trim()
3333

34-
if (!value.length) {
35-
continue
36-
} else if (!isValidHeaderName(value)) {
37-
continue
34+
if (isValidHeaderName(value)) {
35+
values.push(value)
3836
}
39-
40-
values.push(value)
4137
}
4238

4339
return values
4440
}
4541

4642
module.exports = {
4743
urlEquals,
48-
fieldValues
44+
getFieldValues
4945
}

lib/fetch/util.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,7 @@ function isValidReasonPhrase (statusText) {
111111
* @see https://fetch.spec.whatwg.org/#header-name
112112
* @param {string} potentialValue
113113
*/
114-
function isValidHeaderName (potentialValue) {
115-
return isValidHTTPToken(potentialValue)
116-
}
114+
const isValidHeaderName = isValidHTTPToken
117115

118116
/**
119117
* @see https://fetch.spec.whatwg.org/#header-value

test/cache/get-field-values.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'use strict'
2+
3+
const { deepStrictEqual, throws } = require('node:assert')
4+
const { test } = require('node:test')
5+
const { getFieldValues } = require('../../lib/cache/util')
6+
7+
test('getFieldValues', () => {
8+
throws(() => getFieldValues(null), {
9+
name: 'AssertionError',
10+
message: 'The expression evaluated to a falsy value:\n\n assert(header !== null)\n'
11+
})
12+
deepStrictEqual(getFieldValues(''), [])
13+
deepStrictEqual(getFieldValues('foo'), ['foo'])
14+
deepStrictEqual(getFieldValues('invälid'), [])
15+
deepStrictEqual(getFieldValues('foo, bar'), ['foo', 'bar'])
16+
deepStrictEqual(getFieldValues('foo, bar, baz'), ['foo', 'bar', 'baz'])
17+
deepStrictEqual(getFieldValues('foo, bar, baz, '), ['foo', 'bar', 'baz'])
18+
deepStrictEqual(getFieldValues('foo, bar, baz, , '), ['foo', 'bar', 'baz'])
19+
})

0 commit comments

Comments
 (0)