esa-cli
Version:
A CLI for operating Alibaba Cloud ESA Functions and Pages.
172 lines (171 loc) • 7.01 kB
JavaScript
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;