Files
bruno/packages/bruno-toml/src/tomlToJson.js
2023-12-31 02:52:41 +05:30

84 lines
2.1 KiB
JavaScript

const Toml = require('@iarna/toml');
const { has, each, get } = require('lodash');
const stripNewlineAtEnd = (str) => {
if (!str || typeof str !== 'string') {
return '';
}
return str.replace(/\n$/, '');
};
const tomlToJson = (toml) => {
const json = Toml.parse(toml);
const formattedJson = {
meta: {
name: get(json, 'meta.name', ''),
type: get(json, 'meta.type', ''),
seq: get(json, 'meta.seq', 0)
},
http: {
method: json.http.method,
url: json.http.url
}
};
if (json.headers) {
formattedJson.headers = [];
// headers are stored in plain json format if they contain duplicate keys
// the json is stored in a stringified format in the bru key
if (has(json.headers, 'bru')) {
let parsedHeaders = JSON.parse(json.headers.bru);
each(parsedHeaders, (header) => {
formattedJson.headers.push({
name: header.name,
value: header.value,
enabled: header.enabled
});
});
} else {
Object.keys(json.headers).forEach((key) => {
if (key === 'disabled') {
Object.keys(json.headers['disabled']).forEach((disabledKey) => {
formattedJson.headers.push({
name: disabledKey,
value: json.headers[key][disabledKey],
enabled: false
});
});
return;
}
formattedJson.headers.push({
name: key,
value: json.headers[key],
enabled: true
});
});
}
}
if (json.script) {
if (json.script['pre-request']) {
formattedJson.script = formattedJson.script || {};
formattedJson.script.req = stripNewlineAtEnd(json.script['pre-request']);
}
if (json.script['post-response']) {
formattedJson.script = formattedJson.script || {};
formattedJson.script.res = stripNewlineAtEnd(json.script['post-response']);
}
if (json.script['tests']) {
formattedJson.tests = stripNewlineAtEnd(json.script['tests']);
}
}
return formattedJson;
};
module.exports = tomlToJson;