Skip to content

Commit 0b85205

Browse files
committed
Merge branch 'dev'
2 parents a2c6d7e + 484a37c commit 0b85205

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

src/index.js

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,24 @@ class CoCreateFileSystem {
3030
try {
3131
const hostname = urlObject.hostname;
3232

33+
// --- determine preferred color scheme from browser headers ---
34+
let theme;
35+
const headerValue =
36+
(req && req.headers && (
37+
req.headers["sec-ch-prefers-color-scheme"] ||
38+
req.headers["prefers-color-scheme"] ||
39+
req.headers["x-prefers-color-scheme"] ||
40+
req.headers["x-color-scheme"]
41+
));
42+
if (typeof headerValue === "string") {
43+
// take first token, strip quotes, normalize
44+
const token = headerValue.split(",")[0].trim().replace(/^"|"$/g, "").toLowerCase();
45+
if (token === "dark" || token === "light") theme = token;
46+
}
47+
// optional: expose detected theme to clients / downstream code
48+
if (theme) res.setHeader("X-Preferred-Color-Scheme", theme);
49+
// --- end theme detection ---
50+
3351
let data = {
3452
method: "object.read",
3553
host: hostname,
@@ -239,12 +257,14 @@ class CoCreateFileSystem {
239257
try {
240258
let data = {};
241259

260+
// pass detected theme (may be undefined) into server-side renderer
242261
src = await this.render.HTML(
243262
file,
244263
organization,
245264
urlObject,
246265
langRegion,
247-
lang
266+
lang,
267+
theme
248268
);
249269
} catch (err) {
250270
console.warn("server-side-render: " + err.message);
@@ -289,6 +309,16 @@ class CoCreateFileSystem {
289309

290310
// Always override/set Cache-Control header so the response aligns with the file metadata/defaults
291311
headers["Cache-Control"] = cacheControl;
312+
// Advertise that we accept the Sec-CH-Prefers-Color-Scheme client hint.
313+
// After the browser sees this in a response it may include
314+
// the Sec-CH-Prefers-Color-Scheme header on subsequent requests.
315+
headers["Accept-CH"] = "Sec-CH-Prefers-Color-Scheme";
316+
// optional: tell browser how long to remember this preference (seconds)
317+
headers["Accept-CH-Lifetime"] = "86400";
318+
// ensure caches/proxies vary responses by this hint
319+
headers["Vary"] = headers["Vary"]
320+
? headers["Vary"] + ", Sec-CH-Prefers-Color-Scheme"
321+
: "Sec-CH-Prefers-Color-Scheme";
292322

293323
if (src instanceof Uint8Array || Buffer.isBuffer(src)) {
294324
// Ensure binary data is sent as-is

0 commit comments

Comments
 (0)