usezap-cli
Version:
Zap CLI - Command-line interface for Zap API client
120 lines (103 loc) • 3.22 kB
JavaScript
const _ = require('lodash');
const { zapToEnvJsonV2, zapToJsonV2, collectionZapToJson: _collectionZapToJson } = require('@usezap/lang');
const collectionZapToJson = (zapContent) => {
try {
const json = _collectionZapToJson(zapContent);
const transformedJson = {
request: {
headers: _.get(json, 'headers', []),
auth: _.get(json, 'auth', {}),
script: _.get(json, 'script', {}),
vars: _.get(json, 'vars', {}),
tests: _.get(json, 'tests', '')
}
};
// add meta if it exists // this is only for folder zap file
// in the future, all of this will be replaced by standard zap lang
const sequence = _.get(json, 'meta.seq');
if (json?.meta) {
transformedJson.meta = {
name: json.meta.name,
seq: !isNaN(sequence) ? Number(sequence) : 1
};
}
return transformedJson;
} catch (error) {
return Promise.reject(error);
}
};
/**
* The transformer function for converting a Zap file to JSON.
*
* We map the json response from the zap lang and transform it into the DSL
* format that is used by the zap app
*
* @param {string} zapContent The Zap file content.
* @returns {object} The JSON representation of the Zap file.
*/
const zapToJson = (zapContent) => { try {
const json = zapToJsonV2(zapContent);
let requestType = _.get(json, 'meta.type');
if (requestType === 'http') {
requestType = 'http-request';
} else if (requestType === 'graphql') {
requestType = 'graphql-request';
} else {
requestType = 'http';
}
const sequence = _.get(json, 'meta.seq');
const transformedJson = {
type: requestType,
name: _.get(json, 'meta.name'),
seq: !isNaN(sequence) ? Number(sequence) : 1,
request: {
method: _.upperCase(_.get(json, 'http.method')),
url: _.get(json, 'http.url'),
auth: _.get(json, 'auth', {}),
params: _.get(json, 'params', []),
headers: _.get(json, 'headers', []),
body: _.get(json, 'body', {}),
vars: _.get(json, 'vars', []),
assertions: _.get(json, 'assertions', []),
script: _.get(json, 'script', {}),
tests: _.get(json, 'tests', '')
}
};
transformedJson.request.body.mode = _.get(json, 'http.body', 'none');
transformedJson.request.auth.mode = _.get(json, 'http.auth', 'none');
return transformedJson;
} catch (err) {
return Promise.reject(err);
}
};
const zapToEnvJson = (zapContent) => {
try {
return zapToEnvJsonV2(zapContent);
} catch (err) {
return Promise.reject(err);
}
};
const getEnvVars = (environment = {}) => {
const variables = environment.variables;
if (!variables || !variables.length) {
return {};
}
const envVars = {};
_.each(variables, (variable) => {
if (variable.enabled) {
envVars[variable.name] = variable.value;
}
});
return envVars;
};
const options = {};
const getOptions = () => {
return options;
};
module.exports = {
zapToJson,
zapToEnvJson,
getEnvVars,
getOptions,
collectionZapToJson
};