bruno/packages/bruno-lang/v2/src/jsonToBru.js

249 lines
6.0 KiB
JavaScript
Raw Normal View History

const _ = require('lodash');
const {
indentString,
} = require('../../v1/src/utils');
const enabled = (items = []) => items.filter(item => item.enabled);
const disabled = (items = []) => items.filter(item => !item.enabled);
// remove the last line if two new lines are found
const stripLastLine = (text) => {
if(!text || !text.length) return text;
return text.replace(/(\r?\n)$/, '');
};
const jsonToBru = (json) => {
const {
meta,
http,
query,
headers,
body,
script,
tests,
vars,
2023-02-21 09:34:05 +01:00
assertions,
docs
} = json;
let bru = '';
if(meta) {
bru += 'meta {\n';
for (const key in meta) {
bru += ` ${key}: ${meta[key]}\n`;
}
bru += '}\n\n';
}
if(http && http.method) {
bru += `${http.method} {
url: ${http.url}`;
if(http.body && http.body.length) {
bru += `
body: ${http.body}`;
}
bru += `
}
`;
}
if(query && query.length) {
bru += 'query {';
if(enabled(query).length) {
bru += `\n${indentString(enabled(query).map(item => `${item.name}: ${item.value}`).join('\n'))}`;
}
if(disabled(query).length) {
bru += `\n${indentString(disabled(query).map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
}
bru += '\n}\n\n';
}
if(headers && headers.length) {
bru += 'headers {';
if(enabled(headers).length) {
bru += `\n${indentString(enabled(headers).map(item => `${item.name}: ${item.value}`).join('\n'))}`;
}
if(disabled(headers).length) {
bru += `\n${indentString(disabled(headers).map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
}
bru += '\n}\n\n';
}
if(body && body.json && body.json.length) {
bru += `body:json {
${indentString(body.json)}
}
`;
}
if(body && body.text && body.text.length) {
bru += `body:text {
${indentString(body.text)}
}
`;
}
if(body && body.xml && body.xml.length) {
bru += `body:xml {
${indentString(body.xml)}
}
`;
}
if(body && body.formUrlEncoded && body.formUrlEncoded.length) {
bru += `body:form-urlencoded {`;
if(enabled(body.formUrlEncoded).length) {
bru += `\n${indentString(enabled(body.formUrlEncoded).map(item => `${item.name}: ${item.value}`).join('\n'))}`;
}
if(disabled(body.formUrlEncoded).length) {
bru += `\n${indentString(disabled(body.formUrlEncoded).map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
}
bru += '\n}\n\n';
}
if(body && body.multipartForm && body.multipartForm.length) {
bru += `body:multipart-form {`;
if(enabled(body.multipartForm).length) {
bru += `\n${indentString(enabled(body.multipartForm).map(item => `${item.name}: ${item.value}`).join('\n'))}`;
}
if(disabled(body.multipartForm).length) {
bru += `\n${indentString(disabled(body.multipartForm).map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
}
bru += '\n}\n\n';
}
if(body && body.graphql && body.graphql.query) {
bru += `body:graphql {\n`;
bru += `${indentString(body.graphql.query)}`;
bru += '\n}\n\n';
}
if(body && body.graphql && body.graphql.variables) {
bru += `body:graphql:vars {\n`;
bru += `${indentString(body.graphql.variables)}`
bru += '\n}\n\n';
}
let reqvars = _.get(vars, 'req');
let resvars = _.get(vars, 'res');
if(reqvars && reqvars.length) {
const varsEnabled = _.filter(reqvars, (v) => v.enabled && !v.local);
const varsDisabled = _.filter(reqvars, (v) => !v.enabled && !v.local);
const varsLocalEnabled = _.filter(reqvars, (v) => v.enabled && v.local);
const varsLocalDisabled = _.filter(reqvars, (v) => !v.enabled && v.local);
bru += `vars:pre-request {`;
if(varsEnabled.length) {
bru += `\n${indentString(varsEnabled.map(item => `${item.name}: ${item.value}`).join('\n'))}`;
}
if(varsLocalEnabled.length) {
bru += `\n${indentString(varsLocalEnabled.map(item => `@${item.name}: ${item.value}`).join('\n'))}`;
}
if(varsDisabled.length) {
bru += `\n${indentString(varsDisabled.map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
}
if(varsLocalDisabled.length) {
bru += `\n${indentString(varsLocalDisabled.map(item => `~@${item.name}: ${item.value}`).join('\n'))}`;
}
bru += '\n}\n\n';
}
if(resvars && resvars.length) {
const varsEnabled = _.filter(resvars, (v) => v.enabled && !v.local);
const varsDisabled = _.filter(resvars, (v) => !v.enabled && !v.local);
const varsLocalEnabled = _.filter(resvars, (v) => v.enabled && v.local);
const varsLocalDisabled = _.filter(resvars, (v) => !v.enabled && v.local);
bru += `vars:post-response {`;
if(varsEnabled.length) {
bru += `\n${indentString(varsEnabled.map(item => `${item.name}: ${item.value}`).join('\n'))}`;
}
if(varsLocalEnabled.length) {
bru += `\n${indentString(varsLocalEnabled.map(item => `@${item.name}: ${item.value}`).join('\n'))}`;
}
if(varsDisabled.length) {
bru += `\n${indentString(varsDisabled.map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
}
if(varsLocalDisabled.length) {
bru += `\n${indentString(varsLocalDisabled.map(item => `~@${item.name}: ${item.value}`).join('\n'))}`;
}
bru += '\n}\n\n';
}
2023-02-21 09:34:05 +01:00
if(assertions && assertions.length) {
bru += `assert {`;
2023-02-21 09:34:05 +01:00
if(enabled(assertions).length) {
bru += `\n${indentString(enabled(assertions).map(item => `${item.name}: ${item.value}`).join('\n'))}`;
}
2023-02-21 09:34:05 +01:00
if(disabled(assertions).length) {
bru += `\n${indentString(disabled(assertions).map(item => `~${item.name}: ${item.value}`).join('\n'))}`;
}
bru += '\n}\n\n';
}
if(script && script.req && script.req.length) {
bru += `script:pre-request {
${indentString(script.req)}
}
`;
}
if(script && script.res && script.res.length) {
bru += `script:post-response {
${indentString(script.res)}
}
`;
}
if(tests && tests.length) {
bru += `tests {
${indentString(tests)}
}
`;
}
if(docs && docs.length) {
bru += `docs {
${indentString(docs)}
}
`;
}
return stripLastLine(bru);
};
module.exports = jsonToBru;