@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;
@@ -3683,9 +3718,11 @@ var setCurrentIslandManifest = (manifest) => {
3683
3718
 
3684
3719
  // src/svelte/pageHandler.ts
3685
3720
  init_devRouteRegistrationCallsite();
3721
+ init_pageResponseCache();
3686
3722
 
3687
3723
  // src/core/responseEnhancers.ts
3688
3724
  init_streamingSlots();
3725
+ init_pageResponseCache();
3689
3726
  var toResponse = async (responseLike) => responseLike;
3690
3727
  var cloneHeaders = (response) => {
3691
3728
  const headers = new Headers(response.headers);
@@ -3709,8 +3746,10 @@ var enhanceHtmlResponseWithStreamingSlots = (response, {
3709
3746
  runtimePlacement,
3710
3747
  runtimePreludeScript
3711
3748
  });
3749
+ const headers = cloneHeaders(response);
3750
+ headers.set(STREAMING_PAGE_HEADER, "1");
3712
3751
  return new Response(body, {
3713
- headers: cloneHeaders(response),
3752
+ headers,
3714
3753
  status: response.status,
3715
3754
  statusText: response.statusText
3716
3755
  });
@@ -4208,23 +4247,25 @@ var handleSveltePageRequest = async (input) => {
4208
4247
  });
4209
4248
  const { firstChunk, reader } = await primeSvelteStream(htmlStream);
4210
4249
  return new Response(restorePrimedStream(firstChunk, reader), {
4211
- headers: { "Content-Type": "text/html" }
4250
+ headers: streamingPageHeaders()
4212
4251
  });
4213
4252
  };
4214
- return await runWithStreamingSlotWarningScope(() => resolvedOptions?.collectStreamingSlots === true ? withRegisteredStreamingSlots(renderPageResponse, {
4253
+ const pageResponse = await runWithStreamingSlotWarningScope(() => resolvedOptions?.collectStreamingSlots === true ? withRegisteredStreamingSlots(renderPageResponse, {
4215
4254
  ...resolvedOptions,
4216
4255
  runtimePlacement: resolvedOptions.runtimePlacement ?? "body"
4217
4256
  }) : renderPageResponse(), { handlerCallsite });
4257
+ return withPageCacheHeaders(pageResponse, input.request);
4218
4258
  } catch (error) {
4219
4259
  console.error("[SSR] Svelte render error:", error);
4220
4260
  const pageName = derivePageName(resolvedPagePath);
4221
4261
  const conventionResponse = await renderConventionError("svelte", pageName, error);
4222
- if (conventionResponse)
4223
- return conventionResponse;
4224
- return new Response(ssrErrorPage("svelte", error), {
4262
+ if (conventionResponse) {
4263
+ return withPageCacheHeaders(conventionResponse, input.request);
4264
+ }
4265
+ return withPageCacheHeaders(new Response(ssrErrorPage("svelte", error), {
4225
4266
  headers: { "Content-Type": "text/html" },
4226
4267
  status: 500
4227
- });
4268
+ }), input.request);
4228
4269
  }
4229
4270
  };
4230
4271
  // src/svelte/createIsland.ts
@@ -4368,5 +4409,5 @@ export {
4368
4409
  createTypedIsland
4369
4410
  };
4370
4411
 
4371
- //# debugId=49F155C14E8657C764756E2164756E21
4412
+ //# debugId=B8B5C4E9053927DC64756E2164756E21
4372
4413
  //# sourceMappingURL=index.js.map