You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.5 KiB
61 lines
1.5 KiB
'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
|
|
}
|
|
}
|
|
|