UNPKG

e1c-repo-tools

Version:

Tools for 1C enterprise repository

147 lines (146 loc) 5.89 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.performOsTask = exports.stopLogUpdate = exports.info = exports.warn = exports.error = exports.success = exports.log = exports.buildLogMessage = exports.startLogUpdate = exports.getLogUpdateStatus = exports.switchLogUpdateOff = exports.switchLogUpdateOn = exports.sleep = void 0; const util_1 = require("util"); const log_update_1 = __importDefault(require("log-update")); const log_symbols_1 = __importDefault(require("log-symbols")); const chalk_1 = __importDefault(require("chalk")); const child_process_1 = __importDefault(require("child_process")); const sleep = (ms) => new Promise((resolve) => { setTimeout(resolve, ms); }); exports.sleep = sleep; const textDecoder = new util_1.TextDecoder(); let logUpdateActive = false; let logUpdateIsOn = false; const switchLogUpdateOn = () => { logUpdateIsOn = true; }; exports.switchLogUpdateOn = switchLogUpdateOn; const switchLogUpdateOff = () => { logUpdateIsOn = false; }; exports.switchLogUpdateOff = switchLogUpdateOff; const logMessagesConfig = { 'Success': { 'prefix': log_symbols_1.default.success, 'style': chalk_1.default.green.bold }, 'Info': { 'prefix': log_symbols_1.default.info, 'style': chalk_1.default.blueBright }, 'Warning': { 'prefix': log_symbols_1.default.warning, 'style': chalk_1.default.yellow }, 'Error': { 'prefix': log_symbols_1.default.error, 'style': chalk_1.default.red }, }; const getLogUpdateStatus = () => logUpdateIsOn; exports.getLogUpdateStatus = getLogUpdateStatus; const startLogUpdate = async (operationTitle) => { logUpdateActive = true; const frames = ['-', '\\', '|', '/']; let i = 0; while (logUpdateActive) { const frame = frames[i = (i + 1) % frames.length]; if (exports.getLogUpdateStatus()) { log_update_1.default(`${operationTitle} ${frame}`); } // eslint-disable-next-line no-await-in-loop await exports.sleep(50); } }; exports.startLogUpdate = startLogUpdate; const buildLogMessage = (operationTitle, messageType, additionalData) => { let addData = additionalData; if (!addData) { if (messageType === 'Success') { addData = 'ok'; } else if (messageType === 'Error') { addData = 'fail'; } } if (addData) { if (messageType === 'Success' || messageType === 'Error') { addData = ` [${logMessagesConfig[messageType].style(addData)}]`; } else { addData = ` ${logMessagesConfig[messageType].style(addData)}`; } } return `${logMessagesConfig[messageType].prefix} ${operationTitle} ${addData}`; }; exports.buildLogMessage = buildLogMessage; const log = (operationTitle, messageType, additionalData) => { log_update_1.default(exports.buildLogMessage(operationTitle, messageType, additionalData)); log_update_1.default.done(); }; exports.log = log; const success = (operationTitle, additionalData) => { log_update_1.default(exports.buildLogMessage(operationTitle, 'Success', additionalData)); log_update_1.default.done(); }; exports.success = success; const error = (operationTitle, additionalData) => { log_update_1.default(exports.buildLogMessage(operationTitle, 'Error', additionalData)); log_update_1.default.done(); }; exports.error = error; const warn = (operationTitle, additionalData) => { log_update_1.default(exports.buildLogMessage(operationTitle, 'Warning', additionalData)); log_update_1.default.done(); }; exports.warn = warn; const info = (operationTitle, additionalData) => { log_update_1.default(exports.buildLogMessage(operationTitle, 'Info', additionalData)); log_update_1.default.done(); }; exports.info = info; const stopLogUpdate = (operationTitle, messageType, additionalData) => { logUpdateActive = false; exports.log(operationTitle, messageType, additionalData); }; exports.stopLogUpdate = stopLogUpdate; const performOsTask = async (command, args, taskTitle, options, // eslint-disable-next-line no-unused-vars onSuccess, onError) => { const osTask = child_process_1.default.spawn(command, args, options); const chunks = []; osTask.stdout.on('data', (data) => { chunks.push(data); }); osTask.stdout.on('end', async () => { if (!logUpdateActive) { return; } let additionalData; const resultString = textDecoder.decode(new Uint8Array(chunks.flatMap((buffer) => [...buffer]))); if (onSuccess) { additionalData = await onSuccess(resultString); } if (additionalData instanceof Error) { exports.stopLogUpdate(taskTitle, 'Error', additionalData.message); throw additionalData; } else { exports.stopLogUpdate(taskTitle, 'Success', additionalData); } }); osTask.stderr.on('data', async (data) => { if (!logUpdateActive) { return; } let additionalData; // git pull print to stderr // TODO: filter stderr output const errorMessage = textDecoder.decode(data); if (!onError) { exports.stopLogUpdate(taskTitle, 'Error', errorMessage); throw Error(errorMessage); } else { additionalData = await onError(errorMessage); if (additionalData) { exports.stopLogUpdate(taskTitle, 'Error', additionalData); } } }); await exports.startLogUpdate(taskTitle); }; exports.performOsTask = performOsTask;