UNPKG

fake-service-worker

Version:

Fake service worker implementation for testing developer edge applications

81 lines 2.65 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EdgeCache = void 0; const live_fetch_1 = __importDefault(require("../live_fetch")); const lru_cache_1 = __importDefault(require("lru-cache")); const Request_1 = require("./Request"); const MAX_ITEMS = 100000; class EdgeCache { cache; constructor() { this.cache = new lru_cache_1.default({ max: MAX_ITEMS }); } getKey(request) { if (typeof request === 'string') request = new Request_1.EdgeRequest(request); return request.url; } getTTL(response) { let ttl = 100; // 100 seconds let cacheControl = response.headers.get('cache-control'); if (cacheControl !== null) { cacheControl = cacheControl.split(';').map(val => val.trim()); const maxAge = cacheControl.find(value => value.toLowerCase().includes('max-age')); if (maxAge !== undefined) { ttl = parseInt(maxAge.split('=')[1]); } } return ttl; } /** Fetches url and caches it */ async add(request) { let ttl = 100; if (request instanceof Request) { ttl = this.getTTL(request); } const key = this.getKey(request); const res = await live_fetch_1.default(key); this.cache.set(key, res, ttl * 1000); } async addAll(requests) { for (let i = 0; i < requests.length; i++) { await this.add(requests[i]); } } async delete(request, options) { const key = this.getKey(request); if (!this.cache.has(key)) return false; this.cache.del(key); return true; } async keys(request, options) { return this.cache.keys().map(key => new Request_1.EdgeRequest(key)); } async match(request, options) { const key = this.getKey(request); return this.cache.get(key); } /** Basically match but returns array. -_-*/ async matchAll(request, options) { if (request) { const res = await this.match(request, options); if (!res) return []; return [res]; } else { return this.cache.values(); } } async put(request, response) { const ttl = this.getTTL(response); const key = this.getKey(request); this.cache.set(key, response, ttl * 1000); } } exports.EdgeCache = EdgeCache; //# sourceMappingURL=Cache.js.map