npm-update-package 0.55.0 → 0.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +24 -4
  2. package/dist/package.json +6 -4
  3. package/dist/src/bin.js +5 -8
  4. package/dist/src/core/OutdatedPackageProcessor.js +11 -11
  5. package/dist/src/core/OutdatedPackagesProcessor.js +3 -3
  6. package/dist/src/github/GitHub.js +6 -3
  7. package/dist/src/github/label/creator/LabelCreator.js +5 -5
  8. package/dist/src/github/pull-request/closer/PullRequestsCloser.js +3 -3
  9. package/dist/src/github/pull-request/creator/AssigneesAdder.js +23 -0
  10. package/dist/src/github/pull-request/creator/PullRequestCreator.js +13 -14
  11. package/dist/src/github/pull-request/creator/index.js +1 -0
  12. package/dist/src/logger/index.js +1 -2
  13. package/dist/src/logger/logger.js +5 -0
  14. package/dist/src/main.js +29 -39
  15. package/dist/src/ncu/Ncu.js +4 -4
  16. package/dist/src/options/Options.js +1 -0
  17. package/dist/src/options/cliOptions.js +6 -0
  18. package/dist/src/package-manager/PackageManagerCreator.js +10 -10
  19. package/dist/src/package-manager/index.js +2 -2
  20. package/dist/src/package-manager/{Npm.js → npm/Npm.js} +0 -0
  21. package/dist/src/package-manager/{NpmVersions.js → npm/NpmVersions.js} +0 -0
  22. package/dist/src/{number → package-manager/npm}/index.js +1 -1
  23. package/dist/src/package-manager/{Yarn.js → yarn/Yarn.js} +0 -0
  24. package/dist/src/package-manager/{YarnVersions.js → yarn/YarnVersions.js} +0 -0
  25. package/dist/src/package-manager/yarn/index.js +17 -0
  26. package/package.json +6 -4
  27. package/dist/src/logger/Logger.js +0 -2
  28. package/dist/src/logger/createLogger.js +0 -10
  29. package/dist/src/number/range.js +0 -10
package/README.md CHANGED
@@ -17,6 +17,7 @@ CLI tool for creating pull requests to update npm packages
17
17
  - [Supported platforms](#supported-platforms)
18
18
  - [Options](#options)
19
19
  - [assignees](#assignees)
20
+ - [assigneesSampleSize](#assigneessamplesize)
20
21
  - [commitMessage](#commitmessage)
21
22
  - [fetchReleaseNotes](#fetchreleasenotes)
22
23
  - [fetchSleepTime](#fetchsleeptime)
@@ -80,7 +81,26 @@ Example:
80
81
  ```sh
81
82
  npx npm-update-package \
82
83
  --github-token $GITHUB_TOKEN \
83
- --assignees octocat mona
84
+ --assignees alice bob
85
+ ```
86
+
87
+ ### assigneesSampleSize
88
+
89
+ How many members to be assigned to assignees.
90
+
91
+ |Name|Value|
92
+ |---|---|
93
+ |cli|`--assignees-sample-size`|
94
+ |type|number|
95
+ |required|false|
96
+
97
+ Example:
98
+
99
+ ```sh
100
+ npx npm-update-package \
101
+ --github-token $GITHUB_TOKEN \
102
+ --assignees alice bob \
103
+ --assignees-sample-size 1
84
104
  ```
85
105
 
86
106
  ### commitMessage
@@ -165,7 +185,7 @@ Example:
165
185
  ```sh
166
186
  npx npm-update-package \
167
187
  --github-token $GITHUB_TOKEN \
168
- --git-user-email octocat@example.com
188
+ --git-user-email alice@example.com
169
189
  ```
170
190
 
171
191
  ### gitUserName
@@ -183,7 +203,7 @@ Example:
183
203
  ```sh
184
204
  npx npm-update-package \
185
205
  --github-token $GITHUB_TOKEN \
186
- --git-user-name octocat
206
+ --git-user-name alice
187
207
  ```
188
208
 
189
209
  ### githubToken
@@ -352,7 +372,7 @@ Example:
352
372
  ```sh
353
373
  npx npm-update-package \
354
374
  --github-token $GITHUB_TOKEN \
355
- --reviewers octocat mona
375
+ --reviewers alice bob
356
376
  ```
357
377
 
358
378
  ## GitHub token
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "npm-update-package",
3
- "version": "0.55.0",
3
+ "version": "0.56.0",
4
4
  "description": "CLI tool for creating pull requests to update npm packages",
5
5
  "scripts": {
6
6
  "build": "tsc --project tsconfig.build.json",
@@ -20,12 +20,13 @@
20
20
  "fp-ts": "2.11.9",
21
21
  "http-status-codes": "2.2.0",
22
22
  "io-ts": "2.2.16",
23
+ "lodash": "4.14.2",
23
24
  "log4js": "6.4.4",
24
25
  "mustache": "4.1.0",
25
26
  "node-fetch": "2.6.7",
26
- "npm-check-updates": "12.5.7",
27
+ "npm-check-updates": "12.5.8",
27
28
  "parse-github-url": "1.0.2",
28
- "semver": "7.3.5",
29
+ "semver": "7.3.6",
29
30
  "sleep-promise": "9.1.0",
30
31
  "type-guards": "0.15.0"
31
32
  },
@@ -33,6 +34,7 @@
33
34
  "@jest/types": "27.4.2",
34
35
  "@tsconfig/node12": "1.0.9",
35
36
  "@types/jest": "27.4.1",
37
+ "@types/lodash": "4.14.181",
36
38
  "@types/mustache": "4.1.2",
37
39
  "@types/node": "12.20.47",
38
40
  "@types/node-fetch": "2.6.1",
@@ -41,7 +43,7 @@
41
43
  "@typescript-eslint/eslint-plugin": "5.18.0",
42
44
  "eslint": "8.12.0",
43
45
  "eslint-config-standard-with-typescript": "21.0.1",
44
- "eslint-plugin-import": "2.25.4",
46
+ "eslint-plugin-import": "2.26.0",
45
47
  "eslint-plugin-jest": "26.1.3",
46
48
  "eslint-plugin-node": "11.1.0",
47
49
  "eslint-plugin-promise": "6.0.0",
package/dist/src/bin.js CHANGED
@@ -9,16 +9,13 @@ const logger_1 = require("./logger");
9
9
  const main_1 = require("./main");
10
10
  const options_1 = require("./options");
11
11
  const options = (0, options_1.initOptions)();
12
- const logger = (0, logger_1.createLogger)(options.logLevel);
13
- logger.info(`Start ${package_json_1.default.name} v${package_json_1.default.version}`);
14
- (0, main_1.main)({
15
- options,
16
- logger
17
- })
12
+ logger_1.logger.level = options.logLevel;
13
+ logger_1.logger.info(`Start ${package_json_1.default.name} v${package_json_1.default.version}`);
14
+ (0, main_1.main)(options)
18
15
  .then(() => {
19
- logger.info(`End ${package_json_1.default.name} v${package_json_1.default.version}`);
16
+ logger_1.logger.info(`End ${package_json_1.default.name} v${package_json_1.default.version}`);
20
17
  })
21
18
  .catch((error) => {
22
- logger.fatal(error);
19
+ logger_1.logger.fatal(error);
23
20
  throw error;
24
21
  });
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OutdatedPackageProcessor = void 0;
4
4
  const Either_1 = require("fp-ts/lib/Either");
5
5
  const git_1 = require("../git");
6
+ const logger_1 = require("../logger");
6
7
  // TODO: Add test
7
8
  // TODO: Split into multiple classes and functions
8
9
  class OutdatedPackageProcessor {
9
- constructor({ git, packageManager, pullRequestCreator, branchFinder, logger, commitMessageCreator, pullRequestFinder, pullRequestsCloser, packageUpdater }) {
10
+ constructor({ git, packageManager, pullRequestCreator, branchFinder, commitMessageCreator, pullRequestFinder, pullRequestsCloser, packageUpdater }) {
10
11
  this.git = git;
11
12
  this.packageManager = packageManager;
12
13
  this.pullRequestCreator = pullRequestCreator;
13
14
  this.branchFinder = branchFinder;
14
- this.logger = logger;
15
15
  this.commitMessageCreator = commitMessageCreator;
16
16
  this.pullRequestFinder = pullRequestFinder;
17
17
  this.pullRequestsCloser = pullRequestsCloser;
@@ -22,38 +22,38 @@ class OutdatedPackageProcessor {
22
22
  */
23
23
  async process(outdatedPackage) {
24
24
  const branchName = (0, git_1.createBranchName)(outdatedPackage);
25
- this.logger.debug(`branchName=${branchName}`);
25
+ logger_1.logger.debug(`branchName=${branchName}`);
26
26
  if (this.branchFinder.findByName(branchName) !== undefined) {
27
- this.logger.info(`Skip ${outdatedPackage.name} because ${branchName} branch already exists on remote.`);
27
+ logger_1.logger.info(`Skip ${outdatedPackage.name} because ${branchName} branch already exists on remote.`);
28
28
  return (0, Either_1.right)({
29
29
  outdatedPackage,
30
30
  skipped: true
31
31
  });
32
32
  }
33
33
  await this.git.createBranch(branchName);
34
- this.logger.info(`${branchName} branch has created.`);
34
+ logger_1.logger.info(`${branchName} branch has created.`);
35
35
  try {
36
36
  try {
37
37
  await this.packageUpdater.update(outdatedPackage);
38
38
  }
39
39
  catch (error) {
40
- this.logger.error(error);
40
+ logger_1.logger.error(error);
41
41
  return (0, Either_1.left)({
42
42
  outdatedPackage,
43
43
  error
44
44
  });
45
45
  }
46
- this.logger.info(`${outdatedPackage.name} has updated from v${outdatedPackage.currentVersion.version} to v${outdatedPackage.newVersion.version}`);
46
+ logger_1.logger.info(`${outdatedPackage.name} has updated from v${outdatedPackage.currentVersion.version} to v${outdatedPackage.newVersion.version}`);
47
47
  await this.git.add(this.packageManager.packageFile, this.packageManager.lockFile);
48
48
  const message = this.commitMessageCreator.create(outdatedPackage);
49
- this.logger.debug(`message=${message}`);
49
+ logger_1.logger.debug(`message=${message}`);
50
50
  await this.git.commit(message);
51
51
  await this.git.push(branchName);
52
52
  const pullRequest = await this.pullRequestCreator.create({
53
53
  outdatedPackage,
54
54
  branchName
55
55
  });
56
- this.logger.info(`Pull request for ${outdatedPackage.name} has created. ${pullRequest.html_url}`);
56
+ logger_1.logger.info(`Pull request for ${outdatedPackage.name} has created. ${pullRequest.html_url}`);
57
57
  await this.closeOldPullRequests(outdatedPackage);
58
58
  return (0, Either_1.right)({
59
59
  outdatedPackage,
@@ -64,12 +64,12 @@ class OutdatedPackageProcessor {
64
64
  await this.git.restore(this.packageManager.packageFile, this.packageManager.lockFile);
65
65
  await this.git.switch('-');
66
66
  await this.git.removeBranch(branchName);
67
- this.logger.info(`${branchName} branch has removed.`);
67
+ logger_1.logger.info(`${branchName} branch has removed.`);
68
68
  }
69
69
  }
70
70
  async closeOldPullRequests(outdatedPackage) {
71
71
  const pullRequests = this.pullRequestFinder.findByPackageName(outdatedPackage.name);
72
- this.logger.debug(`pullRequests=${JSON.stringify(pullRequests)}`);
72
+ logger_1.logger.debug(`pullRequests=${JSON.stringify(pullRequests)}`);
73
73
  await this.pullRequestsCloser.close(pullRequests);
74
74
  }
75
75
  }
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OutdatedPackagesProcessor = void 0;
4
+ const logger_1 = require("../logger");
4
5
  class OutdatedPackagesProcessor {
5
- constructor({ outdatedPackageProcessor, logger }) {
6
+ constructor(outdatedPackageProcessor) {
6
7
  this.outdatedPackageProcessor = outdatedPackageProcessor;
7
- this.logger = logger;
8
8
  }
9
9
  async process(outdatedPackages) {
10
10
  const results = [];
11
11
  for (const outdatedPackage of outdatedPackages) {
12
- this.logger.debug(`outdatedPackage=${JSON.stringify(outdatedPackage)}`);
12
+ logger_1.logger.debug(`outdatedPackage=${JSON.stringify(outdatedPackage)}`);
13
13
  const result = await this.outdatedPackageProcessor.process(outdatedPackage);
14
14
  results.push(result);
15
15
  }
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.GitHub = void 0;
4
- const number_1 = require("../number");
7
+ const range_1 = __importDefault(require("lodash/range"));
5
8
  class GitHub {
6
9
  constructor(octokit) {
7
10
  this.octokit = octokit;
@@ -59,7 +62,7 @@ class GitHub {
59
62
  }
60
63
  async fetchBranches({ owner, repo }) {
61
64
  const branches = [];
62
- for (const page of (0, number_1.range)(1, 11)) {
65
+ for (const page of (0, range_1.default)(1, 11)) {
63
66
  const { data } = await this.octokit.repos.listBranches({
64
67
  owner,
65
68
  repo,
@@ -83,7 +86,7 @@ class GitHub {
83
86
  }
84
87
  async fetchPullRequests({ owner, repo }) {
85
88
  const pullRequests = [];
86
- for (const page of (0, number_1.range)(1, 11)) {
89
+ for (const page of (0, range_1.default)(1, 11)) {
87
90
  const { data } = await this.octokit.pulls.list({
88
91
  owner,
89
92
  repo,
@@ -1,18 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LabelCreator = void 0;
4
+ const logger_1 = require("../../../logger");
4
5
  const errors_1 = require("../../errors");
5
6
  // TODO: Split into multiple classes and functions
6
7
  class LabelCreator {
7
- constructor({ github, gitRepo, logger }) {
8
+ constructor({ github, gitRepo }) {
8
9
  this.github = github;
9
10
  this.gitRepo = gitRepo;
10
- this.logger = logger;
11
11
  }
12
12
  async create({ name, description, color }) {
13
13
  const label = await this.fetchLabel(name);
14
14
  if (label !== undefined) {
15
- this.logger.info(`Skip creating ${name} label because it already exists.`);
15
+ logger_1.logger.info(`Skip creating ${name} label because it already exists.`);
16
16
  return;
17
17
  }
18
18
  await this.createLabel({
@@ -20,7 +20,7 @@ class LabelCreator {
20
20
  description,
21
21
  color
22
22
  });
23
- this.logger.info(`${name} label has created.`);
23
+ logger_1.logger.info(`${name} label has created.`);
24
24
  }
25
25
  async createLabel({ name, description, color }) {
26
26
  await this.github.createLabel({
@@ -41,7 +41,7 @@ class LabelCreator {
41
41
  }
42
42
  catch (e) {
43
43
  if ((0, errors_1.isNotFoundError)(e)) {
44
- this.logger.warn(e);
44
+ logger_1.logger.warn(e);
45
45
  return undefined;
46
46
  }
47
47
  else {
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PullRequestsCloser = void 0;
4
+ const logger_1 = require("../../../logger");
4
5
  class PullRequestsCloser {
5
- constructor({ pullRequestCloser, logger }) {
6
+ constructor(pullRequestCloser) {
6
7
  this.pullRequestCloser = pullRequestCloser;
7
- this.logger = logger;
8
8
  }
9
9
  async close(pullRequests) {
10
10
  await Promise.all(pullRequests.map(async (pullRequest) => {
11
11
  await this.pullRequestCloser.close(pullRequest);
12
- this.logger.info(`Pull request #${pullRequest.number} has closed. ${pullRequest.html_url}`);
12
+ logger_1.logger.info(`Pull request #${pullRequest.number} has closed. ${pullRequest.html_url}`);
13
13
  }));
14
14
  }
15
15
  }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AssigneesAdder = void 0;
7
+ const shuffle_1 = __importDefault(require("lodash/shuffle"));
8
+ // TODO: Add test
9
+ class AssigneesAdder {
10
+ constructor({ github, gitRepo }) {
11
+ this.github = github;
12
+ this.gitRepo = gitRepo;
13
+ }
14
+ async add({ issueNumber, assignees, sampleSize }) {
15
+ await this.github.addAssignees({
16
+ owner: this.gitRepo.owner,
17
+ repo: this.gitRepo.name,
18
+ issueNumber,
19
+ assignees: sampleSize !== undefined ? (0, shuffle_1.default)(assignees).slice(0, sampleSize) : assignees
20
+ });
21
+ }
22
+ }
23
+ exports.AssigneesAdder = AssigneesAdder;
@@ -1,22 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PullRequestCreator = void 0;
4
+ const logger_1 = require("../../../logger");
4
5
  class PullRequestCreator {
5
- constructor({ github, gitRepo, githubRepo, pullRequestTitleCreator, pullRequestBodyCreator, logger, reviewers, assignees }) {
6
+ constructor({ options, github, gitRepo, githubRepo, pullRequestTitleCreator, pullRequestBodyCreator, assigneesAdder }) {
7
+ this.options = options;
6
8
  this.github = github;
7
9
  this.gitRepo = gitRepo;
8
10
  this.githubRepo = githubRepo;
9
11
  this.pullRequestTitleCreator = pullRequestTitleCreator;
10
12
  this.pullRequestBodyCreator = pullRequestBodyCreator;
11
- this.logger = logger;
12
- this.reviewers = reviewers;
13
- this.assignees = assignees;
13
+ this.assigneesAdder = assigneesAdder;
14
14
  }
15
15
  async create({ outdatedPackage, branchName }) {
16
16
  const title = this.pullRequestTitleCreator.create(outdatedPackage);
17
- this.logger.debug(`title=${title}`);
17
+ logger_1.logger.debug(`title=${title}`);
18
18
  const body = await this.pullRequestBodyCreator.create(outdatedPackage);
19
- this.logger.debug(`body=${body}`);
19
+ logger_1.logger.debug(`body=${body}`);
20
20
  const pullRequest = await this.github.createPullRequest({
21
21
  owner: this.gitRepo.owner,
22
22
  repo: this.gitRepo.name,
@@ -25,27 +25,26 @@ class PullRequestCreator {
25
25
  title,
26
26
  body
27
27
  });
28
- this.logger.debug(`pullRequest=${JSON.stringify(pullRequest)}`);
28
+ logger_1.logger.debug(`pullRequest=${JSON.stringify(pullRequest)}`);
29
29
  await this.github.addLabels({
30
30
  owner: this.gitRepo.owner,
31
31
  repo: this.gitRepo.name,
32
32
  issueNumber: pullRequest.number,
33
33
  labels: ['npm-update-package']
34
34
  });
35
- if (this.assignees !== undefined) {
36
- await this.github.addAssignees({
37
- owner: this.gitRepo.owner,
38
- repo: this.gitRepo.name,
35
+ if (this.options.assignees !== undefined) {
36
+ await this.assigneesAdder.add({
39
37
  issueNumber: pullRequest.number,
40
- assignees: this.assignees
38
+ assignees: this.options.assignees,
39
+ sampleSize: this.options.assigneesSampleSize
41
40
  });
42
41
  }
43
- if (this.reviewers !== undefined) {
42
+ if (this.options.reviewers !== undefined) {
44
43
  await this.github.requestReviewers({
45
44
  owner: this.gitRepo.owner,
46
45
  repo: this.gitRepo.name,
47
46
  pullNumber: pullRequest.number,
48
- reviewers: this.reviewers
47
+ reviewers: this.options.reviewers
49
48
  });
50
49
  }
51
50
  return pullRequest;
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./AssigneesAdder"), exports);
17
18
  __exportStar(require("./GitHubUrlOptimizer"), exports);
18
19
  __exportStar(require("./PackageDiffsSectionCreator"), exports);
19
20
  __exportStar(require("./PullRequestBodyCreator"), exports);
@@ -14,6 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./createLogger"), exports);
18
- __exportStar(require("./Logger"), exports);
17
+ __exportStar(require("./logger"), exports);
19
18
  __exportStar(require("./LogLevel"), exports);
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = void 0;
4
+ const log4js_1 = require("log4js");
5
+ exports.logger = (0, log4js_1.getLogger)();
package/dist/src/main.js CHANGED
@@ -5,31 +5,29 @@ const Either_1 = require("fp-ts/lib/Either");
5
5
  const core_1 = require("./core");
6
6
  const git_1 = require("./git");
7
7
  const github_1 = require("./github");
8
+ const logger_1 = require("./logger");
8
9
  const ncu_1 = require("./ncu");
9
10
  const package_manager_1 = require("./package-manager");
10
11
  const terminal_1 = require("./terminal");
11
12
  // TODO: Add test
12
- const main = async ({ options, logger }) => {
13
- logger.debug(`options=${JSON.stringify({
13
+ const main = async (options) => {
14
+ logger_1.logger.debug(`options=${JSON.stringify({
14
15
  ...options,
15
16
  githubToken: options.githubToken !== '' ? '***' : ''
16
17
  })}`);
17
- const ncu = new ncu_1.Ncu({
18
- options,
19
- logger
20
- });
18
+ const ncu = new ncu_1.Ncu(options);
21
19
  const outdatedPackages = await ncu.check();
22
- logger.debug(`outdatedPackages=${JSON.stringify(outdatedPackages)}`);
20
+ logger_1.logger.debug(`outdatedPackages=${JSON.stringify(outdatedPackages)}`);
23
21
  if (outdatedPackages.length === 0) {
24
- logger.info('All packages are up-to-date.');
22
+ logger_1.logger.info('All packages are up-to-date.');
25
23
  return;
26
24
  }
27
- logger.info(`There are ${outdatedPackages.length} outdated packages.`);
25
+ logger_1.logger.info(`There are ${outdatedPackages.length} outdated packages.`);
28
26
  const terminal = new terminal_1.Terminal();
29
27
  const git = new git_1.Git(terminal);
30
28
  const remoteUrl = await git.getRemoteUrl();
31
29
  const gitRepo = git_1.GitRepository.of(remoteUrl);
32
- logger.debug(`gitRepo=${JSON.stringify(gitRepo)}`);
30
+ logger_1.logger.debug(`gitRepo=${JSON.stringify(gitRepo)}`);
33
31
  if (gitRepo === undefined) {
34
32
  throw new Error(`Failed to parse remote url. URL=${remoteUrl}`);
35
33
  }
@@ -41,21 +39,20 @@ const main = async ({ options, logger }) => {
41
39
  owner: gitRepo.owner,
42
40
  repo: gitRepo.name
43
41
  });
44
- logger.debug(`githubRepo=${JSON.stringify(githubRepo)}`);
42
+ logger_1.logger.debug(`githubRepo=${JSON.stringify(githubRepo)}`);
45
43
  const branches = await github.fetchBranches({
46
44
  owner: gitRepo.owner,
47
45
  repo: gitRepo.name
48
46
  });
49
- logger.debug(`branches=${JSON.stringify(branches)}`);
47
+ logger_1.logger.debug(`branches=${JSON.stringify(branches)}`);
50
48
  const pullRequests = await github.fetchPullRequests({
51
49
  owner: gitRepo.owner,
52
50
  repo: gitRepo.name
53
51
  });
54
- logger.debug(`pullRequests=${JSON.stringify(pullRequests)}`);
52
+ logger_1.logger.debug(`pullRequests=${JSON.stringify(pullRequests)}`);
55
53
  const labelCreator = new github_1.LabelCreator({
56
54
  github,
57
- gitRepo,
58
- logger
55
+ gitRepo
59
56
  });
60
57
  await labelCreator.create({
61
58
  name: 'npm-update-package',
@@ -63,10 +60,7 @@ const main = async ({ options, logger }) => {
63
60
  color: 'A00F21'
64
61
  });
65
62
  const branchFinder = new github_1.BranchFinder(branches);
66
- const packageManagerCreator = new package_manager_1.PackageManagerCreator({
67
- options,
68
- logger
69
- });
63
+ const packageManagerCreator = new package_manager_1.PackageManagerCreator(options);
70
64
  const packageManager = await packageManagerCreator.create(terminal);
71
65
  const pullRequestTitleCreator = new github_1.PullRequestTitleCreator(options.prTitle);
72
66
  const releasesFetcher = new github_1.ReleasesFetcher({
@@ -82,23 +76,23 @@ const main = async ({ options, logger }) => {
82
76
  packageDiffsSectionCreator,
83
77
  releaseNotesSectionCreator
84
78
  });
79
+ const assigneesAdder = new github_1.AssigneesAdder({
80
+ github,
81
+ gitRepo
82
+ });
85
83
  const pullRequestCreator = new github_1.PullRequestCreator({
84
+ options,
86
85
  github,
87
86
  gitRepo,
88
87
  githubRepo,
89
88
  pullRequestTitleCreator,
90
89
  pullRequestBodyCreator,
91
- logger,
92
- reviewers: options.reviewers,
93
- assignees: options.assignees
90
+ assigneesAdder
94
91
  });
95
92
  const commitMessageCreator = new git_1.CommitMessageCreator(options.commitMessage);
96
93
  const pullRequestFinder = new github_1.PullRequestFinder(pullRequests);
97
94
  const pullRequestCloser = new github_1.PullRequestCloser(github);
98
- const pullRequestsCloser = new github_1.PullRequestsCloser({
99
- pullRequestCloser,
100
- logger
101
- });
95
+ const pullRequestsCloser = new github_1.PullRequestsCloser(pullRequestCloser);
102
96
  const packageUpdater = new core_1.PackageUpdater({
103
97
  packageManager,
104
98
  ncu
@@ -108,7 +102,6 @@ const main = async ({ options, logger }) => {
108
102
  packageManager,
109
103
  pullRequestCreator,
110
104
  branchFinder,
111
- logger,
112
105
  commitMessageCreator,
113
106
  pullRequestFinder,
114
107
  pullRequestsCloser,
@@ -119,33 +112,30 @@ const main = async ({ options, logger }) => {
119
112
  git
120
113
  });
121
114
  await gitConfigInitializer.initialize();
122
- const outdatedPackagesProcessor = new core_1.OutdatedPackagesProcessor({
123
- outdatedPackageProcessor,
124
- logger
125
- });
115
+ const outdatedPackagesProcessor = new core_1.OutdatedPackagesProcessor(outdatedPackageProcessor);
126
116
  const results = await outdatedPackagesProcessor.process(outdatedPackages);
127
- logger.debug(`results=${JSON.stringify(results)}`);
117
+ logger_1.logger.debug(`results=${JSON.stringify(results)}`);
128
118
  const succeededResults = results.filter(Either_1.isRight).map(({ right }) => right);
129
- logger.debug(`succeededResults=${JSON.stringify(succeededResults)}`);
119
+ logger_1.logger.debug(`succeededResults=${JSON.stringify(succeededResults)}`);
130
120
  const createdPackages = succeededResults
131
121
  .filter(({ created }) => created)
132
122
  .map(({ outdatedPackage }) => outdatedPackage);
133
- logger.debug(`createdPackages=${JSON.stringify(createdPackages)}`);
123
+ logger_1.logger.debug(`createdPackages=${JSON.stringify(createdPackages)}`);
134
124
  const skippedPackages = succeededResults
135
125
  .filter(({ skipped }) => skipped)
136
126
  .map(({ outdatedPackage }) => outdatedPackage);
137
- logger.debug(`skippedPackages=${JSON.stringify(skippedPackages)}`);
127
+ logger_1.logger.debug(`skippedPackages=${JSON.stringify(skippedPackages)}`);
138
128
  const failedResults = results.filter(Either_1.isLeft).map(({ left }) => left);
139
- logger.debug(`failedResults=${JSON.stringify(failedResults)}`);
129
+ logger_1.logger.debug(`failedResults=${JSON.stringify(failedResults)}`);
140
130
  const failedPackages = failedResults.map(({ outdatedPackage }) => outdatedPackage);
141
- logger.debug(`failedPackages=${JSON.stringify(failedPackages)}`);
131
+ logger_1.logger.debug(`failedPackages=${JSON.stringify(failedPackages)}`);
142
132
  // TODO: Show as table
143
- logger.info(`Processed ${succeededResults.length + failedPackages.length} packages:
133
+ logger_1.logger.info(`Processed ${succeededResults.length + failedPackages.length} packages:
144
134
  - ${createdPackages.length} packages: created (${createdPackages.map(({ name }) => name).join(',')})
145
135
  - ${skippedPackages.length} packages: skipped: (${skippedPackages.map(({ name }) => name).join(',')})
146
136
  - ${failedPackages.length} packages: failed: (${failedPackages.map(({ name }) => name).join(',')})`);
147
137
  if (options.ignorePackages !== undefined) {
148
- logger.info(`Ignored ${options.ignorePackages.length} packages: ${options.ignorePackages.join(',')}`);
138
+ logger_1.logger.info(`Ignored ${options.ignorePackages.length} packages: ${options.ignorePackages.join(',')}`);
149
139
  }
150
140
  };
151
141
  exports.main = main;
@@ -4,14 +4,14 @@ exports.Ncu = void 0;
4
4
  const npm_check_updates_1 = require("npm-check-updates");
5
5
  const type_guards_1 = require("type-guards");
6
6
  const file_1 = require("../file");
7
+ const logger_1 = require("../logger");
7
8
  const package_json_1 = require("../package-json");
8
9
  const semver_1 = require("../semver");
9
10
  const NcuResult_1 = require("./NcuResult");
10
11
  // TODO: Add test
11
12
  class Ncu {
12
- constructor({ options, logger }) {
13
+ constructor(options) {
13
14
  this.options = options;
14
- this.logger = logger;
15
15
  }
16
16
  async check() {
17
17
  return await this.run({
@@ -32,9 +32,9 @@ class Ncu {
32
32
  // Read package.json before running ncu
33
33
  const json = await (0, file_1.readFile)('./package.json');
34
34
  const pkg = (0, package_json_1.parsePackageJson)(json);
35
- this.logger.debug(`pkg=${JSON.stringify(pkg)}`);
35
+ logger_1.logger.debug(`pkg=${JSON.stringify(pkg)}`);
36
36
  const result = await (0, npm_check_updates_1.run)(options);
37
- this.logger.debug(`result=${JSON.stringify(result)}`);
37
+ logger_1.logger.debug(`result=${JSON.stringify(result)}`);
38
38
  if (!(0, NcuResult_1.isNcuResult)(result)) {
39
39
  throw new Error('Failed to running ncu.');
40
40
  }
@@ -24,6 +24,7 @@ const Options = (0, io_ts_1.intersection)([
24
24
  }),
25
25
  (0, io_ts_1.partial)({
26
26
  assignees: (0, io_ts_1.array)(io_ts_1.string),
27
+ assigneesSampleSize: io_ts_1.number,
27
28
  gitUserEmail: io_ts_1.string,
28
29
  gitUserName: io_ts_1.string,
29
30
  ignorePackages: (0, io_ts_1.array)(io_ts_1.string),
@@ -11,6 +11,12 @@ exports.cliOptions = [
11
11
  type: OptionType_1.OptionType.StringArray,
12
12
  required: false
13
13
  },
14
+ {
15
+ name: 'assignees-sample-size',
16
+ description: 'How many members to be assigned to assignees',
17
+ type: OptionType_1.OptionType.Number,
18
+ required: false
19
+ },
14
20
  {
15
21
  name: 'commit-message',
16
22
  description: 'Commit message template',
@@ -1,32 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PackageManagerCreator = void 0;
4
+ const logger_1 = require("../logger");
4
5
  const detectPackageManager_1 = require("./detectPackageManager");
5
- const Npm_1 = require("./Npm");
6
+ const npm_1 = require("./npm");
6
7
  const PackageManagerName_1 = require("./PackageManagerName");
7
- const Yarn_1 = require("./Yarn");
8
+ const yarn_1 = require("./yarn");
8
9
  class PackageManagerCreator {
9
- constructor({ options, logger }) {
10
+ constructor(options) {
10
11
  this.options = options;
11
- this.logger = logger;
12
12
  }
13
13
  async create(terminal) {
14
14
  const packageManagerName = await this.getPackageManagerName();
15
- this.logger.trace(`packageManagerName=${packageManagerName}`);
15
+ logger_1.logger.trace(`packageManagerName=${packageManagerName}`);
16
16
  switch (packageManagerName) {
17
17
  case PackageManagerName_1.PackageManagerName.Npm:
18
- this.logger.info('Use npm as package manager');
19
- return new Npm_1.Npm(terminal);
18
+ logger_1.logger.info('Use npm as package manager');
19
+ return new npm_1.Npm(terminal);
20
20
  case PackageManagerName_1.PackageManagerName.Yarn:
21
- this.logger.info('Use Yarn as package manager');
22
- return new Yarn_1.Yarn(terminal);
21
+ logger_1.logger.info('Use Yarn as package manager');
22
+ return new yarn_1.Yarn(terminal);
23
23
  }
24
24
  }
25
25
  async getPackageManagerName() {
26
26
  if (this.options.packageManager !== undefined) {
27
27
  return this.options.packageManager;
28
28
  }
29
- this.logger.info('Try to detect package manager from lock file.');
29
+ logger_1.logger.info('Try to detect package manager from lock file.');
30
30
  return await (0, detectPackageManager_1.detectPackageManager)();
31
31
  }
32
32
  }
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./Npm"), exports);
17
+ __exportStar(require("./npm"), exports);
18
18
  __exportStar(require("./PackageManager"), exports);
19
19
  __exportStar(require("./PackageManagerCreator"), exports);
20
20
  __exportStar(require("./PackageManagerName"), exports);
21
- __exportStar(require("./Yarn"), exports);
21
+ __exportStar(require("./yarn"), exports);
File without changes
@@ -14,4 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./range"), exports);
17
+ __exportStar(require("./Npm"), exports);
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Yarn"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "npm-update-package",
3
- "version": "0.55.0",
3
+ "version": "0.56.0",
4
4
  "description": "CLI tool for creating pull requests to update npm packages",
5
5
  "scripts": {
6
6
  "build": "tsc --project tsconfig.build.json",
@@ -20,12 +20,13 @@
20
20
  "fp-ts": "2.11.9",
21
21
  "http-status-codes": "2.2.0",
22
22
  "io-ts": "2.2.16",
23
+ "lodash": "4.14.2",
23
24
  "log4js": "6.4.4",
24
25
  "mustache": "4.1.0",
25
26
  "node-fetch": "2.6.7",
26
- "npm-check-updates": "12.5.7",
27
+ "npm-check-updates": "12.5.8",
27
28
  "parse-github-url": "1.0.2",
28
- "semver": "7.3.5",
29
+ "semver": "7.3.6",
29
30
  "sleep-promise": "9.1.0",
30
31
  "type-guards": "0.15.0"
31
32
  },
@@ -33,6 +34,7 @@
33
34
  "@jest/types": "27.4.2",
34
35
  "@tsconfig/node12": "1.0.9",
35
36
  "@types/jest": "27.4.1",
37
+ "@types/lodash": "4.14.181",
36
38
  "@types/mustache": "4.1.2",
37
39
  "@types/node": "12.20.47",
38
40
  "@types/node-fetch": "2.6.1",
@@ -41,7 +43,7 @@
41
43
  "@typescript-eslint/eslint-plugin": "5.18.0",
42
44
  "eslint": "8.12.0",
43
45
  "eslint-config-standard-with-typescript": "21.0.1",
44
- "eslint-plugin-import": "2.25.4",
46
+ "eslint-plugin-import": "2.26.0",
45
47
  "eslint-plugin-jest": "26.1.3",
46
48
  "eslint-plugin-node": "11.1.0",
47
49
  "eslint-plugin-promise": "6.0.0",
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createLogger = void 0;
4
- const log4js_1 = require("log4js");
5
- const createLogger = (logLevel) => {
6
- const logger = (0, log4js_1.getLogger)();
7
- logger.level = logLevel;
8
- return logger;
9
- };
10
- exports.createLogger = createLogger;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.range = void 0;
4
- // TODO: Add test
5
- function* range(start, end) {
6
- for (let i = start; i <= end; i++) {
7
- yield i;
8
- }
9
- }
10
- exports.range = range;