* @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm * @param {any} requestQuery * @param {any} request * @param {any | null} response * @param {import('../../../types/cache').CacheQueryOptions | undefined} options * @returns {boolean}
(requestQuery, request, response = null, options)
| 697 | * @returns {boolean} |
| 698 | */ |
| 699 | #requestMatchesCachedItem (requestQuery, request, response = null, options) { |
| 700 | // if (options?.ignoreMethod === false && request.method === 'GET') { |
| 701 | // return false |
| 702 | // } |
| 703 | |
| 704 | const queryURL = new URL(requestQuery.url) |
| 705 | |
| 706 | const cachedURL = new URL(request.url) |
| 707 | |
| 708 | if (options?.ignoreSearch) { |
| 709 | cachedURL.search = '' |
| 710 | |
| 711 | queryURL.search = '' |
| 712 | } |
| 713 | |
| 714 | if (!urlEquals(queryURL, cachedURL, true)) { |
| 715 | return false |
| 716 | } |
| 717 | |
| 718 | if ( |
| 719 | response == null || |
| 720 | options?.ignoreVary || |
| 721 | !response.headersList.contains('vary') |
| 722 | ) { |
| 723 | return true |
| 724 | } |
| 725 | |
| 726 | const fieldValues = getFieldValues(response.headersList.get('vary')) |
| 727 | |
| 728 | for (const fieldValue of fieldValues) { |
| 729 | if (fieldValue === '*') { |
| 730 | return false |
| 731 | } |
| 732 | |
| 733 | const requestValue = request.headersList.get(fieldValue) |
| 734 | const queryValue = requestQuery.headersList.get(fieldValue) |
| 735 | |
| 736 | // If one has the header and the other doesn't, or one has |
| 737 | // a different value than the other, return false |
| 738 | if (requestValue !== queryValue) { |
| 739 | return false |
| 740 | } |
| 741 | } |
| 742 | |
| 743 | return true |
| 744 | } |
| 745 | |
| 746 | #internalMatchAll (request, options, maxResponses = Infinity) { |
| 747 | // 1. |
no test coverage detected