1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- 'use strict'
- const reNomatch = /(?!.*)/
- function join (array, joiner) {
- return array
- .map(function (val) {
- return val.trim()
- })
- .filter(function (val) {
- return val.length
- })
- .join(joiner)
- }
- function getNotesRegex (noteKeywords, notesPattern) {
- if (!noteKeywords) {
- return reNomatch
- }
- const noteKeywordsSelection = join(noteKeywords, '|')
- if (!notesPattern) {
- return new RegExp('^[\\s|*]*(' + noteKeywordsSelection + ')[:\\s]+(.*)', 'i')
- }
- return notesPattern(noteKeywordsSelection)
- }
- function getReferencePartsRegex (issuePrefixes, issuePrefixesCaseSensitive) {
- if (!issuePrefixes) {
- return reNomatch
- }
- const flags = issuePrefixesCaseSensitive ? 'g' : 'gi'
- return new RegExp('(?:.*?)??\\s*([\\w-\\.\\/]*?)??(' + join(issuePrefixes, '|') + ')([\\w-]*\\d+)', flags)
- }
- function getReferencesRegex (referenceActions) {
- if (!referenceActions) {
- // matches everything
- return /()(.+)/gi
- }
- const joinedKeywords = join(referenceActions, '|')
- return new RegExp('(' + joinedKeywords + ')(?:\\s+(.*?))(?=(?:' + joinedKeywords + ')|$)', 'gi')
- }
- module.exports = function (options) {
- options = options || {}
- const reNotes = getNotesRegex(options.noteKeywords, options.notesPattern)
- const reReferenceParts = getReferencePartsRegex(options.issuePrefixes, options.issuePrefixesCaseSensitive)
- const reReferences = getReferencesRegex(options.referenceActions)
- return {
- notes: reNotes,
- referenceParts: reReferenceParts,
- references: reReferences,
- mentions: /@([\w-]+)/g
- }
- }
|