cz-conventional-changelog-befe
Version:
cz adaptor for baidu BEFE
363 lines (301 loc) • 13.1 kB
JavaScript
;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var wrap = require('word-wrap');
var inquirerStore = require('inquirer-store');
var FileStore = require('inquirer-store/FileStore');
var fuzzy = require('fuzzy');
var autoComplete = require('@moyuyc/inquirer-autocomplete-prompt');
var nps = require('path');
var minimist = require('minimist');
var omit = require('lodash.omit');
var getCommitLintTypes = require('conventional-commit-types-befe');
var osLocale = require('os-locale');
var findUp = require('find-up');
var loadJson = require('load-json-file');
var _require = require('../package'),
name = _require.name;
var getGitRemoteUrl = require('./gitRemoteUrl');
var utils = require('./utils');
var makeSuggest = require('./makeSuggest');
var i = require('./i18n');
var i18n = i.i18n;
var filter = function filter(array) {
return array.filter(function (x) {
return x;
});
};
var args = minimist(process.argv.slice(2), {
boolean: ['read']
});
function removeArgv() {
var flags = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
flags.forEach(function (flag) {
while (true) {
var readIndex = process.argv.findIndex(function (x) {
return x === flag || x.startsWith(flag + '=');
});
if (readIndex >= 0) {
process.argv.splice(readIndex, 1);
} else {
break;
}
}
});
}
removeArgv(['--read', '--retry']);
function catchError(fn) {
return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var _args = arguments;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return fn.apply(this, _args);
case 3:
return _context.abrupt('return', _context.sent);
case 6:
_context.prev = 6;
_context.t0 = _context['catch'](0);
console.error(_context.t0);
case 9:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[0, 6]]);
}));
}
// This can be any kind of SystemJS compatible module.
// We use Commonjs here, but ES6 or AMD would do just
// fine.
module.exports = function () {
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
pkg = _ref2.pkg,
gitRemoteUrl = _ref2.gitRemoteUrl,
_ref2$suggestAdaptors = _ref2.suggestAdaptors,
suggestAdaptors = _ref2$suggestAdaptors === undefined ? require('./suggest-adaptor') : _ref2$suggestAdaptors,
_ref2$userc = _ref2.userc,
userc = _ref2$userc === undefined ? true : _ref2$userc;
return {
prompter: catchError(function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(cz, commit) {
var lang, _getCommitLintTypes, typeKeys, typeObjects, set, typeChoices, config, rcPath, adaptorConfig, enabledSuggest, isEveryDisabled, makeSuggestLocal, type, store, scopeProps, prompt;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
prompt = function prompt() {
return Promise.resolve(inquirerStore(cz.prompt, [{
type: 'auto-complete',
name: 'type',
message: i18n('feat.hint'),
source: function source(answers, input) {
return fuzzy.filter(input || '', typeChoices, {
extract: function extract(el) {
return (el.value || '') + ' ' + el.name;
}
}).map(function (x) {
return x.original;
});
}
}, (0, _extends3.default)({
name: 'scope',
noResultText: null,
message: i18n('scope.hint')
}, scopeProps), {
type: type,
noResultText: null,
suggestOnly: true,
name: 'subject',
source: makeSuggestLocal({ suggestTitle: true }),
validate: function validate(input) {
if (!input) {
return i18n('subject.error');
}
return true;
},
message: i18n('subject.hint')
}, {
type: 'input',
name: 'body',
message: i18n('body.hint')
}, {
type: 'confirm',
default: false,
name: 'hasBreaking',
message: i18n('has-breaking.hint')
}, {
type: 'input',
when: function when(ans) {
return ans.hasBreaking;
},
name: 'breaking',
message: i18n('breaking.change.hint')
// noResultText: null,
// suggestOnly: true,
// source: makeSuggest()
}, {
type: 'confirm',
default: false,
name: 'hasIssues',
message: i18n('has-issues.hint')
}, {
when: function when(ans) {
return ans.hasIssues;
},
type: type,
suggestOnly: true,
// noResultText: null,
name: 'issues',
source: makeSuggestLocal({ always: true }),
message: i18n('issues.hint')
}], {
mode: args['read'] ? 'duplex' : 'write',
store: store
}));
};
makeSuggestLocal = function makeSuggestLocal(options) {
if (!enabledSuggest) {
return null;
}
var suggest = makeSuggest(enabledSuggest, options);
return function (answers, input, rl) {
return suggest(input, rl);
};
};
lang = (osLocale.sync() || '').toLowerCase().trim().startsWith('zh') ? 'zh' : 'en';
pkg.lang = pkg.lang || lang;
i.setLanguage(utils.getLanguage(pkg.lang));
_getCommitLintTypes = getCommitLintTypes(pkg.lang), typeKeys = _getCommitLintTypes.typeKeys, typeObjects = _getCommitLintTypes.typeObjects;
// Convert `Fix` to `fix`
set = new Set();
typeKeys.forEach(function (type) {
set.add(type.toLowerCase());
});
typeKeys = Array.from(set);
typeChoices = utils.rightPadTypes(typeObjects, typeKeys, pkg.lang);
config = pkg.config && pkg.config[name];
if (!(!config && userc)) {
_context2.next = 19;
break;
}
_context2.next = 14;
return findUp('.' + name + 'rc');
case 14:
rcPath = _context2.sent;
if (!rcPath) {
_context2.next = 19;
break;
}
_context2.next = 18;
return loadJson(rcPath);
case 18:
config = _context2.sent;
case 19:
config = Object.assign({ scopeSuggestOnly: false, remoteName: 'origin' }, config);
adaptorConfig = omit(config, ['scopes', 'scopeSuggestOnly', 'remoteName']);
_context2.t0 = gitRemoteUrl;
if (_context2.t0) {
_context2.next = 26;
break;
}
_context2.next = 25;
return getGitRemoteUrl(null, { remoteName: config.remoteName });
case 25:
_context2.t0 = _context2.sent;
case 26:
gitRemoteUrl = _context2.t0;
suggestAdaptors = suggestAdaptors.map(function (Class) {
return new Class(adaptorConfig, pkg, gitRemoteUrl);
});
enabledSuggest = suggestAdaptors.find(function (adaptor) {
return adaptor.isEnabled();
});
isEveryDisabled = suggestAdaptors.every(function (adaptor) {
return !adaptor.options.suggestEnabled;
});
if (enabledSuggest) {
console.log(i18n('succ.suggest-enabled', [enabledSuggest.name, enabledSuggest.namespace ? '(' + enabledSuggest.namespace + ')' : ''].join(' ')));
} else if (!isEveryDisabled) {
console.warn(i18n('warn.suggest-disabled'));
}
console.log(i18n('first.hint'));
type = enabledSuggest ? 'auto-complete' : 'input';
cz.registerPrompt('auto-complete', autoComplete);
store = new FileStore({
storePath: nps.join(__dirname, '../inquirer-cache.json'),
key: utils.getGitRootPath() || pkg && pkg.name
});
scopeProps = { type: 'input' };
if (Array.isArray(config.scopes) && config.scopes.length) {
scopeProps.type = 'auto-complete';
scopeProps.suggestOnly = config.scopeSuggestOnly;
scopeProps.source = function (answers, input) {
return fuzzy.filter(input || '', config.scopes, {
extract: function extract(el) {
return typeof el === 'string' ? el : el.value + (' ' + el.name || '');
}
}).map(function (x) {
return x.original;
});
};
}
prompt().then(function () {
var answers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var maxLineWidth = 100;
var wrapOptions = {
trim: true,
newline: '\n',
indent: '',
width: maxLineWidth
// parentheses are only needed when a scope is present
};var scope = (answers.scope || '').trim();
scope = scope ? '(' + answers.scope.trim() + ')' : '';
// Hard limit this line
var head = ((answers.type || '') + scope + ': ' + (answers.subject || '').trim()).slice(0, maxLineWidth);
// Wrap these lines at 100 characters
var body = wrap(answers.body, wrapOptions);
// Apply breaking change prefix, removing it if already present
var breaking = answers.breaking ? answers.breaking.trim() : '';
breaking = breaking ? 'BREAKING CHANGE: ' + breaking.replace(/^BREAKING CHANGE: /, '') : '';
breaking = wrap(breaking, wrapOptions);
var issues = answers.issues || '';
issues = issues ? wrap(issues, wrapOptions) : '';
var footer = filter([breaking, issues]).join('\n\n');
var message = head;
if (body) {
message += '\n\n' + body;
}
if (footer) {
message += '\n\n' + footer;
}
var transform = enabledSuggest && enabledSuggest.transformCommitMessage.bind(enabledSuggest) || function (m) {
return m;
};
return Promise.resolve(transform(message)).then(function (message) {
typeof commit === 'function' && commit(message, {
args: process.argv.slice(2)
});
});
}).catch(console.error);
case 38:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function (_x3, _x4) {
return _ref3.apply(this, arguments);
};
}())
};
};