@bogeychan/elysia-etag
A plugin for Elysia.js for automatic HTTP ETag generation
Installation
bun add @bogeychan/elysia-etag
Usage
import { Elysia } from 'elysia'
import { etag } from '@bogeychan/elysia-etag'
const app = new Elysia()
.use(etag())
.get('/', () => 'Checkout the response headers!')
.get('/custom-etag', (ctx) => {
ctx.setETag('"myETag"')
return 'Hello ETag!'
})
.listen(3000)
console.log(`Listening on ${app.server!.url}`)
Use serialize to convert incompatible data to a hashable format
With JSON
new Elysia()
.use(
etag({
serialize(response) {
if (typeof response === 'object') {
return JSON.stringify(response)
}
}
})
)
.get('/', () => ({ my: 'json' }))
new Elysia()
.use(
etag({
serialize(response) {
if (response instanceof Blob && 'lastModified' in response) {
return (response as BunFile).lastModified.toString()
return (response as BunFile).bytes()
}
}
})
)
.get('/', () => Bun.file('./file.txt'))
Provide your own hash function
let myInsecureChangeCounter = 0
new Elysia()
.use(
etag({
hash: (response) => {
return (response as string) + myInsecureChangeCounter++
}
})
)
.get('/', () => 'Checkout the response headers!')
Checkout the examples folder on github for further use cases.
Credits ❤️
This project was inspired by @fastify/etag
Author
bogeychan
License
MIT