UNPKG

@codecovevienna/gittt-cli

Version:

Tracking time with CLI into a git repository

164 lines (163 loc) 7.56 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()); }); }; 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;