h3-compression
v0.3.2
Published
Adds compression to h3 request (brotli, gzip, deflate)
Downloads
289,768
Maintainers
Readme
H3-compression
Handles compression for H3
Features
✔️ Zlib Compression: You can use zlib compression (brotli, gzip and deflate)
✔️ Stream Compression: You can use native stream compressions (gzip, deflate)
✔️ Compression Detection: It uses the best compression which is accepted
Install
# Using npm
npm install h3-compression
# Using yarn
yarn add h3-compression
# Using pnpm
pnpm add h3-compression
Usage
import { createServer } from 'node:http'
import { createApp, eventHandler, toNodeListener } from 'h3'
import { useCompressionStream } from 'h3-compression'
const app = createApp({ onBeforeResponse: useCompressionStream }) // or { onBeforeResponse: useCompression }
app.use(
'/',
eventHandler(() => 'Hello world!'),
)
createServer(toNodeListener(app)).listen(process.env.PORT || 3000)
Example using listhen for an elegant listener:
import { createApp, eventHandler, toNodeListener } from 'h3'
import { listen } from 'listhen'
import { useCompressionStream } from 'h3-compression'
const app = createApp({ onBeforeResponse: useCompressionStream }) // or { onBeforeResponse: useCompression }
app.use(
'/',
eventHandler(() => 'Hello world!'),
)
listen(toNodeListener(app))
Nuxt 3
If you want to use it in nuxt 3 you can define a nitro plugin.
server/plugins/compression.ts
import { useCompression } from 'h3-compression'
export default defineNitroPlugin((nitro) => {
nitro.hooks.hook('render:response', async (response, { event }) => {
if (!response.headers?.['content-type'].startsWith('text/html'))
return
await useCompression(event, response)
})
})
[!NOTE]
useCompressionStream
doesn't work right now in nitro. So you just can useuseCompression
Utilities
H3-compression has a concept of composable utilities that accept event
(from eventHandler((event) => {})
) as their first argument and response
as their second.
Zlib Compression
useGZipCompression(event, response)
useDeflateCompression(event, response)
useBrotliCompression(event, response)
useCompression(event, response)
Stream Compression
useGZipCompressionStream(event, response)
useDeflateCompressionStream(event, response)
useCompressionStream(event, response)
Sponsors
Releated Projects
License
MIT License © 2023-PRESENT Gregor Becker