parse-git-commit
v0.1.3
Published
An extensible parser for a single commit message that follows Conventional Commits v1 specification
Downloads
33
Readme
parse-git-commit
An extensible parser for a single commit message that follows Conventional Commits v1 specification
You might also be interested in hela or in the other related projects.
Quality Assurance :100:
If you have any how-to kind of questions, please read Code of Conduct and join the chat rooms or open an issue.
You may also read the Contributing Guide. There, beside "How to contribute?", we describe everything stated by the badges.
Table of Contents
(TOC generated by verb using markdown-toc)
Install
This project requires Node.js v8 or above. Install it using yarn v1 or above / npm v5 or above.
$ yarn add parse-git-commit
API
Review carefully the provided examples and the working tests.
const parseGitCommit = require('parse-git-commit');
const commitMsg1 = `feat(ng-list): Allow custom separator
bla bla bla
BREAKING CHANGE: some breaking change.
Thanks @foobar
`;
const commit = parseGitCommit(commitMsg1);
console.log(commit);
// => { type: 'feat',
// scope: 'ng-list',
// subject: 'Allow custom separator',
// header: 'feat(ng-list): Allow custom separator',
// body: 'bla bla bla',
// footer: 'BREAKING CHANGE: some breaking change.\nThanks @stevemao' }
It is also extensible if you pass function
as second argument, so you can add more
properties to the end object.
For example adding increment
and mentions
properties like following. Notice that
the increment
property here is "major" because it detects "BREAKING CHANGE:" somewhere
in the commit.
That's cool and can be combined with the semver's .inc
method like semver.inc('1.1.0', commit.increment)
const commit = parseGitCommit(commitMsg1, (commit) => {
const withIncrement = incrementMapper(commit);
const withMentions = mentionsMapper(commit);
return Object.assign({}, commit, withIncrement, withMentions);
});
console.log(commit);
// => { type: 'feat',
// scope: 'ng-list',
// subject: 'Allow custom separator',
// header: 'feat(ng-list): Allow custom separator',
// body: 'bla bla bla',
// footer: 'BREAKING CHANGE: some breaking change.\nThanks @stevemao, @foobar',
// increment: 'major',
// isBreaking: true,
// mentions: ['stevemao', 'foobar'] }
detects if commit is patch, minor or major type
function incrementMapper (commit) {
const isBreaking = isBreakingChange(commit);
let increment = null;
if (/fix|bugfix|patch/.test(commit.type)) {
increment = 'patch';
}
if (/feat|feature|minor/.test(commit.type)) {
increment = 'minor';
}
if (/break|breaking|major/.test(commit.type) || isBreaking) {
increment = 'major';
}
return { increment, isBreaking };
}
function isBreakingChange ({ subject, body, footer }) {
const re = 'BREAKING CHANGE:';
return subject.includes(re) || body.includes(re) || footer.includes(re);
}
Collects all mentions from subject
, body
and footer
into one single array that will be added to the end "commit" object
const collectMentions = require('collect-mentions');
function mentionsMapper ({ subject, body, footer }) {
const mentions = []
.concat(collectMentions(subject))
.concat(collectMentions(body))
.concat(collectMentions(footer));
return { mentions };
}
Related Projects
Some of these projects are used here or were inspiration for this one, others are just related. So, thanks for your existance!
- dush: Microscopic & functional event emitter in ~350 bytes, extensible through plugins | homepage
- execa: A better
child_process
| homepage - hela: Powerful & flexible task runner framework in 80 lines, based on execa… more | homepage
- mri: Quickly scan for CLI flags and arguments | homepage
- p-map-series: Map over promises serially | homepage
Contributing
Please read the Contributing Guide and Code of Conduct documents for advices.
For bugs reports and feature requests, please create an issue or join us at our Flock chat rooms.
Contributors
Thanks to the hard work of these wonderful people this project is alive and it also follows the all-contributors specification.
Pull requests, stars and all kind of contributions are always welcome.
Users
You can see who uses parse-git-commit
in the USERS.md file. Please feel free adding this file if it not exists.
If you or your organization are using this project, consider adding yourself to the list of users. Thank You!
License
Copyright (c) 2017-present, Charlike Mike Reagent <[email protected]>
.
Released under the Apache-2.0 License.
This file was generated by verb-generate-readme, v0.6.0, on November 14, 2017.
Project scaffolded and managed with hela.