remix-hono
Version:
Hono middlewares for Remix
62 lines • 2.4 kB
JavaScript
import { createWorkersKVSessionStorage } from "@react-router/cloudflare";
import { createMiddleware } from "hono/factory";
import { cacheHeader } from "pretty-cache-header";
import { createCookieSessionStorage, } from "react-router";
import { session } from "./session.js";
export function staticAssets(options = {}) {
return createMiddleware(async (c, next) => {
let binding = c.env?.ASSETS;
if (!binding)
throw new ReferenceError("The binding ASSETS is not set.");
let response;
c.req.raw.headers.delete("if-none-match");
try {
response = (await binding.fetch(c.req.url, c.req.raw.clone()));
// If the request failed, we just call the next middleware
if (response.status >= 400)
return await next();
response = new Response(response.body, response);
// If cache options are configured, we set the cache-control header
if (options.cache) {
response.headers.set("cache-control", cacheHeader(options.cache));
}
return response;
}
catch {
return await next();
}
});
}
export function workerKVSession(options) {
return session({
autoCommit: options.autoCommit,
createSessionStorage(c) {
if (!(options.binding in c.env)) {
throw new ReferenceError("The binding for the kvSession is not set.");
}
let secrets = options.cookie.secrets(c);
if (secrets.filter(Boolean).length === 0) {
throw new ReferenceError("The secrets for the kvSession are not set.");
}
return createWorkersKVSessionStorage({
kv: c.env[options.binding],
cookie: { ...options.cookie, secrets },
});
},
});
}
export function cookieSession(options) {
return session({
autoCommit: options.autoCommit,
createSessionStorage(c) {
let secrets = options.cookie.secrets(c);
if (secrets.filter(Boolean).length === 0) {
throw new ReferenceError("The secrets for the cookieSession are not set.");
}
return createCookieSessionStorage({
cookie: { ...options.cookie, secrets },
});
},
});
}
//# sourceMappingURL=cloudflare.js.map