├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bin └── index.js ├── package-lock.json ├── package.json └── release.sh /.gitignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | 10 | pids 11 | logs 12 | results 13 | 14 | npm-debug.log 15 | node_modules 16 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## Change Log 2 | 3 | ### v2.0.3 (2021/07/23 05:57 +00:00) 4 | - [#94](https://github.com/lalitkapoor/github-changes/pull/94) allow using without auth or token (#94) (@lalitkapoor) 5 | - [#100](https://github.com/lalitkapoor/github-changes/pull/100) Bump lodash from 4.17.20 to 4.17.21 (#100) (@dependabot[bot]) 6 | - [#99](https://github.com/lalitkapoor/github-changes/pull/99) Bump json from 9.0.6 to 10.0.0 (#99) (@dependabot[bot]) 7 | 8 | ### v2.0.2 (2021/01/06 06:33 +00:00) 9 | - [#93](https://github.com/lalitkapoor/github-changes/pull/93) validate tags given in --between-tags option (#93) (@TheJavaGuy) 10 | 11 | ### v2.0.1 (2020/12/30 19:27 +00:00) 12 | - [#92](https://github.com/lalitkapoor/github-changes/pull/92) upgrade octokit-rest (#92) (@lalitkapoor) 13 | 14 | ### v2.0.0 (2020/12/29 23:31 +00:00) 15 | - [#72](https://github.com/lalitkapoor/github-changes/pull/72) upgrade semver lib (#72) (@lalitkapoor) 16 | - [#82](https://github.com/lalitkapoor/github-changes/pull/82) Add trailing newline to CHANGELOG (#82) (@khiav223577) 17 | - [#91](https://github.com/lalitkapoor/github-changes/pull/91) Upgrade dependencies (#91) (@lalitkapoor) 18 | 19 | ### v1.1.1 (2017/11/08 05:06 +00:00) 20 | - [#71](https://github.com/lalitkapoor/github-changes/pull/71) Fix Markdown format (#71) (@baopham) 21 | - [#69](https://github.com/lalitkapoor/github-changes/pull/69) Paramaterise Github API timeout (#69) (@samdunne) 22 | 23 | ### v1.1.0 (2017/03/16 21:18 +00:00) 24 | - [#64](https://github.com/lalitkapoor/github-changes/pull/64) Support for squash and merge (@304NotModified, @lalitkapoor) 25 | 26 | ### v1.0.3 (2016/08/19 08:25 +00:00) 27 | - [#55](https://github.com/lalitkapoor/github-changes/pull/55) Update README with correct links! (@PunkChameleon) 28 | - [#59](https://github.com/lalitkapoor/github-changes/pull/59) added --time-zone option (@YuG1224) 29 | 30 | ### v1.0.2 (2016/02/22 00:53 +00:00) 31 | - [#53](https://github.com/lalitkapoor/github-changes/pull/53) added --for-tag option to generate changelog for single tag (@ivpusic) 32 | 33 | ### v1.0.1 (2016/01/12 01:52 +00:00) 34 | - [#52](https://github.com/lalitkapoor/github-changes/pull/52) Update ghauth dependency (@nunorafaelrocha) 35 | 36 | ### v1.0.0 (2015/04/12 14:32 +00:00) 37 | - [#47](https://github.com/lalitkapoor/github-changes/pull/47) Add a Gitter chat badge to README.md (@gitter-badger) 38 | 39 | ### v0.0.16 (2014/11/26 11:15 +00:00) 40 | - [#30](https://github.com/lalitkapoor/github-changes/pull/30) show changes between two tags (@lalitkapoor) 41 | 42 | ### v0.0.14 (2014/11/06 02:45 +00:00) 43 | - [#45](https://github.com/lalitkapoor/github-changes/pull/45) Add option to allow specifying the changelog title (@fixe) 44 | - [#46](https://github.com/lalitkapoor/github-changes/pull/46) Add option to allow specifying the date format (@fixe) 45 | - [#41](https://github.com/lalitkapoor/github-changes/pull/41) Aesthetic fixes (@nylen) 46 | 47 | ### v0.0.13 (2014/10/26 23:25 +00:00) 48 | - [#42](https://github.com/lalitkapoor/github-changes/pull/42) Fetch 100 tags per page (only 1 page for now) (@nylen) 49 | 50 | ### v0.0.12 (2014/09/02 05:37 +00:00) 51 | - [#35](https://github.com/lalitkapoor/github-changes/pull/35) Update README.md with Grunt Plugin Info (@PunkChameleon) 52 | - [#36](https://github.com/lalitkapoor/github-changes/pull/36) PR links point to https://null/... (@lalitkapoor) 53 | 54 | ### v0.0.11 (2014/05/12 19:01 +00:00) 55 | - [#32](https://github.com/lalitkapoor/github-changes/pull/32) support for github enterprise (@lalitkapoor) 56 | 57 | ### v0.0.10 (2014/03/01 06:02 +00:00) 58 | - [#26](https://github.com/lalitkapoor/github-changes/pull/26) handle missing author in pull requests (@lalitkapoor) 59 | 60 | ### v0.0.9 (2014/03/01 04:09 +00:00) 61 | - [#22](https://github.com/lalitkapoor/github-changes/pull/22) show commit message if commit body is empty for --use-commit-body (@lalitkapoor) 62 | - [#23](https://github.com/lalitkapoor/github-changes/pull/23) though tagged correctly commit ordering may vary (@lalitkapoor) 63 | - [#24](https://github.com/lalitkapoor/github-changes/pull/24) sorting commits by date doesn't work for --data pulls (@lalitkapoor) 64 | - [#21](https://github.com/lalitkapoor/github-changes/pull/21) attribution is not always correct for pull requests (@lalitkapoor) 65 | 66 | ### v0.0.8 (2014/02/25 08:05 +00:00) 67 | - [#18](https://github.com/lalitkapoor/github-changes/pull/18) Add a Bitdeli Badge to README (@bitdeli-chef) 68 | - [#15](https://github.com/lalitkapoor/github-changes/pull/15) add option to order versions based on semver instead of the tag date (@lalitkapoor) 69 | 70 | ### v0.0.7 (2014/02/25 06:40 +00:00) 71 | - [#17](https://github.com/lalitkapoor/github-changes/pull/17) use-commit-body only works when only-pulls or only-merges is used (@lalitkapoor) 72 | 73 | ### v0.0.6 (2014/02/25 06:21 +00:00) 74 | - [#13](https://github.com/lalitkapoor/github-changes/pull/13) don't strip down pull request object (@lalitkapoor) 75 | - [#14](https://github.com/lalitkapoor/github-changes/pull/14) flags to improve what merge items to into the changelog (@lalitkapoor) 76 | - [#16](https://github.com/lalitkapoor/github-changes/pull/16) when parsing pull request pr links not generated and attribution incorrect (@lalitkapoor) 77 | 78 | ### v0.0.5 (2014/02/23 10:14 +00:00) 79 | - [#9](https://github.com/lalitkapoor/github-changes/pull/9) don't double space in the default formatter (@lalitkapoor) 80 | 81 | ### v0.0.4 (2014/02/23 08:43 +00:00) 82 | - [#7](https://github.com/lalitkapoor/github-changes/pull/7) use commit date not author date when determining which commits belong to which tags (@lalitkapoor) 83 | 84 | ### v0.0.3 (2014/02/23 08:24 +00:00) 85 | - [#2](https://github.com/lalitkapoor/github-changes/pull/2) Fixed typos. (@Fraser999) 86 | - [#4](https://github.com/lalitkapoor/github-changes/pull/4) consider generating changelog based on commit messages (@lalitkapoor) 87 | 88 | ### v0.0.2 (2014/02/20 06:23 +00:00) 89 | - [#1](https://github.com/lalitkapoor/github-changes/pull/1) error thrown when link header doesn't contain last (@lalitkapoor) -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Lalit Kapoor 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | github-changes [![NPM version](https://badge.fury.io/js/github-changes.png)](http://badge.fury.io/js/github-changes) 2 | ============== 3 | 4 | Generate a changelog based on merged pull requests or commit messages 5 | 6 | [![NPM](https://nodei.co/npm/github-changes.png)](https://nodei.co/npm/github-changes/) 7 | 8 | [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/lalitkapoor/github-changes?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 9 | 10 | ### Installation 11 | 12 | ``` 13 | npm install -g github-changes 14 | ``` 15 | 16 | ``` 17 | Usage: github-changes [options] 18 | 19 | Options: 20 | -o, --owner (required) owner of the Github repository 21 | -r, --repository (required) name of the Github repository 22 | -d, --data (DEPRECATED) use pull requests or commits (choices: pulls, commits) [commits] 23 | -b, --branch name of the default branch [master] 24 | -n, --tag-name tag name for upcoming release [upcoming] 25 | -a, --auth prompt to auth with Github - use this for private repos and higher rate limits 26 | -k, --token need to use this or --auth for private repos and higher rate limits 27 | -f, --file name of the file to output the changelog to [CHANGELOG.md] 28 | -t, --title title to appear in the top of the changelog [Change Log] 29 | -z, --time-zone time zone [UTC] 30 | -m, --date-format date format [(YYYY/MM/DD HH:mm Z)] 31 | -v, --verbose output details 32 | --host alternate host name to use with github enterprise [api.github.com] 33 | --path-prefix path-prefix for use with github enterprise 34 | --between-tags only diff between these two tags, separate by 3 dots ... 35 | --for-tag only get changes for this tag 36 | --issue-body (DEPRECATED) include the body of the issue (--data MUST equal 'pulls') 37 | --no-merges do not include merges 38 | --only-merges only include merges 39 | --only-pulls only include pull requests 40 | --use-commit-body use the commit body of a merge instead of the message - "Merge branch..." 41 | --order-semver use semantic versioning for the ordering instead of the tag date 42 | --reverse-changes reverse the order of changes within a release (show oldest first) 43 | --hide-tag-names hide tag names in changelog 44 | ``` 45 | 46 | ### Example usage 47 | 48 | #### Generate changelog via pull requests 49 | ```bash 50 | github-changes -o lalitkapoor -r github-changes -a --only-pulls --use-commit-body 51 | ``` 52 | 53 | #### Output 54 | ## Change Log 55 | 56 | ### v1.0.3 (2016/08/19 08:25 +00:00) 57 | - [#59](https://github.com/lalitkapoor/github-changes/pull/59) added --time-zone option (@YuG1224) 58 | - [#55](https://github.com/lalitkapoor/github-changes/pull/55) Update README with correct links! (@PunkChameleon) 59 | 60 | ### v1.0.2 (2016/02/22 00:53 +00:00) 61 | - [#53](https://github.com/lalitkapoor/github-changes/pull/53) added --for-tag option to generate changelog for single tag (@ivpusic) 62 | 63 | ### v1.0.1 (2016/01/12 01:52 +00:00) 64 | - [#52](https://github.com/lalitkapoor/github-changes/pull/52) Update ghauth dependency (@nunorafaelrocha) 65 | 66 | ### v1.0.0 (2015/04/12 14:32 +00:00) 67 | - [#47](https://github.com/lalitkapoor/github-changes/pull/47) Add a Gitter chat badge to README.md (@gitter-badger) 68 | 69 | ### v0.0.16 (2014/11/26 11:15 +00:00) 70 | - [#30](https://github.com/lalitkapoor/github-changes/pull/30) show changes between two tags (@lalitkapoor) 71 | 72 | ### v0.0.14 (2014/11/06 02:45 +00:00) 73 | - [#41](https://github.com/lalitkapoor/github-changes/pull/41) Aesthetic fixes (@nylen) 74 | - [#46](https://github.com/lalitkapoor/github-changes/pull/46) Add option to allow specifying the date format (@fixe) 75 | - [#45](https://github.com/lalitkapoor/github-changes/pull/45) Add option to allow specifying the changelog title (@fixe) 76 | 77 | ### v0.0.13 (2014/10/26 23:25 +00:00) 78 | - [#42](https://github.com/lalitkapoor/github-changes/pull/42) Fetch 100 tags per page (only 1 page for now) (@nylen) 79 | 80 | ### v0.0.12 (2014/09/02 05:37 +00:00) 81 | - [#36](https://github.com/lalitkapoor/github-changes/pull/36) PR links point to https://null/... (@lalitkapoor) 82 | - [#35](https://github.com/lalitkapoor/github-changes/pull/35) Update README.md with Grunt Plugin Info (@PunkChameleon) 83 | 84 | ... 85 | 86 | 87 | 88 | #### Generate changelog via commit messages 89 | ```bash 90 | github-changes -o npm -r npm -a 91 | ``` 92 | 93 | #### Output 94 | 95 | ## Change Log 96 | 97 | ### upcoming (2014/02/23 10:02 +00:00) 98 | - [70fd532](https://github.com/npm/npm/commit/70fd532c91335e76bda9366234b53a0498b9901a) fix prune.js test with empty cache (@robertkowalski) 99 | - [6fd6ff7](https://github.com/npm/npm/commit/6fd6ff7e536ea6acd33037b1878d4eca1f931985) Sort dependencies when --save'ing. (@domenic) 100 | - [2ddd060](https://github.com/npm/npm/commit/2ddd06037e9bd58cd95a380a9381ff90bea47f0d) add test, some boyscouting (@robertkowalski) 101 | - [17f07df](https://github.com/npm/npm/commit/17f07df8ad8e594304c2445bf7489cb53346f2c5) Add --save-exact config for --save[-dev|-optional]. (@timoxley) 102 | - [4b51920](https://github.com/npm/npm/commit/4b5192071654e2b312a7678b7586e435be62f473) Prevent creation of node_modules/npm-4503-c (@timoxley) 103 | - [30b6783](https://github.com/npm/npm/commit/30b67836b51b68614c9e87dc476c0961d53ec6d4) doc: update misc/semver.md (@isaacs) 104 | 105 | ### v1.4.4 (2014/02/20 16:04 +00:00) 106 | - [05d2490](https://github.com/npm/npm/commit/05d2490526fa40adc55727e92d4d30bd63aabaad) uid-number@0.0.4 (@isaacs) 107 | - [3850441](https://github.com/npm/npm/commit/3850441fd8c2fd71ebfd8e9986bc5f2e482ab6db) Document the --tag option of npm-publish (@kriskowal) 108 | - [14e650b](https://github.com/npm/npm/commit/14e650bce0bfebba10094c961ac104a61417a5de) alias 't' to 'test' (@isaacs) 109 | - [d50b826](https://github.com/npm/npm/commit/d50b826b9e5884c0f4e1101b90c7206a138a43e7) uid-number@0.0.5 (@isaacs) 110 | - [cd7e4a2](https://github.com/npm/npm/commit/cd7e4a23037f3ae1928bac02332784ffab557be9) v1.4.4 (@isaacs) 111 | 112 | ### v1.4.3 (2014/02/17 04:37 +00:00) 113 | - [3ce6905](https://github.com/npm/npm/commit/3ce6905bf6b0963956d7dbb8a89fc29d379de91c) view: remove arbitrary cache limit (@isaacs) 114 | - [bb6fb4d](https://github.com/npm/npm/commit/bb6fb4d158f175ddeb2956b361f854c273b6bed0) read-installed@1.0.0 (@isaacs) 115 | - [caa7065](https://github.com/npm/npm/commit/caa7065b06ffb55ea3410e5a14ddc80c26844b13) new tests for read-installed (@isaacs) 116 | - [401a642](https://github.com/npm/npm/commit/401a64286aa6665a94d1d2f13604f7014c5fce87) link: do not allow linking unnamed packages (@isaacs) 117 | - [09223de](https://github.com/npm/npm/commit/09223de8778b3e8fb0ecfec82cf6058d2c659518) Forbid deleting important npm dirs (@isaacs) 118 | - [86028e9](https://github.com/npm/npm/commit/86028e9fd8524d5e520ce01ba2ebab5a030103fc) dedupe: respect dependency versions (@rafeca) 119 | - [02d4322](https://github.com/npm/npm/commit/02d4322cd4f67a078a29019d2c4ef591b281132c) Follow redirects on curl|sh installer script (@isaacs) 120 | - [8a26f6f](https://github.com/npm/npm/commit/8a26f6ff7e9769985f74b60eed54e488a4d4a804) Test for repo command (@isaacs) 121 | - [acc4d02](https://github.com/npm/npm/commit/acc4d023c57d07704b20a0955e4bf10ee91bdc83) prune: Added back --production support (@davglass) 122 | - [0a3151c](https://github.com/npm/npm/commit/0a3151c9cbeb50c1c65895685c2eabdc7e2608dc) default to ^ instead of ~ (@mikolalysenko) 123 | - [9ae71de](https://github.com/npm/npm/commit/9ae71de7802132c349c60f1b740a734761fec4a1) npm-registry-client@0.4.4 (@isaacs) 124 | - [46d8768](https://github.com/npm/npm/commit/46d876821d1dd94c050d5ebc86444bed12c56739) "install ./pkg@1.2.3" should install local module (@rlidwka) 125 | - [f469847](https://github.com/npm/npm/commit/f46984787e8bb219cfd1d8394932dca2ed6b3b2c) test: express is not in mocks, use underscore instead (@isaacs) 126 | 127 | ... 128 | 129 | ### Using with Grunt 130 | 131 | If you want to generate a changelog within a grunt workflow, [a grunt plugin] (https://github.com/PunkChameleon/grunt-github-changes) that can be utilized. To install: 132 | 133 | ``` 134 | npm install grunt-github-changes --save-dev 135 | ``` 136 | 137 | For further details and specifics on how to use (and to contribute), see [grunt-github-changes](https://github.com/PunkChameleon/grunt-github-changes). 138 | 139 | ### FAQ 140 | 141 | #### How are squashed pull request matched? 142 | 143 | When a pull request is merged with "Squash and merge", there isn't a merge commit. 144 | By checking the commit message for ` (#123)` etc, we can match the correct pull request. 145 | -------------------------------------------------------------------------------- /bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Overwrite global promise, so GithubApi will use bluebird too. 4 | Promise = require("bluebird"); 5 | 6 | const fs = require('fs'); 7 | const _ = require('lodash'); 8 | const http = require('http'); 9 | const https = require('https'); 10 | const domain = require('domain'); 11 | const moment = require('moment-timezone'); 12 | const parser = require('commander'); 13 | const semver = require('semver'); 14 | const { Octokit } = require("@octokit/rest") 15 | const ghauth = Promise.promisify(require('ghauth')); 16 | 17 | // Increase number of concurrent requests 18 | http.globalAgent.maxSockets = 30; 19 | https.globalAgent.maxSockets = 30; 20 | 21 | // It might be faster to just go through commits on the branch 22 | // instead of iterating over closed issues, look into this later. 23 | // 24 | // Even better yet. I might just be able to do this with git log. 25 | // tags: git log --tags --simplify-by-decoration --format="%ci%n%d" 26 | // prs: git log --grep="Merge pull request #" --format="%s%n%ci%n%b" 27 | 28 | // parse cli options 29 | var opts = parser 30 | .version(require('../package.json').version) 31 | .requiredOption('-o, --owner ', '(required) owner of the Github repository') 32 | .requiredOption('-r, --repository ', '(required) name of the Github repository') 33 | .option('-d, --data [type]', '(DEPRECATED) use pull requests or commits (choices: pulls, commits)', 'commits') 34 | .option('-b, --branch [name]', 'name of the default branch', 'master') 35 | .option('-n, --tag-name [name]', 'tag name for upcoming release', 'upcoming') 36 | .option('-a, --auth', 'prompt to auth with Github - use this for private repos and higher rate limits') 37 | .option('-k, --token [token]', 'need to use this or --auth for private repos and higher rate limits') 38 | .option('-f, --file [name]', 'name of the file to output the changelog to', 'CHANGELOG.md') 39 | .option('-t, --title [title]', 'title to appear in the top of the changelog', 'Change Log') 40 | .option('-z, --time-zone [zone]', 'time zone', 'UTC') 41 | .option('-m, --date-format [format]', 'date format', '(YYYY/MM/DD HH:mm Z)') 42 | .option('-v, --verbose', 'output details') 43 | .option('--host [domain]', 'alternate host name to use with github enterprise', 'api.github.com') 44 | .option('--path-prefix [path]', 'path-prefix for use with github enterprise') 45 | .option('--between-tags [range]', 'only diff between these two tags, separate by 3 dots ...') 46 | .option('--issue-body', '(DEPRECATED) include the body of the issue (--data MUST equal \'pulls\')') 47 | .option('--for-tag [tag]', 'only get changes for this tag') 48 | .option('--no-merges', 'do not include merges') 49 | .option('--only-merges', 'only include merges') 50 | .option('--only-pulls', 'only include pull requests') 51 | .option('--use-commit-body', 'use the commit body of a merge instead of the message - "Merge branch..."') 52 | .option('--order-semver', 'use semantic versioning for the ordering instead of the tag date') 53 | .option('--reverse-changes', 'reverse the order of changes within a release (show oldest first)') 54 | .option('--hide-tag-names', 'hide tag names in changelog') 55 | .option('--timeout [milliseconds]', 'Github API timeout', 10000) 56 | .parse(process.argv); 57 | 58 | if (opts.onlyPulls) opts.merges = true; 59 | 60 | var betweenTags = [null, null]; 61 | var betweenTagsNames = null; 62 | 63 | if (opts.betweenTags) { 64 | if (!opts.betweenTags.length) { 65 | return console.error(`Invalid value for --between-tags. Please specify two tags separated by 3 dots ...`); 66 | } 67 | 68 | betweenTagsNames = opts.betweenTags.split('...'); 69 | if (!betweenTagsNames[0] || !betweenTagsNames[1]) { 70 | return console.error(`Invalid value for --between-tags. Please specify two tags separated by 3 dots ...`); 71 | } 72 | } 73 | 74 | var forTag = opts.forTag; 75 | 76 | var commitsBySha = {}; // populated when calling getAllCommits 77 | var currentDate = moment(); 78 | 79 | var github = null; 80 | 81 | // github auth token 82 | var token = null; 83 | 84 | // ~/.config/changelog.json will store the token 85 | var authOptions = { 86 | clientId : '899aa18ee35dbb76c97c' 87 | , configName : 'changelog' 88 | , scopes : ['user', 'public_repo', 'repo'] 89 | }; 90 | 91 | // TODO: Could probably fetch releases so we don't have to get the commit data 92 | // for the sha of each tag to figure out the date. Could save alot on api 93 | // calls. 94 | var getTags = function(){ 95 | var tagOpts = { 96 | owner: opts.owner 97 | , repo: opts.repository 98 | , per_page: 100 99 | }; 100 | 101 | return github.repos.listTags(tagOpts) 102 | .then(result => result.data) 103 | .then(tagArray => { 104 | // check that the tags asked for exist (--between-tags) 105 | if (betweenTagsNames) { 106 | const tagNames = tagArray.map(e => e.name); 107 | if (!tagNames.includes(betweenTagsNames[0])) { 108 | console.error(`Tag ${betweenTagsNames[0]} was given as a first value of --between-tags but it doesn't exist in repository`); 109 | process.exit(1); 110 | } 111 | if (!tagNames.includes(betweenTagsNames[1])) { 112 | console.error(`Tag ${betweenTagsNames[1]} was given as a second value of --between-tags but it doesn't exist in repository`); 113 | process.exit(1); 114 | } 115 | } 116 | 117 | return tagArray; 118 | }) 119 | .map(function(ref){ 120 | return github.repos.getCommit({ 121 | owner: tagOpts.owner 122 | , repo: tagOpts.repo 123 | , ref: ref.commit.sha 124 | }).then(function({data: commit}){ 125 | opts.verbose && console.log('pulled commit data for tag - ', ref.name); 126 | var tag = { 127 | name: ref.name 128 | , date: moment(commit.commit.committer.date) 129 | }; 130 | 131 | // if --between-tags is specified then reference the appropriate tag 132 | if (betweenTagsNames && (betweenTagsNames.indexOf(tag.name)>-1)) { 133 | betweenTags[betweenTagsNames.indexOf(tag.name)] = tag; 134 | } 135 | 136 | return tag; 137 | }); 138 | }); 139 | }; 140 | 141 | var _getAllPullRequests = function(page = 1) { 142 | return github.pulls.list({ 143 | owner: opts.owner 144 | , repo: opts.repository 145 | , base: opts.branch 146 | , state: 'closed' 147 | , sort: 'updated' 148 | , direction: 'desc' 149 | , per_page: 100 150 | , page: page 151 | // , since: null // TODO: this is an improvement to save API calls 152 | }) 153 | .then(result => { 154 | opts.verbose && console.log('fetched %d pull requests', ((page - 1) * 100) + result.data.length) 155 | 156 | var pulls = result.data.filter(pr => pr.merged_at !== null); 157 | 158 | if (result.headers.link && result.headers.link.indexOf('rel="next"') > 0) { 159 | return _getAllPullRequests(page + 1).then(list => pulls.concat(list)); 160 | } 161 | 162 | return pulls; 163 | }) 164 | ; 165 | }; 166 | 167 | var getPullRequests = function() { 168 | opts.verbose && console.log('fetching pull requests'); 169 | 170 | return _getAllPullRequests().then(pulls => { 171 | opts.verbose && console.log('fetched all pull requests'); 172 | return pulls; 173 | }); 174 | }; 175 | 176 | var _getAllCommits = function(page = 1) { 177 | return github.repos.listCommits({ 178 | owner: opts.owner 179 | , repo: opts.repository 180 | , sha: opts.branch 181 | , per_page: 100 182 | , page: page 183 | }) 184 | .then(result => { 185 | opts.verbose && console.log('fetched %d commits', ((page - 1) * 100) + result.data.length) 186 | 187 | var commits = result.data.slice(); 188 | 189 | result.data.forEach(commit => { 190 | commitsBySha[commit.sha] = commit; 191 | }); 192 | 193 | if (result.headers.link && result.headers.link.indexOf('rel="next"') > 0) { 194 | return _getAllCommits(page + 1).then(list => commits.concat(list)); 195 | } 196 | return commits; 197 | }); 198 | }; 199 | 200 | var getAllCommits = function() { 201 | opts.verbose && console.log('fetching commits'); 202 | 203 | return _getAllCommits().then(commits => { 204 | opts.verbose && console.log('fetched all commits'); 205 | return commits; 206 | }); 207 | }; 208 | 209 | var getData = function() { 210 | if (opts.data === 'commits') return getAllCommits(); 211 | return getPullRequests(); 212 | }; 213 | 214 | var tagger = function(sortedTags, data) { 215 | var date = null; 216 | if (opts.data === 'commits') date = moment(data.commit.committer.date); 217 | else date = moment(data.merged_at); 218 | 219 | var current = null; 220 | for (var i=0, len=sortedTags.length; i < len; i++) { 221 | var tag = sortedTags[i]; 222 | if (tag.date < date) break; 223 | current = tag; 224 | } 225 | if (!current) current = {name: opts.tagName, date: currentDate}; 226 | return current; 227 | }; 228 | 229 | var prFormatter = function(data) { 230 | var currentTagName = ''; 231 | var output = "## " + opts.title + "\n"; 232 | data.forEach(function(pr){ 233 | if (!opts.hideTagNames) { 234 | if (pr.tag === null) { 235 | currentTagName = opts.TagName; 236 | output+= "\n### " + opts.tagName; 237 | output+= "\n"; 238 | } else if (pr.tag.name != currentTagName) { 239 | currentTagName = pr.tag.name; 240 | output+= "\n### " + pr.tag.name 241 | output+= " " + pr.tag.date.tz(opts.timeZone).format(opts.dateFormat); 242 | output+= "\n"; 243 | } 244 | } 245 | 246 | output += "- [#" + pr.number + "](" + pr.html_url + ") " + pr.title 247 | if (pr.user && pr.user.login) output += " (@" + pr.user.login + ")"; 248 | if (opts.issueBody && pr.body && pr.body.trim()) output += "\n\n >" + pr.body.trim().replace(/\n/ig, "\n > ") +"\n"; 249 | 250 | // output += " " + moment(pr.merged_at).utc().format(opts.dateFormat); 251 | output += "\n"; 252 | }); 253 | return output.trim() + "\n"; 254 | }; 255 | 256 | var getCommitsInMerge = function(mergeCommit) { 257 | // direct descendents of the mergeCommit 258 | var directDescendents = {}; 259 | 260 | // store reachable commits 261 | var store1 = {}; 262 | var store2 = {}; 263 | 264 | var currentCommit = mergeCommit; 265 | while (currentCommit && currentCommit.parents && currentCommit.parents.length > 0) { 266 | directDescendents[currentCommit.parents[0].sha] = true; 267 | currentCommit = commitsBySha[currentCommit.parents[0].sha]; 268 | } 269 | 270 | var getAllReachableCommits = function(sha, store) { 271 | if (!commitsBySha[sha]) return; 272 | store[sha]=true; 273 | commitsBySha[sha].parents.forEach(function(parent){ 274 | if (directDescendents[parent.sha]) return; 275 | if (store[parent.sha]) return; // don't revist commits we've explored 276 | return getAllReachableCommits(parent.sha, store); 277 | }) 278 | }; 279 | 280 | var parentShas = _.map(mergeCommit.parents, 'sha'); 281 | var notSha = parentShas.shift(); // value to pass to --not flag in git log 282 | parentShas.forEach(function(sha){ 283 | return getAllReachableCommits(sha, store1); 284 | }); 285 | getAllReachableCommits(notSha, store2); 286 | 287 | return _.difference( 288 | Object.keys(store1) 289 | , Object.keys(store2) 290 | ).map(function(sha){ 291 | return commitsBySha[sha]; 292 | }); 293 | }; 294 | 295 | var commitFormatter = function(data) { 296 | var currentTagName = ''; 297 | var output = "## " + opts.title + "\n"; 298 | data.forEach(function(commit){ 299 | if (betweenTagsNames && commit.tag.date<=betweenTags[0].date) return; 300 | if (betweenTagsNames && betweenTags[1] && commit.tag.date>betweenTags[1].date) return; 301 | if (forTag && commit.tag.name !== forTag) return; 302 | 303 | var isMerge = (commit.parents.length > 1); 304 | var isPull = isMerge && /^Merge pull request #/i.test(commit.commit.message); 305 | var isSquashAndMerge = false; 306 | 307 | // handle checking for a squash & merge 308 | if (!isPull) { 309 | isPull = /\s\(\#\d+\)/i.test(commit.commit.message); //contains ' (#123)'? 310 | if (isPull) { 311 | isMerge = true; 312 | isSquashAndMerge = true; 313 | } 314 | } 315 | 316 | // exits 317 | if ((opts.merges === false) && isMerge) return ''; 318 | if ((opts.onlyMerges) && commit.parents.length < 2) return ''; 319 | if ((opts.onlyPulls) && !isPull) return ''; 320 | 321 | // choose message content 322 | var messages = commit.commit.message.split('\n'); 323 | var message = messages.shift().trim(); 324 | 325 | if (!isSquashAndMerge && opts.useCommitBody && commit.parents.length > 1) { 326 | message = messages.join(' ').trim() || message; 327 | } 328 | 329 | if (!opts.hideTagNames) { 330 | if (commit.tag === null) { 331 | currentTagName = opts.tagName; 332 | output+= "\n### " + opts.tagName; 333 | output+= "\n"; 334 | } else if (commit.tag.name != currentTagName) { 335 | currentTagName = commit.tag.name; 336 | output+= "\n### " + commit.tag.name 337 | output+= " " + commit.tag.date.tz(opts.timeZone).format(opts.dateFormat); 338 | output+= "\n"; 339 | } 340 | } 341 | 342 | // if commit is a merge then find all commits that belong to the merge 343 | // and extract authors out of those. Do this for --only-merges and for 344 | // --only-pulls 345 | var authors = {}; 346 | if (isMerge && (opts.onlyMerges || opts.onlyPulls)) { 347 | getCommitsInMerge(commit).forEach(function(c){ 348 | // ignore the author of a merge commit, they might have reviewed, 349 | // resolved conflicts, and merged, but I don't think this alone 350 | // should result in them being considered one of the authors in 351 | // the pull request 352 | if (c.parents.length > 1) return; 353 | 354 | if (c.author && c.author.login) { 355 | authors[c.author.login] = true; 356 | } 357 | }); 358 | } 359 | authors = Object.keys(authors); 360 | 361 | // if it's a pull request, then the link should be to the pull request 362 | if (isPull) { 363 | var prNumber = null; 364 | var author = null; 365 | var authorName = commit.commit.author && commit.commit.author.name; 366 | 367 | if (isSquashAndMerge) { 368 | prNumber = commit.commit.message.match(/\(#\d+\)/)[0].replace(/\(|\)|#/g,''); 369 | author = (commit.author && commit.author.login); 370 | } else { 371 | prNumber = commit.commit.message.split('#')[1].split(' ')[0]; 372 | author = (commit.commit.message.split(/\#\d+\sfrom\s/)[1]||'').split('/')[0]; 373 | } 374 | 375 | 376 | var host = (opts.host === 'api.github.com') ? 'github.com' : opts.host; 377 | var url = "https://"+host+"/"+opts.owner+"/"+opts.repository+"/pull/"+prNumber; 378 | output += "- [#" + prNumber + "](" + url + ") " + message; 379 | 380 | if (authors.length) { 381 | output += ' (' + authors.map(function(author){return '@' + author}).join(', ') + ')'; 382 | } else if (author) { 383 | output += " (@" + author + ")"; 384 | } else if (authorName) { 385 | output += " (" + authorName + ")"; 386 | } 387 | 388 | } else { //otherwise link to the commit 389 | output += "- [" + commit.sha.substr(0, 7) + "](" + commit.html_url + ") " + message; 390 | 391 | if (authors.length) 392 | output += ' (' + authors.map(function(author){return '@' + author}).join(', ') + ')'; 393 | else if (commit.author && commit.author.login) 394 | output += " (@" + commit.author.login + ")"; 395 | } 396 | 397 | // output += " " + moment(commit.commit.committer.date).utc().format(opts.dateFormat); 398 | output += "\n"; 399 | }); 400 | return output.trim(); 401 | }; 402 | 403 | var formatter = function(data) { 404 | if (opts.data === 'commits') return commitFormatter(data); 405 | return prFormatter(data); 406 | }; 407 | 408 | var getGithubToken = function() { 409 | if (opts.token) return Promise.resolve({token: opts.token}); 410 | if (opts.auth) return ghauth(authOptions); 411 | return Promise.resolve({}); 412 | }; 413 | 414 | var task = function() { 415 | getGithubToken() 416 | .then(function(authData){ 417 | if (authData.token) token = authData.token; 418 | 419 | github = new Octokit({ 420 | version: '3.0.0' 421 | , protocol: 'https' 422 | , pathPrefix: opts.pathPrefix 423 | , host: opts.host 424 | , request: { 425 | timeout: opts.timeout 426 | } 427 | , auth: token 428 | }); 429 | }) 430 | .then(function(){ 431 | return Promise.all([getTags(), getData()]) 432 | }) 433 | .spread(function(tags, data){ 434 | allTags = _.sortBy(tags, 'date').reverse(); 435 | return data; 436 | }) 437 | .map(function(data){ 438 | data.tag = tagger(allTags, data); 439 | data.tagDate = data.tag.date; 440 | return data; 441 | }) 442 | .then(function(data){ 443 | // order by commit date DESC by default / ASC if --reverse-changes given 444 | var compareSign = (opts.reverseChanges) ? -1 : 1; 445 | 446 | // order by tag date then commit date 447 | if (!opts.orderSemver && opts.data === 'commits') { 448 | data = data.sort(function(a,b){ 449 | var tagCompare = (a.tagDate - b.tagDate); 450 | return (tagCompare) ? tagCompare : compareSign * (moment(a.commit.committer.date) - moment(b.commit.committer.date)); 451 | }).reverse(); 452 | return data; 453 | } else if (!opts.orderSemver && opts.data === 'pulls') { 454 | data = data.sort(function(a,b){ 455 | var tagCompare = (a.tagDate - b.tagDate); 456 | return (tagCompare) ? tagCompare : compareSign * (moment(a.merged_at) - moment(b.merged_at)); 457 | }).reverse(); 458 | return data; 459 | } 460 | 461 | // order by semver then commit date 462 | data = data.sort(function(a,b){ 463 | var tagCompare = 0; 464 | if (a.tag.name === b.tag.name) tagCompare = 0; 465 | else if (a.tag.name === opts.tagName) tagCompare = 1; 466 | else if (b.tag.name === opts.tagName) tagCompare -1; 467 | else tagCompare = semver.compare(a.tag.name, b.tag.name); 468 | return (tagCompare) ? tagCompare : compareSign * (moment(a.commit.committer.date) - moment(b.commit.committer.date)); 469 | }).reverse(); 470 | return data; 471 | }) 472 | .then(function(data){ 473 | fs.writeFileSync(opts.file, formatter(data)); 474 | }) 475 | .then(function(){ 476 | process.exit(0); 477 | }) 478 | .catch(function(error){ 479 | console.error('error', error); 480 | console.error('stack', error.stack); 481 | process.exit(1); 482 | }) 483 | ; 484 | }; 485 | 486 | var done = function (error) { 487 | if (!error) process.exit(0); 488 | console.log(error); 489 | console.log(error.stack); 490 | process.exit(1); 491 | }; 492 | 493 | var runner = function () { 494 | var d = domain.create(); 495 | d.on('error', done); 496 | d.run(task); 497 | }; 498 | 499 | runner(); 500 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-changes", 3 | "version": "2.0.3", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "version": "2.0.3", 9 | "license": "MIT", 10 | "dependencies": { 11 | "@octokit/rest": "^18.0.12", 12 | "bluebird": "^3.5.4", 13 | "commander": "^6.2.1", 14 | "ghauth": "^5.0.0", 15 | "lodash": "^4.17.11", 16 | "moment-timezone": "^0.5.23", 17 | "semver": "^6.0.0" 18 | }, 19 | "bin": { 20 | "github-changes": "bin/index.js" 21 | }, 22 | "devDependencies": { 23 | "json": "^10.0.0" 24 | } 25 | }, 26 | "node_modules/@babel/code-frame": { 27 | "version": "7.12.11", 28 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 29 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 30 | "dependencies": { 31 | "@babel/highlight": "^7.10.4" 32 | } 33 | }, 34 | "node_modules/@babel/helper-validator-identifier": { 35 | "version": "7.12.11", 36 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 37 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" 38 | }, 39 | "node_modules/@babel/highlight": { 40 | "version": "7.10.4", 41 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 42 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 43 | "dependencies": { 44 | "@babel/helper-validator-identifier": "^7.10.4", 45 | "chalk": "^2.0.0", 46 | "js-tokens": "^4.0.0" 47 | } 48 | }, 49 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 50 | "version": "3.2.1", 51 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 52 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 53 | "dependencies": { 54 | "color-convert": "^1.9.0" 55 | }, 56 | "engines": { 57 | "node": ">=4" 58 | } 59 | }, 60 | "node_modules/@babel/highlight/node_modules/chalk": { 61 | "version": "2.4.2", 62 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 63 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 64 | "dependencies": { 65 | "ansi-styles": "^3.2.1", 66 | "escape-string-regexp": "^1.0.5", 67 | "supports-color": "^5.3.0" 68 | }, 69 | "engines": { 70 | "node": ">=4" 71 | } 72 | }, 73 | "node_modules/@babel/highlight/node_modules/color-convert": { 74 | "version": "1.9.3", 75 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 76 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 77 | "dependencies": { 78 | "color-name": "1.1.3" 79 | } 80 | }, 81 | "node_modules/@babel/highlight/node_modules/color-name": { 82 | "version": "1.1.3", 83 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 84 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 85 | }, 86 | "node_modules/@babel/highlight/node_modules/has-flag": { 87 | "version": "3.0.0", 88 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 89 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 90 | "engines": { 91 | "node": ">=4" 92 | } 93 | }, 94 | "node_modules/@babel/highlight/node_modules/supports-color": { 95 | "version": "5.5.0", 96 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 97 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 98 | "dependencies": { 99 | "has-flag": "^3.0.0" 100 | }, 101 | "engines": { 102 | "node": ">=4" 103 | } 104 | }, 105 | "node_modules/@octokit/auth-token": { 106 | "version": "2.4.4", 107 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.4.tgz", 108 | "integrity": "sha512-LNfGu3Ro9uFAYh10MUZVaT7X2CnNm2C8IDQmabx+3DygYIQjs9FwzFAHN/0t6mu5HEPhxcb1XOuxdpY82vCg2Q==", 109 | "dependencies": { 110 | "@octokit/types": "^6.0.0" 111 | } 112 | }, 113 | "node_modules/@octokit/core": { 114 | "version": "3.2.4", 115 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.2.4.tgz", 116 | "integrity": "sha512-d9dTsqdePBqOn7aGkyRFe7pQpCXdibSJ5SFnrTr0axevObZrpz3qkWm7t/NjYv5a66z6vhfteriaq4FRz3e0Qg==", 117 | "dependencies": { 118 | "@octokit/auth-token": "^2.4.4", 119 | "@octokit/graphql": "^4.5.8", 120 | "@octokit/request": "^5.4.12", 121 | "@octokit/types": "^6.0.3", 122 | "before-after-hook": "^2.1.0", 123 | "universal-user-agent": "^6.0.0" 124 | } 125 | }, 126 | "node_modules/@octokit/endpoint": { 127 | "version": "6.0.10", 128 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.10.tgz", 129 | "integrity": "sha512-9+Xef8nT7OKZglfkOMm7IL6VwxXUQyR7DUSU0LH/F7VNqs8vyd7es5pTfz9E7DwUIx7R3pGscxu1EBhYljyu7Q==", 130 | "dependencies": { 131 | "@octokit/types": "^6.0.0", 132 | "is-plain-object": "^5.0.0", 133 | "universal-user-agent": "^6.0.0" 134 | } 135 | }, 136 | "node_modules/@octokit/graphql": { 137 | "version": "4.5.8", 138 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.8.tgz", 139 | "integrity": "sha512-WnCtNXWOrupfPJgXe+vSmprZJUr0VIu14G58PMlkWGj3cH+KLZEfKMmbUQ6C3Wwx6fdhzVW1CD5RTnBdUHxhhA==", 140 | "dependencies": { 141 | "@octokit/request": "^5.3.0", 142 | "@octokit/types": "^6.0.0", 143 | "universal-user-agent": "^6.0.0" 144 | } 145 | }, 146 | "node_modules/@octokit/openapi-types": { 147 | "version": "2.0.1", 148 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-2.0.1.tgz", 149 | "integrity": "sha512-9AuC04PUnZrjoLiw3uPtwGh9FE4Q3rTqs51oNlQ0rkwgE8ftYsOC+lsrQyvCvWm85smBbSc0FNRKKumvGyb44Q==" 150 | }, 151 | "node_modules/@octokit/plugin-paginate-rest": { 152 | "version": "2.6.2", 153 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.6.2.tgz", 154 | "integrity": "sha512-3Dy7/YZAwdOaRpGQoNHPeT0VU1fYLpIUdPyvR37IyFLgd6XSij4j9V/xN/+eSjF2KKvmfIulEh9LF1tRPjIiDA==", 155 | "dependencies": { 156 | "@octokit/types": "^6.0.1" 157 | }, 158 | "peerDependencies": { 159 | "@octokit/core": ">=2" 160 | } 161 | }, 162 | "node_modules/@octokit/plugin-request-log": { 163 | "version": "1.0.2", 164 | "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz", 165 | "integrity": "sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg==", 166 | "peerDependencies": { 167 | "@octokit/core": ">=3" 168 | } 169 | }, 170 | "node_modules/@octokit/plugin-rest-endpoint-methods": { 171 | "version": "4.4.1", 172 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.4.1.tgz", 173 | "integrity": "sha512-+v5PcvrUcDeFXf8hv1gnNvNLdm4C0+2EiuWt9EatjjUmfriM1pTMM+r4j1lLHxeBQ9bVDmbywb11e3KjuavieA==", 174 | "dependencies": { 175 | "@octokit/types": "^6.1.0", 176 | "deprecation": "^2.3.1" 177 | }, 178 | "peerDependencies": { 179 | "@octokit/core": ">=3" 180 | } 181 | }, 182 | "node_modules/@octokit/request": { 183 | "version": "5.4.12", 184 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.12.tgz", 185 | "integrity": "sha512-MvWYdxengUWTGFpfpefBBpVmmEYfkwMoxonIB3sUGp5rhdgwjXL1ejo6JbgzG/QD9B/NYt/9cJX1pxXeSIUCkg==", 186 | "dependencies": { 187 | "@octokit/endpoint": "^6.0.1", 188 | "@octokit/request-error": "^2.0.0", 189 | "@octokit/types": "^6.0.3", 190 | "deprecation": "^2.0.0", 191 | "is-plain-object": "^5.0.0", 192 | "node-fetch": "^2.6.1", 193 | "once": "^1.4.0", 194 | "universal-user-agent": "^6.0.0" 195 | } 196 | }, 197 | "node_modules/@octokit/request-error": { 198 | "version": "2.0.4", 199 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.4.tgz", 200 | "integrity": "sha512-LjkSiTbsxIErBiRh5wSZvpZqT4t0/c9+4dOe0PII+6jXR+oj/h66s7E4a/MghV7iT8W9ffoQ5Skoxzs96+gBPA==", 201 | "dependencies": { 202 | "@octokit/types": "^6.0.0", 203 | "deprecation": "^2.0.0", 204 | "once": "^1.4.0" 205 | } 206 | }, 207 | "node_modules/@octokit/rest": { 208 | "version": "18.0.12", 209 | "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.0.12.tgz", 210 | "integrity": "sha512-hNRCZfKPpeaIjOVuNJzkEL6zacfZlBPV8vw8ReNeyUkVvbuCvvrrx8K8Gw2eyHHsmd4dPlAxIXIZ9oHhJfkJpw==", 211 | "dependencies": { 212 | "@octokit/core": "^3.2.3", 213 | "@octokit/plugin-paginate-rest": "^2.6.2", 214 | "@octokit/plugin-request-log": "^1.0.2", 215 | "@octokit/plugin-rest-endpoint-methods": "4.4.1" 216 | } 217 | }, 218 | "node_modules/@octokit/types": { 219 | "version": "6.1.2", 220 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.1.2.tgz", 221 | "integrity": "sha512-LPCpcLbcky7fWfHCTuc7tMiSHFpFlrThJqVdaHgowBTMS0ijlZFfonQC/C1PrZOjD4xRCYgBqH9yttEATGE/nw==", 222 | "dependencies": { 223 | "@octokit/openapi-types": "^2.0.1", 224 | "@types/node": ">= 8" 225 | } 226 | }, 227 | "node_modules/@types/node": { 228 | "version": "14.14.16", 229 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", 230 | "integrity": "sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==" 231 | }, 232 | "node_modules/ansi-regex": { 233 | "version": "5.0.0", 234 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 235 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 236 | "engines": { 237 | "node": ">=8" 238 | } 239 | }, 240 | "node_modules/ansi-styles": { 241 | "version": "4.3.0", 242 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 243 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 244 | "dependencies": { 245 | "color-convert": "^2.0.1" 246 | }, 247 | "engines": { 248 | "node": ">=8" 249 | }, 250 | "funding": { 251 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 252 | } 253 | }, 254 | "node_modules/application-config": { 255 | "version": "2.0.0", 256 | "resolved": "https://registry.npmjs.org/application-config/-/application-config-2.0.0.tgz", 257 | "integrity": "sha512-NC5/0guSZK3/UgUDfCk/riByXzqz0owL1L3r63JPSBzYk5QALrp3bLxbsR7qeSfvYfFmAhnp3dbqYsW3U9MpZQ==", 258 | "dependencies": { 259 | "application-config-path": "^0.1.0", 260 | "load-json-file": "^6.2.0", 261 | "write-json-file": "^4.2.0" 262 | }, 263 | "engines": { 264 | "node": ">=8.3" 265 | } 266 | }, 267 | "node_modules/application-config-path": { 268 | "version": "0.1.0", 269 | "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", 270 | "integrity": "sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=" 271 | }, 272 | "node_modules/before-after-hook": { 273 | "version": "2.1.0", 274 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", 275 | "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==" 276 | }, 277 | "node_modules/bluebird": { 278 | "version": "3.5.4", 279 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", 280 | "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" 281 | }, 282 | "node_modules/chalk": { 283 | "version": "3.0.0", 284 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 285 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 286 | "dependencies": { 287 | "ansi-styles": "^4.1.0", 288 | "supports-color": "^7.1.0" 289 | }, 290 | "engines": { 291 | "node": ">=8" 292 | } 293 | }, 294 | "node_modules/cli-cursor": { 295 | "version": "3.1.0", 296 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 297 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 298 | "dependencies": { 299 | "restore-cursor": "^3.1.0" 300 | }, 301 | "engines": { 302 | "node": ">=8" 303 | } 304 | }, 305 | "node_modules/cli-spinners": { 306 | "version": "2.5.0", 307 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", 308 | "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", 309 | "engines": { 310 | "node": ">=6" 311 | }, 312 | "funding": { 313 | "url": "https://github.com/sponsors/sindresorhus" 314 | } 315 | }, 316 | "node_modules/clone": { 317 | "version": "1.0.4", 318 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 319 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", 320 | "engines": { 321 | "node": ">=0.8" 322 | } 323 | }, 324 | "node_modules/color-convert": { 325 | "version": "2.0.1", 326 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 327 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 328 | "dependencies": { 329 | "color-name": "~1.1.4" 330 | }, 331 | "engines": { 332 | "node": ">=7.0.0" 333 | } 334 | }, 335 | "node_modules/color-name": { 336 | "version": "1.1.4", 337 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 338 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 339 | }, 340 | "node_modules/commander": { 341 | "version": "6.2.1", 342 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 343 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", 344 | "engines": { 345 | "node": ">= 6" 346 | } 347 | }, 348 | "node_modules/defaults": { 349 | "version": "1.0.3", 350 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 351 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 352 | "dependencies": { 353 | "clone": "^1.0.2" 354 | } 355 | }, 356 | "node_modules/deprecation": { 357 | "version": "2.3.1", 358 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 359 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 360 | }, 361 | "node_modules/detect-indent": { 362 | "version": "6.0.0", 363 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", 364 | "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", 365 | "engines": { 366 | "node": ">=8" 367 | } 368 | }, 369 | "node_modules/error-ex": { 370 | "version": "1.3.2", 371 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 372 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 373 | "dependencies": { 374 | "is-arrayish": "^0.2.1" 375 | } 376 | }, 377 | "node_modules/escape-string-regexp": { 378 | "version": "1.0.5", 379 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 380 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 381 | "engines": { 382 | "node": ">=0.8.0" 383 | } 384 | }, 385 | "node_modules/ghauth": { 386 | "version": "5.0.0", 387 | "resolved": "https://registry.npmjs.org/ghauth/-/ghauth-5.0.0.tgz", 388 | "integrity": "sha512-3/EcnoUJ+OZWJcx0NpI3zS3NeD/IzVJ2XwNul+pTj0p1aKDe+m7Vo2ExIKkrJFV/qkD64JTHrhoyoJn9aPN9tQ==", 389 | "dependencies": { 390 | "application-config": "^2.0.0", 391 | "node-fetch": "^2.6.0", 392 | "ora": "^4.0.5", 393 | "read": "^1.0.7" 394 | } 395 | }, 396 | "node_modules/graceful-fs": { 397 | "version": "4.2.4", 398 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 399 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 400 | }, 401 | "node_modules/has-flag": { 402 | "version": "4.0.0", 403 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 404 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 405 | "engines": { 406 | "node": ">=8" 407 | } 408 | }, 409 | "node_modules/imurmurhash": { 410 | "version": "0.1.4", 411 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 412 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 413 | "engines": { 414 | "node": ">=0.8.19" 415 | } 416 | }, 417 | "node_modules/is-arrayish": { 418 | "version": "0.2.1", 419 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 420 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 421 | }, 422 | "node_modules/is-interactive": { 423 | "version": "1.0.0", 424 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 425 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", 426 | "engines": { 427 | "node": ">=8" 428 | } 429 | }, 430 | "node_modules/is-plain-obj": { 431 | "version": "2.1.0", 432 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 433 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", 434 | "engines": { 435 | "node": ">=8" 436 | } 437 | }, 438 | "node_modules/is-plain-object": { 439 | "version": "5.0.0", 440 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 441 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 442 | "engines": { 443 | "node": ">=0.10.0" 444 | } 445 | }, 446 | "node_modules/is-typedarray": { 447 | "version": "1.0.0", 448 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 449 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 450 | }, 451 | "node_modules/js-tokens": { 452 | "version": "4.0.0", 453 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 454 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 455 | }, 456 | "node_modules/json": { 457 | "version": "10.0.0", 458 | "resolved": "https://registry.npmjs.org/json/-/json-10.0.0.tgz", 459 | "integrity": "sha512-iK7tAZtpoghibjdB1ncCWykeBMmke3JThUe+rnkD4qkZaglOIQ70Pw7r5UJ4lyUT+7gnw7ehmmLUHDuhqzQD+g==", 460 | "dev": true, 461 | "bin": { 462 | "json": "lib/json.js" 463 | }, 464 | "engines": { 465 | "node": ">=0.10.0" 466 | } 467 | }, 468 | "node_modules/json-parse-even-better-errors": { 469 | "version": "2.3.1", 470 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 471 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 472 | }, 473 | "node_modules/lines-and-columns": { 474 | "version": "1.1.6", 475 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 476 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" 477 | }, 478 | "node_modules/load-json-file": { 479 | "version": "6.2.0", 480 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", 481 | "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", 482 | "dependencies": { 483 | "graceful-fs": "^4.1.15", 484 | "parse-json": "^5.0.0", 485 | "strip-bom": "^4.0.0", 486 | "type-fest": "^0.6.0" 487 | }, 488 | "engines": { 489 | "node": ">=8" 490 | } 491 | }, 492 | "node_modules/lodash": { 493 | "version": "4.17.21", 494 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 495 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 496 | }, 497 | "node_modules/log-symbols": { 498 | "version": "3.0.0", 499 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", 500 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", 501 | "dependencies": { 502 | "chalk": "^2.4.2" 503 | }, 504 | "engines": { 505 | "node": ">=8" 506 | } 507 | }, 508 | "node_modules/log-symbols/node_modules/ansi-styles": { 509 | "version": "3.2.1", 510 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 511 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 512 | "dependencies": { 513 | "color-convert": "^1.9.0" 514 | }, 515 | "engines": { 516 | "node": ">=4" 517 | } 518 | }, 519 | "node_modules/log-symbols/node_modules/chalk": { 520 | "version": "2.4.2", 521 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 522 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 523 | "dependencies": { 524 | "ansi-styles": "^3.2.1", 525 | "escape-string-regexp": "^1.0.5", 526 | "supports-color": "^5.3.0" 527 | }, 528 | "engines": { 529 | "node": ">=4" 530 | } 531 | }, 532 | "node_modules/log-symbols/node_modules/color-convert": { 533 | "version": "1.9.3", 534 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 535 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 536 | "dependencies": { 537 | "color-name": "1.1.3" 538 | } 539 | }, 540 | "node_modules/log-symbols/node_modules/color-name": { 541 | "version": "1.1.3", 542 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 543 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 544 | }, 545 | "node_modules/log-symbols/node_modules/has-flag": { 546 | "version": "3.0.0", 547 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 548 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 549 | "engines": { 550 | "node": ">=4" 551 | } 552 | }, 553 | "node_modules/log-symbols/node_modules/supports-color": { 554 | "version": "5.5.0", 555 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 556 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 557 | "dependencies": { 558 | "has-flag": "^3.0.0" 559 | }, 560 | "engines": { 561 | "node": ">=4" 562 | } 563 | }, 564 | "node_modules/make-dir": { 565 | "version": "3.1.0", 566 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 567 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 568 | "dependencies": { 569 | "semver": "^6.0.0" 570 | }, 571 | "engines": { 572 | "node": ">=8" 573 | }, 574 | "funding": { 575 | "url": "https://github.com/sponsors/sindresorhus" 576 | } 577 | }, 578 | "node_modules/mimic-fn": { 579 | "version": "2.1.0", 580 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 581 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 582 | "engines": { 583 | "node": ">=6" 584 | } 585 | }, 586 | "node_modules/moment": { 587 | "version": "2.24.0", 588 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", 589 | "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", 590 | "engines": { 591 | "node": "*" 592 | } 593 | }, 594 | "node_modules/moment-timezone": { 595 | "version": "0.5.23", 596 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", 597 | "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", 598 | "dependencies": { 599 | "moment": ">= 2.9.0" 600 | }, 601 | "engines": { 602 | "node": "*" 603 | } 604 | }, 605 | "node_modules/mute-stream": { 606 | "version": "0.0.8", 607 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 608 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" 609 | }, 610 | "node_modules/node-fetch": { 611 | "version": "2.6.1", 612 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 613 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 614 | "engines": { 615 | "node": "4.x || >=6.0.0" 616 | } 617 | }, 618 | "node_modules/once": { 619 | "version": "1.4.0", 620 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 621 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 622 | "dependencies": { 623 | "wrappy": "1" 624 | } 625 | }, 626 | "node_modules/onetime": { 627 | "version": "5.1.2", 628 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 629 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 630 | "dependencies": { 631 | "mimic-fn": "^2.1.0" 632 | }, 633 | "engines": { 634 | "node": ">=6" 635 | }, 636 | "funding": { 637 | "url": "https://github.com/sponsors/sindresorhus" 638 | } 639 | }, 640 | "node_modules/ora": { 641 | "version": "4.1.1", 642 | "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", 643 | "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", 644 | "dependencies": { 645 | "chalk": "^3.0.0", 646 | "cli-cursor": "^3.1.0", 647 | "cli-spinners": "^2.2.0", 648 | "is-interactive": "^1.0.0", 649 | "log-symbols": "^3.0.0", 650 | "mute-stream": "0.0.8", 651 | "strip-ansi": "^6.0.0", 652 | "wcwidth": "^1.0.1" 653 | }, 654 | "engines": { 655 | "node": ">=8" 656 | }, 657 | "funding": { 658 | "url": "https://github.com/sponsors/sindresorhus" 659 | } 660 | }, 661 | "node_modules/parse-json": { 662 | "version": "5.1.0", 663 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", 664 | "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", 665 | "dependencies": { 666 | "@babel/code-frame": "^7.0.0", 667 | "error-ex": "^1.3.1", 668 | "json-parse-even-better-errors": "^2.3.0", 669 | "lines-and-columns": "^1.1.6" 670 | }, 671 | "engines": { 672 | "node": ">=8" 673 | }, 674 | "funding": { 675 | "url": "https://github.com/sponsors/sindresorhus" 676 | } 677 | }, 678 | "node_modules/read": { 679 | "version": "1.0.7", 680 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", 681 | "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", 682 | "dependencies": { 683 | "mute-stream": "~0.0.4" 684 | }, 685 | "engines": { 686 | "node": ">=0.8" 687 | } 688 | }, 689 | "node_modules/restore-cursor": { 690 | "version": "3.1.0", 691 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 692 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 693 | "dependencies": { 694 | "onetime": "^5.1.0", 695 | "signal-exit": "^3.0.2" 696 | }, 697 | "engines": { 698 | "node": ">=8" 699 | } 700 | }, 701 | "node_modules/semver": { 702 | "version": "6.0.0", 703 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", 704 | "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", 705 | "bin": { 706 | "semver": "bin/semver" 707 | } 708 | }, 709 | "node_modules/signal-exit": { 710 | "version": "3.0.2", 711 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 712 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 713 | }, 714 | "node_modules/sort-keys": { 715 | "version": "4.1.0", 716 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.1.0.tgz", 717 | "integrity": "sha512-/sRdxzkkPFUYiCrTr/2t+104nDc9AgDmEpeVYuvOWYQe3Djk1GWO6lVw3Vx2jfh1SsR0eehhd1nvFYlzt5e99w==", 718 | "dependencies": { 719 | "is-plain-obj": "^2.0.0" 720 | }, 721 | "engines": { 722 | "node": ">=8" 723 | }, 724 | "funding": { 725 | "url": "https://github.com/sponsors/sindresorhus" 726 | } 727 | }, 728 | "node_modules/strip-ansi": { 729 | "version": "6.0.0", 730 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 731 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 732 | "dependencies": { 733 | "ansi-regex": "^5.0.0" 734 | }, 735 | "engines": { 736 | "node": ">=8" 737 | } 738 | }, 739 | "node_modules/strip-bom": { 740 | "version": "4.0.0", 741 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", 742 | "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", 743 | "engines": { 744 | "node": ">=8" 745 | } 746 | }, 747 | "node_modules/supports-color": { 748 | "version": "7.2.0", 749 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 750 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 751 | "dependencies": { 752 | "has-flag": "^4.0.0" 753 | }, 754 | "engines": { 755 | "node": ">=8" 756 | } 757 | }, 758 | "node_modules/type-fest": { 759 | "version": "0.6.0", 760 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", 761 | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", 762 | "engines": { 763 | "node": ">=8" 764 | } 765 | }, 766 | "node_modules/typedarray-to-buffer": { 767 | "version": "3.1.5", 768 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 769 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 770 | "dependencies": { 771 | "is-typedarray": "^1.0.0" 772 | } 773 | }, 774 | "node_modules/universal-user-agent": { 775 | "version": "6.0.0", 776 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", 777 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" 778 | }, 779 | "node_modules/wcwidth": { 780 | "version": "1.0.1", 781 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 782 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", 783 | "dependencies": { 784 | "defaults": "^1.0.3" 785 | } 786 | }, 787 | "node_modules/wrappy": { 788 | "version": "1.0.2", 789 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 790 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 791 | }, 792 | "node_modules/write-file-atomic": { 793 | "version": "3.0.3", 794 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 795 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 796 | "dependencies": { 797 | "imurmurhash": "^0.1.4", 798 | "is-typedarray": "^1.0.0", 799 | "signal-exit": "^3.0.2", 800 | "typedarray-to-buffer": "^3.1.5" 801 | } 802 | }, 803 | "node_modules/write-json-file": { 804 | "version": "4.3.0", 805 | "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", 806 | "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", 807 | "dependencies": { 808 | "detect-indent": "^6.0.0", 809 | "graceful-fs": "^4.1.15", 810 | "is-plain-obj": "^2.0.0", 811 | "make-dir": "^3.0.0", 812 | "sort-keys": "^4.0.0", 813 | "write-file-atomic": "^3.0.0" 814 | }, 815 | "engines": { 816 | "node": ">=8.3" 817 | }, 818 | "funding": { 819 | "url": "https://github.com/sponsors/sindresorhus" 820 | } 821 | } 822 | }, 823 | "dependencies": { 824 | "@babel/code-frame": { 825 | "version": "7.12.11", 826 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 827 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 828 | "requires": { 829 | "@babel/highlight": "^7.10.4" 830 | } 831 | }, 832 | "@babel/helper-validator-identifier": { 833 | "version": "7.12.11", 834 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 835 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" 836 | }, 837 | "@babel/highlight": { 838 | "version": "7.10.4", 839 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 840 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 841 | "requires": { 842 | "@babel/helper-validator-identifier": "^7.10.4", 843 | "chalk": "^2.0.0", 844 | "js-tokens": "^4.0.0" 845 | }, 846 | "dependencies": { 847 | "ansi-styles": { 848 | "version": "3.2.1", 849 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 850 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 851 | "requires": { 852 | "color-convert": "^1.9.0" 853 | } 854 | }, 855 | "chalk": { 856 | "version": "2.4.2", 857 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 858 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 859 | "requires": { 860 | "ansi-styles": "^3.2.1", 861 | "escape-string-regexp": "^1.0.5", 862 | "supports-color": "^5.3.0" 863 | } 864 | }, 865 | "color-convert": { 866 | "version": "1.9.3", 867 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 868 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 869 | "requires": { 870 | "color-name": "1.1.3" 871 | } 872 | }, 873 | "color-name": { 874 | "version": "1.1.3", 875 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 876 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 877 | }, 878 | "has-flag": { 879 | "version": "3.0.0", 880 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 881 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 882 | }, 883 | "supports-color": { 884 | "version": "5.5.0", 885 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 886 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 887 | "requires": { 888 | "has-flag": "^3.0.0" 889 | } 890 | } 891 | } 892 | }, 893 | "@octokit/auth-token": { 894 | "version": "2.4.4", 895 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.4.tgz", 896 | "integrity": "sha512-LNfGu3Ro9uFAYh10MUZVaT7X2CnNm2C8IDQmabx+3DygYIQjs9FwzFAHN/0t6mu5HEPhxcb1XOuxdpY82vCg2Q==", 897 | "requires": { 898 | "@octokit/types": "^6.0.0" 899 | } 900 | }, 901 | "@octokit/core": { 902 | "version": "3.2.4", 903 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.2.4.tgz", 904 | "integrity": "sha512-d9dTsqdePBqOn7aGkyRFe7pQpCXdibSJ5SFnrTr0axevObZrpz3qkWm7t/NjYv5a66z6vhfteriaq4FRz3e0Qg==", 905 | "requires": { 906 | "@octokit/auth-token": "^2.4.4", 907 | "@octokit/graphql": "^4.5.8", 908 | "@octokit/request": "^5.4.12", 909 | "@octokit/types": "^6.0.3", 910 | "before-after-hook": "^2.1.0", 911 | "universal-user-agent": "^6.0.0" 912 | } 913 | }, 914 | "@octokit/endpoint": { 915 | "version": "6.0.10", 916 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.10.tgz", 917 | "integrity": "sha512-9+Xef8nT7OKZglfkOMm7IL6VwxXUQyR7DUSU0LH/F7VNqs8vyd7es5pTfz9E7DwUIx7R3pGscxu1EBhYljyu7Q==", 918 | "requires": { 919 | "@octokit/types": "^6.0.0", 920 | "is-plain-object": "^5.0.0", 921 | "universal-user-agent": "^6.0.0" 922 | } 923 | }, 924 | "@octokit/graphql": { 925 | "version": "4.5.8", 926 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.5.8.tgz", 927 | "integrity": "sha512-WnCtNXWOrupfPJgXe+vSmprZJUr0VIu14G58PMlkWGj3cH+KLZEfKMmbUQ6C3Wwx6fdhzVW1CD5RTnBdUHxhhA==", 928 | "requires": { 929 | "@octokit/request": "^5.3.0", 930 | "@octokit/types": "^6.0.0", 931 | "universal-user-agent": "^6.0.0" 932 | } 933 | }, 934 | "@octokit/openapi-types": { 935 | "version": "2.0.1", 936 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-2.0.1.tgz", 937 | "integrity": "sha512-9AuC04PUnZrjoLiw3uPtwGh9FE4Q3rTqs51oNlQ0rkwgE8ftYsOC+lsrQyvCvWm85smBbSc0FNRKKumvGyb44Q==" 938 | }, 939 | "@octokit/plugin-paginate-rest": { 940 | "version": "2.6.2", 941 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.6.2.tgz", 942 | "integrity": "sha512-3Dy7/YZAwdOaRpGQoNHPeT0VU1fYLpIUdPyvR37IyFLgd6XSij4j9V/xN/+eSjF2KKvmfIulEh9LF1tRPjIiDA==", 943 | "requires": { 944 | "@octokit/types": "^6.0.1" 945 | } 946 | }, 947 | "@octokit/plugin-request-log": { 948 | "version": "1.0.2", 949 | "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz", 950 | "integrity": "sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg==", 951 | "requires": {} 952 | }, 953 | "@octokit/plugin-rest-endpoint-methods": { 954 | "version": "4.4.1", 955 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.4.1.tgz", 956 | "integrity": "sha512-+v5PcvrUcDeFXf8hv1gnNvNLdm4C0+2EiuWt9EatjjUmfriM1pTMM+r4j1lLHxeBQ9bVDmbywb11e3KjuavieA==", 957 | "requires": { 958 | "@octokit/types": "^6.1.0", 959 | "deprecation": "^2.3.1" 960 | } 961 | }, 962 | "@octokit/request": { 963 | "version": "5.4.12", 964 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.12.tgz", 965 | "integrity": "sha512-MvWYdxengUWTGFpfpefBBpVmmEYfkwMoxonIB3sUGp5rhdgwjXL1ejo6JbgzG/QD9B/NYt/9cJX1pxXeSIUCkg==", 966 | "requires": { 967 | "@octokit/endpoint": "^6.0.1", 968 | "@octokit/request-error": "^2.0.0", 969 | "@octokit/types": "^6.0.3", 970 | "deprecation": "^2.0.0", 971 | "is-plain-object": "^5.0.0", 972 | "node-fetch": "^2.6.1", 973 | "once": "^1.4.0", 974 | "universal-user-agent": "^6.0.0" 975 | } 976 | }, 977 | "@octokit/request-error": { 978 | "version": "2.0.4", 979 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.4.tgz", 980 | "integrity": "sha512-LjkSiTbsxIErBiRh5wSZvpZqT4t0/c9+4dOe0PII+6jXR+oj/h66s7E4a/MghV7iT8W9ffoQ5Skoxzs96+gBPA==", 981 | "requires": { 982 | "@octokit/types": "^6.0.0", 983 | "deprecation": "^2.0.0", 984 | "once": "^1.4.0" 985 | } 986 | }, 987 | "@octokit/rest": { 988 | "version": "18.0.12", 989 | "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.0.12.tgz", 990 | "integrity": "sha512-hNRCZfKPpeaIjOVuNJzkEL6zacfZlBPV8vw8ReNeyUkVvbuCvvrrx8K8Gw2eyHHsmd4dPlAxIXIZ9oHhJfkJpw==", 991 | "requires": { 992 | "@octokit/core": "^3.2.3", 993 | "@octokit/plugin-paginate-rest": "^2.6.2", 994 | "@octokit/plugin-request-log": "^1.0.2", 995 | "@octokit/plugin-rest-endpoint-methods": "4.4.1" 996 | } 997 | }, 998 | "@octokit/types": { 999 | "version": "6.1.2", 1000 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.1.2.tgz", 1001 | "integrity": "sha512-LPCpcLbcky7fWfHCTuc7tMiSHFpFlrThJqVdaHgowBTMS0ijlZFfonQC/C1PrZOjD4xRCYgBqH9yttEATGE/nw==", 1002 | "requires": { 1003 | "@octokit/openapi-types": "^2.0.1", 1004 | "@types/node": ">= 8" 1005 | } 1006 | }, 1007 | "@types/node": { 1008 | "version": "14.14.16", 1009 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", 1010 | "integrity": "sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==" 1011 | }, 1012 | "ansi-regex": { 1013 | "version": "5.0.0", 1014 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1015 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 1016 | }, 1017 | "ansi-styles": { 1018 | "version": "4.3.0", 1019 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1020 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1021 | "requires": { 1022 | "color-convert": "^2.0.1" 1023 | } 1024 | }, 1025 | "application-config": { 1026 | "version": "2.0.0", 1027 | "resolved": "https://registry.npmjs.org/application-config/-/application-config-2.0.0.tgz", 1028 | "integrity": "sha512-NC5/0guSZK3/UgUDfCk/riByXzqz0owL1L3r63JPSBzYk5QALrp3bLxbsR7qeSfvYfFmAhnp3dbqYsW3U9MpZQ==", 1029 | "requires": { 1030 | "application-config-path": "^0.1.0", 1031 | "load-json-file": "^6.2.0", 1032 | "write-json-file": "^4.2.0" 1033 | } 1034 | }, 1035 | "application-config-path": { 1036 | "version": "0.1.0", 1037 | "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.0.tgz", 1038 | "integrity": "sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=" 1039 | }, 1040 | "before-after-hook": { 1041 | "version": "2.1.0", 1042 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", 1043 | "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==" 1044 | }, 1045 | "bluebird": { 1046 | "version": "3.5.4", 1047 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", 1048 | "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" 1049 | }, 1050 | "chalk": { 1051 | "version": "3.0.0", 1052 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 1053 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 1054 | "requires": { 1055 | "ansi-styles": "^4.1.0", 1056 | "supports-color": "^7.1.0" 1057 | } 1058 | }, 1059 | "cli-cursor": { 1060 | "version": "3.1.0", 1061 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 1062 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 1063 | "requires": { 1064 | "restore-cursor": "^3.1.0" 1065 | } 1066 | }, 1067 | "cli-spinners": { 1068 | "version": "2.5.0", 1069 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", 1070 | "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==" 1071 | }, 1072 | "clone": { 1073 | "version": "1.0.4", 1074 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 1075 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" 1076 | }, 1077 | "color-convert": { 1078 | "version": "2.0.1", 1079 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1080 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1081 | "requires": { 1082 | "color-name": "~1.1.4" 1083 | } 1084 | }, 1085 | "color-name": { 1086 | "version": "1.1.4", 1087 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1088 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1089 | }, 1090 | "commander": { 1091 | "version": "6.2.1", 1092 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 1093 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" 1094 | }, 1095 | "defaults": { 1096 | "version": "1.0.3", 1097 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 1098 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 1099 | "requires": { 1100 | "clone": "^1.0.2" 1101 | } 1102 | }, 1103 | "deprecation": { 1104 | "version": "2.3.1", 1105 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 1106 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 1107 | }, 1108 | "detect-indent": { 1109 | "version": "6.0.0", 1110 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", 1111 | "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==" 1112 | }, 1113 | "error-ex": { 1114 | "version": "1.3.2", 1115 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1116 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1117 | "requires": { 1118 | "is-arrayish": "^0.2.1" 1119 | } 1120 | }, 1121 | "escape-string-regexp": { 1122 | "version": "1.0.5", 1123 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1124 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 1125 | }, 1126 | "ghauth": { 1127 | "version": "5.0.0", 1128 | "resolved": "https://registry.npmjs.org/ghauth/-/ghauth-5.0.0.tgz", 1129 | "integrity": "sha512-3/EcnoUJ+OZWJcx0NpI3zS3NeD/IzVJ2XwNul+pTj0p1aKDe+m7Vo2ExIKkrJFV/qkD64JTHrhoyoJn9aPN9tQ==", 1130 | "requires": { 1131 | "application-config": "^2.0.0", 1132 | "node-fetch": "^2.6.0", 1133 | "ora": "^4.0.5", 1134 | "read": "^1.0.7" 1135 | } 1136 | }, 1137 | "graceful-fs": { 1138 | "version": "4.2.4", 1139 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 1140 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 1141 | }, 1142 | "has-flag": { 1143 | "version": "4.0.0", 1144 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1145 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 1146 | }, 1147 | "imurmurhash": { 1148 | "version": "0.1.4", 1149 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1150 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" 1151 | }, 1152 | "is-arrayish": { 1153 | "version": "0.2.1", 1154 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1155 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 1156 | }, 1157 | "is-interactive": { 1158 | "version": "1.0.0", 1159 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", 1160 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" 1161 | }, 1162 | "is-plain-obj": { 1163 | "version": "2.1.0", 1164 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", 1165 | "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" 1166 | }, 1167 | "is-plain-object": { 1168 | "version": "5.0.0", 1169 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 1170 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" 1171 | }, 1172 | "is-typedarray": { 1173 | "version": "1.0.0", 1174 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1175 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1176 | }, 1177 | "js-tokens": { 1178 | "version": "4.0.0", 1179 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1180 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1181 | }, 1182 | "json": { 1183 | "version": "10.0.0", 1184 | "resolved": "https://registry.npmjs.org/json/-/json-10.0.0.tgz", 1185 | "integrity": "sha512-iK7tAZtpoghibjdB1ncCWykeBMmke3JThUe+rnkD4qkZaglOIQ70Pw7r5UJ4lyUT+7gnw7ehmmLUHDuhqzQD+g==", 1186 | "dev": true 1187 | }, 1188 | "json-parse-even-better-errors": { 1189 | "version": "2.3.1", 1190 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1191 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 1192 | }, 1193 | "lines-and-columns": { 1194 | "version": "1.1.6", 1195 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", 1196 | "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" 1197 | }, 1198 | "load-json-file": { 1199 | "version": "6.2.0", 1200 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", 1201 | "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", 1202 | "requires": { 1203 | "graceful-fs": "^4.1.15", 1204 | "parse-json": "^5.0.0", 1205 | "strip-bom": "^4.0.0", 1206 | "type-fest": "^0.6.0" 1207 | } 1208 | }, 1209 | "lodash": { 1210 | "version": "4.17.21", 1211 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1212 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1213 | }, 1214 | "log-symbols": { 1215 | "version": "3.0.0", 1216 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", 1217 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", 1218 | "requires": { 1219 | "chalk": "^2.4.2" 1220 | }, 1221 | "dependencies": { 1222 | "ansi-styles": { 1223 | "version": "3.2.1", 1224 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1225 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1226 | "requires": { 1227 | "color-convert": "^1.9.0" 1228 | } 1229 | }, 1230 | "chalk": { 1231 | "version": "2.4.2", 1232 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1233 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1234 | "requires": { 1235 | "ansi-styles": "^3.2.1", 1236 | "escape-string-regexp": "^1.0.5", 1237 | "supports-color": "^5.3.0" 1238 | } 1239 | }, 1240 | "color-convert": { 1241 | "version": "1.9.3", 1242 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1243 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1244 | "requires": { 1245 | "color-name": "1.1.3" 1246 | } 1247 | }, 1248 | "color-name": { 1249 | "version": "1.1.3", 1250 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1251 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 1252 | }, 1253 | "has-flag": { 1254 | "version": "3.0.0", 1255 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1256 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" 1257 | }, 1258 | "supports-color": { 1259 | "version": "5.5.0", 1260 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1261 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1262 | "requires": { 1263 | "has-flag": "^3.0.0" 1264 | } 1265 | } 1266 | } 1267 | }, 1268 | "make-dir": { 1269 | "version": "3.1.0", 1270 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1271 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1272 | "requires": { 1273 | "semver": "^6.0.0" 1274 | } 1275 | }, 1276 | "mimic-fn": { 1277 | "version": "2.1.0", 1278 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1279 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" 1280 | }, 1281 | "moment": { 1282 | "version": "2.24.0", 1283 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", 1284 | "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" 1285 | }, 1286 | "moment-timezone": { 1287 | "version": "0.5.23", 1288 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.23.tgz", 1289 | "integrity": "sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==", 1290 | "requires": { 1291 | "moment": ">= 2.9.0" 1292 | } 1293 | }, 1294 | "mute-stream": { 1295 | "version": "0.0.8", 1296 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1297 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" 1298 | }, 1299 | "node-fetch": { 1300 | "version": "2.6.1", 1301 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1302 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 1303 | }, 1304 | "once": { 1305 | "version": "1.4.0", 1306 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1307 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1308 | "requires": { 1309 | "wrappy": "1" 1310 | } 1311 | }, 1312 | "onetime": { 1313 | "version": "5.1.2", 1314 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 1315 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 1316 | "requires": { 1317 | "mimic-fn": "^2.1.0" 1318 | } 1319 | }, 1320 | "ora": { 1321 | "version": "4.1.1", 1322 | "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", 1323 | "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", 1324 | "requires": { 1325 | "chalk": "^3.0.0", 1326 | "cli-cursor": "^3.1.0", 1327 | "cli-spinners": "^2.2.0", 1328 | "is-interactive": "^1.0.0", 1329 | "log-symbols": "^3.0.0", 1330 | "mute-stream": "0.0.8", 1331 | "strip-ansi": "^6.0.0", 1332 | "wcwidth": "^1.0.1" 1333 | } 1334 | }, 1335 | "parse-json": { 1336 | "version": "5.1.0", 1337 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", 1338 | "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", 1339 | "requires": { 1340 | "@babel/code-frame": "^7.0.0", 1341 | "error-ex": "^1.3.1", 1342 | "json-parse-even-better-errors": "^2.3.0", 1343 | "lines-and-columns": "^1.1.6" 1344 | } 1345 | }, 1346 | "read": { 1347 | "version": "1.0.7", 1348 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", 1349 | "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", 1350 | "requires": { 1351 | "mute-stream": "~0.0.4" 1352 | } 1353 | }, 1354 | "restore-cursor": { 1355 | "version": "3.1.0", 1356 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1357 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1358 | "requires": { 1359 | "onetime": "^5.1.0", 1360 | "signal-exit": "^3.0.2" 1361 | } 1362 | }, 1363 | "semver": { 1364 | "version": "6.0.0", 1365 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", 1366 | "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" 1367 | }, 1368 | "signal-exit": { 1369 | "version": "3.0.2", 1370 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1371 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 1372 | }, 1373 | "sort-keys": { 1374 | "version": "4.1.0", 1375 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.1.0.tgz", 1376 | "integrity": "sha512-/sRdxzkkPFUYiCrTr/2t+104nDc9AgDmEpeVYuvOWYQe3Djk1GWO6lVw3Vx2jfh1SsR0eehhd1nvFYlzt5e99w==", 1377 | "requires": { 1378 | "is-plain-obj": "^2.0.0" 1379 | } 1380 | }, 1381 | "strip-ansi": { 1382 | "version": "6.0.0", 1383 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1384 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1385 | "requires": { 1386 | "ansi-regex": "^5.0.0" 1387 | } 1388 | }, 1389 | "strip-bom": { 1390 | "version": "4.0.0", 1391 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", 1392 | "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" 1393 | }, 1394 | "supports-color": { 1395 | "version": "7.2.0", 1396 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1397 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1398 | "requires": { 1399 | "has-flag": "^4.0.0" 1400 | } 1401 | }, 1402 | "type-fest": { 1403 | "version": "0.6.0", 1404 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", 1405 | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" 1406 | }, 1407 | "typedarray-to-buffer": { 1408 | "version": "3.1.5", 1409 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 1410 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 1411 | "requires": { 1412 | "is-typedarray": "^1.0.0" 1413 | } 1414 | }, 1415 | "universal-user-agent": { 1416 | "version": "6.0.0", 1417 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", 1418 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" 1419 | }, 1420 | "wcwidth": { 1421 | "version": "1.0.1", 1422 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", 1423 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", 1424 | "requires": { 1425 | "defaults": "^1.0.3" 1426 | } 1427 | }, 1428 | "wrappy": { 1429 | "version": "1.0.2", 1430 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1431 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1432 | }, 1433 | "write-file-atomic": { 1434 | "version": "3.0.3", 1435 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 1436 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 1437 | "requires": { 1438 | "imurmurhash": "^0.1.4", 1439 | "is-typedarray": "^1.0.0", 1440 | "signal-exit": "^3.0.2", 1441 | "typedarray-to-buffer": "^3.1.5" 1442 | } 1443 | }, 1444 | "write-json-file": { 1445 | "version": "4.3.0", 1446 | "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", 1447 | "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", 1448 | "requires": { 1449 | "detect-indent": "^6.0.0", 1450 | "graceful-fs": "^4.1.15", 1451 | "is-plain-obj": "^2.0.0", 1452 | "make-dir": "^3.0.0", 1453 | "sort-keys": "^4.0.0", 1454 | "write-file-atomic": "^3.0.0" 1455 | } 1456 | } 1457 | } 1458 | } 1459 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "github-changes", 3 | "version": "2.0.3", 4 | "description": "generate changelog for github repos", 5 | "main": "./bin/index.js", 6 | "bin": { 7 | "github-changes": "bin/index.js" 8 | }, 9 | "dependencies": { 10 | "@octokit/rest": "^18.0.12", 11 | "bluebird": "^3.5.4", 12 | "commander": "^6.2.1", 13 | "ghauth": "^5.0.0", 14 | "lodash": "^4.17.11", 15 | "moment-timezone": "^0.5.23", 16 | "semver": "^6.0.0" 17 | }, 18 | "devDependencies": { 19 | "json": "^10.0.0" 20 | }, 21 | "scripts": { 22 | "test": "echo \"Error: no test specified\" && exit 1" 23 | }, 24 | "repository": { 25 | "type": "git", 26 | "url": "git://github.com/lalitkapoor/github-changes.git" 27 | }, 28 | "keywords": [ 29 | "github", 30 | "changelog", 31 | "git", 32 | "changes", 33 | "history", 34 | "changed", 35 | "change" 36 | ], 37 | "author": "Lalit Kapoor ", 38 | "license": "MIT", 39 | "bugs": { 40 | "url": "https://github.com/lalitkapoor/github-changes/issues" 41 | }, 42 | "preferGlobal": true, 43 | "homepage": "https://github.com/lalitkapoor/github-changes" 44 | } 45 | -------------------------------------------------------------------------------- /release.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | set -u 5 | set -o pipefail 6 | 7 | if [ $# -ne 1 ] 8 | then 9 | echo "must specify a semver value (major, minor, patch)" 10 | exit 11 | fi 12 | 13 | if ([ "$1" != "major" ] && [ "$1" != "minor" ] && [ "$1" != "patch" ]) 14 | then 15 | echo "please specify one of (major, minor, patch)" 16 | exit 17 | fi 18 | 19 | git checkout master 20 | npm install 21 | npm version $1 22 | VERSION=`cat package.json | json version` 23 | node bin/index.js -o lalitkapoor -r github-changes --only-pulls -v -a --use-commit-body --reverse-changes -n v$VERSION 24 | git add CHANGELOG.md 25 | git commit --amend --no-edit 26 | git push origin master 27 | git push origin --tags 28 | npm publish 29 | --------------------------------------------------------------------------------