12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- "format cjs";
- var wrap = require('word-wrap');
- var map = require('lodash.map');
- var longest = require('longest');
- var rightPad = require('right-pad');
- // This can be any kind of SystemJS compatible module.
- // We use Commonjs here, but ES6 or AMD would do just
- // fine.
- module.exports = function (options) {
- var types = options.types;
- var length = longest(Object.keys(types)).length + 1;
- var choices = map(types, function (type, key) {
- return {
- name: rightPad(key + ':', length) + ' ' + type.description,
- value: key
- };
- });
- return {
- // When a user runs `git cz`, prompter will
- // be executed. We pass you cz, which currently
- // is just an instance of inquirer.js. Using
- // this you can ask questions and get answers.
- //
- // The commit callback should be executed when
- // you're ready to send back a commit template
- // to git.
- //
- // By default, we'll de-indent your commit
- // template and will keep empty lines.
- prompter: function(cz, commit) {
- console.log('\nLine 1 will be cropped at 100 characters. All other lines will be wrapped after 100 characters.\n');
- // Let's ask some questions of the user
- // so that we can populate our commit
- // template.
- //
- // See inquirer.js docs for specifics.
- // You can also opt to use another input
- // collection library if you prefer.
- cz.prompt([
- {
- type: 'list',
- name: 'type',
- message: 'Select the type of change that you\'re committing:',
- choices: choices
- }, {
- type: 'input',
- name: 'scope',
- message: 'Denote the scope of this change ($location, $browser, $compile, etc.):\n'
- }, {
- type: 'input',
- name: 'subject',
- message: 'Write a short, imperative tense description of the change:\n'
- }, {
- type: 'input',
- name: 'body',
- message: 'Provide a longer description of the change:\n'
- }, {
- type: 'input',
- name: 'footer',
- message: 'List any breaking changes or issues closed by this change:\n'
- }
- ]).then(function(answers) {
- 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);
- var footer = wrap(answers.footer, wrapOptions);
- commit(head + '\n\n' + body + '\n\n' + footer);
- });
- }
- };
- };
|