rush-init-project-plugin
Version:
Rush plugin for initialize project in monorepo
340 lines • 15.9 kB
JavaScript
"use strict";
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());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Form = void 0;
var blessed_1 = __importDefault(require("blessed"));
var InputComponent_1 = require("./InputComponent");
var ConfirmComponent_1 = require("./ConfirmComponent");
var CheckboxComponent_1 = require("./CheckboxComponent");
var AutoCompleteComponent_1 = require("./AutoCompleteComponent");
var hooks_1 = require("../../hooks");
var ListComponent_1 = require("./ListComponent");
var COLORS_1 = require("../COLORS");
var EMIT_EVENTS_1 = require("../EMIT_EVENTS");
var DEFAULT_TEXT = '{center}{bold}SUBMIT{bold}{/center}';
var SUBMINTING_TEXT = '{center}submiting, please wait patiently{/center}';
var createSubmit = function (form, formValidateAndSubmit) {
var submitBtn = blessed_1.default.button({
parent: form,
name: '_submit',
tags: true,
height: 3,
border: 'line',
content: DEFAULT_TEXT,
style: {
fg: COLORS_1.COLORS.blue2,
border: {
fg: COLORS_1.COLORS.blue2
},
hover: {
fg: COLORS_1.COLORS.blue4,
border: {
fg: COLORS_1.COLORS.blue4
}
},
focus: {
fg: COLORS_1.COLORS.green5,
border: {
fg: COLORS_1.COLORS.green5
}
}
}
});
var isSubmitting = false;
var submitAnswer = function () { return __awaiter(void 0, void 0, void 0, function () {
var res, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (isSubmitting) {
return [2 /*return*/];
}
submitBtn.setContent(SUBMINTING_TEXT);
submitBtn.screen.render();
isSubmitting = !isSubmitting;
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4 /*yield*/, formValidateAndSubmit()];
case 2:
res = _a.sent();
if (res) {
form.emit(EMIT_EVENTS_1.CUSTOM_EMIT_EVENTS.SUBMIT_ANSWERS, res);
}
return [3 /*break*/, 4];
case 3:
e_1 = _a.sent();
form.screen.log('form submit error', e_1);
return [3 /*break*/, 4];
case 4:
submitBtn.setContent(DEFAULT_TEXT);
submitBtn.screen.render();
isSubmitting = !isSubmitting;
return [2 /*return*/];
}
});
}); };
submitBtn.on('element keypress', function (el, ch, key) {
if (key.name === 'down') {
return false;
}
return true;
});
submitBtn.on('element keypress', function (el, ch, key) { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(key.name === 'return' || key.name === 'space')) return [3 /*break*/, 2];
return [4 /*yield*/, submitAnswer()];
case 1:
_a.sent();
_a.label = 2;
case 2: return [2 /*return*/, true];
}
});
}); });
submitBtn.on('click', function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
submitBtn.emit('keypress', '\r', { name: 'enter' });
return [2 /*return*/];
});
}); });
return submitBtn;
};
var createValidateMessage = function (screen) {
// elements
var message = blessed_1.default.message({
parent: screen,
border: 'line',
height: 'shrink',
width: 'shrink',
top: 'center',
left: 'center',
index: 100,
label: ' {blue-fg}Validate Error{/blue-fg} ',
tags: true,
keys: true,
hidden: true
});
return message;
};
var Form = function (promptQueue) { return __awaiter(void 0, void 0, void 0, function () {
var hooks, form, promoteField, i, prompt, fieldRender, option, hookForCurrentPrompt, message, formValidateAndSubmit, submitBtn, updateFormLayout, firstField;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
hooks = (0, hooks_1.getHooks)();
form = blessed_1.default.form({
keys: true,
shrink: true,
height: '100%-2',
width: '100%',
top: 2,
scrollable: true,
alwaysScroll: true
});
promoteField = [];
i = 0;
_a.label = 1;
case 1:
if (!(i < promptQueue.length)) return [3 /*break*/, 6];
prompt = promptQueue[i];
fieldRender = void 0;
option = {
top: 4 * i,
height: 0
};
hookForCurrentPrompt = hooks.promptQuestion.get(prompt.name);
if (!hookForCurrentPrompt) return [3 /*break*/, 3];
form.submit();
return [4 /*yield*/, hookForCurrentPrompt.call(prompt, form.submission)];
case 2:
_a.sent();
prompt = promptQueue[i];
_a.label = 3;
case 3:
switch (prompt.type) {
case 'confirm':
fieldRender = new ConfirmComponent_1.ConfirmComponent(form, prompt, option, hookForCurrentPrompt);
break;
case 'checkbox':
fieldRender = new CheckboxComponent_1.CheckboxComponent(form, prompt, option, hookForCurrentPrompt);
break;
case 'list':
fieldRender = new ListComponent_1.ListComponent(form, prompt, option, hookForCurrentPrompt);
break;
case 'autocomplete':
fieldRender = new AutoCompleteComponent_1.AutoCompleteComponent(form, prompt, option, hookForCurrentPrompt);
break;
default:
fieldRender = new InputComponent_1.InputComponent(form, prompt, option, hookForCurrentPrompt);
}
return [4 /*yield*/, fieldRender.initState()];
case 4:
_a.sent();
promoteField.push(fieldRender);
_a.label = 5;
case 5:
i++;
return [3 /*break*/, 1];
case 6:
message = createValidateMessage(form.screen);
formValidateAndSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
var isValidate, failedFields, result, index, fieldName, e_2;
var _a;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
form.submit();
isValidate = true;
failedFields = [];
result = {};
index = 0;
_b.label = 1;
case 1:
if (!(index < promoteField.length)) return [3 /*break*/, 7];
_b.label = 2;
case 2:
_b.trys.push([2, 5, , 6]);
if (!promoteField[index].isActived) return [3 /*break*/, 4];
return [4 /*yield*/, promoteField[index].validateResult()];
case 3:
_b.sent();
if (promoteField[index].isValidate !== true) {
isValidate = false;
failedFields.push(promoteField[index].label.getContent());
return [3 /*break*/, 6];
}
fieldName = (_a = promoteField[index].prompt) === null || _a === void 0 ? void 0 : _a.name;
if (fieldName) {
result[fieldName] = form.submission[fieldName];
}
_b.label = 4;
case 4: return [3 /*break*/, 6];
case 5:
e_2 = _b.sent();
form.screen.log('submit vaildate error', e_2);
isValidate = false;
return [3 /*break*/, 6];
case 6:
index++;
return [3 /*break*/, 1];
case 7:
if (isValidate) {
return [2 /*return*/, result];
}
else {
message.once('element keypress', function () {
form.focus();
message.hide();
return false;
});
message.focus();
message.error("please fix following fields: \n".concat(failedFields.join('\n'), " \n \n press any button to continue"), -1, function () { });
return [2 /*return*/, false];
}
return [2 /*return*/];
}
});
}); };
submitBtn = createSubmit(form, formValidateAndSubmit);
updateFormLayout = function () { return __awaiter(void 0, void 0, void 0, function () {
var top, index, pro, layout;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
form.submit();
top = 0;
index = 0;
_a.label = 1;
case 1:
if (!(index < promoteField.length)) return [3 /*break*/, 5];
pro = promoteField[index];
return [4 /*yield*/, pro.invokeHooks()];
case 2:
_a.sent();
return [4 /*yield*/, pro.when()];
case 3:
_a.sent();
pro.updateLayout({
top: top,
height: 0
});
layout = pro.getLayout();
top = layout.top + (layout === null || layout === void 0 ? void 0 : layout.height);
_a.label = 4;
case 4:
index++;
return [3 /*break*/, 1];
case 5:
submitBtn.top = top;
return [2 /*return*/];
}
});
}); };
firstField = promoteField[0].getFieldComponent();
if (firstField) {
firstField.on('element keypress', function (el, ch, key) {
if (key.name === 'up') {
return false;
}
});
}
return [4 /*yield*/, updateFormLayout()];
case 7:
_a.sent();
form.on(EMIT_EVENTS_1.CUSTOM_EMIT_EVENTS.UPDATE_LAYOUT, function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, updateFormLayout()];
case 1:
_a.sent();
form.screen.render();
return [2 /*return*/];
}
});
}); });
return [2 /*return*/, { form: form }];
}
});
}); };
exports.Form = Form;
//# sourceMappingURL=form.js.map