@codecovevienna/gittt-cli
Version:
Tracking time with CLI into a git repository
164 lines (163 loc) • 7.56 kB
JavaScript
;
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toFixedLength = exports.appendTicketNumber = exports.findTicketNumberInBranch = exports.findTicketNumberInMessage = exports.parseProjectNameFromGitUrl = exports.MultipieHelper = exports.AuthHelper = exports.ChartHelper = exports.RecordHelper = exports.ValidationHelper = exports.ExportHelper = exports.ImportHelper = exports.QuestionHelper = exports.TimerHelper = exports.ProjectHelper = exports.FileHelper = exports.LogHelper = exports.GitHelper = exports.ConfigHelper = void 0;
const log_1 = require("./log");
const question_1 = require("./question");
var config_1 = require("./config");
Object.defineProperty(exports, "ConfigHelper", { enumerable: true, get: function () { return config_1.ConfigHelper; } });
var git_1 = require("./git");
Object.defineProperty(exports, "GitHelper", { enumerable: true, get: function () { return git_1.GitHelper; } });
var log_2 = require("./log");
Object.defineProperty(exports, "LogHelper", { enumerable: true, get: function () { return log_2.LogHelper; } });
var file_1 = require("./file");
Object.defineProperty(exports, "FileHelper", { enumerable: true, get: function () { return file_1.FileHelper; } });
var project_1 = require("./project");
Object.defineProperty(exports, "ProjectHelper", { enumerable: true, get: function () { return project_1.ProjectHelper; } });
var timer_1 = require("./timer");
Object.defineProperty(exports, "TimerHelper", { enumerable: true, get: function () { return timer_1.TimerHelper; } });
var question_2 = require("./question");
Object.defineProperty(exports, "QuestionHelper", { enumerable: true, get: function () { return question_2.QuestionHelper; } });
var import_1 = require("./import");
Object.defineProperty(exports, "ImportHelper", { enumerable: true, get: function () { return import_1.ImportHelper; } });
var export_1 = require("./export");
Object.defineProperty(exports, "ExportHelper", { enumerable: true, get: function () { return export_1.ExportHelper; } });
var validation_1 = require("./validation");
Object.defineProperty(exports, "ValidationHelper", { enumerable: true, get: function () { return validation_1.ValidationHelper; } });
var record_1 = require("./record");
Object.defineProperty(exports, "RecordHelper", { enumerable: true, get: function () { return record_1.RecordHelper; } });
var chart_1 = require("./chart");
Object.defineProperty(exports, "ChartHelper", { enumerable: true, get: function () { return chart_1.ChartHelper; } });
var auth_1 = require("./auth");
Object.defineProperty(exports, "AuthHelper", { enumerable: true, get: function () { return auth_1.AuthHelper; } });
var multipie_1 = require("./multipie");
Object.defineProperty(exports, "MultipieHelper", { enumerable: true, get: function () { return multipie_1.MultipieHelper; } });
function parseProjectNameFromGitUrl(input) {
const split = input
.match(new RegExp("(\\w+://){0,1}(.+@)*([\\w\\d.]+)(:[\\d]*){0,1}/*(.*).git"));
if (!split || split.length !== 6) {
throw new Error("Unable to get project information from repo URL");
}
const [,
/*schema*/ ,
/*user*/ , host, port, name] = split;
const nameSplit = name.split("/");
let parsedName;
if (nameSplit.length > 1) {
// Assuming namespace/project-name
parsedName = name.replace(/\//g, "_");
}
else {
// No slash found, using raw name
parsedName = name;
}
return {
meta: {
host,
port: parseInt(port.replace(":", ""), 10),
raw: input,
},
name: parsedName,
records: [],
};
}
exports.parseProjectNameFromGitUrl = parseProjectNameFromGitUrl;
function executeRegExp(regex, input) {
const match = regex.exec(input);
if (!match) {
return undefined;
}
// Return index 1, which contains first match group instead of whole match
return match[1];
}
/**
* Extracts ticket number from commit message
*
* The commit message has to look something like this: Implemented awesome feature (#1337)
* Which would return 1337
*
* White spaces between the # an the ticket number are supported, but # is mandatory
* e.g. Implemented awesome feature (# 1337)
*
* @param {string} branch
* @returns {string} ticket number
*/
function findTicketNumberInMessage(msg) {
return executeRegExp(new RegExp(/#[ ]*([0-9]+)/), msg);
}
exports.findTicketNumberInMessage = findTicketNumberInMessage;
/**
* Extracts ticket number from branch
*
* The branch has to look something like this: 1337-awesome-feature
* Which would return 1337
*
* @param {string} branch
* @returns {string} ticket number
*/
function findTicketNumberInBranch(branch) {
return executeRegExp(new RegExp(/(^[0-9]+)-.*/), branch);
}
exports.findTicketNumberInBranch = findTicketNumberInBranch;
function appendTicketNumber(initialMessage, branchName) {
return __awaiter(this, void 0, void 0, function* () {
let commitMessage = initialMessage;
const ticketNumberMsg = findTicketNumberInMessage(initialMessage);
let ticketNumberBranch = undefined;
if (branchName) {
ticketNumberBranch = findTicketNumberInBranch(branchName);
}
if (ticketNumberMsg && ticketNumberBranch) {
log_1.LogHelper.debug(`Found ticket number in branch and commit message (message: ${ticketNumberMsg}, branch: ${ticketNumberBranch})`);
log_1.LogHelper.debug(`Favor ticket number "${ticketNumberMsg}" in message and append nothing)`);
}
else if (!ticketNumberMsg && ticketNumberBranch) {
log_1.LogHelper.debug(`Found ticket number only in branch (branch: ${ticketNumberBranch})`);
const confirm = yield question_1.QuestionHelper.confirmTicketNumber(ticketNumberBranch);
if (confirm) {
commitMessage = `${commitMessage} [#${ticketNumberBranch}]`;
}
}
return commitMessage;
});
}
exports.appendTicketNumber = appendTicketNumber;
/**
* Truncates and extends a given string to a given length
*
* @param text which should be return to a fixed length
* @param length of the string
* @param dots how many '.' should be added to the end of the string when text length is longer than length
* @returns fixed length string
*/
function toFixedLength(text, length, dots = 3) {
if (length < 0) {
length = 0;
}
if (dots < 0) {
dots = 0;
}
if (dots > length) {
return '.'.repeat(length);
}
if (text) {
if (text.length > length) {
return `${text.slice(0, length - dots)}` + '.'.repeat(dots);
}
else {
return `${text}` + ' '.repeat(length - text.length);
}
}
else {
return ' '.repeat(length);
}
}
exports.toFixedLength = toFixedLength;