e1c-repo-tools
Version:
Tools for 1C enterprise repository
147 lines (146 loc) • 5.89 kB
JavaScript
;
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;