UNPKG

4.31 kBJavaScriptView Raw
1require('lazy-ass');
2var check = require('check-more-types');
3
4var log = console.log.bind(console);
5var chalk = require('chalk');
6var pkg = require('../package.json');
7var utils = require('./utils');
8var _ = require('lodash');
9
10function Report(options) {
11 // TODO validate options
12 la(check.object(options), 'missing options');
13
14 this.options = options;
15 this.ids = [];
16 this.comments = [];
17 this.allTags = [];
18}
19
20Report.prototype.tagForCommit = function tagForCommit(sha) {
21 var report = this;
22 return _.find(report.allTags, 'sha', sha);
23};
24
25Report.prototype.print = function print(opts) {
26 opts = opts || {};
27 var report = this;
28 log('Changelog for module', chalk.underline(report.options.name),
29 'repo', chalk.underline(report.options.user + '/' + report.options.repo),
30 'from', report.options.from, 'to', report.options.to);
31
32 la(report.ids.length === report.comments.length,
33 'mismatch in ids vs comments', report);
34
35 report.ids.forEach(function (id, k) {
36 var comment = report.comments[k] || '';
37 if (!opts.details) {
38 comment = utils.firstLine(comment);
39 }
40
41 var ownsTag = report.tagForCommit(id);
42 if (ownsTag) {
43 log('\n' + chalk.bold.underline(ownsTag.name));
44 }
45
46 log(' ' + chalk.bold(utils.shortenSha(id)) + ': ' + comment);
47 });
48
49 log('\nReport generated by %s %s', pkg.name, pkg.homepage);
50};
51
52module.exports = Report;
53
54if (!module.parent) {
55 (function sampleReport() {
56 var report = new Report({
57 user: 'bahmutov',
58 repo: 'next-update',
59 name: 'next-update',
60 from: '0.8.0',
61 to: '0.8.3'
62 });
63 report.ids = [
64 '89d437c4fe1178f120511ef43d6f6440956ba559',
65 '2845b1bd6a8d32c38666ae98e40a16288711d56e',
66 '3d2b1fa3523c0be35ecfb30d4c81407fd4ce30a6',
67 'a4eb79977600fc5d001617449a1874168b38d6c3'
68 ];
69 report.comments = [
70 'Printing allowed type, fixes #59',
71 'filtering modules by type',
72 'Added CLI option --type to only check modules like prod,dev or peer. fixes #56',
73 'bump'
74 ];
75 report.allTags = [
76 { name: '0.0.12', sha: 'a343f9062999ae11418b2e1ee86d5f1776873a50' },
77 { name: '0.0.11', sha: '8b3141eeec82ab1c9bb1d0afd2814ab90736f295' },
78 { name: '0.0.10', sha: '839242c49ee1a4ede708937e8674f82c289a6860' },
79 { name: '0.0.9', sha: '53056481cca85bb94bc8e0c242d2ed8990062ed5' },
80 { name: '0.0.8', sha: 'a2cdf4406d0b5f412f4f68149671888c148d2dd2' },
81 { name: '0.0.7', sha: 'd87671041bb1010f842b7defc931210416b82ac2' },
82 { name: '0.0.6', sha: 'fede159c507d160ba548593097fa32cc2320f327' },
83 { name: '0.0.5', sha: '37d7d76ec3bcef6562ff7083c6c052d98f1435e3' },
84 { name: '0.0.4', sha: 'ebbd287cb3fb611430d8f2e6fcc299361d0ede5f' },
85 { name: '0.0.3', sha: '2c21af22ef1deda357834875504fdb3dff9245e2' },
86 { name: 'delete', sha: 'd5b122c1194703e8cea06630e7a008dd26b1c122' },
87 { name: '0.8.3', sha: '89d437c4fe1178f120511ef43d6f6440956ba559' },
88 { name: '0.8.2', sha: '3d2b1fa3523c0be35ecfb30d4c81407fd4ce30a6' },
89 { name: '0.8.1', sha: 'a4eb79977600fc5d001617449a1874168b38d6c3' },
90 { name: '0.8.0', sha: '627250039b89fba678f57f428ee9151c370d4dad' },
91 { name: '0.7.8', sha: 'be0a3e47ec56ec71feeae0b67437449d5b4481e0' },
92 { name: '0.7.7', sha: '43deb0f32a679f90d8b976555c99761e3dfea636' },
93 { name: '0.7.6', sha: 'a9086c59481b1e8ed643c4a1bd4caef63bce8908' },
94 { name: '0.7.5', sha: '8cb319afeb76288d1648ff0c09a43495bd80d401' },
95 { name: '0.7.4', sha: '40a0c115e9cd963d77b12a54dd576d15657e8f41' },
96 { name: '0.7.3', sha: 'fa4021a49f2a0810f3ee581f61cde5c18b3a1b64' },
97 { name: '0.7.2', sha: '9c2e697131d8e132b99b1f6364ecfe115c186a04' },
98 { name: '0.7.1', sha: '9253c0ee8b4bd37c528cafdff6be1c3696cd4fff' },
99 { name: '0.7.0', sha: '8f397568ad763803941c4d9d4587ea1354fdd6e4' },
100 { name: '0.6.0', sha: 'cd5fccfeb0baf9b490736022ff69fac743be3b4e' },
101 { name: '0.5.4', sha: '7dd8048e69fe33d2cdbbc1b214dd907b5cb52f19' },
102 { name: '0.5.3', sha: 'f19883a9a29d32649c9b6da7ed2ecfcfcdf5cbfc' },
103 { name: '0.5.2', sha: 'c0bdb2eefac5cc30ac69c744231d4c95c6f15f4b' },
104 { name: '0.5.1', sha: 'd29ebadbd38be26917a79f251f77f386dae4de7a' },
105 { name: '0.5.0', sha: '82747f3eff789b5ea8fade040735b2c11b116eb8' }
106 ];
107 report.print();
108 }());
109}