36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import { HttpCompressionOptions, ProjectConfigOptions } from "@medusajs/types"
|
|
import compression from "compression"
|
|
import { Request, Response } from "express"
|
|
|
|
export function shouldCompressResponse(req: Request, res: Response) {
|
|
const { projectConfig } = req.scope.resolve("configModule")
|
|
const { enabled } = compressionOptions(projectConfig)
|
|
|
|
if (!enabled) {
|
|
return false
|
|
}
|
|
|
|
if (req.headers["x-no-compression"]) {
|
|
// don't compress responses with this request header
|
|
return false
|
|
}
|
|
|
|
// fallback to standard filter function
|
|
return compression.filter(req, res)
|
|
}
|
|
|
|
export function compressionOptions(
|
|
config: ProjectConfigOptions
|
|
): HttpCompressionOptions {
|
|
const responseCompressionOptions = config.http.compression ?? {}
|
|
|
|
responseCompressionOptions.enabled =
|
|
responseCompressionOptions.enabled ?? false
|
|
responseCompressionOptions.level = responseCompressionOptions.level ?? 6
|
|
responseCompressionOptions.memLevel = responseCompressionOptions.memLevel ?? 8
|
|
responseCompressionOptions.threshold =
|
|
responseCompressionOptions.threshold ?? 1024
|
|
|
|
return responseCompressionOptions
|
|
}
|