Files
gruvbox/node_modules/conventional-recommended-bump/index.js

90 lines
2.2 KiB
JavaScript

'use strict';
var concat = require('concat-stream');
var conventionalCommitsFilter = require('conventional-commits-filter');
var conventionalCommitsParser = require('conventional-commits-parser');
var gitSemverTags = require('git-semver-tags');
var gitRawCommits = require('git-raw-commits');
var objectAssign = require('object-assign');
var VERSIONS = ['major', 'minor', 'patch'];
function conventionalRecommendedBump(options, parserOpts, cb) {
var config;
var noop = function() {};
if (typeof options !== 'object') {
throw new TypeError('options must be an object');
}
if (typeof parserOpts === 'function') {
cb = parserOpts;
} else {
cb = cb || noop;
}
options = objectAssign({
ignoreReverted: true,
warn: function() {}
}, options);
if (options.preset) {
try {
config = require('./presets/' + options.preset);
} catch (err) {
cb(new Error('Preset: "' + options.preset + '" does not exist'));
return;
}
} else {
config = options.config || {};
}
var whatBump = options.whatBump || config.whatBump || noop;
parserOpts = objectAssign({}, config.parserOpts, parserOpts);
parserOpts.warn = parserOpts.warn || options.warn;
gitSemverTags(function(err, tags) {
if (err) {
cb(err);
return;
}
gitRawCommits({
format: '%B%n-hash-%n%H',
from: tags[0] || '',
path: options.path
})
.pipe(conventionalCommitsParser(parserOpts))
.pipe(concat(function(data) {
var commits;
if (options.ignoreReverted) {
commits = conventionalCommitsFilter(data);
} else {
commits = data;
}
if (!commits || !commits.length) {
options.warn('No commits since last release');
}
var result = whatBump(commits);
if (typeof result === 'number') {
result = {
level: result
};
}
if (result && result.level != null) {
result.releaseType = VERSIONS[result.level];
} else if (result == null) {
result = {};
}
cb(null, result);
}));
}, {lernaTags: !!options.lernaPackage, package: options.lernaPackage, tagPrefix: options.tagPrefix});
}
module.exports = conventionalRecommendedBump;