@veecode-platform/safira-cli
Version:
Generate a microservice project from your spec.
102 lines (101 loc) • 5.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const color_1 = tslib_1.__importDefault(require("@oclif/color"));
const core_1 = require("@oclif/core");
const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
const cache_manager_1 = require("../../../cache/cache-manager");
const mockserver_manager_1 = require("../../../mockserver/mockserver-manager");
const mockserver_service_1 = require("../../../mockserver/mockserver-service");
const spec_discovery_1 = require("../../../safira-globals/spec-discovery");
const constants_1 = require("../../../utils/commands/constants");
const file_system_utils_1 = require("../../../utils/file-system-utils");
const url_utils_1 = require("../../../utils/url-utils");
const safiraColors = tslib_1.__importStar(require("../../../colors.json"));
const safira_utils_1 = require("../../../safira-project/safira-utils");
class MockServerSpecDeploy extends core_1.Command {
async run() {
const { args, flags } = await this.parse(MockServerSpecDeploy);
const projectFolder = file_system_utils_1.FileSystemUtils.getCurrentPath();
let openApiFile = "";
try {
openApiFile = await spec_discovery_1.SpecDiscovery.discoverSpecs({ projectPath: projectFolder });
}
catch (error) {
console.log(color_1.default.red(error.message));
process.exit(2);
}
const mockserverCache = cache_manager_1.CacheManager.instance.getCache(cache_manager_1.CacheName.mockserver);
const answers = await inquirer_1.default.prompt([
{
when: () => !flags["server-url"] && mockserverCache.length > 0,
type: "list",
name: "server-list",
message: "Mock server url:",
choices: [...mockserverCache, { name: color_1.default.bold("Input other value."), value: "other" }],
},
{
when: answers => !flags["server-url"] && (answers["server-list"] === "other" || !answers["server-list"]),
type: "input",
name: "server-url",
message: "Mock server url:",
default: "http://localhost:1080",
validate: async (url) => url_utils_1.UrlUtils.parse(url).pathname === "/" && (await mockserver_service_1.MockserverService.instance.isMockserverUp(`${url}/mockserver/dashboard`)) ? true : "Invalid mock server url",
},
{
type: "list",
name: "has-api-key",
message: "Has Mockserver Api Key?",
choices: constants_1.yesNoList,
default: "yes",
},
{
when: answers => answers["has-api-key"] === "yes",
type: "input",
name: "api-key",
message: "Mock server Api Key:",
},
{
when: () => !flags.context,
type: "input",
name: "context",
message: "Mock API context:",
default: file_system_utils_1.FileSystemUtils.getHighFolderFromPath(projectFolder),
},
]);
if (answers["server-url"]) {
cache_manager_1.CacheManager.instance.addItem(cache_manager_1.CacheName.mockserver, answers["server-url"]);
}
if ((answers["server-list"] && answers["server-list"] !== "other") && !(url_utils_1.UrlUtils.parse(answers["server-list"]).pathname === "/" && await mockserver_service_1.MockserverService.instance.isMockserverUp(`${answers["server-list"]}/mockserver/dashboard`))) {
console.log(color_1.default.red("Mockserver is not running."));
process.exit(2);
}
const serverUrl = flags["server-url"] || answers["server-url"] || answers["server-list"];
const apiKey = flags["api-key"] || answers["api-key"];
const context = flags.context || answers.context;
try {
await mockserver_manager_1.MockserverManager.instance.publishMock(projectFolder, serverUrl, openApiFile, context, apiKey);
}
catch (error) {
this.error(color_1.default.red(error.message));
}
finally {
safira_utils_1.SafiraUtils.deleteTmpFolder();
}
console.log();
const neonGreen = color_1.default.hex(safiraColors["neon-green"]);
this.log(neonGreen("Apis available at"), neonGreen.bold(`${serverUrl.endsWith("/") ? serverUrl : serverUrl + "/"}${context}/*`));
}
}
exports.default = MockServerSpecDeploy;
MockServerSpecDeploy.description = "Deploys the spec to the mock server";
MockServerSpecDeploy.examples = [
"<%= config.bin %> <%= command.id %>",
];
MockServerSpecDeploy.flags = {
help: core_1.Flags.help({}),
"server-url": core_1.Flags.url({ description: "mock server url" }),
context: core_1.Flags.string({ description: "api context" }),
"api-key": core_1.Flags.string({ description: "api key" }),
};
MockServerSpecDeploy.args = [];