@@ -366,14 +366,14 @@ class SqliteCacheStore {
366366 */
367367 #findValue ( key , canBeExpired = false ) {
368368 const url = this . #makeValueUrl( key )
369+ const { headers, method } = key
369370
370371 /**
371372 * @type {SqliteStoreValue[] }
372373 */
373- const values = this . #getValuesQuery. all ( url , key . method )
374+ const values = this . #getValuesQuery. all ( url , method )
374375
375376 if ( values . length === 0 ) {
376- // No responses, let's just return early
377377 return undefined
378378 }
379379
@@ -386,16 +386,14 @@ class SqliteCacheStore {
386386 let matches = true
387387
388388 if ( value . vary ) {
389- if ( ! key . headers ) {
390- // Request doesn't have headers so it can't fulfill the vary
391- // requirements no matter what, let's return early
389+ if ( ! headers ) {
392390 return undefined
393391 }
394392
395- value . vary = JSON . parse ( value . vary )
393+ const vary = JSON . parse ( value . vary )
396394
397- for ( const header in value . vary ) {
398- if ( key . headers [ header ] !== value . vary [ header ] ) {
395+ for ( const header in vary ) {
396+ if ( headerValueEquals ( headers [ header ] , vary [ header ] ) ) {
399397 matches = false
400398 break
401399 }
@@ -411,6 +409,30 @@ class SqliteCacheStore {
411409 }
412410}
413411
412+ /**
413+ * @param {string|string[]|null|undefined } lhs
414+ * @param {string|string[]|null|undefined } rhs
415+ * @returns {boolean }
416+ */
417+ function headerValueEquals ( lhs , rhs ) {
418+ if ( Array . isArray ( lhs ) && Array . isArray ( rhs ) ) {
419+ if ( lhs . length !== rhs . length ) {
420+ return false
421+ }
422+
423+ // TODO (fix): This should also match out of order?
424+ for ( let i = 0 ; i < lhs . length ; i ++ ) {
425+ if ( lhs [ i ] !== rhs [ i ] ) {
426+ return false
427+ }
428+ }
429+
430+ return true
431+ }
432+
433+ return lhs === rhs
434+ }
435+
414436/**
415437 * @param {Buffer[] } buffers
416438 * @returns {string[] }
0 commit comments