@golemio/cli
Version:
Collection of executables intended for use with Golemio services and modules
129 lines • 6.11 kB
JavaScript
;
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