| "use strict"; |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| Object.defineProperty(exports, |
| |
| |
| "default", { |
| enumerable: true, |
| get: function() { |
| return WebResponseCache; |
| } |
| }); |
| const _detachedpromise = require("../../lib/detached-promise"); |
| class WebResponseCache { |
| constructor(minimalMode){ |
| this.pendingResponses = new Map(); |
| |
| |
| Object.assign(this, { |
| minimalMode |
| }); |
| } |
| get(key, responseGenerator, context) { |
| var _this_previousCacheItem; |
| |
| const pendingResponseKey = key ? `${key}-${context.isOnDemandRevalidate ? '1' : '0'}` : null; |
| const pendingResponse = pendingResponseKey ? this.pendingResponses.get(pendingResponseKey) : null; |
| if (pendingResponse) { |
| return pendingResponse; |
| } |
| const { promise, resolve: resolver, reject: rejecter } = new _detachedpromise.DetachedPromise(); |
| if (pendingResponseKey) { |
| this.pendingResponses.set(pendingResponseKey, promise); |
| } |
| let hasResolved = false; |
| const resolve = (cacheEntry)=>{ |
| if (pendingResponseKey) { |
| |
| this.pendingResponses.set(pendingResponseKey, Promise.resolve(cacheEntry)); |
| } |
| if (!hasResolved) { |
| hasResolved = true; |
| resolver(cacheEntry); |
| } |
| }; |
| |
| |
| if (pendingResponseKey && this.minimalMode && ((_this_previousCacheItem = this.previousCacheItem) == null ? void 0 : _this_previousCacheItem.key) === pendingResponseKey && this.previousCacheItem.expiresAt > Date.now()) { |
| resolve(this.previousCacheItem.entry); |
| this.pendingResponses.delete(pendingResponseKey); |
| return promise; |
| } |
| |
| |
| |
| ; |
| (async ()=>{ |
| try { |
| const cacheEntry = await responseGenerator({ |
| hasResolved |
| }); |
| const resolveValue = cacheEntry === null ? null : { |
| ...cacheEntry, |
| isMiss: true |
| }; |
| |
| if (!context.isOnDemandRevalidate) { |
| resolve(resolveValue); |
| } |
| if (key && cacheEntry && cacheEntry.cacheControl) { |
| this.previousCacheItem = { |
| key: pendingResponseKey || key, |
| entry: cacheEntry, |
| expiresAt: Date.now() + 1000 |
| }; |
| } else { |
| this.previousCacheItem = undefined; |
| } |
| if (context.isOnDemandRevalidate) { |
| resolve(resolveValue); |
| } |
| } catch (err) { |
| |
| |
| if (hasResolved) { |
| console.error(err); |
| } else { |
| rejecter(err); |
| } |
| } finally{ |
| if (pendingResponseKey) { |
| this.pendingResponses.delete(pendingResponseKey); |
| } |
| } |
| })(); |
| return promise; |
| } |
| } |
|
|
| |