@pagopa/danger-plugin
Version:
Shared rules for DangerJS, used in the PagoPA projects
55 lines (54 loc) • 3.24 kB
JavaScript
;
/**
* Implement methods for working with the title of a ticket / story
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.composeTitle = exports.splitTitle = exports.cleanTitle = exports.getGenericTicketFromTitle = exports.getJiraIdFromTitle = void 0;
const function_1 = require("fp-ts/lib/function");
const O = __importStar(require("fp-ts/lib/Option"));
const Identity_1 = require("fp-ts/lib/Identity");
const Apply_1 = require("fp-ts/lib/Apply");
const RA = __importStar(require("fp-ts/ReadonlyArray"));
const TE = __importStar(require("fp-ts/TaskEither"));
const types_1 = require("../types");
const jira_1 = require("../jira");
const validator_1 = require("./validator");
const jiraRegex = /\[([A-Z0-9]+-\d+(,[A-Z0-9]+-\d+)*)]/;
const titleSplitter = new RegExp(/(\[.*]\s*)(.+)/g);
const cleanChangelogRegex = /^(fix(\(.+\))?!?: |feat(\(.+\))?!?: |chore(\(.+\))?!?: )?(.*)$/;
const getJiraIdFromTitle = (title) => (0, function_1.pipe)(title.match(jiraRegex), O.fromNullable, O.chainNullableK((el) => el[1]), O.map((el) => el.split(",")));
exports.getJiraIdFromTitle = getJiraIdFromTitle;
const getGenericTicketFromTitle = (title) => (0, function_1.pipe)(title, exports.getJiraIdFromTitle, TE.fromOption(() => new Error("Jira ID not found in PR title. Please use the format [JIRA-ID]")), TE.chain(jira_1.getJiraIssues), TE.map(RA.map(types_1.fromJiraToGenericTicket)));
exports.getGenericTicketFromTitle = getGenericTicketFromTitle;
const cleanTitle = (title) => (0, function_1.pipe)(validator_1.popFromRegex, (0, Identity_1.ap)(title), (0, Identity_1.ap)(cleanChangelogRegex), O.getOrElse(() => title));
exports.cleanTitle = cleanTitle;
const splitTitle = (title) => (0, function_1.pipe)(title, titleSplitter.exec, O.fromNullable, O.chain((regs) => (0, Apply_1.sequenceS)(O.Apply)({
taskId: (0, function_1.pipe)(regs, RA.lookup(1)),
title: (0, function_1.pipe)(regs, RA.lookup(2), O.map((s) => s.charAt(0).toUpperCase() + s.slice(1))),
})));
exports.splitTitle = splitTitle;
const composeTitle = (title) => (0, function_1.pipe)(title, exports.cleanTitle, exports.splitTitle, O.fold(() => title, (s) => `${s.taskId}${s.title}`));
exports.composeTitle = composeTitle;