UNPKG

next

Version:

The React Framework

79 lines (78 loc) 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "parseBody", { enumerable: true, get: function() { return parseBody; } }); const _contenttype = require("next/dist/compiled/content-type"); const _iserror = /*#__PURE__*/ _interop_require_default(require("../../../lib/is-error")); const _index = require("../index"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Parse `JSON` and handles invalid `JSON` strings * @param str `JSON` string */ function parseJson(str) { if (str.length === 0) { // special-case empty json body, as it's a common client-side mistake return {}; } try { return JSON.parse(str); } catch (e) { throw Object.defineProperty(new _index.ApiError(400, 'Invalid JSON'), "__NEXT_ERROR_CODE", { value: "E394", enumerable: false, configurable: true }); } } async function parseBody(req, limit) { let contentType; try { contentType = (0, _contenttype.parse)(req.headers['content-type'] || 'text/plain'); } catch { contentType = (0, _contenttype.parse)('text/plain'); } const { type, parameters } = contentType; const encoding = parameters.charset || 'utf-8'; let buffer; try { const getRawBody = require('next/dist/compiled/raw-body'); buffer = await getRawBody(req, { encoding, limit }); } catch (e) { if ((0, _iserror.default)(e) && e.type === 'entity.too.large') { throw Object.defineProperty(new _index.ApiError(413, `Body exceeded ${limit} limit`), "__NEXT_ERROR_CODE", { value: "E394", enumerable: false, configurable: true }); } else { throw Object.defineProperty(new _index.ApiError(400, 'Invalid body'), "__NEXT_ERROR_CODE", { value: "E394", enumerable: false, configurable: true }); } } const body = buffer.toString(); if (type === 'application/json' || type === 'application/ld+json') { return parseJson(body); } else if (type === 'application/x-www-form-urlencoded') { const qs = require('querystring'); return qs.decode(body); } else { return body; } } //# sourceMappingURL=parse-body.js.map