UNPKG

esa-cli

Version:

A CLI for operating Alibaba Cloud ESA Functions and Pages.

172 lines (171 loc) 7.01 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import inquirer from 'inquirer'; import { routeBuilder } from '../../components/routeBuilder.js'; import t from '../../i18n/index.js'; import { ApiService } from '../../libs/apiService.js'; import logger from '../../libs/logger.js'; import { validRoutine } from '../../utils/checkIsRoutineCreated.js'; import { getProjectConfig } from '../../utils/fileUtils/index.js'; import { checkDirectory, checkIsLoginSuccess } from '../utils.js'; import { transferRouteToRuleString } from './helper.js'; const addRoute = { command: 'add [route] [site]', describe: `🚄 ${t('route_add_describe').d('Bind a Route to a project')}`, builder: (yargs) => { return yargs .option('route', { describe: t('route_add_route_value_option').d('The route value. For example: example.com/*'), alias: 'r', type: 'string' }) .option('site', { describe: t('route_add_site_describe').d('The site to bind the route to. For example: example.com'), alias: 's', type: 'string' }) .option('alias', { alias: 'a', describe: t('route_add_route_name_option').d('Route name (aliases)'), type: 'string' }) .fail((msg, err, yargsIns) => { if (err) throw err; if (msg) { console.error(msg); yargsIns.showHelp('log'); } process.exit(1); }); }, handler: (argv) => __awaiter(void 0, void 0, void 0, function* () { handlerAddRoute(argv); }) }; export function handlerAddRoute(argv) { return __awaiter(this, void 0, void 0, function* () { var _a; if (!checkDirectory()) { return; } const projectConfig = getProjectConfig(); if (!projectConfig) return logger.notInProject(); const isSuccess = yield checkIsLoginSuccess(); if (!isSuccess) return; yield validRoutine(projectConfig.name); const listSitesReq = { SiteSearchType: 'fuzzy', Status: 'active', PageNumber: 1, PageSize: 500 }; const server = yield ApiService.getInstance(); const ListSitesRes = yield server.listSites(listSitesReq); if (!((_a = ListSitesRes === null || ListSitesRes === void 0 ? void 0 : ListSitesRes.data) === null || _a === void 0 ? void 0 : _a.Sites) || ListSitesRes.data.Sites.length === 0) { logger.error(t('no_active_sites').d('No active sites found in your account')); return; } const siteList = ListSitesRes.data.Sites.map((i) => ({ name: i.SiteName, value: i.SiteId })); let routeName = argv.alias; if (!routeName) { const response = yield inquirer.prompt([ { type: 'input', name: 'routeName', message: t('create_route_route_name').d('Enter a Route Name (Aliases):'), validate: (input) => { if (!input) { return t('route_name_input_required').d('Route name is required'); } return true; } } ]); routeName = response.routeName; } let siteName = argv.site; let siteId; if (!siteName) { const response = yield inquirer.prompt([ { type: 'list', name: 'routeSite', message: t('create_route_site').d('Select a site that is active in your account:'), choices: siteList } ]); siteId = response.routeSite; } else { // Find corresponding site ID by site name const matchedSite = siteList.find((site) => site.name === siteName); if (matchedSite) { siteId = matchedSite.value; } else { logger.error(t('site_not_found').d(`Site "${siteName}" not found in your account`)); return; } } let inputRoute = argv.route; if (!inputRoute) { // Get selected site name for route building const selectedSite = siteList.find((site) => site.value === siteId); const displaySiteName = selectedSite ? selectedSite.name : siteName; // Use route builder const builtRoute = yield routeBuilder(displaySiteName); if (!builtRoute) { logger.info(t('route_build_cancelled').d('Route building cancelled')); return; } inputRoute = builtRoute; } const rule = transferRouteToRuleString(inputRoute); if (!rule) { logger.error(t('route_format_invalid').d('Invalid route format')); return; } const selectedSite = siteList.find((site) => site.value === siteId); const displaySiteName = selectedSite ? selectedSite.name : siteName; const req = { RoutineName: projectConfig.name, RouteName: routeName, SiteId: siteId, RouteEnable: 'on', Bypass: 'off', Rule: rule }; try { logger.info(t('creating_route').d('Creating route...')); const res = yield server.createRoutineRoute(req); const addSuccess = (res === null || res === void 0 ? void 0 : res.code) === 200; if (addSuccess) { logger.success(t('route_add_success').d('Add route success!')); logger.info(`Route "${routeName}" has been successfully added to routine "${projectConfig.name}" for site "${displaySiteName}"`); } else { logger.error(t('route_add_fail').d('Add route fail!')); } } catch (error) { logger.error(t('route_add_fail').d('Add route fail!')); if (error instanceof Error) { logger.error(`Error: ${error.message}`); } } }); } export default addRoute;