issue-parser
Parser for Github, GitLab and Bitbucket issues actions, references and mentions
The parser can identify:
Install
$ npm install --save issue-parser
Usage
GitHub format
const issueParser = require('issue-parser');
const parse = issueParser('github');
parse('Issue description, ref user/package#1, Fix #2, Duplicate of #3 /cc @user');
GitLab format
const issueParser = require('issue-parser');
const parse = issueParser('gitlab');
issueParser('Issue description, ref group/user/package#1, !2, implement #3, /duplicate #4 /cc @user');
Bitbucket format
const issueParser = require('issue-parser');
const parse = issueParser('bitbucket');
issueParser('Issue description, ref user/package#1, fixing #2. /cc @user');
Custom format
const issueParser = require('issue-parser');
const parse = issueParser({referenceActions: ['complete'], issuePrefixes: ['🐛']});
issueParser('Issue description, related to user/package🐛1, Complete 🐛2');
Features
Parse references
#1
{refs: [{raw: '#1', slug: undefined, prefix: '#', issue: '1'}]}
Parse repository slug
owner/repo#1
{refs: [{raw: 'owner/repo#1', slug: 'owner/repo', prefix: '#', issue: '1'}]}
Parse closing keywords
Fix #1
{actions: [{raw: 'Fix #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}]}
Parse duplicate keywords
Duplicate of #1
{duplicates: [{raw: 'Duplicate of #1', action: 'Duplicate of', slug: undefined, prefix: '#', issue: '1'}]}
Parse user mentions
@user
{mentions: [{raw: '@user', prefix: '@', user: 'user'}]}
Parse references with full issue URL
https://github.com/owner/repo/pull/1
Fix https://github.com/owner/repo/issues/2
{
refs: [{raw: 'https://github.com/owner/repo/pull/1', slug: 'owner/repo', prefix: undefined, issue: '1'},]
actions: [
{raw: 'Fix https://github.com/owner/repo/issues/2', action: 'Fix', slug: 'owner/repo', prefix: undefined, issue: '2'}
]
}
Ignore keywords case
FIX #1
{actions: [{raw: 'FIX #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}]}
Ignore references in back-tick quotes
Fix #1 `Fix #2` @user1 `@user2`
{
actions: [{raw: 'Fix #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}],
mentions: [{raw: '@user1', prefix: '@', user: 'user1'}]
}
Include references in escaped back-tick quotes
\`Fix #1\` \`@user\`
{
actions: [{raw: 'Fix #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}],
mentions: [{raw: '@user1', prefix: '@', user: 'user1'}]
}
Ignore references in fenced blocks
Fix #1
```js
console.log('Fix #2');
```
@user1
```js
console.log('@user1');
```
{
actions: [{raw: 'Fix #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}],
mentions: [{raw: '@user1', prefix: '@', user: 'user1'}]
}
Include references in escaped fenced blocks
\`\`\`
Fix #1
\`\`\`
\`\`\`
@user
\`\`\`
{
actions: [{raw: 'Fix #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}],
mentions: [{raw: '@user', prefix: '@', user: 'user'}]
}
Ignore references in <code> tags
Fix #1
<code>Fix #2</code>
<code><code>Fix #3</code></code>
@user1
<code>@user2</code>
{
actions: [{raw: 'Fix #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}],
mentions: [{raw: '@user1', prefix: '@', user: 'user1'}]
}
Include references in escaped <code> tags
`<code>`Fix #1`</code>`
`<code>`@user`</code>`
{
actions: [{raw: 'Fix #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}],
mentions: [{raw: '@user', prefix: '@', user: 'user'}]
}
Ignore malformed references
Fix #1 Fix #2a Fix a#3
{actions: [{raw: 'Fix #1', action: 'Fix', slug: undefined, prefix: '#', issue: '1'}]}
API
issueParser([options], [overrides]) => parse
Create a parser.
options
Type: Object
String
Parser options. Can be github
, gitlab
or bitbucket
for predefined options, or an object for custom options.
referenceActions
Type: Array<String>
String
Default: ['close', 'closes', 'closed', 'closing', 'fix', 'fixes', 'fixed', 'fixing', 'resolve', 'resolves', 'resolved', 'resolving', 'implement', 'implements', 'implemented', 'implementing']
List of action keywords used to close issues and pull requests.
duplicateActions
Type: Array<String>
String
Default: ['Duplicate of', '/duplicate']
List of keywords used to identify duplicate issues and pull requests.
mentionsPrefixes
Type: Array<String>
String
Default: ['@']
List of keywords used to identify user mentions.
issuePrefixes
Type: Array<String>
String
Default: ['#', 'gh-']
List of keywords used to identify issues and pull requests.
hosts
Type: Array<String>
String
Default: ['https://github.com', 'https://gitlab.com']
List of base URL used to identify issues and pull requests with full URL.
issueURLSegments
Type: Array<String>
String
Default: ['issues', 'pull', 'merge_requests']
List of URL segment used to identify issues and pull requests with full URL.
overrides
Type: Object
Option overrides. Useful when using predefined options
(such as github
, gitlab
or bitbucket
). The overrides
object can define the same properties as options
.
For example, the following will use all the github
predefined options but with a different hosts
option:
const issueParser = require('issue-parser');
const parse = issueParser('github', {hosts: ['https://custom-url.com']});
parse(text) => Result
Parse an issue description and returns a Result object.
text
Type: String
Issue text to parse.
Result
actions
Type: Array<Object>
List of issues and pull requests closed.
Each action has the following properties:
Name | Type | Description |
---|
raw | String | The raw value parsed, for example Fix #1 . |
action | String | The keyword used to identify the action, capitalized. |
slug | String | The repository owner and name, for issue referred as <owner>/<repo>#<issue number> . |
prefix | String | The prefix used to identify the issue. |
issue | String | The issue number. |
duplicates
Type: Array<Object>
List of issues and pull requests marked as duplicate.
Each duplicate has the following properties:
Name | Type | Description |
---|
raw | String | The raw value parsed, for example Fix #1 . |
action | String | The keyword used to identify the duplicate, capitalized. |
slug | String | The repository owner and name, for issue referred as <owner>/<repo>#<issue number> . |
prefix | String | The prefix used to identify the issue. |
issue | String | The issue number. |
refs
Type: Array<Object>
List of issues and pull requests referenced, but not closed or marked as duplicates.
Each reference has the following properties:
Name | Type | Description |
---|
raw | String | The raw value parsed, for example Fix #1 . |
slug | String | The repository owner and name, for issue referred as <owner>/<repo>#<issue number> . |
prefix | String | The prefix used to identify the issue. |
issue | String | The issue number. |
mentions
Type: Array<Object>
List of users mentioned.
Each mention has the following properties:
Name | Type | Description |
---|
raw | String | The raw value parsed, for example Fix #1 . |
prefix | String | The prefix used to identify the mention. |
user | String | The user name |
allRefs
Type: Array<Object>
List of all issues and pull requests closed, marked as duplicate or referenced.
Each reference has the following properties:
Name | Type | Description |
---|
raw | String | The raw value parsed, for example Fix #1 . |
action | String | The keyword used to identify the action or the duplicate, capitalized. |
slug | String | The repository owner and name, for issue referred as <owner>/<repo>#<issue number> . |
prefix | String | The prefix used to identify the issue. |
issue | String | The issue number. |