UNPKG

rekwest

Version:

The robust request library that humanity deserves 🌐

79 lines (78 loc) 2.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transform = void 0; var _nodeHttp = _interopRequireDefault(require("node:http2")); var _nodeStream = require("node:stream"); var _consumers = require("node:stream/consumers"); var _nodeUtil = require("node:util"); var _formdata = require("./formdata"); var _mediatypes = require("./mediatypes"); var _utils = require("./utils"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const { HTTP2_HEADER_CONTENT_ENCODING, HTTP2_HEADER_CONTENT_LENGTH, HTTP2_HEADER_CONTENT_TYPE } = _nodeHttp.default.constants; const transform = async options => { let { body, headers } = options; if (!body) { return options; } if ((0, _utils.isFileLike)(body)) { headers = { [HTTP2_HEADER_CONTENT_LENGTH]: body.size, [HTTP2_HEADER_CONTENT_TYPE]: body.type || _mediatypes.APPLICATION_OCTET_STREAM }; body = body.stream(); } else if (_formdata.FormData.alike(body)) { body = _formdata.FormData.actuate(body); headers = { [HTTP2_HEADER_CONTENT_TYPE]: body.contentType }; } else if (!Buffer.isBuffer(body)) { if (_nodeUtil.types.isAnyArrayBuffer(body)) { body = Buffer.from(body); } else if (_nodeUtil.types.isArrayBufferView(body)) { body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); } else if (body === Object(body) && !Reflect.has(body, Symbol.asyncIterator)) { if (body.constructor === URLSearchParams) { headers = { [HTTP2_HEADER_CONTENT_TYPE]: _mediatypes.APPLICATION_FORM_URLENCODED }; body = body.toString(); } else if (!(!Array.isArray(body) && Reflect.has(body, Symbol.iterator))) { headers = { [HTTP2_HEADER_CONTENT_TYPE]: _mediatypes.APPLICATION_JSON }; body = JSON.stringify(body); } } } const encodings = options.headers[HTTP2_HEADER_CONTENT_ENCODING]; if (body === Object(body) && (Reflect.has(body, Symbol.asyncIterator) || !Array.isArray(body) && Reflect.has(body, Symbol.iterator))) { body = (0, _nodeStream.isReadable)(body) ? (0, _utils.isReadableStream)(body) ? _nodeStream.Readable.fromWeb(body) : body : _nodeStream.Readable.from(body); body = encodings ? (0, _utils.compress)(body, encodings) : body; } else if (encodings) { body = await (0, _consumers.buffer)((0, _utils.compress)(_nodeStream.Readable.from(body), encodings)); } Object.assign(options.headers, { ...headers, ...(!body[Symbol.asyncIterator] && { [HTTP2_HEADER_CONTENT_LENGTH]: Buffer.byteLength(body) }), ...(options.headers[HTTP2_HEADER_CONTENT_TYPE] && { [HTTP2_HEADER_CONTENT_TYPE]: options.headers[HTTP2_HEADER_CONTENT_TYPE] }) }); return { ...options, body }; }; exports.transform = transform;