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

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.
@@ -1169,6 +1169,41 @@ var init_devRouteRegistrationCallsite = __esm(() => {
1169
1169
  pageHandlerWrappers = new WeakMap;
1170
1170
  });
1171
1171
 
1172
+ // src/core/pageResponseCache.ts
1173
+ import { createHash as createHash2 } from "crypto";
1174
+ var STREAMING_PAGE_HEADER = "x-absolute-stream", HTML_CONTENT_TYPE = "text/html", streamingPageHeaders = (extra) => {
1175
+ const headers = new Headers(extra);
1176
+ headers.set("content-type", HTML_CONTENT_TYPE);
1177
+ headers.set(STREAMING_PAGE_HEADER, "1");
1178
+ return headers;
1179
+ }, computeEtag = (html) => `W/"${createHash2("sha1").update(html).digest("base64url")}"`, withPageCacheHeaders = async (response, request) => {
1180
+ const contentType = response.headers.get("content-type") ?? "";
1181
+ if (!contentType.includes(HTML_CONTENT_TYPE))
1182
+ return response;
1183
+ if (response.headers.get(STREAMING_PAGE_HEADER) === "1" || !response.body) {
1184
+ response.headers.delete(STREAMING_PAGE_HEADER);
1185
+ response.headers.set("cache-control", "no-cache");
1186
+ return response;
1187
+ }
1188
+ const html = await response.text();
1189
+ const etag = computeEtag(html);
1190
+ if (request?.headers.get("if-none-match") === etag) {
1191
+ return new Response(null, {
1192
+ headers: { "cache-control": "no-cache", etag },
1193
+ status: 304
1194
+ });
1195
+ }
1196
+ const headers = new Headers(response.headers);
1197
+ headers.set("cache-control", "no-cache");
1198
+ headers.set("etag", etag);
1199
+ return new Response(html, {
1200
+ headers,
1201
+ status: response.status,
1202
+ statusText: response.statusText
1203
+ });
1204
+ };
1205
+ var init_pageResponseCache = () => {};
1206
+
1172
1207
  // src/client/streamSwap.ts
1173
1208
  var streamSwapRuntime = () => {
1174
1209
  const absoluteWindow = window;
@@ -2445,9 +2480,11 @@ var setCurrentIslandManifest = (manifest) => {
2445
2480
 
2446
2481
  // src/svelte/pageHandler.ts
2447
2482
  init_devRouteRegistrationCallsite();
2483
+ init_pageResponseCache();
2448
2484
 
2449
2485
  // src/core/responseEnhancers.ts
2450
2486
  init_streamingSlots();
2487
+ init_pageResponseCache();
2451
2488
  var toResponse = async (responseLike) => responseLike;
2452
2489
  var cloneHeaders = (response) => {
2453
2490
  const headers = new Headers(response.headers);
@@ -2471,8 +2508,10 @@ var enhanceHtmlResponseWithStreamingSlots = (response, {
2471
2508
  runtimePlacement,
2472
2509
  runtimePreludeScript
2473
2510
  });
2511
+ const headers = cloneHeaders(response);
2512
+ headers.set(STREAMING_PAGE_HEADER, "1");
2474
2513
  return new Response(body, {
2475
- headers: cloneHeaders(response),
2514
+ headers,
2476
2515
  status: response.status,
2477
2516
  statusText: response.statusText
2478
2517
  });
@@ -2970,28 +3009,30 @@ var handleSveltePageRequest = async (input) => {
2970
3009
  });
2971
3010
  const { firstChunk, reader } = await primeSvelteStream(htmlStream);
2972
3011
  return new Response(restorePrimedStream(firstChunk, reader), {
2973
- headers: { "Content-Type": "text/html" }
3012
+ headers: streamingPageHeaders()
2974
3013
  });
2975
3014
  };
2976
- return await runWithStreamingSlotWarningScope(() => resolvedOptions?.collectStreamingSlots === true ? withRegisteredStreamingSlots(renderPageResponse, {
3015
+ const pageResponse = await runWithStreamingSlotWarningScope(() => resolvedOptions?.collectStreamingSlots === true ? withRegisteredStreamingSlots(renderPageResponse, {
2977
3016
  ...resolvedOptions,
2978
3017
  runtimePlacement: resolvedOptions.runtimePlacement ?? "body"
2979
3018
  }) : renderPageResponse(), { handlerCallsite });
3019
+ return withPageCacheHeaders(pageResponse, input.request);
2980
3020
  } catch (error) {
2981
3021
  console.error("[SSR] Svelte render error:", error);
2982
3022
  const pageName = derivePageName(resolvedPagePath);
2983
3023
  const conventionResponse = await renderConventionError("svelte", pageName, error);
2984
- if (conventionResponse)
2985
- return conventionResponse;
2986
- return new Response(ssrErrorPage("svelte", error), {
3024
+ if (conventionResponse) {
3025
+ return withPageCacheHeaders(conventionResponse, input.request);
3026
+ }
3027
+ return withPageCacheHeaders(new Response(ssrErrorPage("svelte", error), {
2987
3028
  headers: { "Content-Type": "text/html" },
2988
3029
  status: 500
2989
- });
3030
+ }), input.request);
2990
3031
  }
2991
3032
  };
2992
3033
  export {
2993
3034
  handleSveltePageRequest
2994
3035
  };
2995
3036
 
2996
- //# debugId=083EA2E0556F07AE64756E2164756E21
3037
+ //# debugId=AA67A6447863E6B964756E2164756E21
2997
3038
  //# sourceMappingURL=server.js.map