UNPKG

@golemio/cli

Version:

Collection of executables intended for use with Golemio services and modules

129 lines 6.11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadPortmanScript = exports.printCommandHelp = exports.runPortmanTests = exports.generateOpenApiConfig = void 0; const fast_glob_1 = __importDefault(require("fast-glob")); const fs_1 = __importDefault(require("fs")); const gluegun_1 = require("gluegun"); const js_yaml_1 = __importDefault(require("js-yaml")); const openapi_merge_1 = require("openapi-merge"); const path_1 = __importDefault(require("path")); const generateOpenApiConfig = (oasHeaderFilePath, oasFilesGlob, oasTagFilterFilePath, oasMergedOutputFilePath) => { let mergeInput = []; if (oasHeaderFilePath) { mergeInput.push(loadOasYaml(oasHeaderFilePath, null)); } for (const pathEntry of fast_glob_1.default.sync(oasFilesGlob, { absolute: true })) { mergeInput.push(loadOasYaml(pathEntry, oasTagFilterFilePath)); } const mergeResult = (0, openapi_merge_1.merge)(mergeInput); if ((0, openapi_merge_1.isErrorResult)(mergeResult)) { return { isError: true, message: `${mergeResult.message} (${mergeResult.type})` }; } const outFilePath = path_1.default.resolve(process.cwd(), oasMergedOutputFilePath); fs_1.default.writeFileSync(outFilePath, JSON.stringify(mergeResult.output)); return { isError: false, message: "Successfully generated OAS file at " + path_1.default.relative(process.cwd(), outFilePath) }; }; exports.generateOpenApiConfig = generateOpenApiConfig; const runPortmanTests = async (oasFilePath, filterFilePath, scriptFilePath, portmanConfigPath) => { let Portman; try { Portman = require("@apideck/portman/dist/Portman").Portman; } catch (err) { return { isError: true, message: "Failed to load Portman" }; } const defaultPortmanConfigPath = path_1.default.resolve(__dirname, "..", "..", "static", "portman-config.json"); const portmanConfigDir = fs_1.default.mkdtempSync("golemio-cli-portman"); let portmanConfigFile; if (portmanConfigPath) { const defaultPortmanConfig = require(defaultPortmanConfigPath); const portmanConfig = require(path_1.default.resolve(process.cwd(), portmanConfigPath)); const mergedConfig = Object.assign(Object.assign({}, defaultPortmanConfig), portmanConfig); portmanConfigFile = path_1.default.resolve(portmanConfigDir, "portman-config.json"); fs_1.default.writeFileSync(portmanConfigFile, JSON.stringify(mergedConfig)); } else { portmanConfigFile = defaultPortmanConfigPath; } let filterFile; if (filterFilePath) { filterFile = path_1.default.resolve(process.cwd(), filterFilePath); } else { filterFile = path_1.default.resolve(__dirname, "..", "..", "static", "portman-filter.json"); } const portmanOutputConfig = { baseUrl: "http://localhost:3011", oaLocal: path_1.default.resolve(process.cwd(), oasFilePath), oaOutput: path_1.default.resolve(process.cwd(), "docs/postman-output-collection-generated.json"), portmanConfigPath: portmanConfigFile, postmanConfigPath: path_1.default.resolve(__dirname, "..", "..", "static", "postman-config.json"), filterFile: filterFile, includeTests: true, runNewman: true, syncPostman: false, oaUrl: "", bundleContractTests: false, newmanIterationData: "", portmanConfigFile: "", postmanConfigFile: "", envFile: ".env", }; try { const portman = new Portman(portmanOutputConfig); const { start, stop } = (0, exports.loadPortmanScript)(path_1.default.resolve(process.cwd(), scriptFilePath)); await start(); await portman.run(); await stop(); return { isError: false, message: "Successfully ran Portman tests" }; } catch (err) { return { isError: true, message: err.message }; } finally { if (fs_1.default.existsSync(portmanConfigDir)) { fs_1.default.rmdirSync(portmanConfigDir, { recursive: true }); } } }; exports.runPortmanTests = runPortmanTests; /** * Print command help for swagger */ const printCommandHelp = () => { gluegun_1.print.info(gluegun_1.print.colors.blue("\ngolemio swagger (oas)")); gluegun_1.print.info(" Commands\n"); gluegun_1.print.info(" generate \t\t Generate OAS file from multiple inputs"); gluegun_1.print.info(" api-test \t\t Run Portman integration tests"); gluegun_1.print.info(" help (h)\t\t -"); gluegun_1.print.info("\n Flags\n"); gluegun_1.print.info(" --oas <path_or_glob>\t OAS generator input file glob or Portman OAS file path"); gluegun_1.print.info(" --header <path>\t OAS generator header file path"); gluegun_1.print.info(" --output <path>\t OAS generator JSON output file path"); gluegun_1.print.info(" --filter <path>\t OAS generator tag filter file path or Portman filter file path"); gluegun_1.print.info(" --script <path>\t Portman run script file path (start/stop)"); gluegun_1.print.info(" --config <path>\t Portman config file path"); }; exports.printCommandHelp = printCommandHelp; const loadOasYaml = (oasFilePath, tagFilterPath) => { const oasFileContents = fs_1.default.readFileSync(oasFilePath, "utf8"); const tagFilterList = tagFilterPath ? require(path_1.default.resolve(process.cwd(), tagFilterPath)) : null; return { oas: js_yaml_1.default.load(oasFileContents), operationSelection: { excludeTags: Array.isArray(tagFilterList) ? tagFilterList : [], }, }; }; const loadPortmanScript = (filePath) => { const script = require(filePath); if (typeof script.start !== "function" || typeof script.stop !== "function") { throw new Error("Invalid Portman script"); } return { start: script.start, stop: script.stop }; }; exports.loadPortmanScript = loadPortmanScript; //# sourceMappingURL=swagger.utils.js.map