npm-update-package 3.0.22 → 4.0.0-1

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 (178) hide show
  1. package/dist/app.js +3 -0
  2. package/dist/bin/npm-update-package.js +16 -0
  3. package/dist/core/FailedResult.js +1 -0
  4. package/dist/core/OutdatedPackage.js +1 -0
  5. package/dist/{src/core → core}/OutdatedPackagesProcessor.js +3 -7
  6. package/dist/{src/core → core}/PackageUpdater.js +1 -5
  7. package/dist/core/SucceededResult.js +1 -0
  8. package/dist/file/canReadWrite.js +11 -0
  9. package/dist/file/readFile.js +4 -0
  10. package/dist/{src/git → git}/CommitMessageCreator.js +3 -7
  11. package/dist/{src/git → git}/Git.js +1 -5
  12. package/dist/{src/git → git}/GitConfigInitializer.js +1 -5
  13. package/dist/{src/git → git}/GitRepository.js +5 -12
  14. package/dist/{src/git → git}/GitTransaction.js +4 -8
  15. package/dist/git/createBranchName.js +5 -0
  16. package/dist/{src/github → github}/GitHub.js +4 -8
  17. package/dist/{src/github → github}/branch/finder/BranchFinder.js +1 -5
  18. package/dist/github/createGitHub.js +9 -0
  19. package/dist/github/createOctokit.js +22 -0
  20. package/dist/github/errors/NotFoundError.js +5 -0
  21. package/dist/{src/github → github}/label/creator/LabelCreator.js +7 -11
  22. package/dist/{src/github → github}/pull-request/closer/PullRequestCloser.js +1 -5
  23. package/dist/github/pull-request/closer/PullRequestsCloser.js +13 -0
  24. package/dist/{src/github → github}/pull-request/creator/AssigneesAdder.js +3 -7
  25. package/dist/{src/github → github}/pull-request/creator/GitHubUrlOptimizer.js +3 -7
  26. package/dist/{src/github → github}/pull-request/creator/LabelsAdder.js +1 -5
  27. package/dist/{src/github → github}/pull-request/creator/PackageDiffsSectionCreator.js +1 -5
  28. package/dist/{src/github → github}/pull-request/creator/PullRequestBodyCreator.js +15 -18
  29. package/dist/{src/github → github}/pull-request/creator/PullRequestCreator.js +5 -9
  30. package/dist/{src/github → github}/pull-request/creator/PullRequestTitleCreator.js +3 -7
  31. package/dist/{src/github → github}/pull-request/creator/ReleaseNotesSectionCreator.js +1 -5
  32. package/dist/{src/github → github}/pull-request/creator/ReviewersAdder.js +3 -7
  33. package/dist/github/pull-request/creator/createFooter.js +4 -0
  34. package/dist/github/pull-request/creator/createMetadataSection.js +21 -0
  35. package/dist/github/pull-request/creator/createNotesSection.js +5 -0
  36. package/dist/{src/github → github}/pull-request/creator/createOutdatedPackagesTable.js +1 -5
  37. package/dist/github/pull-request/finder/PullRequestFinder.js +23 -0
  38. package/dist/github/pull-request/finder/isPullRequestByNpmUpdatePackage.js +3 -0
  39. package/dist/github/pull-request/metadata/PullRequestMetadata.js +12 -0
  40. package/dist/github/pull-request/metadata/createPullRequestMetadata.js +12 -0
  41. package/dist/{src/github → github}/pull-request/metadata/extractPullRequestMetadata.js +3 -7
  42. package/dist/github/releases/Release.js +1 -0
  43. package/dist/{src/github → github}/releases/fetcher/ReleasesFetcher.js +9 -16
  44. package/dist/json/toJSON.js +4 -0
  45. package/dist/logger/LogLevel.js +12 -0
  46. package/dist/logger/logger.js +2 -0
  47. package/dist/main.js +175 -0
  48. package/dist/npm-check-updates/Dependency.js +10 -0
  49. package/dist/{src/npm-check-updates → npm-check-updates}/NpmCheckUpdates.js +32 -34
  50. package/dist/npm-check-updates/NpmCheckUpdatesResult.js +3 -0
  51. package/dist/npm-check-updates/createDepOptionValue.js +7 -0
  52. package/dist/npm-check-updates/toDependency.js +17 -0
  53. package/dist/options/CLIOption.js +1 -0
  54. package/dist/options/OptionType.js +9 -0
  55. package/dist/options/Options.js +53 -0
  56. package/dist/{src/options → options}/cliOptions.js +50 -53
  57. package/dist/options/createOptions.js +16 -0
  58. package/dist/options/initOptions.js +5 -0
  59. package/dist/options/parseBooleanOption.js +11 -0
  60. package/dist/options/parseNumberOption.js +8 -0
  61. package/dist/options/toCommanderOption.js +37 -0
  62. package/dist/outdated-package-processor/OutdatedPackageProcessor.js +1 -0
  63. package/dist/{src/outdated-package-processor → outdated-package-processor}/OutdatedPackageProcessorCreator.js +11 -15
  64. package/dist/outdated-package-processor/OutdatedPullRequestStrategy.js +8 -0
  65. package/dist/{src/outdated-package-processor → outdated-package-processor}/create/Create.js +17 -20
  66. package/dist/{src/outdated-package-processor → outdated-package-processor}/recreate/Recreate.js +18 -21
  67. package/dist/{src/outdated-package-processor → outdated-package-processor}/skip/Skip.js +20 -23
  68. package/dist/package-json/DependencyType.js +10 -0
  69. package/dist/package-json/PackageMetadata.js +18 -0
  70. package/dist/package-json/PackageMetadataDependencies.js +3 -0
  71. package/dist/package-json/PackageMetadataRepository.js +5 -0
  72. package/dist/package-json/extractRepository.js +9 -0
  73. package/dist/package-json/parsePackageJson.js +10 -0
  74. package/dist/package-json/readPackageJson.js +7 -0
  75. package/dist/package-manager/PackageManager.js +1 -0
  76. package/dist/package-manager/PackageManagerCreator.js +30 -0
  77. package/dist/package-manager/PackageManagerName.js +7 -0
  78. package/dist/package-manager/detectPackageManager.js +11 -0
  79. package/dist/{src/package-manager → package-manager}/npm/Npm.js +3 -7
  80. package/dist/package-manager/npm/NpmVersions.js +3 -0
  81. package/dist/{src/package-manager → package-manager}/yarn/Yarn.js +3 -7
  82. package/dist/package-manager/yarn/YarnVersions.js +6 -0
  83. package/dist/{src/semver → semver}/SemVer.js +3 -7
  84. package/dist/semver/SemVerLevel.js +8 -0
  85. package/dist/semver/compareSemVers.js +12 -0
  86. package/dist/terminal/Terminal.js +7 -0
  87. package/dist/util/range.js +5 -0
  88. package/dist/util/sampleSize.js +4 -0
  89. package/dist/util/sleep.js +3 -0
  90. package/package.json +7 -4
  91. package/dist/package.json +0 -72
  92. package/dist/src/bin/npm-update-package.js +0 -22
  93. package/dist/src/core/FailedResult.js +0 -2
  94. package/dist/src/core/OutdatedPackage.js +0 -2
  95. package/dist/src/core/SucceededResult.js +0 -2
  96. package/dist/src/core/index.js +0 -21
  97. package/dist/src/file/canReadWrite.js +0 -18
  98. package/dist/src/file/index.js +0 -18
  99. package/dist/src/file/readFile.js +0 -11
  100. package/dist/src/git/createBranchName.js +0 -9
  101. package/dist/src/git/index.js +0 -22
  102. package/dist/src/github/branch/finder/index.js +0 -17
  103. package/dist/src/github/branch/index.js +0 -17
  104. package/dist/src/github/createGitHub.js +0 -13
  105. package/dist/src/github/createOctokit.js +0 -29
  106. package/dist/src/github/errors/NotFoundError.js +0 -9
  107. package/dist/src/github/errors/index.js +0 -17
  108. package/dist/src/github/index.js +0 -22
  109. package/dist/src/github/label/creator/index.js +0 -17
  110. package/dist/src/github/label/index.js +0 -17
  111. package/dist/src/github/pull-request/closer/PullRequestsCloser.js +0 -17
  112. package/dist/src/github/pull-request/closer/index.js +0 -18
  113. package/dist/src/github/pull-request/creator/createFooter.js +0 -11
  114. package/dist/src/github/pull-request/creator/createMetadataSection.js +0 -25
  115. package/dist/src/github/pull-request/creator/createNotesSection.js +0 -9
  116. package/dist/src/github/pull-request/creator/index.js +0 -25
  117. package/dist/src/github/pull-request/finder/PullRequestFinder.js +0 -27
  118. package/dist/src/github/pull-request/finder/index.js +0 -17
  119. package/dist/src/github/pull-request/finder/isPullRequestByNpmUpdatePackage.js +0 -7
  120. package/dist/src/github/pull-request/index.js +0 -19
  121. package/dist/src/github/pull-request/metadata/PullRequestMetadata.js +0 -15
  122. package/dist/src/github/pull-request/metadata/createPullRequestMetadata.js +0 -19
  123. package/dist/src/github/pull-request/metadata/index.js +0 -19
  124. package/dist/src/github/releases/Release.js +0 -2
  125. package/dist/src/github/releases/fetcher/index.js +0 -17
  126. package/dist/src/github/releases/index.js +0 -18
  127. package/dist/src/json/index.js +0 -17
  128. package/dist/src/json/toJSON.js +0 -8
  129. package/dist/src/logger/LogLevel.js +0 -16
  130. package/dist/src/logger/index.js +0 -18
  131. package/dist/src/logger/logger.js +0 -5
  132. package/dist/src/main.js +0 -160
  133. package/dist/src/npm-check-updates/Dependency.js +0 -14
  134. package/dist/src/npm-check-updates/NpmCheckUpdatesResult.js +0 -6
  135. package/dist/src/npm-check-updates/createDepOptionValue.js +0 -11
  136. package/dist/src/npm-check-updates/index.js +0 -17
  137. package/dist/src/npm-check-updates/toDependency.js +0 -21
  138. package/dist/src/options/CLIOption.js +0 -2
  139. package/dist/src/options/OptionType.js +0 -13
  140. package/dist/src/options/Options.js +0 -56
  141. package/dist/src/options/createOptions.js +0 -23
  142. package/dist/src/options/index.js +0 -18
  143. package/dist/src/options/initOptions.js +0 -9
  144. package/dist/src/options/parseBooleanOption.js +0 -15
  145. package/dist/src/options/parseNumberOption.js +0 -12
  146. package/dist/src/options/toCommanderOption.js +0 -41
  147. package/dist/src/outdated-package-processor/OutdatedPackageProcessor.js +0 -2
  148. package/dist/src/outdated-package-processor/OutdatedPullRequestStrategy.js +0 -12
  149. package/dist/src/outdated-package-processor/create/index.js +0 -17
  150. package/dist/src/outdated-package-processor/index.js +0 -19
  151. package/dist/src/outdated-package-processor/recreate/index.js +0 -17
  152. package/dist/src/outdated-package-processor/skip/index.js +0 -17
  153. package/dist/src/package-json/DependencyType.js +0 -14
  154. package/dist/src/package-json/PackageMetadata.js +0 -21
  155. package/dist/src/package-json/PackageMetadataDependencies.js +0 -6
  156. package/dist/src/package-json/PackageMetadataRepository.js +0 -8
  157. package/dist/src/package-json/extractRepository.js +0 -13
  158. package/dist/src/package-json/index.js +0 -21
  159. package/dist/src/package-json/parsePackageJson.js +0 -14
  160. package/dist/src/package-json/readPackageJson.js +0 -11
  161. package/dist/src/package-manager/PackageManager.js +0 -2
  162. package/dist/src/package-manager/PackageManagerCreator.js +0 -34
  163. package/dist/src/package-manager/PackageManagerName.js +0 -11
  164. package/dist/src/package-manager/detectPackageManager.js +0 -15
  165. package/dist/src/package-manager/index.js +0 -21
  166. package/dist/src/package-manager/npm/NpmVersions.js +0 -6
  167. package/dist/src/package-manager/npm/index.js +0 -17
  168. package/dist/src/package-manager/yarn/YarnVersions.js +0 -9
  169. package/dist/src/package-manager/yarn/index.js +0 -17
  170. package/dist/src/semver/SemVerLevel.js +0 -12
  171. package/dist/src/semver/compareSemVers.js +0 -16
  172. package/dist/src/semver/index.js +0 -19
  173. package/dist/src/terminal/Terminal.js +0 -14
  174. package/dist/src/terminal/index.js +0 -17
  175. package/dist/src/util/index.js +0 -19
  176. package/dist/src/util/range.js +0 -9
  177. package/dist/src/util/sampleSize.js +0 -11
  178. package/dist/src/util/sleep.js +0 -7
@@ -1,7 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createOutdatedPackagesTable = void 0;
4
- const createOutdatedPackagesTable = (outdatedPackage) => {
1
+ export const createOutdatedPackagesTable = (outdatedPackage) => {
5
2
  const packageName = outdatedPackage.name;
6
3
  const packageLink = `[${packageName}](https://www.npmjs.com/package/${packageName})`;
7
4
  const dependencyType = outdatedPackage.dependencyType;
@@ -14,4 +11,3 @@ const createOutdatedPackagesTable = (outdatedPackage) => {
14
11
  |---|---|---|---|---|
15
12
  |${packageLink}|${dependencyType}|${level}|${currentVersionLink}|${newVersionLink}|`;
16
13
  };
17
- exports.createOutdatedPackagesTable = createOutdatedPackagesTable;
@@ -0,0 +1,23 @@
1
+ import { extractPullRequestMetadata } from '../metadata/extractPullRequestMetadata.js';
2
+ import { isPullRequestByNpmUpdatePackage } from './isPullRequestByNpmUpdatePackage.js';
3
+ export class PullRequestFinder {
4
+ pullRequests;
5
+ constructor(pullRequests) {
6
+ this.pullRequests = pullRequests;
7
+ }
8
+ findByPackageName(packageName) {
9
+ return this.pullRequests
10
+ .filter(pullRequest => isPullRequestByNpmUpdatePackage(pullRequest))
11
+ .filter(({ body }) => {
12
+ if (body === null) {
13
+ return false;
14
+ }
15
+ const metadata = extractPullRequestMetadata(body);
16
+ if (metadata === undefined) {
17
+ return false;
18
+ }
19
+ const { packages } = metadata;
20
+ return packages.some(({ name }) => name === packageName);
21
+ });
22
+ }
23
+ }
@@ -0,0 +1,3 @@
1
+ export const isPullRequestByNpmUpdatePackage = (pullRequest) => {
2
+ return pullRequest.labels.some(({ name }) => name === 'npm-update-package');
3
+ };
@@ -0,0 +1,12 @@
1
+ import { array, literal, string, type, union } from 'io-ts';
2
+ import { SemVerLevel } from '../../../semver/SemVerLevel.js';
3
+ const PullRequestMetadata = type({
4
+ version: string,
5
+ packages: array(type({
6
+ name: string,
7
+ currentVersion: string,
8
+ newVersion: string,
9
+ level: union([literal(SemVerLevel.Major), literal(SemVerLevel.Minor), literal(SemVerLevel.Patch)])
10
+ }))
11
+ });
12
+ export const isPullRequestMetadata = PullRequestMetadata.is;
@@ -0,0 +1,12 @@
1
+ import * as app from '../../../app.js';
2
+ export const createPullRequestMetadata = (outdatedPackages) => {
3
+ return {
4
+ version: app.version,
5
+ packages: outdatedPackages.map(({ name, currentVersion, newVersion, level }) => ({
6
+ name,
7
+ currentVersion: currentVersion.version,
8
+ newVersion: newVersion.version,
9
+ level
10
+ }))
11
+ };
12
+ };
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extractPullRequestMetadata = void 0;
4
- const PullRequestMetadata_1 = require("./PullRequestMetadata");
5
- const extractPullRequestMetadata = (pullRequestBody) => {
1
+ import { isPullRequestMetadata } from './PullRequestMetadata.js';
2
+ export const extractPullRequestMetadata = (pullRequestBody) => {
6
3
  const matched = pullRequestBody.match(/<div id="npm-update-package-metadata">\s*```json\s*([\S\s]+?)\s*```\s*<\/div>/);
7
4
  if (matched === null) {
8
5
  return undefined;
@@ -13,9 +10,8 @@ const extractPullRequestMetadata = (pullRequestBody) => {
13
10
  return undefined;
14
11
  }
15
12
  const metadata = JSON.parse(json);
16
- if (!(0, PullRequestMetadata_1.isPullRequestMetadata)(metadata)) {
13
+ if (!isPullRequestMetadata(metadata)) {
17
14
  return undefined;
18
15
  }
19
16
  return metadata;
20
17
  };
21
- exports.extractPullRequestMetadata = extractPullRequestMetadata;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,14 +1,8 @@
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.ReleasesFetcher = void 0;
7
- const node_fetch_1 = __importDefault(require("node-fetch"));
8
- const semver_1 = require("semver");
9
- const util_1 = require("../../../util");
1
+ import fetch from 'node-fetch';
2
+ import { gte, lte, valid } from 'semver';
3
+ import { sleep } from '../../../util/sleep.js';
10
4
  // TODO: Split into multiple classes and functions
11
- class ReleasesFetcher {
5
+ export class ReleasesFetcher {
12
6
  options;
13
7
  packageManager;
14
8
  constructor({ options, packageManager }) {
@@ -29,7 +23,7 @@ class ReleasesFetcher {
29
23
  }
30
24
  async fetchReleaseByTag({ gitRepo, tag }) {
31
25
  const url = `${gitRepo.url.toString()}/releases/tag/${tag}`;
32
- const resp = await (0, node_fetch_1.default)(url);
26
+ const resp = await fetch(url);
33
27
  if (resp.ok) {
34
28
  return {
35
29
  tag,
@@ -41,7 +35,7 @@ class ReleasesFetcher {
41
35
  const releases = [];
42
36
  for (const [i, tag] of tags.entries()) {
43
37
  if (i > 0) {
44
- await (0, util_1.sleep)(this.options.fetchSleepTime);
38
+ await sleep(this.options.fetchSleepTime);
45
39
  }
46
40
  const release = await this.fetchReleaseByTag({
47
41
  gitRepo,
@@ -56,9 +50,8 @@ class ReleasesFetcher {
56
50
  async getVersions({ packageName, from, to }) {
57
51
  const versions = await this.packageManager.getVersions(packageName);
58
52
  // TODO: Move these to SemVer
59
- return versions.filter(version => (0, semver_1.valid)(version))
60
- .filter(version => (0, semver_1.gte)(version, from.version))
61
- .filter(version => (0, semver_1.lte)(version, to.version));
53
+ return versions.filter(version => valid(version))
54
+ .filter(version => gte(version, from.version))
55
+ .filter(version => lte(version, to.version));
62
56
  }
63
57
  }
64
- exports.ReleasesFetcher = ReleasesFetcher;
@@ -0,0 +1,4 @@
1
+ export const toJSON = (value, options) => {
2
+ const pretty = options?.pretty ?? false;
3
+ return pretty ? JSON.stringify(value, undefined, 2) : JSON.stringify(value);
4
+ };
@@ -0,0 +1,12 @@
1
+ export const LogLevel = {
2
+ Debug: 'debug',
3
+ Error: 'error',
4
+ Fatal: 'fatal',
5
+ Info: 'info',
6
+ Off: 'off',
7
+ Trace: 'trace',
8
+ Warn: 'warn'
9
+ };
10
+ const logLevels = Object.values(LogLevel);
11
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
12
+ export const isLogLevel = (value) => logLevels.includes(value);
@@ -0,0 +1,2 @@
1
+ import log4js from 'log4js';
2
+ export const logger = log4js.getLogger();
package/dist/main.js ADDED
@@ -0,0 +1,175 @@
1
+ import { isLeft, isRight } from 'fp-ts/lib/Either.js';
2
+ import { OutdatedPackagesProcessor } from './core/OutdatedPackagesProcessor.js';
3
+ import { PackageUpdater } from './core/PackageUpdater.js';
4
+ import { CommitMessageCreator } from './git/CommitMessageCreator.js';
5
+ import { Git } from './git/Git.js';
6
+ import { GitConfigInitializer } from './git/GitConfigInitializer.js';
7
+ import { GitRepository } from './git/GitRepository.js';
8
+ import { BranchFinder } from './github/branch/finder/BranchFinder.js';
9
+ import { createGitHub } from './github/createGitHub.js';
10
+ import { LabelCreator } from './github/label/creator/LabelCreator.js';
11
+ import { PullRequestCloser } from './github/pull-request/closer/PullRequestCloser.js';
12
+ import { PullRequestsCloser } from './github/pull-request/closer/PullRequestsCloser.js';
13
+ import { AssigneesAdder } from './github/pull-request/creator/AssigneesAdder.js';
14
+ import { GitHubUrlOptimizer } from './github/pull-request/creator/GitHubUrlOptimizer.js';
15
+ import { LabelsAdder } from './github/pull-request/creator/LabelsAdder.js';
16
+ import { PackageDiffsSectionCreator } from './github/pull-request/creator/PackageDiffsSectionCreator.js';
17
+ import { PullRequestBodyCreator } from './github/pull-request/creator/PullRequestBodyCreator.js';
18
+ import { PullRequestCreator } from './github/pull-request/creator/PullRequestCreator.js';
19
+ import { PullRequestTitleCreator } from './github/pull-request/creator/PullRequestTitleCreator.js';
20
+ import { ReleaseNotesSectionCreator } from './github/pull-request/creator/ReleaseNotesSectionCreator.js';
21
+ import { ReviewersAdder } from './github/pull-request/creator/ReviewersAdder.js';
22
+ import { PullRequestFinder } from './github/pull-request/finder/PullRequestFinder.js';
23
+ import { ReleasesFetcher } from './github/releases/fetcher/ReleasesFetcher.js';
24
+ import { logger } from './logger/logger.js';
25
+ import { NpmCheckUpdates } from './npm-check-updates/NpmCheckUpdates.js';
26
+ import { OutdatedPackageProcessorCreator } from './outdated-package-processor/OutdatedPackageProcessorCreator.js';
27
+ import { PackageManagerCreator } from './package-manager/PackageManagerCreator.js';
28
+ import { Terminal } from './terminal/Terminal.js';
29
+ // TODO: Add test
30
+ export const main = async (options) => {
31
+ logger.debug(`options=${JSON.stringify({
32
+ ...options,
33
+ githubToken: options.githubToken === '' ? '' : '***'
34
+ })}`);
35
+ const ncu = new NpmCheckUpdates(options);
36
+ const outdatedPackages = await ncu.check();
37
+ logger.debug(`outdatedPackages=${JSON.stringify(outdatedPackages)}`);
38
+ if (outdatedPackages.length === 0) {
39
+ logger.info('All packages are up-to-date.');
40
+ return;
41
+ }
42
+ logger.info(`There are ${outdatedPackages.length} outdated packages.`);
43
+ const terminal = new Terminal();
44
+ const git = new Git(terminal);
45
+ const remoteUrl = await git.getRemoteUrl();
46
+ const gitRepo = GitRepository.of(remoteUrl);
47
+ logger.debug(`gitRepo=${JSON.stringify(gitRepo)}`);
48
+ if (gitRepo === undefined) {
49
+ throw new Error(`Failed to parse remote url. URL=${remoteUrl}`);
50
+ }
51
+ const github = createGitHub({
52
+ host: gitRepo.url.host,
53
+ token: options.githubToken
54
+ });
55
+ const githubRepo = await github.fetchRepository({
56
+ owner: gitRepo.owner,
57
+ repo: gitRepo.name
58
+ });
59
+ logger.debug(`githubRepo=${JSON.stringify(githubRepo)}`);
60
+ const branches = await github.fetchBranches({
61
+ owner: gitRepo.owner,
62
+ repo: gitRepo.name
63
+ });
64
+ logger.debug(`branches=${JSON.stringify(branches)}`);
65
+ const pullRequests = await github.fetchPullRequests({
66
+ owner: gitRepo.owner,
67
+ repo: gitRepo.name
68
+ });
69
+ logger.debug(`pullRequests=${JSON.stringify(pullRequests)}`);
70
+ const labelCreator = new LabelCreator({
71
+ github,
72
+ gitRepo
73
+ });
74
+ await labelCreator.create({
75
+ name: 'npm-update-package',
76
+ description: 'Created by npm-update-package',
77
+ color: 'A00F21'
78
+ });
79
+ const branchFinder = new BranchFinder(branches);
80
+ const packageManagerCreator = new PackageManagerCreator(options);
81
+ const packageManager = await packageManagerCreator.create(terminal);
82
+ const pullRequestTitleCreator = new PullRequestTitleCreator(options.prTitle);
83
+ const releasesFetcher = new ReleasesFetcher({
84
+ options,
85
+ packageManager
86
+ });
87
+ const githubUrlOptimizer = new GitHubUrlOptimizer(options);
88
+ const packageDiffsSectionCreator = new PackageDiffsSectionCreator(githubUrlOptimizer);
89
+ const releaseNotesSectionCreator = new ReleaseNotesSectionCreator(githubUrlOptimizer);
90
+ const pullRequestBodyCreator = new PullRequestBodyCreator({
91
+ options,
92
+ releasesFetcher,
93
+ packageDiffsSectionCreator,
94
+ releaseNotesSectionCreator
95
+ });
96
+ const labelsAdder = new LabelsAdder({
97
+ options,
98
+ github,
99
+ gitRepo
100
+ });
101
+ const assigneesAdder = new AssigneesAdder({
102
+ github,
103
+ gitRepo
104
+ });
105
+ const reviewersAdder = new ReviewersAdder({
106
+ github,
107
+ gitRepo
108
+ });
109
+ const pullRequestCreator = new PullRequestCreator({
110
+ options,
111
+ github,
112
+ gitRepo,
113
+ githubRepo,
114
+ pullRequestTitleCreator,
115
+ pullRequestBodyCreator,
116
+ labelsAdder,
117
+ assigneesAdder,
118
+ reviewersAdder
119
+ });
120
+ const commitMessageCreator = new CommitMessageCreator(options.commitMessage);
121
+ const pullRequestFinder = new PullRequestFinder(pullRequests);
122
+ const pullRequestCloser = new PullRequestCloser(github);
123
+ const pullRequestsCloser = new PullRequestsCloser(pullRequestCloser);
124
+ const packageUpdater = new PackageUpdater({
125
+ packageManager,
126
+ ncu
127
+ });
128
+ const outdatedPackageProcessorCreator = new OutdatedPackageProcessorCreator(options);
129
+ const outdatedPackageProcessor = outdatedPackageProcessorCreator.create({
130
+ git,
131
+ packageManager,
132
+ pullRequestCreator,
133
+ branchFinder,
134
+ commitMessageCreator,
135
+ pullRequestFinder,
136
+ pullRequestsCloser,
137
+ packageUpdater
138
+ });
139
+ const gitConfigInitializer = new GitConfigInitializer({
140
+ options,
141
+ git
142
+ });
143
+ await gitConfigInitializer.initialize();
144
+ const outdatedPackagesProcessor = new OutdatedPackagesProcessor(outdatedPackageProcessor);
145
+ const results = await outdatedPackagesProcessor.process(outdatedPackages);
146
+ logger.debug(`results=${JSON.stringify(results)}`);
147
+ const succeededResults = results
148
+ // eslint-disable-next-line unicorn/no-array-callback-reference
149
+ .filter(isRight)
150
+ .map(({ right }) => right);
151
+ logger.debug(`succeededResults=${JSON.stringify(succeededResults)}`);
152
+ const createdPackages = succeededResults
153
+ .filter(({ created }) => created)
154
+ .map(({ outdatedPackage }) => outdatedPackage);
155
+ logger.debug(`createdPackages=${JSON.stringify(createdPackages)}`);
156
+ const skippedPackages = succeededResults
157
+ .filter(({ skipped }) => skipped)
158
+ .map(({ outdatedPackage }) => outdatedPackage);
159
+ logger.debug(`skippedPackages=${JSON.stringify(skippedPackages)}`);
160
+ const failedResults = results
161
+ // eslint-disable-next-line unicorn/no-array-callback-reference
162
+ .filter(isLeft)
163
+ .map(({ left }) => left);
164
+ logger.debug(`failedResults=${JSON.stringify(failedResults)}`);
165
+ const failedPackages = failedResults.map(({ outdatedPackage }) => outdatedPackage);
166
+ logger.debug(`failedPackages=${JSON.stringify(failedPackages)}`);
167
+ // TODO: Show as table
168
+ logger.info(`Processed ${succeededResults.length + failedPackages.length} packages:
169
+ - ${createdPackages.length} packages: created (${createdPackages.map(({ name }) => name).join(',')})
170
+ - ${skippedPackages.length} packages: skipped: (${skippedPackages.map(({ name }) => name).join(',')})
171
+ - ${failedPackages.length} packages: failed: (${failedPackages.map(({ name }) => name).join(',')})`);
172
+ if (options.ignorePackages !== undefined) {
173
+ logger.info(`Ignored ${options.ignorePackages.length} packages: ${options.ignorePackages.join(',')}`);
174
+ }
175
+ };
@@ -0,0 +1,10 @@
1
+ export const Dependency = {
2
+ Bundle: 'bundle',
3
+ Dev: 'dev',
4
+ Optional: 'optional',
5
+ Peer: 'peer',
6
+ Prod: 'prod'
7
+ };
8
+ const values = Object.values(Dependency);
9
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
10
+ export const isDependency = (value) => values.includes(value);
@@ -1,22 +1,21 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NpmCheckUpdates = void 0;
4
- const npm_check_updates_1 = require("npm-check-updates");
5
- const type_guards_1 = require("type-guards");
6
- const logger_1 = require("../logger");
7
- const package_json_1 = require("../package-json");
8
- const semver_1 = require("../semver");
9
- const createDepOptionValue_1 = require("./createDepOptionValue");
10
- const NpmCheckUpdatesResult_1 = require("./NpmCheckUpdatesResult");
1
+ import { run } from 'npm-check-updates';
2
+ import { isNotUndefined } from 'type-guards';
3
+ import { logger } from '../logger/logger.js';
4
+ import { DependencyType } from '../package-json/DependencyType.js';
5
+ import { readPackageJson } from '../package-json/readPackageJson.js';
6
+ import { compareSemVers } from '../semver/compareSemVers.js';
7
+ import { SemVer } from '../semver/SemVer.js';
8
+ import { createDepOptionValue } from './createDepOptionValue.js';
9
+ import { isNpmCheckUpdatesResult } from './NpmCheckUpdatesResult.js';
11
10
  // TODO: Add test
12
- class NpmCheckUpdates {
11
+ export class NpmCheckUpdates {
13
12
  options;
14
13
  constructor(options) {
15
14
  this.options = options;
16
15
  }
17
16
  async check() {
18
- const dep = (0, createDepOptionValue_1.createDepOptionValue)(this.options.dependencyTypes);
19
- logger_1.logger.trace(`dep=${dep}`);
17
+ const dep = createDepOptionValue(this.options.dependencyTypes);
18
+ logger.trace(`dep=${dep}`);
20
19
  return await this.run({
21
20
  packageManager: this.options.packageManager,
22
21
  jsonUpgraded: true,
@@ -34,32 +33,32 @@ class NpmCheckUpdates {
34
33
  }
35
34
  async run(options) {
36
35
  // Read package.json before running npm-check-updates
37
- const pkg = await (0, package_json_1.readPackageJson)('./package.json');
38
- logger_1.logger.trace(`pkg=${JSON.stringify(pkg)}`);
36
+ const pkg = await readPackageJson('./package.json');
37
+ logger.trace(`pkg=${JSON.stringify(pkg)}`);
39
38
  // Run npm-check-updates
40
- const result = await (0, npm_check_updates_1.run)(options);
41
- logger_1.logger.trace(`result=${JSON.stringify(result)}`);
42
- if (!(0, NpmCheckUpdatesResult_1.isNpmCheckUpdatesResult)(result)) {
39
+ const result = await run(options);
40
+ logger.trace(`result=${JSON.stringify(result)}`);
41
+ if (!isNpmCheckUpdatesResult(result)) {
43
42
  throw new Error(`npm-check-updates has outputted unexpected result. result=${JSON.stringify(result)}`);
44
43
  }
45
44
  const resultEntries = Object.entries(result);
46
- logger_1.logger.trace(`resultEntries=${JSON.stringify(resultEntries)}`);
45
+ logger.trace(`resultEntries=${JSON.stringify(resultEntries)}`);
47
46
  const outdatedPackages = resultEntries
48
47
  .map(([name, newVersionString]) => {
49
48
  const currentVersionString = this.extractCurrentVersionString(pkg, name);
50
- logger_1.logger.trace(`currentVersionString=${String(currentVersionString)}`);
49
+ logger.trace(`currentVersionString=${String(currentVersionString)}`);
51
50
  if (currentVersionString === undefined) {
52
51
  return undefined;
53
52
  }
54
53
  const dependencyType = this.extractDependencyType(pkg, name);
55
- logger_1.logger.trace(`dependencyType=${String(dependencyType)}`);
54
+ logger.trace(`dependencyType=${String(dependencyType)}`);
56
55
  if (dependencyType === undefined) {
57
56
  return undefined;
58
57
  }
59
- const currentVersion = semver_1.SemVer.of(currentVersionString);
60
- const newVersion = semver_1.SemVer.of(newVersionString);
61
- const level = (0, semver_1.compareSemVers)(currentVersion, newVersion);
62
- logger_1.logger.trace(`level=${String(level)}`);
58
+ const currentVersion = SemVer.of(currentVersionString);
59
+ const newVersion = SemVer.of(newVersionString);
60
+ const level = compareSemVers(currentVersion, newVersion);
61
+ logger.trace(`level=${String(level)}`);
63
62
  if (level === undefined) {
64
63
  return undefined;
65
64
  }
@@ -70,12 +69,12 @@ class NpmCheckUpdates {
70
69
  level,
71
70
  dependencyType
72
71
  };
73
- logger_1.logger.trace(`outdatedPackage=${JSON.stringify(outdatedPackage)}`);
72
+ logger.trace(`outdatedPackage=${JSON.stringify(outdatedPackage)}`);
74
73
  return outdatedPackage;
75
74
  })
76
75
  // eslint-disable-next-line unicorn/no-array-callback-reference
77
- .filter(type_guards_1.isNotUndefined);
78
- logger_1.logger.trace(`outdatedPackages=${JSON.stringify(outdatedPackages)}`);
76
+ .filter(isNotUndefined);
77
+ logger.trace(`outdatedPackages=${JSON.stringify(outdatedPackages)}`);
79
78
  if (resultEntries.length !== outdatedPackages.length) {
80
79
  throw new Error(`Failed to running npm-check-updates. result=${JSON.stringify(result)}`);
81
80
  }
@@ -102,20 +101,19 @@ class NpmCheckUpdates {
102
101
  extractDependencyType(pkg, packageName) {
103
102
  const { dependencies, devDependencies, peerDependencies, bundledDependencies, optionalDependencies } = pkg;
104
103
  if (dependencies?.[packageName] !== undefined) {
105
- return package_json_1.DependencyType.Dependencies;
104
+ return DependencyType.Dependencies;
106
105
  }
107
106
  else if (devDependencies?.[packageName] !== undefined) {
108
- return package_json_1.DependencyType.DevDependencies;
107
+ return DependencyType.DevDependencies;
109
108
  }
110
109
  else if (peerDependencies?.[packageName] !== undefined) {
111
- return package_json_1.DependencyType.PeerDependencies;
110
+ return DependencyType.PeerDependencies;
112
111
  }
113
112
  else if (bundledDependencies?.[packageName] !== undefined) {
114
- return package_json_1.DependencyType.BundledDependencies;
113
+ return DependencyType.BundledDependencies;
115
114
  }
116
115
  else if (optionalDependencies?.[packageName] !== undefined) {
117
- return package_json_1.DependencyType.OptionalDependencies;
116
+ return DependencyType.OptionalDependencies;
118
117
  }
119
118
  }
120
119
  }
121
- exports.NpmCheckUpdates = NpmCheckUpdates;
@@ -0,0 +1,3 @@
1
+ import { record, string } from 'io-ts';
2
+ export const NpmCheckUpdatesResult = record(string, string);
3
+ export const isNpmCheckUpdatesResult = NpmCheckUpdatesResult.is;
@@ -0,0 +1,7 @@
1
+ import { toDependency } from './toDependency.js';
2
+ // TODO: Add test
3
+ export const createDepOptionValue = (dependencyTypes) => {
4
+ return dependencyTypes
5
+ .map((dependencyType) => toDependency(dependencyType))
6
+ .join(',');
7
+ };
@@ -0,0 +1,17 @@
1
+ import { DependencyType } from '../package-json/DependencyType.js';
2
+ import { Dependency } from './Dependency.js';
3
+ // TODO: Add test
4
+ export const toDependency = (dependencyType) => {
5
+ switch (dependencyType) {
6
+ case DependencyType.Dependencies:
7
+ return Dependency.Prod;
8
+ case DependencyType.DevDependencies:
9
+ return Dependency.Dev;
10
+ case DependencyType.PeerDependencies:
11
+ return Dependency.Peer;
12
+ case DependencyType.BundledDependencies:
13
+ return Dependency.Bundle;
14
+ case DependencyType.OptionalDependencies:
15
+ return Dependency.Optional;
16
+ }
17
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ export const OptionType = {
2
+ Boolean: 'boolean',
3
+ Number: 'number',
4
+ String: 'string',
5
+ StringArray: 'string[]'
6
+ };
7
+ const optionTypes = Object.values(OptionType);
8
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
9
+ export const isOptionType = (value) => optionTypes.includes(value);
@@ -0,0 +1,53 @@
1
+ import { array, boolean, intersection, literal, number, partial, string, type, union } from 'io-ts';
2
+ import { LogLevel } from '../logger/LogLevel.js';
3
+ import { OutdatedPullRequestStrategy } from '../outdated-package-processor/OutdatedPullRequestStrategy.js';
4
+ import { DependencyType } from '../package-json/DependencyType.js';
5
+ import { PackageManagerName } from '../package-manager/PackageManagerName.js';
6
+ const Options = intersection([
7
+ type({
8
+ commitMessage: string,
9
+ dependencyTypes: array(union([
10
+ literal(DependencyType.Dependencies),
11
+ literal(DependencyType.DevDependencies),
12
+ literal(DependencyType.PeerDependencies),
13
+ literal(DependencyType.BundledDependencies),
14
+ literal(DependencyType.OptionalDependencies)
15
+ ])),
16
+ draftPr: boolean,
17
+ fetchReleaseNotes: boolean,
18
+ fetchSleepTime: number,
19
+ githubToken: string,
20
+ logLevel: union([
21
+ literal(LogLevel.Off),
22
+ literal(LogLevel.Fatal),
23
+ literal(LogLevel.Error),
24
+ literal(LogLevel.Warn),
25
+ literal(LogLevel.Info),
26
+ literal(LogLevel.Debug),
27
+ literal(LogLevel.Trace)
28
+ ]),
29
+ outdatedPrStrategy: union([
30
+ literal(OutdatedPullRequestStrategy.Create),
31
+ literal(OutdatedPullRequestStrategy.Recreate),
32
+ literal(OutdatedPullRequestStrategy.Skip)
33
+ ]),
34
+ prBodyGithubHost: string,
35
+ prTitle: string
36
+ }),
37
+ partial({
38
+ additionalLabels: array(string),
39
+ assignees: array(string),
40
+ assigneesSampleSize: number,
41
+ gitUserEmail: string,
42
+ gitUserName: string,
43
+ ignorePackages: array(string),
44
+ packageManager: union([
45
+ literal(PackageManagerName.Npm),
46
+ literal(PackageManagerName.Yarn)
47
+ ]),
48
+ prBodyNotes: string,
49
+ reviewers: array(string),
50
+ reviewersSampleSize: number
51
+ })
52
+ ]);
53
+ export const isOptions = Options.is;