@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.
package/dist/build.js CHANGED
@@ -24307,6 +24307,43 @@ var init_hmrCompiler = __esm(() => {
24307
24307
  init_fastHmrCompiler();
24308
24308
  });
24309
24309
 
24310
+ // src/core/pageResponseCache.ts
24311
+ import { createHash as createHash4 } from "crypto";
24312
+ var STREAMING_PAGE_HEADER = "x-absolute-stream", HTML_CONTENT_TYPE = "text/html", streamingPageHeaders = (extra) => {
24313
+ const headers = new Headers(extra);
24314
+ headers.set("content-type", HTML_CONTENT_TYPE);
24315
+ headers.set(STREAMING_PAGE_HEADER, "1");
24316
+ return headers;
24317
+ }, computeEtag = (html) => `W/"${createHash4("sha1").update(html).digest("base64url")}"`, withPageCacheHeaders = async (response, request, options) => {
24318
+ const contentType = response.headers.get("content-type") ?? "";
24319
+ if (!contentType.includes(HTML_CONTENT_TYPE))
24320
+ return response;
24321
+ const isStreaming = response.headers.get(STREAMING_PAGE_HEADER) === "1";
24322
+ if (isStreaming && !options?.bufferStreamForEtag || !response.body) {
24323
+ response.headers.delete(STREAMING_PAGE_HEADER);
24324
+ response.headers.set("cache-control", "no-cache");
24325
+ return response;
24326
+ }
24327
+ const html = await response.text();
24328
+ const etag = computeEtag(html);
24329
+ if (request?.headers.get("if-none-match") === etag) {
24330
+ return new Response(null, {
24331
+ headers: { "cache-control": "no-cache", etag },
24332
+ status: 304
24333
+ });
24334
+ }
24335
+ const headers = new Headers(response.headers);
24336
+ headers.delete(STREAMING_PAGE_HEADER);
24337
+ headers.set("cache-control", "no-cache");
24338
+ headers.set("etag", etag);
24339
+ return new Response(html, {
24340
+ headers,
24341
+ status: response.status,
24342
+ statusText: response.statusText
24343
+ });
24344
+ };
24345
+ var init_pageResponseCache = () => {};
24346
+
24310
24347
  // src/utils/ssrErrorPage.ts
24311
24348
  var exports_ssrErrorPage = {};
24312
24349
  __export(exports_ssrErrorPage, {
@@ -24410,18 +24447,20 @@ var resolveRequestPathname = (request) => {
24410
24447
  }
24411
24448
  const innerHtml = bundle.renderToHTML(props ?? {});
24412
24449
  const html = buildHtmlShell(resolvedHeadTag, innerHtml.replace(/^<div>|<\/div>$/g, ""), indexPath, props);
24413
- return new Response(html, {
24450
+ return withPageCacheHeaders(new Response(html, {
24414
24451
  headers: { "Content-Type": "text/html" }
24415
- });
24452
+ }), input.request);
24416
24453
  } catch (error) {
24417
24454
  console.error("[SSR] Ember render error:", error);
24418
- return new Response(ssrErrorPage("ember", error), {
24455
+ return withPageCacheHeaders(new Response(ssrErrorPage("ember", error), {
24419
24456
  headers: { "Content-Type": "text/html" },
24420
24457
  status: 500
24421
- });
24458
+ }), input.request);
24422
24459
  }
24423
24460
  };
24424
- var init_pageHandler = () => {};
24461
+ var init_pageHandler = __esm(() => {
24462
+ init_pageResponseCache();
24463
+ });
24425
24464
 
24426
24465
  // src/ember/index.ts
24427
24466
  var exports_ember = {};
@@ -27683,5 +27722,5 @@ export {
27683
27722
  build
27684
27723
  };
27685
27724
 
27686
- //# debugId=7282922B7BAA35C364756E2164756E21
27725
+ //# debugId=A4432A26575064A564756E2164756E21
27687
27726
  //# sourceMappingURL=build.js.map