UNPKG

rush-init-project-plugin

Version:

Rush plugin for initialize project in monorepo

340 lines 15.9 kB
"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