main repo

This commit is contained in:
Basilosaurusrex
2025-11-24 18:09:40 +01:00
parent b636ee5e70
commit f027651f9b
34146 changed files with 4436636 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
import RenderResult from "../render-result";
export * from "./types";
export default class ResponseCache {
constructor(minimalMode){
this.pendingResponses = new Map();
// this is a hack to avoid Webpack knowing this is equal to this.minimalMode
// because we replace this.minimalMode to true in production bundles.
const minimalModeKey = "minimalMode";
this[minimalModeKey] = minimalMode;
}
get(key, responseGenerator, context) {
var _this_previousCacheItem;
const { incrementalCache } = context;
// ensure on-demand revalidate doesn't block normal requests
const pendingResponseKey = key ? `${key}-${context.isOnDemandRevalidate ? "1" : "0"}` : null;
const pendingResponse = pendingResponseKey ? this.pendingResponses.get(pendingResponseKey) : null;
if (pendingResponse) {
return pendingResponse;
}
let resolver = ()=>{};
let rejecter = ()=>{};
const promise = new Promise((resolve, reject)=>{
resolver = resolve;
rejecter = reject;
});
if (pendingResponseKey) {
this.pendingResponses.set(pendingResponseKey, promise);
}
let resolved = false;
const resolve = (cacheEntry)=>{
if (pendingResponseKey) {
// Ensure all reads from the cache get the latest value.
this.pendingResponses.set(pendingResponseKey, Promise.resolve(cacheEntry));
}
if (!resolved) {
resolved = true;
resolver(cacheEntry);
}
};
// we keep the previous cache entry around to leverage
// when the incremental cache is disabled in minimal mode
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 ()=>{
let cachedResponse = null;
try {
cachedResponse = key && !this.minimalMode ? await incrementalCache.get(key) : null;
if (cachedResponse && !context.isOnDemandRevalidate) {
var _cachedResponse_value, _cachedResponse_value1;
if (((_cachedResponse_value = cachedResponse.value) == null ? void 0 : _cachedResponse_value.kind) === "FETCH") {
throw new Error(`invariant: unexpected cachedResponse of kind fetch in response cache`);
}
resolve({
isStale: cachedResponse.isStale,
revalidate: cachedResponse.curRevalidate,
value: ((_cachedResponse_value1 = cachedResponse.value) == null ? void 0 : _cachedResponse_value1.kind) === "PAGE" ? {
kind: "PAGE",
html: RenderResult.fromStatic(cachedResponse.value.html),
pageData: cachedResponse.value.pageData,
headers: cachedResponse.value.headers,
status: cachedResponse.value.status
} : cachedResponse.value
});
if (!cachedResponse.isStale || context.isPrefetch) {
// The cached value is still valid, so we don't need
// to update it yet.
return;
}
}
const cacheEntry = await responseGenerator(resolved, cachedResponse);
const resolveValue = cacheEntry === null ? null : {
...cacheEntry,
isMiss: !cachedResponse
};
// for on-demand revalidate wait to resolve until cache is set
if (!context.isOnDemandRevalidate) {
resolve(resolveValue);
}
if (key && cacheEntry && typeof cacheEntry.revalidate !== "undefined") {
if (this.minimalMode) {
this.previousCacheItem = {
key: pendingResponseKey || key,
entry: cacheEntry,
expiresAt: Date.now() + 1000
};
} else {
var _cacheEntry_value;
await incrementalCache.set(key, ((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) === "PAGE" ? {
kind: "PAGE",
html: cacheEntry.value.html.toUnchunkedString(),
pageData: cacheEntry.value.pageData,
headers: cacheEntry.value.headers,
status: cacheEntry.value.status
} : cacheEntry.value, {
revalidate: cacheEntry.revalidate
});
}
} else {
this.previousCacheItem = undefined;
}
if (context.isOnDemandRevalidate) {
resolve(resolveValue);
}
} catch (err) {
// when a getStaticProps path is erroring we automatically re-set the
// existing cache under a new expiration to prevent non-stop retrying
if (cachedResponse && key) {
await incrementalCache.set(key, cachedResponse.value, {
revalidate: Math.min(Math.max(cachedResponse.revalidate || 3, 3), 30)
});
}
// while revalidating in the background we can't reject as
// we already resolved the cache entry so log the error here
if (resolved) {
console.error(err);
} else {
rejecter(err);
}
} finally{
if (pendingResponseKey) {
this.pendingResponses.delete(pendingResponseKey);
}
}
})();
return promise;
}
}
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/server/response-cache/index.ts"],"names":["RenderResult","ResponseCache","constructor","minimalMode","pendingResponses","Map","minimalModeKey","get","key","responseGenerator","context","incrementalCache","pendingResponseKey","isOnDemandRevalidate","pendingResponse","resolver","rejecter","promise","Promise","resolve","reject","set","resolved","cacheEntry","previousCacheItem","expiresAt","Date","now","entry","delete","cachedResponse","value","kind","Error","isStale","revalidate","curRevalidate","html","fromStatic","pageData","headers","status","isPrefetch","resolveValue","isMiss","toUnchunkedString","undefined","err","Math","min","max","console","error"],"mappings":"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"}

View File

@@ -0,0 +1,3 @@
export { };
//# sourceMappingURL=types.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/server/response-cache/types.ts"],"names":[],"mappings":"AAAA,WA6HC"}

View File

@@ -0,0 +1,89 @@
/**
* In the web server, there is currently no incremental cache provided and we
* always SSR the page.
*/ export default class WebResponseCache {
constructor(minimalMode){
this.pendingResponses = new Map();
// this is a hack to avoid Webpack knowing this is equal to this.minimalMode
// because we replace this.minimalMode to true in production bundles.
Object.assign(this, {
minimalMode
});
}
get(key, responseGenerator, context) {
var _this_previousCacheItem;
// ensure on-demand revalidate doesn't block normal requests
const pendingResponseKey = key ? `${key}-${context.isOnDemandRevalidate ? "1" : "0"}` : null;
const pendingResponse = pendingResponseKey ? this.pendingResponses.get(pendingResponseKey) : null;
if (pendingResponse) {
return pendingResponse;
}
let resolver = ()=>{};
let rejecter = ()=>{};
const promise = new Promise((resolve, reject)=>{
resolver = resolve;
rejecter = reject;
});
if (pendingResponseKey) {
this.pendingResponses.set(pendingResponseKey, promise);
}
let resolved = false;
const resolve = (cacheEntry)=>{
if (pendingResponseKey) {
// Ensure all reads from the cache get the latest value.
this.pendingResponses.set(pendingResponseKey, Promise.resolve(cacheEntry));
}
if (!resolved) {
resolved = true;
resolver(cacheEntry);
}
};
// we keep the previous cache entry around to leverage
// when the incremental cache is disabled in minimal mode
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(resolved);
const resolveValue = cacheEntry === null ? null : {
...cacheEntry,
isMiss: true
};
// for on-demand revalidate wait to resolve until cache is set
if (!context.isOnDemandRevalidate) {
resolve(resolveValue);
}
if (key && cacheEntry && typeof cacheEntry.revalidate !== "undefined") {
this.previousCacheItem = {
key: pendingResponseKey || key,
entry: cacheEntry,
expiresAt: Date.now() + 1000
};
} else {
this.previousCacheItem = undefined;
}
if (context.isOnDemandRevalidate) {
resolve(resolveValue);
}
} catch (err) {
// while revalidating in the background we can't reject as
// we already resolved the cache entry so log the error here
if (resolved) {
console.error(err);
} else {
rejecter(err);
}
} finally{
if (pendingResponseKey) {
this.pendingResponses.delete(pendingResponseKey);
}
}
})();
return promise;
}
}
//# sourceMappingURL=web.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../src/server/response-cache/web.ts"],"names":["WebResponseCache","constructor","minimalMode","pendingResponses","Map","Object","assign","get","key","responseGenerator","context","pendingResponseKey","isOnDemandRevalidate","pendingResponse","resolver","rejecter","promise","Promise","resolve","reject","set","resolved","cacheEntry","previousCacheItem","expiresAt","Date","now","entry","delete","resolveValue","isMiss","revalidate","undefined","err","console","error"],"mappings":"AAEA;;;CAGC,GACD,eAAe,MAAMA;IASnBC,YAAYC,WAAoB,CAAE;QAChC,IAAI,CAACC,gBAAgB,GAAG,IAAIC;QAC5B,4EAA4E;QAC5E,qEAAqE;QACrEC,OAAOC,MAAM,CAAC,IAAI,EAAE;YAAEJ;QAAY;IACpC;IAEOK,IACLC,GAAkB,EAClBC,iBAAoC,EACpCC,OAIC,EACmC;YA6ClC;QA5CF,4DAA4D;QAC5D,MAAMC,qBAAqBH,MACvB,CAAC,EAAEA,IAAI,CAAC,EAAEE,QAAQE,oBAAoB,GAAG,MAAM,IAAI,CAAC,GACpD;QAEJ,MAAMC,kBAAkBF,qBACpB,IAAI,CAACR,gBAAgB,CAACI,GAAG,CAACI,sBAC1B;QACJ,IAAIE,iBAAiB;YACnB,OAAOA;QACT;QAEA,IAAIC,WAA4D,KAAO;QACvE,IAAIC,WAAmC,KAAO;QAC9C,MAAMC,UAA8C,IAAIC,QACtD,CAACC,SAASC;YACRL,WAAWI;YACXH,WAAWI;QACb;QAEF,IAAIR,oBAAoB;YACtB,IAAI,CAACR,gBAAgB,CAACiB,GAAG,CAACT,oBAAoBK;QAChD;QAEA,IAAIK,WAAW;QACf,MAAMH,UAAU,CAACI;YACf,IAAIX,oBAAoB;gBACtB,wDAAwD;gBACxD,IAAI,CAACR,gBAAgB,CAACiB,GAAG,CACvBT,oBACAM,QAAQC,OAAO,CAACI;YAEpB;YACA,IAAI,CAACD,UAAU;gBACbA,WAAW;gBACXP,SAASQ;YACX;QACF;QAEA,sDAAsD;QACtD,yDAAyD;QACzD,IACEX,sBACA,IAAI,CAACT,WAAW,IAChB,EAAA,0BAAA,IAAI,CAACqB,iBAAiB,qBAAtB,wBAAwBf,GAAG,MAAKG,sBAChC,IAAI,CAACY,iBAAiB,CAACC,SAAS,GAAGC,KAAKC,GAAG,IAC3C;YACAR,QAAQ,IAAI,CAACK,iBAAiB,CAACI,KAAK;YACpC,IAAI,CAACxB,gBAAgB,CAACyB,MAAM,CAACjB;YAC7B,OAAOK;QACT;QAKE,CAAA;YACA,IAAI;gBACF,MAAMM,aAAa,MAAMb,kBAAkBY;gBAC3C,MAAMQ,eACJP,eAAe,OACX,OACA;oBACE,GAAGA,UAAU;oBACbQ,QAAQ;gBACV;gBAEN,8DAA8D;gBAC9D,IAAI,CAACpB,QAAQE,oBAAoB,EAAE;oBACjCM,QAAQW;gBACV;gBAEA,IAAIrB,OAAOc,cAAc,OAAOA,WAAWS,UAAU,KAAK,aAAa;oBACrE,IAAI,CAACR,iBAAiB,GAAG;wBACvBf,KAAKG,sBAAsBH;wBAC3BmB,OAAOL;wBACPE,WAAWC,KAAKC,GAAG,KAAK;oBAC1B;gBACF,OAAO;oBACL,IAAI,CAACH,iBAAiB,GAAGS;gBAC3B;gBAEA,IAAItB,QAAQE,oBAAoB,EAAE;oBAChCM,QAAQW;gBACV;YACF,EAAE,OAAOI,KAAK;gBACZ,0DAA0D;gBAC1D,4DAA4D;gBAC5D,IAAIZ,UAAU;oBACZa,QAAQC,KAAK,CAACF;gBAChB,OAAO;oBACLlB,SAASkB;gBACX;YACF,SAAU;gBACR,IAAItB,oBAAoB;oBACtB,IAAI,CAACR,gBAAgB,CAACyB,MAAM,CAACjB;gBAC/B;YACF;QACF,CAAA;QACA,OAAOK;IACT;AACF"}