offsite 0.0.48 → 0.0.49

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.
@@ -2,6 +2,7 @@ import { createHash, randomBytes, randomUUID } from "node:crypto";
2
2
  import { appendFileSync, chmodSync, closeSync, createReadStream, existsSync, lstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, readlinkSync, realpathSync, renameSync, rmSync, statSync, unlinkSync, watch, writeFileSync } from "node:fs";
3
3
  import http, { createServer } from "node:http";
4
4
  import path from "node:path";
5
+ import { createGzip } from "node:zlib";
5
6
  import { consola } from "consola";
6
7
  import { WebSocketServer } from "ws";
7
8
  import { z } from "zod";
@@ -7224,6 +7225,14 @@ const contentTypes = {
7224
7225
  ".webmanifest": "application/manifest+json",
7225
7226
  ".woff2": "font/woff2"
7226
7227
  };
7228
+ const compressible = /* @__PURE__ */ new Set([
7229
+ ".js",
7230
+ ".css",
7231
+ ".svg",
7232
+ ".json",
7233
+ ".wasm",
7234
+ ".ttf"
7235
+ ]);
7227
7236
  const browseTypes = new Map([
7228
7237
  ...Object.entries(contentTypes),
7229
7238
  ...mediaTypes,
@@ -7288,9 +7297,12 @@ const server = createServer((request, response) => {
7288
7297
  response.end("offsite serve has no web app");
7289
7298
  return;
7290
7299
  }
7291
- serveFile(url.pathname, response);
7300
+ serveFile(url.pathname, request, response);
7301
+ });
7302
+ const sockets = new WebSocketServer({
7303
+ noServer: true,
7304
+ perMessageDeflate: true
7292
7305
  });
7293
- const sockets = new WebSocketServer({ noServer: true });
7294
7306
  const paired = /* @__PURE__ */ new Map();
7295
7307
  server.on("upgrade", (request, socket, head) => {
7296
7308
  const url = new URL(request.url ?? "/", "http://localhost");
@@ -7553,7 +7565,7 @@ function pairingLinks(code) {
7553
7565
  ...code !== null && { code }
7554
7566
  })}` };
7555
7567
  }
7556
- function serveFile(pathname, response) {
7568
+ function serveFile(pathname, request, response) {
7557
7569
  if (!args.pwa && pathname === "/manifest.webmanifest") {
7558
7570
  response.statusCode = 404;
7559
7571
  response.end("offsite runs without --pwa");
@@ -7574,6 +7586,15 @@ function serveFile(pathname, response) {
7574
7586
  response.end(page);
7575
7587
  return;
7576
7588
  }
7589
+ if (file === requested && pathname.startsWith("/assets/")) response.setHeader("cache-control", "public, max-age=31536000, immutable");
7590
+ if (compressible.has(path.extname(file))) {
7591
+ response.setHeader("vary", "accept-encoding");
7592
+ if (/\bgzip\b/.test(request.headers["accept-encoding"] ?? "")) {
7593
+ response.setHeader("content-encoding", "gzip");
7594
+ createReadStream(file).pipe(createGzip()).pipe(response);
7595
+ return;
7596
+ }
7597
+ }
7577
7598
  createReadStream(file).pipe(response);
7578
7599
  }
7579
7600
  //#endregion