mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-24 05:05:39 +00:00
* Now based on the request type appropriate views are shown. Co-authored-by: Anoop M D <anoop.md1421@gmail.com>
95 lines
2.5 KiB
JavaScript
95 lines
2.5 KiB
JavaScript
const createContentType = (mode) => {
|
|
switch (mode) {
|
|
case 'json':
|
|
return 'application/json';
|
|
case 'text':
|
|
return 'text/plain';
|
|
case 'xml':
|
|
return 'application/xml';
|
|
case 'sparql':
|
|
return 'application/sparql-query';
|
|
case 'formUrlEncoded':
|
|
return 'application/x-www-form-urlencoded';
|
|
case 'graphql':
|
|
return 'application/json';
|
|
case 'multipartForm':
|
|
return 'multipart/form-data';
|
|
default:
|
|
return '';
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Creates a list of enabled headers for the request, ensuring no duplicate content-type headers.
|
|
*
|
|
* @param {Object} request - The request object.
|
|
* @param {Object[]} headers - The array of header objects, each containing name, value, and enabled properties.
|
|
* @returns {Object[]} - An array of enabled headers with normalized names and values.
|
|
*/
|
|
const createHeaders = (request, headers) => {
|
|
const enabledHeaders = headers
|
|
.filter((header) => header.enabled)
|
|
.map((header) => ({
|
|
name: header.name.toLowerCase(),
|
|
value: header.value
|
|
}));
|
|
|
|
const contentType = createContentType(request.body?.mode);
|
|
if (contentType !== '' && !enabledHeaders.some((header) => header.name === 'content-type')) {
|
|
enabledHeaders.push({ name: 'content-type', value: contentType });
|
|
}
|
|
|
|
return enabledHeaders;
|
|
};
|
|
|
|
const createQuery = (queryParams = []) => {
|
|
return queryParams
|
|
.filter((param) => param.enabled && param.type === 'query')
|
|
.map((param) => ({
|
|
name: param.name,
|
|
value: param.value
|
|
}));
|
|
};
|
|
|
|
const createPostData = (body, type) => {
|
|
if (type === 'graphql-request') {
|
|
return {
|
|
mimeType: 'application/json',
|
|
text: JSON.stringify(body[body.mode])
|
|
};
|
|
}
|
|
|
|
const contentType = createContentType(body.mode);
|
|
if (body.mode === 'formUrlEncoded' || body.mode === 'multipartForm') {
|
|
return {
|
|
mimeType: contentType,
|
|
params: body[body.mode]
|
|
.filter((param) => param.enabled)
|
|
.map((param) => ({
|
|
name: param.name,
|
|
value: param.value,
|
|
...(param.type === 'file' && { fileName: param.value })
|
|
}))
|
|
};
|
|
} else {
|
|
return {
|
|
mimeType: contentType,
|
|
text: body[body.mode]
|
|
};
|
|
}
|
|
};
|
|
|
|
export const buildHarRequest = ({ request, headers, type }) => {
|
|
return {
|
|
method: request.method,
|
|
url: encodeURI(request.url),
|
|
httpVersion: 'HTTP/1.1',
|
|
cookies: [],
|
|
headers: createHeaders(request, headers),
|
|
queryString: createQuery(request.params),
|
|
postData: createPostData(request.body, type),
|
|
headersSize: 0,
|
|
bodySize: 0
|
|
};
|
|
};
|