antv-l7/node_modules/conventional-changelog-core/index.js

79 lines
2.6 KiB
JavaScript

'use strict'
const gitRawCommits = require('git-raw-commits')
const conventionalCommitsParser = require('conventional-commits-parser')
const conventionalChangelogWriter = require('conventional-changelog-writer')
const stream = require('stream')
const through = require('through2')
const mergeConfig = require('./lib/merge-config')
function conventionalChangelog (options, context, gitRawCommitsOpts, parserOpts, writerOpts) {
writerOpts = writerOpts || {}
var readable = new stream.Readable({
objectMode: writerOpts.includeDetails
})
readable._read = function () {}
mergeConfig(options, context, gitRawCommitsOpts, parserOpts, writerOpts)
.then(function (data) {
options = data.options
context = data.context
gitRawCommitsOpts = data.gitRawCommitsOpts
parserOpts = data.parserOpts
writerOpts = data.writerOpts
gitRawCommits(gitRawCommitsOpts)
.on('error', function (err) {
err.message = 'Error in git-raw-commits: ' + err.message
setImmediate(readable.emit.bind(readable), 'error', err)
})
.pipe(conventionalCommitsParser(parserOpts))
.on('error', function (err) {
err.message = 'Error in conventional-commits-parser: ' + err.message
setImmediate(readable.emit.bind(readable), 'error', err)
})
// it would be better if `gitRawCommits` could spit out better formatted data
// so we don't need to transform here
.pipe(through.obj(function (chunk, enc, cb) {
try {
options.transform.call(this, chunk, cb)
} catch (err) {
cb(err)
}
}))
.on('error', function (err) {
err.message = 'Error in options.transform: ' + err.message
setImmediate(readable.emit.bind(readable), 'error', err)
})
.pipe(conventionalChangelogWriter(context, writerOpts))
.on('error', function (err) {
err.message = 'Error in conventional-changelog-writer: ' + err.message
setImmediate(readable.emit.bind(readable), 'error', err)
})
.pipe(through({
objectMode: writerOpts.includeDetails
}, function (chunk, enc, cb) {
try {
readable.push(chunk)
} catch (err) {
setImmediate(function () {
throw err
})
}
cb()
}, function (cb) {
readable.push(null)
cb()
}))
})
.catch(function (err) {
setImmediate(readable.emit.bind(readable), 'error', err)
})
return readable
}
module.exports = conventionalChangelog