UNPKG

rekwest

Version:

The robust request library that humanity deserves 🌐

105 lines (104 loc) 3.52 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 _codecs = require("./codecs.cjs"); var _formdata = require("./formdata.cjs"); var _mediatypes = require("./mediatypes.cjs"); var _utils = require("./utils.cjs"); 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 (!Buffer.isBuffer(body)) { switch (true) { case (0, _utils.isFileLike)(body): { headers = { [HTTP2_HEADER_CONTENT_LENGTH]: body.size, [HTTP2_HEADER_CONTENT_TYPE]: body.type || _mediatypes.APPLICATION_OCTET_STREAM }; body = body.stream(); break; } case _formdata.FormData.alike(body): { body = _formdata.FormData.actuate(body); headers = { [HTTP2_HEADER_CONTENT_TYPE]: body.contentType }; break; } case _nodeUtil.types.isAnyArrayBuffer(body): { body = Buffer.from(body); break; } case _nodeUtil.types.isArrayBufferView(body): { body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); break; } case Object(body) === 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); } break; } default: break; } } const encodings = options.headers[HTTP2_HEADER_CONTENT_ENCODING]; if (Object(body) === 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, _codecs.encode)(body, encodings, options) : body; } else if (encodings) { body = await (0, _consumers.buffer)((0, _codecs.encode)(_nodeStream.Readable.from(body), encodings, options)); } if (options.bufferBody && Object(body) === body) { if ((0, _nodeStream.isReadable)(body)) { body = await (0, _consumers.buffer)(body); } else if (Reflect.has(body, Symbol.asyncIterator)) { body = await (0, _consumers.buffer)(body); } } 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;