UNPKG

express-msgpack

Version:

Transparent MessagePack middleware for Express

49 lines (48 loc) 1.56 kB
import readBody from "raw-body"; export default (overrides = {}) => { const optionsPromise = createOptions(overrides); return async (req, res, next) => { try { const options = await optionsPromise; const _json = res.json; res.json = (body) => { return res.format({ "application/json": () => _json.call(res, body), [options.mimeType]: () => res.send(options.encoder(body)), }); }; if (new RegExp(`^${options.mimeType}`, "i").test(req.header("Content-Type") ?? "")) { return readBody(req, { length: req.header("Content-Length"), limit: options.limit }, bodyHandler(options, req, next)); } next(); } catch (err) { next(err); } }; }; const bodyHandler = (options, req, next) => (err, body) => { if (err) { return next(err); } try { req.body = options.decoder(body); } catch (err) { return next(err); } req._body = true; next(); }; const createOptions = async (overrides) => { return { decoder: overrides.decoder ?? await import("@msgpack/msgpack").then(({ decode }) => decode), encoder: overrides.encoder ?? await import("@msgpack/msgpack").then(({ encode }) => (body) => Buffer.from(encode(body))), limit: overrides.limit ?? "100kb", mimeType: overrides.mimeType ?? "application/msgpack", }; };