UNPKG

@pagopa/danger-plugin

Version:

Shared rules for DangerJS, used in the PagoPA projects

55 lines (54 loc) 3.24 kB
"use strict"; /** * 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;