var rawBody = require("raw-body") var cache = require("continuable-cache") var parseArguments = require("./parse-arguments.js") var ONE_MB = 1024 * 1024 var THUNK_KEY = '__npm_body_thunk_cache__'; module.exports = body function parseBodyThunk(req, res, opts) { return function thunk(callback) { var limit = "limit" in opts ? opts.limit : ONE_MB var contentLength = req.headers ? Number(req.headers["content-length"]) : null; rawBody(req, { limit: limit, length: contentLength, encoding: "encoding" in opts ? opts.encoding : true }, callback); }; } function body(req, res, opts, callback) { var args = parseArguments(req, res, opts, callback) req = args.req res = args.res opts = args.opts callback = args.callback var thunk; if (opts.cache) { var thunk = req[THUNK_KEY] || cache(parseBodyThunk(req, res, opts)); req[THUNK_KEY] = thunk; } else { thunk = parseBodyThunk(req, res, opts); } if (!callback) { return thunk; } thunk(callback); }