mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-02 01:59:31 +08:00
44 lines
1.6 KiB
Text
44 lines
1.6 KiB
Text
/*
|
|
Copyright 2020 Google LLC
|
|
Use of this source code is governed by an MIT-style
|
|
license that can be found in the LICENSE file or at
|
|
https://opensource.org/licenses/MIT.
|
|
*/
|
|
import '../_version.js';
|
|
function stripParams(fullURL, ignoreParams) {
|
|
const strippedURL = new URL(fullURL);
|
|
for (const param of ignoreParams) {
|
|
strippedURL.searchParams.delete(param);
|
|
}
|
|
return strippedURL.href;
|
|
}
|
|
/**
|
|
* Matches an item in the cache, ignoring specific URL params. This is similar
|
|
* to the `ignoreSearch` option, but it allows you to ignore just specific
|
|
* params (while continuing to match on the others).
|
|
*
|
|
* @private
|
|
* @param {Cache} cache
|
|
* @param {Request} request
|
|
* @param {Object} matchOptions
|
|
* @param {Array<string>} ignoreParams
|
|
* @return {Promise<Response|undefined>}
|
|
*/
|
|
async function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {
|
|
const strippedRequestURL = stripParams(request.url, ignoreParams);
|
|
// If the request doesn't include any ignored params, match as normal.
|
|
if (request.url === strippedRequestURL) {
|
|
return cache.match(request, matchOptions);
|
|
}
|
|
// Otherwise, match by comparing keys
|
|
const keysOptions = Object.assign(Object.assign({}, matchOptions), { ignoreSearch: true });
|
|
const cacheKeys = await cache.keys(request, keysOptions);
|
|
for (const cacheKey of cacheKeys) {
|
|
const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);
|
|
if (strippedRequestURL === strippedCacheKeyURL) {
|
|
return cache.match(cacheKey, matchOptions);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
export { cacheMatchIgnoreParams };
|