Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

CodeDredd/h3-compression

Repository files navigation

H3-compression

npm version npm downloads bundle JSDocs License

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 }) => {
 // Skip internal nuxt routes (e.g. error page)
 if (getRequestURL(event).pathname.startsWith('/__nuxt'))
 return
 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 use useCompression

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

About

Adds compression to h3 requests (brotli, gzip, deflate)

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /