forked from extern/bruno
199 lines
4.8 KiB
JavaScript
199 lines
4.8 KiB
JavaScript
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 jsonToCollectionBru = (json) => {
|
|
const { meta, query, headers, auth, script, tests, vars, docs } = json;
|
|
|
|
let bru = '';
|
|
|
|
if (meta) {
|
|
bru += 'meta {\n';
|
|
for (const key in meta) {
|
|
bru += ` ${key}: ${meta[key]}\n`;
|
|
}
|
|
bru += '}\n\n';
|
|
}
|
|
|
|
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 (auth && auth.mode) {
|
|
bru += `auth {
|
|
${indentString(`mode: ${auth.mode}`)}
|
|
}
|
|
|
|
`;
|
|
}
|
|
|
|
if (auth && auth.awsv4) {
|
|
bru += `auth:awsv4 {
|
|
${indentString(`accessKeyId: ${auth.awsv4.accessKeyId}`)}
|
|
${indentString(`secretAccessKey: ${auth.awsv4.secretAccessKey}`)}
|
|
${indentString(`sessionToken: ${auth.awsv4.sessionToken}`)}
|
|
${indentString(`service: ${auth.awsv4.service}`)}
|
|
${indentString(`region: ${auth.awsv4.region}`)}
|
|
${indentString(`profileName: ${auth.awsv4.profileName}`)}
|
|
}
|
|
|
|
`;
|
|
}
|
|
|
|
if (auth && auth.basic) {
|
|
bru += `auth:basic {
|
|
${indentString(`username: ${auth.basic.username}`)}
|
|
${indentString(`password: ${auth.basic.password}`)}
|
|
}
|
|
|
|
`;
|
|
}
|
|
|
|
if (auth && auth.bearer) {
|
|
bru += `auth:bearer {
|
|
${indentString(`token: ${auth.bearer.token}`)}
|
|
}
|
|
|
|
`;
|
|
}
|
|
|
|
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';
|
|
}
|
|
|
|
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 = jsonToCollectionBru;
|