rekwest
Version:
The robust request library that humanity deserves 🌐
79 lines (78 loc) • 2.86 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 _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;