Spaces:
Runtime error
Runtime error
| const { kConstruct } = require('./symbols') | |
| const { Cache } = require('./cache') | |
| const { webidl } = require('../fetch/webidl') | |
| const { kEnumerableProperty } = require('../core/util') | |
| class CacheStorage { | |
| /** | |
| * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map | |
| * @type {Map<string, import('./cache').requestResponseList} | |
| */ | |
| #caches = new Map() | |
| constructor () { | |
| if (arguments[0] !== kConstruct) { | |
| webidl.illegalConstructor() | |
| } | |
| } | |
| async match (request, options = {}) { | |
| webidl.brandCheck(this, CacheStorage) | |
| webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.match' }) | |
| request = webidl.converters.RequestInfo(request) | |
| options = webidl.converters.MultiCacheQueryOptions(options) | |
| // 1. | |
| if (options.cacheName != null) { | |
| // 1.1.1.1 | |
| if (this.#caches.has(options.cacheName)) { | |
| // 1.1.1.1.1 | |
| const cacheList = this.#caches.get(options.cacheName) | |
| const cache = new Cache(kConstruct, cacheList) | |
| return await cache.match(request, options) | |
| } | |
| } else { // 2. | |
| // 2.2 | |
| for (const cacheList of this.#caches.values()) { | |
| const cache = new Cache(kConstruct, cacheList) | |
| // 2.2.1.2 | |
| const response = await cache.match(request, options) | |
| if (response !== undefined) { | |
| return response | |
| } | |
| } | |
| } | |
| } | |
| /** | |
| * @see https://w3c.github.io/ServiceWorker/#cache-storage-has | |
| * @param {string} cacheName | |
| * @returns {Promise<boolean>} | |
| */ | |
| async has (cacheName) { | |
| webidl.brandCheck(this, CacheStorage) | |
| webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.has' }) | |
| cacheName = webidl.converters.DOMString(cacheName) | |
| // 2.1.1 | |
| // 2.2 | |
| return this.#caches.has(cacheName) | |
| } | |
| /** | |
| * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open | |
| * @param {string} cacheName | |
| * @returns {Promise<Cache>} | |
| */ | |
| async open (cacheName) { | |
| webidl.brandCheck(this, CacheStorage) | |
| webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.open' }) | |
| cacheName = webidl.converters.DOMString(cacheName) | |
| // 2.1 | |
| if (this.#caches.has(cacheName)) { | |
| // await caches.open('v1') !== await caches.open('v1') | |
| // 2.1.1 | |
| const cache = this.#caches.get(cacheName) | |
| // 2.1.1.1 | |
| return new Cache(kConstruct, cache) | |
| } | |
| // 2.2 | |
| const cache = [] | |
| // 2.3 | |
| this.#caches.set(cacheName, cache) | |
| // 2.4 | |
| return new Cache(kConstruct, cache) | |
| } | |
| /** | |
| * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete | |
| * @param {string} cacheName | |
| * @returns {Promise<boolean>} | |
| */ | |
| async delete (cacheName) { | |
| webidl.brandCheck(this, CacheStorage) | |
| webidl.argumentLengthCheck(arguments, 1, { header: 'CacheStorage.delete' }) | |
| cacheName = webidl.converters.DOMString(cacheName) | |
| return this.#caches.delete(cacheName) | |
| } | |
| /** | |
| * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys | |
| * @returns {string[]} | |
| */ | |
| async keys () { | |
| webidl.brandCheck(this, CacheStorage) | |
| // 2.1 | |
| const keys = this.#caches.keys() | |
| // 2.2 | |
| return [...keys] | |
| } | |
| } | |
| Object.defineProperties(CacheStorage.prototype, { | |
| [Symbol.toStringTag]: { | |
| value: 'CacheStorage', | |
| configurable: true | |
| }, | |
| match: kEnumerableProperty, | |
| has: kEnumerableProperty, | |
| open: kEnumerableProperty, | |
| delete: kEnumerableProperty, | |
| keys: kEnumerableProperty | |
| }) | |
| module.exports = { | |
| CacheStorage | |
| } | |