veryfront 0.1.815 → 0.1.818

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/src/html/hydration-script-builder/templates/router.d.ts.map +1 -1
  3. package/esm/src/html/hydration-script-builder/templates/router.js +32 -5
  4. package/esm/src/platform/adapters/base.d.ts +2 -0
  5. package/esm/src/platform/adapters/base.d.ts.map +1 -1
  6. package/esm/src/platform/adapters/fs/cache/file-cache.d.ts +1 -0
  7. package/esm/src/platform/adapters/fs/cache/file-cache.d.ts.map +1 -1
  8. package/esm/src/platform/adapters/fs/cache/file-cache.js +10 -0
  9. package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts +1 -0
  10. package/esm/src/platform/adapters/fs/veryfront/adapter.d.ts.map +1 -1
  11. package/esm/src/platform/adapters/fs/veryfront/adapter.js +37 -0
  12. package/esm/src/platform/adapters/fs/veryfront/types.d.ts +1 -0
  13. package/esm/src/platform/adapters/fs/veryfront/types.d.ts.map +1 -1
  14. package/esm/src/proxy/handler.d.ts +2 -0
  15. package/esm/src/proxy/handler.d.ts.map +1 -1
  16. package/esm/src/proxy/handler.js +225 -31
  17. package/esm/src/proxy/main.js +1 -1
  18. package/esm/src/proxy/proxy-token-resolution.d.ts +1 -0
  19. package/esm/src/proxy/proxy-token-resolution.d.ts.map +1 -1
  20. package/esm/src/proxy/proxy-token-resolution.js +7 -1
  21. package/esm/src/rendering/orchestrator/pipeline.d.ts.map +1 -1
  22. package/esm/src/rendering/orchestrator/pipeline.js +28 -1
  23. package/esm/src/rendering/page-rendering.d.ts +10 -0
  24. package/esm/src/rendering/page-rendering.d.ts.map +1 -1
  25. package/esm/src/rendering/page-rendering.js +64 -2
  26. package/esm/src/security/http/response/cache-handler.d.ts.map +1 -1
  27. package/esm/src/security/http/response/cache-handler.js +3 -0
  28. package/esm/src/security/http/response/types.d.ts +1 -0
  29. package/esm/src/security/http/response/types.d.ts.map +1 -1
  30. package/esm/src/server/handlers/request/module/page-data-endpoint-handler.d.ts.map +1 -1
  31. package/esm/src/server/handlers/request/module/page-data-endpoint-handler.js +96 -15
  32. package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts +1 -0
  33. package/esm/src/transforms/mdx/esm-module-loader/cache/index.d.ts.map +1 -1
  34. package/esm/src/transforms/mdx/esm-module-loader/cache/index.js +35 -0
  35. package/esm/src/transforms/mdx/esm-module-loader/index.d.ts +1 -1
  36. package/esm/src/transforms/mdx/esm-module-loader/index.d.ts.map +1 -1
  37. package/esm/src/transforms/mdx/esm-module-loader/index.js +1 -1
  38. package/esm/src/utils/memory/profiler.d.ts +22 -0
  39. package/esm/src/utils/memory/profiler.d.ts.map +1 -1
  40. package/esm/src/utils/memory/profiler.js +48 -3
  41. package/esm/src/utils/version-constant.d.ts +1 -1
  42. package/esm/src/utils/version-constant.js +1 -1
  43. package/package.json +1 -1
@@ -238,7 +238,7 @@ function forwardToServer(req, url) {
238
238
  const host = req.headers.get("host") || "";
239
239
  const execute = async (lifecycle) => {
240
240
  try {
241
- const ctx = await profileProxyServerTimingPhase(proxyTiming, "proxy.resolve_request", () => proxyHandler.processRequest(req, { url }));
241
+ const ctx = await profileProxyServerTimingPhase(proxyTiming, "proxy.resolve_request", () => proxyHandler.processRequest(req, { url, timing: proxyTiming }));
242
242
  return runWithProxyRequestContext({
243
243
  requestId,
244
244
  projectSlug: ctx.projectSlug,
@@ -28,6 +28,7 @@ export interface ResolveProxyRequestTokenOptions {
28
28
  }
29
29
  export interface ResolvedProxyRequestToken {
30
30
  token?: string;
31
+ tokenSource?: "signed-internal" | "user" | "service" | "static";
31
32
  userToken?: string;
32
33
  tokenFetchError?: unknown;
33
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-token-resolution.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/proxy-token-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CACN,KAAK,EAAE,UAAU,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,+BAA+B;IAC9C,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,0BAA0B,CAAC;IACnC,YAAY,EAAE,iBAAiB,CAAC;IAChC,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,oCAAoC,CAAC,EAAE,OAAO,CAAC;IAC/C,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAID,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGzE;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CAqDpC"}
1
+ {"version":3,"file":"proxy-token-resolution.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/proxy-token-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CACN,KAAK,EAAE,UAAU,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,+BAA+B;IAC9C,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,0BAA0B,CAAC;IACnC,YAAY,EAAE,iBAAiB,CAAC;IAChC,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,oCAAoC,CAAC,EAAE,OAAO,CAAC;IAC/C,iCAAiC,CAAC,EAAE,OAAO,CAAC;IAC5C,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAID,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGzE;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CA0DpC"}
@@ -14,9 +14,12 @@ export async function resolveProxyRequestToken(options) {
14
14
  const useSignedInternalControlPlaneToken = options.allowSignedInternalControlPlaneToken &&
15
15
  options.signedInternalControlPlaneRequest;
16
16
  let token;
17
+ let tokenSource;
17
18
  let tokenFetchError;
18
19
  if (useSignedInternalControlPlaneToken) {
19
20
  token = req.headers.get("x-token") ?? undefined;
21
+ if (token)
22
+ tokenSource = "signed-internal";
20
23
  logger?.debug("Using signed control-plane token for internal request", {
21
24
  pathname: url.pathname,
22
25
  scope,
@@ -24,6 +27,7 @@ export async function resolveProxyRequestToken(options) {
24
27
  }
25
28
  else if (scope === "preview" && userToken) {
26
29
  token = userToken;
30
+ tokenSource = "user";
27
31
  logger?.debug("Using user auth token for preview");
28
32
  }
29
33
  if (!token && config.apiClientId && config.apiClientSecret) {
@@ -31,6 +35,7 @@ export async function resolveProxyRequestToken(options) {
31
35
  if (projectSlug || customDomain) {
32
36
  try {
33
37
  token = await tokenManager.getToken(scope, projectSlug, customDomain);
38
+ tokenSource = "service";
34
39
  }
35
40
  catch (error) {
36
41
  tokenFetchError = error;
@@ -45,7 +50,8 @@ export async function resolveProxyRequestToken(options) {
45
50
  }
46
51
  if (!token && config.apiToken) {
47
52
  token = config.apiToken;
53
+ tokenSource = "static";
48
54
  logger?.debug("Using static API token fallback");
49
55
  }
50
- return { token, userToken, tokenFetchError };
56
+ return { token, tokenSource, userToken, tokenFetchError };
51
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAuBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA8ChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AA0BD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAIJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IAiGjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA8O9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAsFzE,kBAAkB;YA2ClB,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;IA8EhC,OAAO,CAAC,kBAAkB;YAQZ,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAStB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAuBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA+ChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AA0BD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;YAIJ,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IAiGjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA2Q9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAsFzE,kBAAkB;YA2ClB,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;IA8EhC,OAAO,CAAC,kBAAkB;YAQZ,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAStB"}
@@ -38,6 +38,7 @@ import { getReadyManifestForRender } from "../../release-assets/manifest-cache.j
38
38
  import { createEsmCache, createModuleCache, loadModule } from "./module-loader/index.js";
39
39
  import { getCSSImports, runWithCSSCollector, } from "../../modules/react-loader/css-import-collector.js";
40
40
  import { assembleRenderResult } from "./render-result-assembly.js";
41
+ import { isMdxEsmExportMismatchError, recoverStaleMdxEsmPreviewCaches } from "../page-rendering.js";
41
42
  // Extracted modules
42
43
  import { EMPTY_LAYOUT_RESULT, isDotPath } from "./path-helpers.js";
43
44
  import { cachePageCss, CSS_SSR_TIMEOUT_MS, getCachedPageCss, getPageCssCacheKey, } from "./css-cache.js";
@@ -251,7 +252,7 @@ export class RenderPipeline {
251
252
  if (this.config.mode === "development") {
252
253
  clearSSRModuleCacheForProject(projectId);
253
254
  }
254
- return withSpan("render.page", async () => {
255
+ const renderOnce = () => withSpan("render.page", async () => {
255
256
  const { result } = await runWithCSSCollector(async () => {
256
257
  const pageResolveStart = performance.now();
257
258
  const pageInfo = await withSpan("render.resolve_page", () => this.config.pageResolver.resolvePage(slug), { "render.slug": slug });
@@ -374,6 +375,32 @@ export class RenderPipeline {
374
375
  "render.project_id": options?.projectId || this.config.projectDir,
375
376
  "render.mode": this.config.mode,
376
377
  });
378
+ try {
379
+ return await renderOnce();
380
+ }
381
+ catch (error) {
382
+ if (isMdxEsmExportMismatchError(error)) {
383
+ const recovered = await recoverStaleMdxEsmPreviewCaches({
384
+ adapter: this.config.adapter,
385
+ projectId,
386
+ projectSlug,
387
+ contentSourceId: options?.contentSourceId,
388
+ slug,
389
+ pagePath: slug,
390
+ });
391
+ if (recovered) {
392
+ cacheResult = null;
393
+ renderPipelineLog.warn("Retrying page render after stale MDX ESM cache recovery", {
394
+ slug,
395
+ projectId,
396
+ projectSlug,
397
+ contentSourceId: options?.contentSourceId,
398
+ });
399
+ return await renderOnce();
400
+ }
401
+ }
402
+ throw error;
403
+ }
377
404
  }
378
405
  /** Resolve page data for SPA client-side navigation without rendering HTML. */
379
406
  async resolvePageData(slug, options) {
@@ -10,6 +10,16 @@ interface PreparedMDXPageBundles {
10
10
  pageBundle: PageBundle;
11
11
  serverModuleCode: string;
12
12
  }
13
+ interface StaleMdxEsmRecoveryOptions {
14
+ adapter: RuntimeAdapter;
15
+ projectId?: string;
16
+ projectSlug?: string;
17
+ contentSourceId?: string;
18
+ slug: string;
19
+ pagePath: string;
20
+ }
21
+ export declare function isMdxEsmExportMismatchError(error: unknown): boolean;
22
+ export declare function recoverStaleMdxEsmPreviewCaches(options: StaleMdxEsmRecoveryOptions): Promise<boolean>;
13
23
  export declare function prepareMDXPageBundles(pageInfo: EntityInfo, projectDir: string, options?: {
14
24
  precompiledModule?: string;
15
25
  studioEmbed?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/page-rendering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,YAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOrG,UAAU,aAAa;IACrB,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,UAAU,sBAAsB;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC,sBAAsB,CAAC,CA4CjC;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,aAAa,EAC/B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,aAAa,CAAC,CAkFxB"}
1
+ {"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/page-rendering.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,YAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAa,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQrG,UAAU,aAAa;IACrB,WAAW,EAAE,YAAY,CAAC,YAAY,CAAC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,UAAU,sBAAsB;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAInE;AAED,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,UAAU,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC,sBAAsB,CAAC,CA4CjC;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,aAAa,EAC/B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,aAAa,CAAC,CAyHxB"}
@@ -1,10 +1,38 @@
1
1
  import { rendererLogger as logger } from "../utils/index.js";
2
2
  import { RENDER_ERROR } from "../errors/error-registry.js";
3
3
  import { mdxRenderer } from "../transforms/mdx/index.js";
4
+ import { clearMdxEsmCacheNamespace } from "../transforms/mdx/esm-module-loader/index.js";
4
5
  import { getProjectReact } from "../react/index.js";
5
6
  import { compileContent } from "../transforms/mdx/compiler/index.js";
6
7
  import { ensureError, getErrorMessage } from "../errors/veryfront-error.js";
7
8
  import { withSpan } from "../observability/tracing/otlp-setup.js";
9
+ export function isMdxEsmExportMismatchError(error) {
10
+ const message = getErrorMessage(error);
11
+ return /does not provide an export named/i.test(message) &&
12
+ /requested module|import/i.test(message);
13
+ }
14
+ export async function recoverStaleMdxEsmPreviewCaches(options) {
15
+ let recovered = false;
16
+ const refreshSourceSnapshot = options.adapter.fs.refreshSourceSnapshot;
17
+ if (typeof refreshSourceSnapshot === "function") {
18
+ await refreshSourceSnapshot.call(options.adapter.fs, "mdx-esm-export-mismatch");
19
+ recovered = true;
20
+ }
21
+ if (options.projectId && options.contentSourceId) {
22
+ await clearMdxEsmCacheNamespace(options.projectId, options.contentSourceId);
23
+ recovered = true;
24
+ }
25
+ if (recovered) {
26
+ logger.warn("Recovered stale MDX ESM preview caches, retrying render", {
27
+ slug: options.slug,
28
+ pagePath: options.pagePath,
29
+ projectId: options.projectId,
30
+ projectSlug: options.projectSlug,
31
+ contentSourceId: options.contentSourceId,
32
+ });
33
+ }
34
+ return recovered;
35
+ }
8
36
  export async function prepareMDXPageBundles(pageInfo, projectDir, options) {
9
37
  const { frontmatter, content, path } = pageInfo.entity;
10
38
  const fmArg = frontmatter && Object.keys(frontmatter).length > 0 ? frontmatter : undefined;
@@ -35,8 +63,8 @@ export function handleMDXPage(pageInfo, slug, projectDir, mergedComponents, _com
35
63
  precompiledModule: options?.precompiledModule,
36
64
  studioEmbed: options?.studioEmbed,
37
65
  });
38
- let collectedMetadata = {};
39
- try {
66
+ const loadPageElement = async () => {
67
+ let collectedMetadata = {};
40
68
  const mod = (await mdxRenderer.loadModuleESM(serverModuleCode, adapter, options?.projectId, projectDir, options?.projectSlug, options?.contentSourceId));
41
69
  const MDXComp = mod.MDXContent || mod.default;
42
70
  if (!MDXComp) {
@@ -80,8 +108,42 @@ export function handleMDXPage(pageInfo, slug, projectDir, mergedComponents, _com
80
108
  const React = await getProjectReact();
81
109
  const pageElement = React.createElement(MDXComp, { components: mergedComponents });
82
110
  return { pageElement, pageBundle, collectedMetadata };
111
+ };
112
+ try {
113
+ return await loadPageElement();
83
114
  }
84
115
  catch (error) {
116
+ if (isMdxEsmExportMismatchError(error)) {
117
+ let recovered = false;
118
+ try {
119
+ recovered = await recoverStaleMdxEsmPreviewCaches({
120
+ adapter,
121
+ projectId: options?.projectId,
122
+ projectSlug: options?.projectSlug,
123
+ contentSourceId: options?.contentSourceId,
124
+ slug,
125
+ pagePath: path,
126
+ });
127
+ }
128
+ catch (recoveryError) {
129
+ logger.warn("Failed to recover stale MDX ESM preview caches", {
130
+ slug,
131
+ path,
132
+ error: getErrorMessage(recoveryError),
133
+ });
134
+ }
135
+ if (recovered) {
136
+ try {
137
+ return await loadPageElement();
138
+ }
139
+ catch (retryError) {
140
+ throw RENDER_ERROR.create({
141
+ detail: `Failed to import MDX page via ESM after cache refresh: ${getErrorMessage(retryError)}`,
142
+ context: { slug, error: retryError, recoveredFrom: error },
143
+ });
144
+ }
145
+ }
146
+ }
85
147
  throw RENDER_ERROR.create({
86
148
  detail: `Failed to import MDX page via ESM: ${getErrorMessage(error)}`,
87
149
  context: { slug, error },
@@ -1 +1 @@
1
- {"version":3,"file":"cache-handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/security/http/response/cache-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAahD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAmBjE"}
1
+ {"version":3,"file":"cache-handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/security/http/response/cache-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAahD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAuBjE"}
@@ -23,5 +23,8 @@ export function buildCacheControl(strategy) {
23
23
  if (strategy.mustRevalidate) {
24
24
  parts.push("must-revalidate");
25
25
  }
26
+ if (typeof strategy.staleWhileRevalidate === "number") {
27
+ parts.push(`stale-while-revalidate=${strategy.staleWhileRevalidate}`);
28
+ }
26
29
  return parts.join(", ");
27
30
  }
@@ -10,6 +10,7 @@ export type CacheStrategy = "no-cache" | "no-store" | "short" | "medium" | "long
10
10
  public?: boolean;
11
11
  immutable?: boolean;
12
12
  mustRevalidate?: boolean;
13
+ staleWhileRevalidate?: number;
13
14
  };
14
15
  export interface ResponseBuilderConfig {
15
16
  securityConfig?: SecurityConfig | null;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/src/security/http/response/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,UAAU,GACV,OAAO,GACP,QAAQ,GACR,MAAM,GACN,WAAW,GACX,MAAM,GACN;IACA,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEJ,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,oCAAoC,EAAE,cAAc,CAAC;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/src/security/http/response/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,UAAU,GACV,OAAO,GACP,QAAQ,GACR,MAAM,GACN,WAAW,GACX,MAAM,GACN;IACA,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEJ,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,oCAAoC,EAAE,cAAc,CAAC;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"page-data-endpoint-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/page-data-endpoint-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAwBhE,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,EACnB,qBAAqB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAC/D,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAC1C,OAAO,CAAC,aAAa,CAAC,CAoGxB"}
1
+ {"version":3,"file":"page-data-endpoint-handler.d.ts","sourceRoot":"","sources":["../../../../../../src/src/server/handlers/request/module/page-data-endpoint-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA0EhE,wBAAgB,oCAAoC,IAAI,IAAI,CAE3D;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,EACnB,qBAAqB,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,eAAe,EAC/D,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,aAAa,EAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAC1C,OAAO,CAAC,aAAa,CAAC,CA6GxB"}
@@ -8,11 +8,44 @@ import { HTTP_GATEWAY_TIMEOUT } from "../../../../utils/constants/http.js";
8
8
  import { serverLogger } from "../../../../utils/index.js";
9
9
  import { Singleflight } from "../../../../utils/singleflight.js";
10
10
  import { requestHasCacheSensitiveState } from "../../../../cache/request-cacheability.js";
11
+ import { getEnv } from "../../../../platform/compat/process.js";
11
12
  const PAGE_DATA_TIMEOUT_MS = 25_000;
12
- const PAGE_DATA_CACHE_TTL_MS = 60_000;
13
- const PAGE_DATA_CACHE_MAX_ENTRIES = 500;
13
+ const PAGE_DATA_CACHE_TTL_MS = readPositiveIntegerEnv("VERYFRONT_PAGE_DATA_CACHE_TTL_MS", 60_000);
14
+ const PAGE_DATA_CACHE_STALE_MS = readPositiveIntegerEnv("VERYFRONT_PAGE_DATA_CACHE_STALE_MS", 30 * 60_000);
15
+ const PAGE_DATA_CACHE_MAX_ENTRIES = readPositiveIntegerEnv("VERYFRONT_PAGE_DATA_CACHE_MAX_ENTRIES", 500);
16
+ const PAGE_DATA_CACHE_MAX_AGE_SECONDS = Math.max(0, Math.floor(PAGE_DATA_CACHE_TTL_MS / 1000));
17
+ const PAGE_DATA_CACHE_STALE_SECONDS = Math.max(0, Math.floor(PAGE_DATA_CACHE_STALE_MS / 1000));
14
18
  const pageDataCache = new Map();
15
19
  const pageDataFlight = new Singleflight();
20
+ const RELEASE_PAGE_DATA_CACHE_POLICY = {
21
+ ttlMs: PAGE_DATA_CACHE_TTL_MS,
22
+ staleMs: PAGE_DATA_CACHE_STALE_MS,
23
+ maxAgeSeconds: PAGE_DATA_CACHE_MAX_AGE_SECONDS,
24
+ staleSeconds: PAGE_DATA_CACHE_STALE_SECONDS,
25
+ };
26
+ function readPositiveIntegerEnv(name, fallback) {
27
+ const raw = getEnv(name);
28
+ if (!raw)
29
+ return fallback;
30
+ const value = Number(raw);
31
+ if (!Number.isFinite(value) || value < 0)
32
+ return fallback;
33
+ return Math.floor(value);
34
+ }
35
+ function getPageDataCachePolicy(ctx) {
36
+ const environment = ctx.resolvedEnvironment ?? ctx.requestContext?.mode ?? "preview";
37
+ const isReleaseBackedProduction = environment === "production" && !!ctx.releaseId;
38
+ if (isReleaseBackedProduction)
39
+ return RELEASE_PAGE_DATA_CACHE_POLICY;
40
+ return {
41
+ ...RELEASE_PAGE_DATA_CACHE_POLICY,
42
+ staleMs: 0,
43
+ staleSeconds: 0,
44
+ };
45
+ }
46
+ function isPageDataCacheEnabled() {
47
+ return PAGE_DATA_CACHE_MAX_ENTRIES > 0;
48
+ }
16
49
  export function __clearPageDataEndpointCacheForTests() {
17
50
  pageDataCache.clear();
18
51
  }
@@ -24,13 +57,22 @@ export function handlePageDataEndpoint(req, pathname, ctx, createResponseBuilder
24
57
  .replace(/\.json$/, "") || "";
25
58
  const url = new URL(req.url);
26
59
  const renderer = await getRendererForProject(ctx);
27
- const cacheKey = requestHasCacheSensitiveState(req)
60
+ const cacheKey = !isPageDataCacheEnabled() || requestHasCacheSensitiveState(req)
28
61
  ? null
29
62
  : buildPageDataCacheKey(ctx, slug, url);
63
+ const cachePolicy = cacheKey ? getPageDataCachePolicy(ctx) : null;
30
64
  const payload = cacheKey
31
- ? await resolveCachedPageData(cacheKey, () => withTimeoutThrow(renderer.resolvePageData(slug, { request: req, url }), PAGE_DATA_TIMEOUT_MS, `resolvePageData for ${slug}`))
65
+ ? await resolveCachedPageData(cacheKey, () => withTimeoutThrow(renderer.resolvePageData(slug, { request: req, url }), PAGE_DATA_TIMEOUT_MS, `resolvePageData for ${slug}`), cachePolicy)
32
66
  : await resolveUncachedPageData(() => withTimeoutThrow(renderer.resolvePageData(slug, { request: req, url }), PAGE_DATA_TIMEOUT_MS, `resolvePageData for ${slug}`));
33
- const cacheStrategy = cacheKey ? { maxAge: 60, public: true } : "no-cache";
67
+ const cacheStrategy = cacheKey
68
+ ? {
69
+ maxAge: cachePolicy.maxAgeSeconds,
70
+ public: true,
71
+ ...(cachePolicy.staleSeconds > 0
72
+ ? { staleWhileRevalidate: cachePolicy.staleSeconds }
73
+ : {}),
74
+ }
75
+ : "no-cache";
34
76
  const builder = createResponseBuilder(ctx).withCORS(req, ctx.securityConfig?.cors);
35
77
  if (hasMatchingEtag(req, payload.etag)) {
36
78
  return respond(builder.notModified(payload.etag));
@@ -78,25 +120,35 @@ export function handlePageDataEndpoint(req, pathname, ctx, createResponseBuilder
78
120
  "module.pageData.projectSlug": ctx.projectSlug || "unknown",
79
121
  });
80
122
  }
81
- async function resolveCachedPageData(cacheKey, resolve) {
123
+ async function resolveCachedPageData(cacheKey, resolve, cachePolicy) {
82
124
  const cached = getCachedPageData(cacheKey);
83
- if (cached) {
125
+ if (cached?.state === "fresh") {
84
126
  markRequestProfilePhase("page_data.cache_hit");
85
- return cached;
127
+ return cached.entry;
128
+ }
129
+ if (cached?.state === "stale") {
130
+ markRequestProfilePhase("page_data.cache_stale");
131
+ refreshStalePageData(cacheKey, resolve, cachePolicy);
132
+ return cached.entry;
86
133
  }
87
134
  markRequestProfilePhase("page_data.cache_miss");
88
135
  return await pageDataFlight.do(cacheKey, async () => {
89
136
  const concurrentCached = getCachedPageData(cacheKey);
90
- if (concurrentCached) {
137
+ if (concurrentCached?.state === "fresh") {
91
138
  markRequestProfilePhase("page_data.cache_hit_after_wait");
92
- return concurrentCached;
139
+ return concurrentCached.entry;
140
+ }
141
+ if (concurrentCached?.state === "stale") {
142
+ markRequestProfilePhase("page_data.cache_stale_after_wait");
143
+ refreshStalePageData(cacheKey, resolve, cachePolicy);
144
+ return concurrentCached.entry;
93
145
  }
94
- const payload = await resolveUncachedPageData(resolve);
146
+ const payload = await resolveUncachedPageData(resolve, cachePolicy);
95
147
  setCachedPageData(cacheKey, payload);
96
148
  return payload;
97
149
  });
98
150
  }
99
- async function resolveUncachedPageData(resolve) {
151
+ async function resolveUncachedPageData(resolve, cachePolicy = RELEASE_PAGE_DATA_CACHE_POLICY) {
100
152
  const startedAt = performance.now();
101
153
  const pageData = await resolve();
102
154
  markRequestProfilePhase("page_data.resolve", performance.now() - startedAt);
@@ -107,20 +159,32 @@ async function resolveUncachedPageData(resolve) {
107
159
  return {
108
160
  body,
109
161
  etag,
110
- expiresAt: Date.now() + PAGE_DATA_CACHE_TTL_MS,
162
+ expiresAt: Date.now() + cachePolicy.ttlMs,
163
+ staleUntil: Date.now() + cachePolicy.ttlMs + cachePolicy.staleMs,
111
164
  };
112
165
  }
113
166
  function getCachedPageData(cacheKey) {
114
167
  const entry = pageDataCache.get(cacheKey);
115
168
  if (!entry)
116
169
  return null;
117
- if (Date.now() <= entry.expiresAt)
118
- return entry;
170
+ const now = Date.now();
171
+ if (now <= entry.expiresAt) {
172
+ pageDataCache.delete(cacheKey);
173
+ pageDataCache.set(cacheKey, entry);
174
+ return { entry, state: "fresh" };
175
+ }
176
+ if (now <= entry.staleUntil) {
177
+ pageDataCache.delete(cacheKey);
178
+ pageDataCache.set(cacheKey, entry);
179
+ return { entry, state: "stale" };
180
+ }
119
181
  pageDataCache.delete(cacheKey);
120
182
  markRequestProfilePhase("page_data.cache_expired");
121
183
  return null;
122
184
  }
123
185
  function setCachedPageData(cacheKey, entry) {
186
+ if (!isPageDataCacheEnabled())
187
+ return;
124
188
  if (pageDataCache.size >= PAGE_DATA_CACHE_MAX_ENTRIES && !pageDataCache.has(cacheKey)) {
125
189
  const oldestKey = pageDataCache.keys().next().value;
126
190
  if (oldestKey)
@@ -128,6 +192,23 @@ function setCachedPageData(cacheKey, entry) {
128
192
  }
129
193
  pageDataCache.set(cacheKey, entry);
130
194
  }
195
+ function refreshStalePageData(cacheKey, resolve, cachePolicy) {
196
+ void pageDataFlight.do(cacheKey, async () => {
197
+ const payload = await resolveUncachedPageData(resolve, cachePolicy);
198
+ setCachedPageData(cacheKey, payload);
199
+ return payload;
200
+ }).then(() => {
201
+ markRequestProfilePhase("page_data.refresh_background");
202
+ }, (error) => {
203
+ serverLogger.warn("[page-data] Background refresh failed", {
204
+ detail: error instanceof Error ? error.message : String(error),
205
+ });
206
+ const stale = pageDataCache.get(cacheKey);
207
+ if (stale && Date.now() > stale.staleUntil) {
208
+ pageDataCache.delete(cacheKey);
209
+ }
210
+ });
211
+ }
131
212
  function buildPageDataCacheKey(ctx, slug, url) {
132
213
  const projectKey = ctx.projectId ?? ctx.projectSlug ?? ctx.projectDir;
133
214
  const environment = ctx.resolvedEnvironment ?? ctx.requestContext?.mode ?? "preview";
@@ -48,6 +48,7 @@ export declare function invalidateModulePaths(changedPaths: string[]): void;
48
48
  */
49
49
  export declare function invalidateMdxEsmModule(cacheDir: string, filePath: string, projectDir?: string, reactVersion?: string): void;
50
50
  export declare function clearESMDiskCache(): Promise<void>;
51
+ export declare function clearMdxEsmCacheNamespace(projectId: string, contentSourceId: string): Promise<void>;
51
52
  export declare function clearHttpBundleCache(): Promise<void>;
52
53
  /**
53
54
  * Clear all local ESM caches (MDX-ESM disk cache, HTTP bundles, in-memory caches).
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAK9D,eAAO,MAAM,kBAAkB,wBAE7B,CAAC;AA6IH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsBvF;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezE;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAQD,2DAA2D;AAC3D,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAuBD,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CA0ElE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,SAAwB,GACnC,IAAI,CAgBN;AAOD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAevD;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc1D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIzD;AAmBD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EAAE,oDAAoD;AAC3E,eAAe,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,EAChE,YAAY,SAAwB,GACnC,OAAO,CAAC,iBAAiB,CAAC,CA+J5B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/src/transforms/mdx/esm-module-loader/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAK9D,eAAO,MAAM,kBAAkB,wBAE7B,CAAC;AA6IH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsBvF;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAezE;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAK3C;AAQD,2DAA2D;AAC3D,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAuBD,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CA0ElE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,SAAwB,GACnC,IAAI,CAgBN;AAOD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAevD;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc1D;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAIzD;AAmBD,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EAAE,oDAAoD;AAC3E,eAAe,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,EAChE,YAAY,SAAwB,GACnC,OAAO,CAAC,iBAAiB,CAAC,CA+J5B"}
@@ -347,6 +347,41 @@ export async function clearESMDiskCache() {
347
347
  }
348
348
  }
349
349
  }
350
+ export async function clearMdxEsmCacheNamespace(projectId, contentSourceId) {
351
+ const cacheDir = join(getMdxEsmCacheDir(), encodeURIComponent(projectId), encodeURIComponent(contentSourceId));
352
+ modulePathCaches.delete(cacheDir);
353
+ modulePathCacheLoaded.delete(cacheDir);
354
+ for (const key of Array.from(verifiedModuleDeps.keys())) {
355
+ if (String(key).startsWith(cacheDir)) {
356
+ verifiedModuleDeps.delete(key);
357
+ }
358
+ }
359
+ try {
360
+ await getLocalFs().remove(cacheDir, { recursive: true });
361
+ }
362
+ catch (error) {
363
+ if (!isNotFoundError(error)) {
364
+ logger.warn(`${LOG_PREFIX_MDX_LOADER} Failed to remove MDX-ESM cache namespace`, {
365
+ cacheDir,
366
+ error: error instanceof Error ? error.message : String(error),
367
+ });
368
+ }
369
+ }
370
+ try {
371
+ await getLocalFs().mkdir(cacheDir, { recursive: true });
372
+ logger.debug(`${LOG_PREFIX_MDX_LOADER} Cleared MDX-ESM cache namespace`, {
373
+ projectId,
374
+ contentSourceId,
375
+ cacheDir,
376
+ });
377
+ }
378
+ catch (error) {
379
+ logger.warn(`${LOG_PREFIX_MDX_LOADER} Failed to recreate MDX-ESM cache namespace`, {
380
+ cacheDir,
381
+ error: error instanceof Error ? error.message : String(error),
382
+ });
383
+ }
384
+ }
350
385
  export async function clearHttpBundleCache() {
351
386
  const cacheDir = getHttpBundleCacheDir();
352
387
  const fs = getLocalFs();
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * @module transforms/mdx/esm-module-loader
5
5
  */
6
- export { clearESMDiskCache, clearModulePathCache, invalidateModulePaths } from "./cache/index.js";
6
+ export { clearESMDiskCache, clearMdxEsmCacheNamespace, clearModulePathCache, invalidateModulePaths, } from "./cache/index.js";
7
7
  export { IS_TRUE_NODE, LOG_PREFIX_MDX_LOADER, LOG_PREFIX_MDX_RENDERER } from "./constants.js";
8
8
  export { loadModuleESM } from "./loader.js";
9
9
  export type { ESMLoaderContext, FSAdapter, ModuleFetcherContext } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/mdx/esm-module-loader/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGlG,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGpF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGlG,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/mdx/esm-module-loader/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGpF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGlG,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * @module transforms/mdx/esm-module-loader
5
5
  */
6
6
  // Cache exports
7
- export { clearESMDiskCache, clearModulePathCache, invalidateModulePaths } from "./cache/index.js";
7
+ export { clearESMDiskCache, clearMdxEsmCacheNamespace, clearModulePathCache, invalidateModulePaths, } from "./cache/index.js";
8
8
  // Constants exports
9
9
  export { IS_TRUE_NODE, LOG_PREFIX_MDX_LOADER, LOG_PREFIX_MDX_RENDERER } from "./constants.js";
10
10
  // Loader exports
@@ -55,6 +55,26 @@ export interface GCStats {
55
55
  minorGCs: number;
56
56
  lastGCDurationMs?: number;
57
57
  }
58
+ export interface PendingRapidHeapGrowth {
59
+ baselineHeapUsedMB: number;
60
+ observedGrowthMB: number;
61
+ }
62
+ export interface RapidHeapGrowthEvaluationInput {
63
+ previousHeapUsedMB: number;
64
+ currentHeapUsedMB: number;
65
+ pending: PendingRapidHeapGrowth | undefined;
66
+ thresholdMB: number;
67
+ }
68
+ export interface RapidHeapGrowthEvaluation {
69
+ shouldWarn: boolean;
70
+ growthMB?: number;
71
+ observedGrowthMB?: number;
72
+ pending?: PendingRapidHeapGrowth;
73
+ }
74
+ export interface RapidHeapGrowthState {
75
+ lastHeapUsedMB: number;
76
+ pending: PendingRapidHeapGrowth | undefined;
77
+ }
58
78
  export declare function registerCache(name: string, getStats: () => CacheStats): void;
59
79
  export declare function unregisterCache(name: string): void;
60
80
  export declare function getHeapStats(): HeapStats;
@@ -63,6 +83,8 @@ export declare function getMemorySnapshot(): MemorySnapshot;
63
83
  export declare function getTopCacheStats(caches: CacheStats[], limit?: number): MonitoringCacheStats[];
64
84
  export declare function getMemoryMonitoringLogContext(snapshot: MemorySnapshot, topCacheLimit?: number): MemoryMonitoringLogContext;
65
85
  export declare function getMemoryMonitoringConfig(env: MemoryMonitoringEnv): MemoryMonitoringConfig;
86
+ export declare function getInitialRapidHeapGrowthState(initialHeapUsedMB: number): RapidHeapGrowthState;
87
+ export declare function getRapidHeapGrowthEvaluation(input: RapidHeapGrowthEvaluationInput): RapidHeapGrowthEvaluation;
66
88
  export declare function getMemoryMonitoringState(): MemoryMonitoringState;
67
89
  export declare function forceGC(): Promise<boolean>;
68
90
  export declare function startMemoryMonitoring(intervalMs?: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/memory/profiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profiler.d.ts","sourceRoot":"","sources":["../../../../src/src/utils/memory/profiler.ts"],"names":[],"mappings":"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"}