obsidian-visualiser/server/middleware/compress.ts

25 lines
859 B
TypeScript

import { defineEventHandler, setResponseHeader } from 'h3';
export default defineEventHandler(async (event) => {
const acceptEncoding = event.headers.get('accept-encoding') || '';
if (!acceptEncoding.includes('zstd')) return;
const _end = event.node.res.end;
//@ts-expect-error
event.node.res.end = async (body: any, ...args: any[]) => {
const buffer = typeof body === "string" ? new TextEncoder().encode(body) : body;
if(buffer)
{
setResponseHeader(event, "Content-Encoding", "zstd");
setResponseHeader(event, "Vary", "Accept-Encoding");
//@ts-expect-error
_end.call(event.node.res, await Bun.zstdCompress(buffer), ...args);
}
else
{
//@ts-expect-error
_end.call(event.node.res, body, ...args);
}
};
});