feat(medusa,utils): add server level configurable http compression (#3785)

* feat(medusa,utils): add server level configurable http compression

* chore: remove unwanted middleware

* chore: add a log for running compression

* chore: change package position

* chore: reposition options

* chore: change equality
This commit is contained in:
Riqwan Thamir
2023-04-13 12:39:13 +02:00
committed by GitHub
parent 1eab1b740f
commit 4f58ddee03
8 changed files with 91 additions and 16 deletions
@@ -0,0 +1,39 @@
import { Request, Response, NextFunction } from "express"
import compression from "compression"
import { Logger } from "@medusajs/types"
import {
ProjectConfigOptions,
HttpCompressionOptions,
} from "@medusajs/types"
export function shouldCompressResponse(req: Request, res: Response) {
const logger: Logger = req.scope.resolve("logger")
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
}