UNPKG

@nimbella/postman-api

Version:

Postman Collection to Nimbella Project: Take your APIs seamlessly into Serverless world with this API

189 lines (188 loc) 7.33 kB
"use strict"; /* * Copyright (c) 2019 - present Nimbella Corp. * * This file is licensed to you under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy * of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.getUnitTests = exports.getGlobalValidations = exports.getMethodValidations = exports.pmToEnvVars = exports.getEnvVars = exports.getFailureSuite = exports.getSuccessSuite = void 0; const tslib_1 = require("tslib"); const path_1 = require("path"); const fs_1 = require("fs"); const acorn_1 = require("acorn"); const recast_1 = require("recast"); const utils_1 = require("../../utils"); const writer_1 = require("../../writer"); const stub_gen_1 = require("../stub/stub-gen"); const logger_1 = tslib_1.__importDefault(require("../../logger")); const Handlebars = require("handlebars"); const successSuite = fs_1.readFileSync(path_1.join(__dirname, 'templates', 'success.hbs')); const successTmpl = Handlebars.compile(successSuite.toString()); const failureSuite = fs_1.readFileSync(path_1.join(__dirname, 'templates', 'fail.hbs')); const failureTmpl = Handlebars.compile(failureSuite.toString()); function getSuccessSuite(request, response, variables) { const isPostRequest = request.method.toLowerCase() === 'post'; const responseTime = 500; const propTypes = []; const propChildKeys = []; const envVars = variables.members; const headers = response ? response.headers.members : []; const mandatoryProps = response && utils_1.isJson(response.body) ? Object.keys(JSON.parse(response.body)) : []; const res = successTmpl({ isPostRequest, headers, responseTime, propTypes, propChildKeys, envVars, mandatoryProps, }); return res; } exports.getSuccessSuite = getSuccessSuite; function getFailureSuite() { const res = failureTmpl({}); return res; } exports.getFailureSuite = getFailureSuite; function getEnvVars(collection = undefined, scripts = undefined) { const envVars = []; if (collection) { collection.variables.members.forEach((e) => { envVars.push(e.key, e.value, e.description); }); } if (scripts && scripts.length > 0) { scripts .filter((s) => s.startsWith('pm.environment.set(')) .forEach((e) => { const kv = e .replace(/"/g, '') .replace('pm.environment.set(', '') .replace(');', '') .split(','); envVars.push({ key: kv[0], value: kv[1], description: '' }); }); } return envVars; } exports.getEnvVars = getEnvVars; function pmToEnvVars(script) { return script .replace(/['")]/g, '') .replace('pm.environment.', 'process.env.') .replace('postman.setEnvironmentVariable(', 'process.env.') .replace(',', '=') .replace('get(', '') .replace('set(', '') .replace(/process.env.\b\w+\b/g, l => l.toUpperCase()) .replace('PROCESS.ENV', 'process.env') .replace('globals.get', 'console.log'); } exports.pmToEnvVars = pmToEnvVars; function extractFunctionBody(scripts) { const ast = acorn_1.Parser.parse(scripts.join('\n')); let outScript = ''; try { scripts .filter((s) => s.startsWith('pm.globals.set(')) .forEach((e) => { const name = e .replace('"', '') .replace(/'/g, '') .replace('pm.globals.set(', '') .split(',')[0]; ast.body .filter((s) => s.type === 'FunctionDeclaration') .forEach((element) => { if (element.id.name === name) { outScript += recast_1.print(element).code; } }); }); } catch (error) { logger_1.default.error(error); } return outScript; } function getMethodValidations(scripts = []) { const globalTests = scripts.filter((s) => s.includes('pm.globals.set(')); let tests = scripts.filter((s) => !s.includes('pm.globals.set(')); if (globalTests.length > 0) { const consolidatedScript = scripts.join('\n'); const globalFunc = extractFunctionBody(scripts); tests = consolidatedScript.replace(globalFunc, '').split('\n'); } tests.forEach((s, i, a) => { if (s.includes('pm.environment.toObject()')) { a[i] = a[i].replace(/pm.environment.toObject()/g, 'process.env'); } if (a[i].includes('pm.environment.') || a[i].includes('postman.setEnvironmentVariable.')) { a[i] = pmToEnvVars(a[i]); } if (a[i].includes('pm.variables.')) { a[i] = a[i].replace(/pm.variables/g, 'nimbella.redis()'); } }); return tests; } exports.getMethodValidations = getMethodValidations; function getGlobalValidations(scripts) { const script = extractFunctionBody(scripts); const outScriptArray = script.split('\n'); outScriptArray.forEach((e, i, a) => { if (a[i].includes('pm.environment.') || a[i].includes('postman.setEnvironmentVariable.')) { a[i] = pmToEnvVars(e); } }); return outScriptArray.join('\n'); } exports.getGlobalValidations = getGlobalValidations; async function getUnitTests(item, location, packageName, actionName) { const tests = item.events.members.filter((i) => i.listen === 'test'); if (tests.length > 0) { const scripts = tests[0].script.exec || []; scripts.forEach(async (e, i, a) => { if (a[i].includes('pm.environment.toObject()')) { a[i] = a[i].replace(/pm.environment.toObject()/g, 'process.env'); } if (a[i].includes('globals.get')) { const includeScript = await stub_gen_1.getIncludeFile(['validations']); writer_1.writeFile({ location: path_1.join(location, 'packages', packageName, actionName), name: '', ext: 'include', verbose: true, }, includeScript.content); } if (a[i].includes('pm.environment.') || a[i].includes('postman.setEnvironmentVariable.')) { a[i] = pmToEnvVars(a[i]); } if (a[i].includes('pm.variables.')) { a[i] = a[i].replace(/pm.variables/g, 'nimbella.redis()'); } a[i] = a[i] .replace(/pm./g, '') .replace(/postman./g, '') .replace('setNextRequest', 'console.log') .replace('stopWorkflow', 'console.log') .replace('globals.get', 'console.log'); }); return scripts; } return []; } exports.getUnitTests = getUnitTests;