liveperson-functions-cli
Version:
LivePerson Functions CLI
139 lines • 6.25 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateController = void 0;
// tslint:disable:no-shadowed-variable
const create_view_1 = require("../view/create.view");
const defaultStructure_service_1 = require("../service/defaultStructure.service");
const login_controller_1 = require("./login.controller");
const faasFactory_service_1 = require("../service/faasFactory.service");
class CreateController {
constructor(
/* istanbul ignore next */ { createView = new create_view_1.CreateView(), defaultStructureService = new defaultStructure_service_1.DefaultStructureService(), loginController = new login_controller_1.LoginController(), } = {}) {
this.createView = createView;
this.defaultStructureService = defaultStructureService;
this.loginController = loginController;
}
/**
*
* @param {IFunctionCreateOptions} - Passed function name and flags
* @returns {Promise<void>} - create view
* @memberof CreateController
*/
async createFunction(functionParameters = {}) {
try {
const missingParameters = await this.checkAndAskForMissingFunctionParameters(functionParameters);
const functionConfig = {
...functionParameters,
...missingParameters,
};
this.defaultStructureService.createFunction(functionConfig);
this.createView.showFunctionIsCreated(functionConfig);
}
catch (error) {
const prettyError = {
message: error.message || error.errorMsg,
suggestions: ['Use "lpf create:function --help" for more information.'],
ref: 'https://github.com/LivePersonInc/faas-cli#create',
};
this.createView.showErrorMessage(prettyError);
throw new Error('exit');
}
}
async checkAndAskForMissingFunctionParameters(incompleteFunctionParameters = {}) {
const { name, description, event } = incompleteFunctionParameters;
let selectedFunctionParameters = {};
if (!name) {
selectedFunctionParameters = {
...selectedFunctionParameters,
...(await this.createView.askForFunctionName()),
};
}
if (!description) {
selectedFunctionParameters = {
...selectedFunctionParameters,
...(await this.createView.askForFunctionDescription()),
};
}
if (!event) {
let selectedEventId;
if (await this.isUserLoggedIn()) {
const faasService = await faasFactory_service_1.factory.get();
const events = await faasService.getEvents();
selectedEventId = await this.createView.askForEventID([
'No Event',
...events.map((e) => e.eventId),
]);
}
else {
selectedEventId = await this.createView.askForEventID();
}
selectedFunctionParameters = {
...selectedFunctionParameters,
...selectedEventId,
};
}
return selectedFunctionParameters;
}
/**
* Creates a schedule. Requires login
* @param {any} - Passed function name and flags
* @returns {Promise<void>} - create view
* @memberof CreateController
*/
async createSchedule(scheduleParameters = {}) {
try {
const missingParameters = await this.checkAndAskForMissingScheduleParameters(scheduleParameters);
const scheduleConfig = {
...missingParameters,
isActive: true,
};
const faasService = await faasFactory_service_1.factory.get();
const res = await faasService.createSchedule(scheduleConfig);
this.createView.showScheduleIsCreated(res.nextExecution);
}
catch (error) {
const prettyError = {
message: error.message || error.errorMsg,
suggestions: ['Use "lpf create:schedule --help" for more information.'],
ref: 'https://github.com/LivePersonInc/faas-cli#create',
};
this.createView.showErrorMessage(prettyError);
throw new Error('exit');
}
}
async checkAndAskForMissingScheduleParameters({ functionName = '', cronExpression = '', }) {
var _a, _b;
const scheduleConfig = {};
// Make sure user is logged in
if (!(await this.isUserLoggedIn())) {
this.createView.showMessage('You need to log into an account to create schedules');
await this.loginController.getLoginInformation();
}
const faasService = await faasFactory_service_1.factory.get();
const deployedLambdas = (await faasService.getAllLambdas()).filter(({ state }) => ['Productive', 'Modified'].includes(state));
scheduleConfig.lambdaUUID = (_a = deployedLambdas.find(({ name }) => functionName === name)) === null || _a === void 0 ? void 0 : _a.uuid;
if (!scheduleConfig.lambdaUUID) {
if (functionName) {
this.createView.showErrorMessage(`${functionName} was not found as a deployed lambda on the account.`);
}
const selectedLambda = await this.createView.askForDeployedLambda(deployedLambdas);
// reported falsely as missing to codecov
/* istanbul ignore next */
const lambdaUUID = (_b = deployedLambdas.find(({ name }) => selectedLambda.name === name)) === null || _b === void 0 ? void 0 : _b.uuid;
scheduleConfig.lambdaUUID = lambdaUUID;
}
if (cronExpression) {
scheduleConfig.cronExpression = cronExpression;
}
else {
const answer = await this.createView.askForCronExpression();
scheduleConfig.cronExpression = answer.cronExpression || '';
}
return { ...scheduleConfig, isActive: true };
}
async isUserLoggedIn() {
return this.loginController.isUserLoggedIn();
}
}
exports.CreateController = CreateController;
//# sourceMappingURL=create.controller.js.map