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.
- package/dist/app.js +3 -0
- package/dist/bin/npm-update-package.js +16 -0
- package/dist/core/FailedResult.js +1 -0
- package/dist/core/OutdatedPackage.js +1 -0
- package/dist/{src/core → core}/OutdatedPackagesProcessor.js +3 -7
- package/dist/{src/core → core}/PackageUpdater.js +1 -5
- package/dist/core/SucceededResult.js +1 -0
- package/dist/file/canReadWrite.js +11 -0
- package/dist/file/readFile.js +4 -0
- package/dist/{src/git → git}/CommitMessageCreator.js +3 -7
- package/dist/{src/git → git}/Git.js +1 -5
- package/dist/{src/git → git}/GitConfigInitializer.js +1 -5
- package/dist/{src/git → git}/GitRepository.js +5 -12
- package/dist/{src/git → git}/GitTransaction.js +4 -8
- package/dist/git/createBranchName.js +5 -0
- package/dist/{src/github → github}/GitHub.js +4 -8
- package/dist/{src/github → github}/branch/finder/BranchFinder.js +1 -5
- package/dist/github/createGitHub.js +9 -0
- package/dist/github/createOctokit.js +22 -0
- package/dist/github/errors/NotFoundError.js +5 -0
- package/dist/{src/github → github}/label/creator/LabelCreator.js +7 -11
- package/dist/{src/github → github}/pull-request/closer/PullRequestCloser.js +1 -5
- package/dist/github/pull-request/closer/PullRequestsCloser.js +13 -0
- package/dist/{src/github → github}/pull-request/creator/AssigneesAdder.js +3 -7
- package/dist/{src/github → github}/pull-request/creator/GitHubUrlOptimizer.js +3 -7
- package/dist/{src/github → github}/pull-request/creator/LabelsAdder.js +1 -5
- package/dist/{src/github → github}/pull-request/creator/PackageDiffsSectionCreator.js +1 -5
- package/dist/{src/github → github}/pull-request/creator/PullRequestBodyCreator.js +15 -18
- package/dist/{src/github → github}/pull-request/creator/PullRequestCreator.js +5 -9
- package/dist/{src/github → github}/pull-request/creator/PullRequestTitleCreator.js +3 -7
- package/dist/{src/github → github}/pull-request/creator/ReleaseNotesSectionCreator.js +1 -5
- package/dist/{src/github → github}/pull-request/creator/ReviewersAdder.js +3 -7
- package/dist/github/pull-request/creator/createFooter.js +4 -0
- package/dist/github/pull-request/creator/createMetadataSection.js +21 -0
- package/dist/github/pull-request/creator/createNotesSection.js +5 -0
- package/dist/{src/github → github}/pull-request/creator/createOutdatedPackagesTable.js +1 -5
- package/dist/github/pull-request/finder/PullRequestFinder.js +23 -0
- package/dist/github/pull-request/finder/isPullRequestByNpmUpdatePackage.js +3 -0
- package/dist/github/pull-request/metadata/PullRequestMetadata.js +12 -0
- package/dist/github/pull-request/metadata/createPullRequestMetadata.js +12 -0
- package/dist/{src/github → github}/pull-request/metadata/extractPullRequestMetadata.js +3 -7
- package/dist/github/releases/Release.js +1 -0
- package/dist/{src/github → github}/releases/fetcher/ReleasesFetcher.js +9 -16
- package/dist/json/toJSON.js +4 -0
- package/dist/logger/LogLevel.js +12 -0
- package/dist/logger/logger.js +2 -0
- package/dist/main.js +175 -0
- package/dist/npm-check-updates/Dependency.js +10 -0
- package/dist/{src/npm-check-updates → npm-check-updates}/NpmCheckUpdates.js +32 -34
- package/dist/npm-check-updates/NpmCheckUpdatesResult.js +3 -0
- package/dist/npm-check-updates/createDepOptionValue.js +7 -0
- package/dist/npm-check-updates/toDependency.js +17 -0
- package/dist/options/CLIOption.js +1 -0
- package/dist/options/OptionType.js +9 -0
- package/dist/options/Options.js +53 -0
- package/dist/{src/options → options}/cliOptions.js +50 -53
- package/dist/options/createOptions.js +16 -0
- package/dist/options/initOptions.js +5 -0
- package/dist/options/parseBooleanOption.js +11 -0
- package/dist/options/parseNumberOption.js +8 -0
- package/dist/options/toCommanderOption.js +37 -0
- package/dist/outdated-package-processor/OutdatedPackageProcessor.js +1 -0
- package/dist/{src/outdated-package-processor → outdated-package-processor}/OutdatedPackageProcessorCreator.js +11 -15
- package/dist/outdated-package-processor/OutdatedPullRequestStrategy.js +8 -0
- package/dist/{src/outdated-package-processor → outdated-package-processor}/create/Create.js +17 -20
- package/dist/{src/outdated-package-processor → outdated-package-processor}/recreate/Recreate.js +18 -21
- package/dist/{src/outdated-package-processor → outdated-package-processor}/skip/Skip.js +20 -23
- package/dist/package-json/DependencyType.js +10 -0
- package/dist/package-json/PackageMetadata.js +18 -0
- package/dist/package-json/PackageMetadataDependencies.js +3 -0
- package/dist/package-json/PackageMetadataRepository.js +5 -0
- package/dist/package-json/extractRepository.js +9 -0
- package/dist/package-json/parsePackageJson.js +10 -0
- package/dist/package-json/readPackageJson.js +7 -0
- package/dist/package-manager/PackageManager.js +1 -0
- package/dist/package-manager/PackageManagerCreator.js +30 -0
- package/dist/package-manager/PackageManagerName.js +7 -0
- package/dist/package-manager/detectPackageManager.js +11 -0
- package/dist/{src/package-manager → package-manager}/npm/Npm.js +3 -7
- package/dist/package-manager/npm/NpmVersions.js +3 -0
- package/dist/{src/package-manager → package-manager}/yarn/Yarn.js +3 -7
- package/dist/package-manager/yarn/YarnVersions.js +6 -0
- package/dist/{src/semver → semver}/SemVer.js +3 -7
- package/dist/semver/SemVerLevel.js +8 -0
- package/dist/semver/compareSemVers.js +12 -0
- package/dist/terminal/Terminal.js +7 -0
- package/dist/util/range.js +5 -0
- package/dist/util/sampleSize.js +4 -0
- package/dist/util/sleep.js +3 -0
- package/package.json +7 -4
- package/dist/package.json +0 -72
- package/dist/src/bin/npm-update-package.js +0 -22
- package/dist/src/core/FailedResult.js +0 -2
- package/dist/src/core/OutdatedPackage.js +0 -2
- package/dist/src/core/SucceededResult.js +0 -2
- package/dist/src/core/index.js +0 -21
- package/dist/src/file/canReadWrite.js +0 -18
- package/dist/src/file/index.js +0 -18
- package/dist/src/file/readFile.js +0 -11
- package/dist/src/git/createBranchName.js +0 -9
- package/dist/src/git/index.js +0 -22
- package/dist/src/github/branch/finder/index.js +0 -17
- package/dist/src/github/branch/index.js +0 -17
- package/dist/src/github/createGitHub.js +0 -13
- package/dist/src/github/createOctokit.js +0 -29
- package/dist/src/github/errors/NotFoundError.js +0 -9
- package/dist/src/github/errors/index.js +0 -17
- package/dist/src/github/index.js +0 -22
- package/dist/src/github/label/creator/index.js +0 -17
- package/dist/src/github/label/index.js +0 -17
- package/dist/src/github/pull-request/closer/PullRequestsCloser.js +0 -17
- package/dist/src/github/pull-request/closer/index.js +0 -18
- package/dist/src/github/pull-request/creator/createFooter.js +0 -11
- package/dist/src/github/pull-request/creator/createMetadataSection.js +0 -25
- package/dist/src/github/pull-request/creator/createNotesSection.js +0 -9
- package/dist/src/github/pull-request/creator/index.js +0 -25
- package/dist/src/github/pull-request/finder/PullRequestFinder.js +0 -27
- package/dist/src/github/pull-request/finder/index.js +0 -17
- package/dist/src/github/pull-request/finder/isPullRequestByNpmUpdatePackage.js +0 -7
- package/dist/src/github/pull-request/index.js +0 -19
- package/dist/src/github/pull-request/metadata/PullRequestMetadata.js +0 -15
- package/dist/src/github/pull-request/metadata/createPullRequestMetadata.js +0 -19
- package/dist/src/github/pull-request/metadata/index.js +0 -19
- package/dist/src/github/releases/Release.js +0 -2
- package/dist/src/github/releases/fetcher/index.js +0 -17
- package/dist/src/github/releases/index.js +0 -18
- package/dist/src/json/index.js +0 -17
- package/dist/src/json/toJSON.js +0 -8
- package/dist/src/logger/LogLevel.js +0 -16
- package/dist/src/logger/index.js +0 -18
- package/dist/src/logger/logger.js +0 -5
- package/dist/src/main.js +0 -160
- package/dist/src/npm-check-updates/Dependency.js +0 -14
- package/dist/src/npm-check-updates/NpmCheckUpdatesResult.js +0 -6
- package/dist/src/npm-check-updates/createDepOptionValue.js +0 -11
- package/dist/src/npm-check-updates/index.js +0 -17
- package/dist/src/npm-check-updates/toDependency.js +0 -21
- package/dist/src/options/CLIOption.js +0 -2
- package/dist/src/options/OptionType.js +0 -13
- package/dist/src/options/Options.js +0 -56
- package/dist/src/options/createOptions.js +0 -23
- package/dist/src/options/index.js +0 -18
- package/dist/src/options/initOptions.js +0 -9
- package/dist/src/options/parseBooleanOption.js +0 -15
- package/dist/src/options/parseNumberOption.js +0 -12
- package/dist/src/options/toCommanderOption.js +0 -41
- package/dist/src/outdated-package-processor/OutdatedPackageProcessor.js +0 -2
- package/dist/src/outdated-package-processor/OutdatedPullRequestStrategy.js +0 -12
- package/dist/src/outdated-package-processor/create/index.js +0 -17
- package/dist/src/outdated-package-processor/index.js +0 -19
- package/dist/src/outdated-package-processor/recreate/index.js +0 -17
- package/dist/src/outdated-package-processor/skip/index.js +0 -17
- package/dist/src/package-json/DependencyType.js +0 -14
- package/dist/src/package-json/PackageMetadata.js +0 -21
- package/dist/src/package-json/PackageMetadataDependencies.js +0 -6
- package/dist/src/package-json/PackageMetadataRepository.js +0 -8
- package/dist/src/package-json/extractRepository.js +0 -13
- package/dist/src/package-json/index.js +0 -21
- package/dist/src/package-json/parsePackageJson.js +0 -14
- package/dist/src/package-json/readPackageJson.js +0 -11
- package/dist/src/package-manager/PackageManager.js +0 -2
- package/dist/src/package-manager/PackageManagerCreator.js +0 -34
- package/dist/src/package-manager/PackageManagerName.js +0 -11
- package/dist/src/package-manager/detectPackageManager.js +0 -15
- package/dist/src/package-manager/index.js +0 -21
- package/dist/src/package-manager/npm/NpmVersions.js +0 -6
- package/dist/src/package-manager/npm/index.js +0 -17
- package/dist/src/package-manager/yarn/YarnVersions.js +0 -9
- package/dist/src/package-manager/yarn/index.js +0 -17
- package/dist/src/semver/SemVerLevel.js +0 -12
- package/dist/src/semver/compareSemVers.js +0 -16
- package/dist/src/semver/index.js +0 -19
- package/dist/src/terminal/Terminal.js +0 -14
- package/dist/src/terminal/index.js +0 -17
- package/dist/src/util/index.js +0 -19
- package/dist/src/util/range.js +0 -9
- package/dist/src/util/sampleSize.js +0 -11
- package/dist/src/util/sleep.js +0 -7
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
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,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
|
-
|
|
2
|
-
|
|
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 (!
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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 (
|
|
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
|
|
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 =>
|
|
60
|
-
.filter(version =>
|
|
61
|
-
.filter(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,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);
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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 =
|
|
19
|
-
|
|
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
|
|
38
|
-
|
|
36
|
+
const pkg = await readPackageJson('./package.json');
|
|
37
|
+
logger.trace(`pkg=${JSON.stringify(pkg)}`);
|
|
39
38
|
// Run npm-check-updates
|
|
40
|
-
const result = await
|
|
41
|
-
|
|
42
|
-
if (!
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
54
|
+
logger.trace(`dependencyType=${String(dependencyType)}`);
|
|
56
55
|
if (dependencyType === undefined) {
|
|
57
56
|
return undefined;
|
|
58
57
|
}
|
|
59
|
-
const currentVersion =
|
|
60
|
-
const newVersion =
|
|
61
|
-
const level =
|
|
62
|
-
|
|
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
|
-
|
|
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(
|
|
78
|
-
|
|
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
|
|
104
|
+
return DependencyType.Dependencies;
|
|
106
105
|
}
|
|
107
106
|
else if (devDependencies?.[packageName] !== undefined) {
|
|
108
|
-
return
|
|
107
|
+
return DependencyType.DevDependencies;
|
|
109
108
|
}
|
|
110
109
|
else if (peerDependencies?.[packageName] !== undefined) {
|
|
111
|
-
return
|
|
110
|
+
return DependencyType.PeerDependencies;
|
|
112
111
|
}
|
|
113
112
|
else if (bundledDependencies?.[packageName] !== undefined) {
|
|
114
|
-
return
|
|
113
|
+
return DependencyType.BundledDependencies;
|
|
115
114
|
}
|
|
116
115
|
else if (optionalDependencies?.[packageName] !== undefined) {
|
|
117
|
-
return
|
|
116
|
+
return DependencyType.OptionalDependencies;
|
|
118
117
|
}
|
|
119
118
|
}
|
|
120
119
|
}
|
|
121
|
-
exports.NpmCheckUpdates = NpmCheckUpdates;
|
|
@@ -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;
|