rekwest
Version:
The robust request library that humanity deserves 🌐
105 lines (104 loc) • 3.52 kB
JavaScript
;
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;