@absolutejs/absolute 0.19.0-beta.1073 → 0.19.0-beta.1075

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.
@@ -2471,6 +2471,43 @@ var init_devRouteRegistrationCallsite = __esm(() => {
2471
2471
  pageHandlerWrappers = new WeakMap;
2472
2472
  });
2473
2473
 
2474
+ // src/core/pageResponseCache.ts
2475
+ import { createHash as createHash2 } from "crypto";
2476
+ var STREAMING_PAGE_HEADER = "x-absolute-stream", HTML_CONTENT_TYPE = "text/html", streamingPageHeaders = (extra) => {
2477
+ const headers = new Headers(extra);
2478
+ headers.set("content-type", HTML_CONTENT_TYPE);
2479
+ headers.set(STREAMING_PAGE_HEADER, "1");
2480
+ return headers;
2481
+ }, computeEtag = (html) => `W/"${createHash2("sha1").update(html).digest("base64url")}"`, withPageCacheHeaders = async (response, request, options) => {
2482
+ const contentType = response.headers.get("content-type") ?? "";
2483
+ if (!contentType.includes(HTML_CONTENT_TYPE))
2484
+ return response;
2485
+ const isStreaming = response.headers.get(STREAMING_PAGE_HEADER) === "1";
2486
+ if (isStreaming && !options?.bufferStreamForEtag || !response.body) {
2487
+ response.headers.delete(STREAMING_PAGE_HEADER);
2488
+ response.headers.set("cache-control", "no-cache");
2489
+ return response;
2490
+ }
2491
+ const html = await response.text();
2492
+ const etag = computeEtag(html);
2493
+ if (request?.headers.get("if-none-match") === etag) {
2494
+ return new Response(null, {
2495
+ headers: { "cache-control": "no-cache", etag },
2496
+ status: 304
2497
+ });
2498
+ }
2499
+ const headers = new Headers(response.headers);
2500
+ headers.delete(STREAMING_PAGE_HEADER);
2501
+ headers.set("cache-control", "no-cache");
2502
+ headers.set("etag", etag);
2503
+ return new Response(html, {
2504
+ headers,
2505
+ status: response.status,
2506
+ statusText: response.statusText
2507
+ });
2508
+ };
2509
+ var init_pageResponseCache = () => {};
2510
+
2474
2511
  // src/client/streamSwap.ts
2475
2512
  var streamSwapRuntime = () => {
2476
2513
  const absoluteWindow = window;
@@ -6084,8 +6121,12 @@ var resetSsrSanitizer = () => {
6084
6121
  ssrSanitizer = null;
6085
6122
  };
6086
6123
 
6124
+ // src/angular/pageHandler.ts
6125
+ init_pageResponseCache();
6126
+
6087
6127
  // src/core/responseEnhancers.ts
6088
6128
  init_streamingSlots();
6129
+ init_pageResponseCache();
6089
6130
  var toResponse = async (responseLike) => responseLike;
6090
6131
  var cloneHeaders = (response) => {
6091
6132
  const headers = new Headers(response.headers);
@@ -6109,8 +6150,10 @@ var enhanceHtmlResponseWithStreamingSlots = (response, {
6109
6150
  runtimePlacement,
6110
6151
  runtimePreludeScript
6111
6152
  });
6153
+ const headers = cloneHeaders(response);
6154
+ headers.set(STREAMING_PAGE_HEADER, "1");
6112
6155
  return new Response(body, {
6113
- headers: cloneHeaders(response),
6156
+ headers,
6114
6157
  status: response.status,
6115
6158
  statusText: response.statusText
6116
6159
  });
@@ -6371,17 +6414,19 @@ var handleAngularPageRequest = async (input) => {
6371
6414
  const html = injectIslandPageContext(injectSsrScripts(htmlWithLoweredIslands, requestId, resolvedIndexPath, maybeRequestContext), { hasIslands: shouldProcessIslands });
6372
6415
  return new Response(html, withHtmlContentType(responseInit));
6373
6416
  };
6374
- return await runWithStreamingSlotWarningScope(() => options?.collectStreamingSlots === true ? withRegisteredStreamingSlots(renderPageResponse, options) : renderPageResponse(), { handlerCallsite });
6417
+ const pageResponse = await runWithStreamingSlotWarningScope(() => options?.collectStreamingSlots === true ? withRegisteredStreamingSlots(renderPageResponse, options) : renderPageResponse(), { handlerCallsite });
6418
+ return withPageCacheHeaders(pageResponse, input.request);
6375
6419
  } catch (error) {
6376
6420
  console.error("[SSR] Angular render error:", error);
6377
6421
  const pageName = derivePageName(resolvedPagePath);
6378
6422
  const conventionResponse = await renderConventionError("angular", pageName, error);
6379
- if (conventionResponse)
6380
- return conventionResponse;
6381
- return new Response(ssrErrorPage("angular", error), {
6423
+ if (conventionResponse) {
6424
+ return withPageCacheHeaders(conventionResponse, input.request);
6425
+ }
6426
+ return withPageCacheHeaders(new Response(ssrErrorPage("angular", error), {
6382
6427
  headers: { "Content-Type": "text/html" },
6383
6428
  status: 500
6384
- });
6429
+ }), input.request);
6385
6430
  }
6386
6431
  });
6387
6432
  };
@@ -6407,5 +6452,5 @@ export {
6407
6452
  ABSOLUTE_HTTP_TRANSFER_CACHE_SKIP_HEADER
6408
6453
  };
6409
6454
 
6410
- //# debugId=C1FA018B34EE951E64756E2164756E21
6455
+ //# debugId=D2A717D42FCCB58164756E2164756E21
6411
6456
  //# sourceMappingURL=server.js.map