aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/node_modules/undici/lib/web/cache/cache.js
diff options
context:
space:
mode:
authorEgor Tensin <egor@tensin.name>2026-02-28 21:59:12 +0100
committerEgor Tensin <egor@tensin.name>2026-02-28 22:19:57 +0100
commit9611c248995ad3bacda1d0a93d0b5e1e6605d162 (patch)
treeeb3ae35b426e9d72e7cb34e8e9cc0453745a8e17 /node_modules/undici/lib/web/cache/cache.js
parentDEVELOPMENT.md: expand on sources (diff)
downloadcleanup-path-9611c248995ad3bacda1d0a93d0b5e1e6605d162.tar.gz
cleanup-path-9611c248995ad3bacda1d0a93d0b5e1e6605d162.zip
upgrade actions/core to version 2
Diffstat (limited to '')
-rw-r--r--node_modules/undici/lib/web/cache/cache.js (renamed from node_modules/undici/lib/cache/cache.js)229
1 files changed, 125 insertions, 104 deletions
diff --git a/node_modules/undici/lib/cache/cache.js b/node_modules/undici/lib/web/cache/cache.js
index 9b31108..1c1a591 100644
--- a/node_modules/undici/lib/cache/cache.js
+++ b/node_modules/undici/lib/web/cache/cache.js
@@ -1,17 +1,15 @@
'use strict'
const { kConstruct } = require('./symbols')
-const { urlEquals, fieldValues: getFieldValues } = require('./util')
-const { kEnumerableProperty, isDisturbed } = require('../core/util')
-const { kHeadersList } = require('../core/symbols')
+const { urlEquals, getFieldValues } = require('./util')
+const { kEnumerableProperty, isDisturbed } = require('../../core/util')
const { webidl } = require('../fetch/webidl')
-const { Response, cloneResponse } = require('../fetch/response')
-const { Request } = require('../fetch/request')
-const { kState, kHeaders, kGuard, kRealm } = require('../fetch/symbols')
+const { Response, cloneResponse, fromInnerResponse } = require('../fetch/response')
+const { Request, fromInnerRequest } = require('../fetch/request')
+const { kState } = require('../fetch/symbols')
const { fetching } = require('../fetch/index')
const { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require('../fetch/util')
-const assert = require('assert')
-const { getGlobalDispatcher } = require('../global')
+const assert = require('node:assert')
/**
* @see https://w3c.github.io/ServiceWorker/#dfn-cache-batch-operation
@@ -39,17 +37,20 @@ class Cache {
webidl.illegalConstructor()
}
+ webidl.util.markAsUncloneable(this)
this.#relevantRequestResponseList = arguments[1]
}
async match (request, options = {}) {
webidl.brandCheck(this, Cache)
- webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.match' })
- request = webidl.converters.RequestInfo(request)
- options = webidl.converters.CacheQueryOptions(options)
+ const prefix = 'Cache.match'
+ webidl.argumentLengthCheck(arguments, 1, prefix)
- const p = await this.matchAll(request, options)
+ request = webidl.converters.RequestInfo(request, prefix, 'request')
+ options = webidl.converters.CacheQueryOptions(options, prefix, 'options')
+
+ const p = this.#internalMatchAll(request, options, 1)
if (p.length === 0) {
return
@@ -61,76 +62,20 @@ class Cache {
async matchAll (request = undefined, options = {}) {
webidl.brandCheck(this, Cache)
- if (request !== undefined) request = webidl.converters.RequestInfo(request)
- options = webidl.converters.CacheQueryOptions(options)
-
- // 1.
- let r = null
-
- // 2.
- if (request !== undefined) {
- if (request instanceof Request) {
- // 2.1.1
- r = request[kState]
+ const prefix = 'Cache.matchAll'
+ if (request !== undefined) request = webidl.converters.RequestInfo(request, prefix, 'request')
+ options = webidl.converters.CacheQueryOptions(options, prefix, 'options')
- // 2.1.2
- if (r.method !== 'GET' && !options.ignoreMethod) {
- return []
- }
- } else if (typeof request === 'string') {
- // 2.2.1
- r = new Request(request)[kState]
- }
- }
-
- // 5.
- // 5.1
- const responses = []
-
- // 5.2
- if (request === undefined) {
- // 5.2.1
- for (const requestResponse of this.#relevantRequestResponseList) {
- responses.push(requestResponse[1])
- }
- } else { // 5.3
- // 5.3.1
- const requestResponses = this.#queryCache(r, options)
-
- // 5.3.2
- for (const requestResponse of requestResponses) {
- responses.push(requestResponse[1])
- }
- }
-
- // 5.4
- // We don't implement CORs so we don't need to loop over the responses, yay!
-
- // 5.5.1
- const responseList = []
-
- // 5.5.2
- for (const response of responses) {
- // 5.5.2.1
- const responseObject = new Response(response.body?.source ?? null)
- const body = responseObject[kState].body
- responseObject[kState] = response
- responseObject[kState].body = body
- responseObject[kHeaders][kHeadersList] = response.headersList
- responseObject[kHeaders][kGuard] = 'immutable'
-
- responseList.push(responseObject)
- }
-
- // 6.
- return Object.freeze(responseList)
+ return this.#internalMatchAll(request, options)
}
async add (request) {
webidl.brandCheck(this, Cache)
- webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.add' })
- request = webidl.converters.RequestInfo(request)
+ const prefix = 'Cache.add'
+ webidl.argumentLengthCheck(arguments, 1, prefix)
+
+ request = webidl.converters.RequestInfo(request, prefix, 'request')
// 1.
const requests = [request]
@@ -144,9 +89,9 @@ class Cache {
async addAll (requests) {
webidl.brandCheck(this, Cache)
- webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.addAll' })
- requests = webidl.converters['sequence<RequestInfo>'](requests)
+ const prefix = 'Cache.addAll'
+ webidl.argumentLengthCheck(arguments, 1, prefix)
// 1.
const responsePromises = []
@@ -155,7 +100,17 @@ class Cache {
const requestList = []
// 3.
- for (const request of requests) {
+ for (let request of requests) {
+ if (request === undefined) {
+ throw webidl.errors.conversionFailed({
+ prefix,
+ argument: 'Argument 1',
+ types: ['undefined is not allowed']
+ })
+ }
+
+ request = webidl.converters.RequestInfo(request)
+
if (typeof request === 'string') {
continue
}
@@ -166,7 +121,7 @@ class Cache {
// 3.2
if (!urlIsHttpHttpsScheme(r.url) || r.method !== 'GET') {
throw webidl.errors.exception({
- header: 'Cache.addAll',
+ header: prefix,
message: 'Expected http/s scheme when method is not GET.'
})
}
@@ -184,7 +139,7 @@ class Cache {
// 5.2
if (!urlIsHttpHttpsScheme(r.url)) {
throw webidl.errors.exception({
- header: 'Cache.addAll',
+ header: prefix,
message: 'Expected http/s scheme.'
})
}
@@ -202,7 +157,6 @@ class Cache {
// 5.7
fetchControllers.push(fetching({
request: r,
- dispatcher: getGlobalDispatcher(),
processResponse (response) {
// 1.
if (response.type === 'error' || response.status === 206 || response.status < 200 || response.status > 299) {
@@ -305,10 +259,12 @@ class Cache {
async put (request, response) {
webidl.brandCheck(this, Cache)
- webidl.argumentLengthCheck(arguments, 2, { header: 'Cache.put' })
- request = webidl.converters.RequestInfo(request)
- response = webidl.converters.Response(response)
+ const prefix = 'Cache.put'
+ webidl.argumentLengthCheck(arguments, 2, prefix)
+
+ request = webidl.converters.RequestInfo(request, prefix, 'request')
+ response = webidl.converters.Response(response, prefix, 'response')
// 1.
let innerRequest = null
@@ -323,7 +279,7 @@ class Cache {
// 4.
if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== 'GET') {
throw webidl.errors.exception({
- header: 'Cache.put',
+ header: prefix,
message: 'Expected an http/s scheme when method is not GET'
})
}
@@ -334,7 +290,7 @@ class Cache {
// 6.
if (innerResponse.status === 206) {
throw webidl.errors.exception({
- header: 'Cache.put',
+ header: prefix,
message: 'Got 206 status'
})
}
@@ -349,7 +305,7 @@ class Cache {
// 7.2.1
if (fieldValue === '*') {
throw webidl.errors.exception({
- header: 'Cache.put',
+ header: prefix,
message: 'Got * vary field value'
})
}
@@ -359,7 +315,7 @@ class Cache {
// 8.
if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {
throw webidl.errors.exception({
- header: 'Cache.put',
+ header: prefix,
message: 'Response body is locked or disturbed'
})
}
@@ -434,10 +390,12 @@ class Cache {
async delete (request, options = {}) {
webidl.brandCheck(this, Cache)
- webidl.argumentLengthCheck(arguments, 1, { header: 'Cache.delete' })
- request = webidl.converters.RequestInfo(request)
- options = webidl.converters.CacheQueryOptions(options)
+ const prefix = 'Cache.delete'
+ webidl.argumentLengthCheck(arguments, 1, prefix)
+
+ request = webidl.converters.RequestInfo(request, prefix, 'request')
+ options = webidl.converters.CacheQueryOptions(options, prefix, 'options')
/**
* @type {Request}
@@ -494,13 +452,15 @@ class Cache {
* @see https://w3c.github.io/ServiceWorker/#dom-cache-keys
* @param {any} request
* @param {import('../../types/cache').CacheQueryOptions} options
- * @returns {readonly Request[]}
+ * @returns {Promise<readonly Request[]>}
*/
async keys (request = undefined, options = {}) {
webidl.brandCheck(this, Cache)
- if (request !== undefined) request = webidl.converters.RequestInfo(request)
- options = webidl.converters.CacheQueryOptions(options)
+ const prefix = 'Cache.keys'
+
+ if (request !== undefined) request = webidl.converters.RequestInfo(request, prefix, 'request')
+ options = webidl.converters.CacheQueryOptions(options, prefix, 'options')
// 1.
let r = null
@@ -553,12 +513,11 @@ class Cache {
// 5.4.2
for (const request of requests) {
- const requestObject = new Request('https://a')
- requestObject[kState] = request
- requestObject[kHeaders][kHeadersList] = request.headersList
- requestObject[kHeaders][kGuard] = 'immutable'
- requestObject[kRealm] = request.client
-
+ const requestObject = fromInnerRequest(
+ request,
+ new AbortController().signal,
+ 'immutable'
+ )
// 5.4.2.1
requestList.push(requestObject)
}
@@ -783,6 +742,68 @@ class Cache {
return true
}
+
+ #internalMatchAll (request, options, maxResponses = Infinity) {
+ // 1.
+ let r = null
+
+ // 2.
+ if (request !== undefined) {
+ if (request instanceof Request) {
+ // 2.1.1
+ r = request[kState]
+
+ // 2.1.2
+ if (r.method !== 'GET' && !options.ignoreMethod) {
+ return []
+ }
+ } else if (typeof request === 'string') {
+ // 2.2.1
+ r = new Request(request)[kState]
+ }
+ }
+
+ // 5.
+ // 5.1
+ const responses = []
+
+ // 5.2
+ if (request === undefined) {
+ // 5.2.1
+ for (const requestResponse of this.#relevantRequestResponseList) {
+ responses.push(requestResponse[1])
+ }
+ } else { // 5.3
+ // 5.3.1
+ const requestResponses = this.#queryCache(r, options)
+
+ // 5.3.2
+ for (const requestResponse of requestResponses) {
+ responses.push(requestResponse[1])
+ }
+ }
+
+ // 5.4
+ // We don't implement CORs so we don't need to loop over the responses, yay!
+
+ // 5.5.1
+ const responseList = []
+
+ // 5.5.2
+ for (const response of responses) {
+ // 5.5.2.1
+ const responseObject = fromInnerResponse(response, 'immutable')
+
+ responseList.push(responseObject.clone())
+
+ if (responseList.length >= maxResponses) {
+ break
+ }
+ }
+
+ // 6.
+ return Object.freeze(responseList)
+ }
}
Object.defineProperties(Cache.prototype, {
@@ -803,17 +824,17 @@ const cacheQueryOptionConverters = [
{
key: 'ignoreSearch',
converter: webidl.converters.boolean,
- defaultValue: false
+ defaultValue: () => false
},
{
key: 'ignoreMethod',
converter: webidl.converters.boolean,
- defaultValue: false
+ defaultValue: () => false
},
{
key: 'ignoreVary',
converter: webidl.converters.boolean,
- defaultValue: false
+ defaultValue: () => false
}
]