/*__ESM_BODY_START__*/
(function initPrefetchApiMSW() {
	const REQUESTED_AS_PREFETCH_MARKER = 'X-NOW-REQUESTED-PREFETCH';
	const REQUESTED_AS_PREFETCH_CACHED_MARKER = 'X-NOW-REQUESTED-AS-PREFETCH-CACHED';

	class LRUCache {
		constructor() {
			this.map = new Map();
			this.maxSize = 20;
		}

		set(key, value) {
			if (this.map.size >= this.maxSize) {
				const oldestKey = this.map.keys().next().value;
				this.map.delete(oldestKey);
			}
			this.map.set(key, value);
		}
	
		has(key) {
			return this.map.has(key);
		}
	
		get(key) {
			const res = this.map.get(key);
			this.map.delete(key);
			return res;
		}
	}

	const cache = new LRUCache();

	const shouldRespond = event => {
		if (event.request.url.endsWith('/api/now/graphql')) {
			if (event.request.headers.get(REQUESTED_AS_PREFETCH_MARKER)) {
				return true;
			} else if (event.request.headers.get(REQUESTED_AS_PREFETCH_CACHED_MARKER)) {
				return true;
			}
		}
		return false;
	};

	self.handleFallbackResponse && self.handleFallbackResponse(shouldRespond);

	self.addEventListener('fetch', async (event) => {
		if (event.request.url.endsWith('/api/now/graphql')) {
			if (event.request.headers.get(REQUESTED_AS_PREFETCH_MARKER)) {
				event.respondWith(respondToPrefetch(event));
			} else if (event.request.headers.get(REQUESTED_AS_PREFETCH_CACHED_MARKER)) {
				event.respondWith(respondToCacheReq(event));
			}
		}

		return;

		async function respondToCacheReq(event) {
			
			const cacheKey = event.request.headers.get(REQUESTED_AS_PREFETCH_CACHED_MARKER);

			if (cache.has(cacheKey)) {
				const response = await cache.get(cacheKey);
				return response;
			} else {
				return fetch(event.request);
			}
		}

		async function respondToPrefetch(event)  {
			try {
				const responsePromise = fetch(event.request.clone());
				const cacheKey = event.request.headers.get(REQUESTED_AS_PREFETCH_MARKER);
				cache.set(cacheKey, responsePromise);
				const response = (await responsePromise).clone();
				return response;
			} catch (error) {
				return;
			}
		}
	});
}());
/*__ESM_BODY_END__*/