npm-update-package 0.30.0 → 0.31.3
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/.eslintignore +3 -0
- package/.eslintrc.js +23 -0
- package/.github/renovate.json +15 -0
- package/.github/workflows/eslint.yml +14 -0
- package/.github/workflows/test.yml +20 -0
- package/.husky/pre-commit +4 -0
- package/.nvmrc +1 -0
- package/dist/package.json +65 -0
- package/dist/{bin.js → src/bin.js} +6 -3
- package/dist/{core → src/core}/FailedResult.js +0 -0
- package/dist/{core → src/core}/OutdatedPackage.js +0 -0
- package/dist/{core → src/core}/OutdatedPackageProcessor.js +0 -0
- package/dist/{core → src/core}/OutdatedPackagesProcessor.js +0 -0
- package/dist/{core → src/core}/SucceededResult.js +0 -0
- package/dist/{core → src/core}/index.js +0 -0
- package/dist/{file → src/file}/index.js +0 -0
- package/dist/{file → src/file}/readFile.js +0 -0
- package/dist/{git → src/git}/CommitMessageCreator.js +0 -0
- package/dist/{git → src/git}/Git.js +0 -0
- package/dist/{git → src/git}/GitRepository.js +0 -0
- package/dist/{git → src/git}/createBranchName.js +0 -0
- package/dist/{git → src/git}/index.js +0 -0
- package/dist/{github → src/github}/GitHub.js +0 -0
- package/dist/{github → src/github}/branch/finder/BranchFinder.js +0 -0
- package/dist/{github → src/github}/branch/finder/index.js +0 -0
- package/dist/{github → src/github}/branch/index.js +0 -0
- package/dist/{github → src/github}/createGitHub.js +0 -0
- package/dist/{github → src/github}/createOctokit.js +5 -2
- package/dist/{github → src/github}/errors/NotFoundError.js +0 -0
- package/dist/{github → src/github}/errors/index.js +0 -0
- package/dist/{github → src/github}/index.js +0 -0
- package/dist/{github → src/github}/label/creator/LabelCreator.js +0 -0
- package/dist/{github → src/github}/label/creator/index.js +0 -0
- package/dist/{github → src/github}/label/index.js +0 -0
- package/dist/{github → src/github}/pull-request/closer/PullRequestCloser.js +0 -0
- package/dist/{github → src/github}/pull-request/closer/index.js +0 -0
- package/dist/{github → src/github}/pull-request/creator/PullRequestCreator.js +0 -0
- package/dist/{github → src/github}/pull-request/creator/PullRequestTitleCreator.js +0 -0
- package/dist/{github → src/github}/pull-request/creator/createPullRequestBody.js +5 -5
- package/dist/{github → src/github}/pull-request/creator/index.js +0 -0
- package/dist/{github → src/github}/pull-request/finder/PullRequestFinder.js +0 -0
- package/dist/{github → src/github}/pull-request/finder/index.js +0 -0
- package/dist/{github → src/github}/pull-request/finder/isPullRequestByNpmUpdatePackage.js +0 -0
- package/dist/{github → src/github}/pull-request/index.js +0 -0
- package/dist/{github → src/github}/pull-request/metadata/PullRequestMetadata.js +0 -0
- package/dist/{github → src/github}/pull-request/metadata/createPullRequestMetadata.js +5 -2
- package/dist/{github → src/github}/pull-request/metadata/extractPullRequestMetadata.js +0 -0
- package/dist/{github → src/github}/pull-request/metadata/index.js +0 -0
- package/dist/{json → src/json}/index.js +0 -0
- package/dist/{json → src/json}/toJSON.js +0 -0
- package/dist/{logger → src/logger}/LogLevel.js +0 -0
- package/dist/{logger → src/logger}/Logger.js +0 -0
- package/dist/{logger → src/logger}/createLogger.js +0 -0
- package/dist/{logger → src/logger}/index.js +0 -0
- package/dist/{main.js → src/main.js} +0 -0
- package/dist/{ncu → src/ncu}/Ncu.js +0 -0
- package/dist/{ncu → src/ncu}/NcuResult.js +0 -0
- package/dist/{ncu → src/ncu}/index.js +0 -0
- package/dist/{options → src/options}/CLIOption.js +0 -0
- package/dist/{options → src/options}/OptionType.js +0 -0
- package/dist/{options → src/options}/Options.js +0 -0
- package/dist/{options → src/options}/cliOptions.js +0 -0
- package/dist/{options → src/options}/index.js +0 -0
- package/dist/{options → src/options}/initOptions.js +5 -2
- package/dist/{options → src/options}/toCommanderOption.js +0 -0
- package/dist/{package-json → src/package-json}/PackageMetadata.js +0 -0
- package/dist/{package-json → src/package-json}/PackageMetadataDependencies.js +0 -0
- package/dist/{package-json → src/package-json}/index.js +0 -0
- package/dist/{package-json → src/package-json}/parsePackageJson.js +0 -0
- package/dist/{package-manager → src/package-manager}/Npm.js +0 -0
- package/dist/{package-manager → src/package-manager}/PackageManager.js +0 -0
- package/dist/{package-manager → src/package-manager}/PackageManagerName.js +0 -0
- package/dist/{package-manager → src/package-manager}/Yarn.js +0 -0
- package/dist/{package-manager → src/package-manager}/createPackageManager.js +0 -0
- package/dist/{package-manager → src/package-manager}/index.js +0 -0
- package/dist/{semver → src/semver}/SemVer.js +0 -0
- package/dist/{semver → src/semver}/SemVerLevel.js +0 -0
- package/dist/{semver → src/semver}/compareSemVers.js +0 -0
- package/dist/{semver → src/semver}/index.js +0 -0
- package/dist/{terminal → src/terminal}/Terminal.js +0 -0
- package/dist/{terminal → src/terminal}/index.js +0 -0
- package/jest.config.ts +12 -0
- package/lint-staged.config.js +4 -0
- package/npm-update-package.code-workspace +10 -0
- package/package.json +2 -5
- package/src/bin.ts +22 -0
- package/src/core/FailedResult.ts +6 -0
- package/src/core/OutdatedPackage.ts +11 -0
- package/src/core/OutdatedPackageProcessor.ts +136 -0
- package/src/core/OutdatedPackagesProcessor.ts +35 -0
- package/src/core/SucceededResult.ts +7 -0
- package/src/core/index.ts +5 -0
- package/src/file/index.ts +1 -0
- package/src/file/readFile.ts +6 -0
- package/src/git/CommitMessageCreator.test.ts +17 -0
- package/src/git/CommitMessageCreator.ts +19 -0
- package/src/git/Git.ts +59 -0
- package/src/git/GitRepository.test.ts +82 -0
- package/src/git/GitRepository.ts +57 -0
- package/src/git/createBranchName.test.ts +14 -0
- package/src/git/createBranchName.ts +7 -0
- package/src/git/index.ts +4 -0
- package/src/github/GitHub.ts +198 -0
- package/src/github/branch/finder/BranchFinder.test.ts +21 -0
- package/src/github/branch/finder/BranchFinder.ts +9 -0
- package/src/github/branch/finder/index.ts +1 -0
- package/src/github/branch/index.ts +1 -0
- package/src/github/createGitHub.test.ts +16 -0
- package/src/github/createGitHub.ts +17 -0
- package/src/github/createOctokit.test.ts +27 -0
- package/src/github/createOctokit.ts +27 -0
- package/src/github/errors/NotFoundError.ts +11 -0
- package/src/github/errors/index.ts +1 -0
- package/src/github/index.ts +5 -0
- package/src/github/label/creator/LabelCreator.ts +71 -0
- package/src/github/label/creator/index.ts +1 -0
- package/src/github/label/index.ts +1 -0
- package/src/github/pull-request/closer/PullRequestCloser.test.ts +53 -0
- package/src/github/pull-request/closer/PullRequestCloser.ts +21 -0
- package/src/github/pull-request/closer/index.ts +1 -0
- package/src/github/pull-request/creator/PullRequestCreator.test.ts +98 -0
- package/src/github/pull-request/creator/PullRequestCreator.ts +84 -0
- package/src/github/pull-request/creator/PullRequestTitleCreator.test.ts +17 -0
- package/src/github/pull-request/creator/PullRequestTitleCreator.ts +19 -0
- package/src/github/pull-request/creator/createPullRequestBody.test.ts +47 -0
- package/src/github/pull-request/creator/createPullRequestBody.ts +35 -0
- package/src/github/pull-request/creator/index.ts +2 -0
- package/src/github/pull-request/finder/PullRequestFinder.ts +27 -0
- package/src/github/pull-request/finder/index.ts +1 -0
- package/src/github/pull-request/finder/isPullRequestByNpmUpdatePackage.test.ts +24 -0
- package/src/github/pull-request/finder/isPullRequestByNpmUpdatePackage.ts +5 -0
- package/src/github/pull-request/index.ts +3 -0
- package/src/github/pull-request/metadata/PullRequestMetadata.ts +22 -0
- package/src/github/pull-request/metadata/createPullRequestMetadata.test.ts +31 -0
- package/src/github/pull-request/metadata/createPullRequestMetadata.ts +21 -0
- package/src/github/pull-request/metadata/extractPullRequestMetadata.test.ts +53 -0
- package/src/github/pull-request/metadata/extractPullRequestMetadata.ts +21 -0
- package/src/github/pull-request/metadata/index.ts +3 -0
- package/src/json/index.ts +1 -0
- package/src/json/toJSON.test.ts +65 -0
- package/src/json/toJSON.ts +13 -0
- package/src/logger/LogLevel.ts +13 -0
- package/src/logger/Logger.ts +1 -0
- package/src/logger/createLogger.ts +10 -0
- package/src/logger/index.ts +3 -0
- package/src/main.ts +149 -0
- package/src/ncu/Ncu.ts +84 -0
- package/src/ncu/NcuResult.ts +10 -0
- package/src/ncu/index.ts +1 -0
- package/src/options/CLIOption.ts +19 -0
- package/src/options/OptionType.ts +8 -0
- package/src/options/Options.ts +40 -0
- package/src/options/cliOptions.ts +60 -0
- package/src/options/index.ts +2 -0
- package/src/options/initOptions.ts +24 -0
- package/src/options/toCommanderOption.ts +35 -0
- package/src/package-json/PackageMetadata.ts +24 -0
- package/src/package-json/PackageMetadataDependencies.ts +10 -0
- package/src/package-json/index.ts +2 -0
- package/src/package-json/parsePackageJson.ts +15 -0
- package/src/package-manager/Npm.ts +17 -0
- package/src/package-manager/PackageManager.ts +5 -0
- package/src/package-manager/PackageManagerName.ts +8 -0
- package/src/package-manager/Yarn.ts +17 -0
- package/src/package-manager/createPackageManager.test.ts +27 -0
- package/src/package-manager/createPackageManager.ts +20 -0
- package/src/package-manager/index.ts +5 -0
- package/src/semver/SemVer.test.ts +17 -0
- package/src/semver/SemVer.ts +40 -0
- package/src/semver/SemVerLevel.ts +9 -0
- package/src/semver/compareSemVers.test.ts +21 -0
- package/src/semver/compareSemVers.ts +16 -0
- package/src/semver/index.ts +3 -0
- package/src/terminal/Terminal.ts +12 -0
- package/src/terminal/index.ts +1 -0
- package/tsconfig.base.json +7 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +9 -0
- package/dist/app.js +0 -8
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Option } from 'commander'
|
|
2
|
+
import type { CLIOption } from './CLIOption'
|
|
3
|
+
import { OptionType } from './OptionType'
|
|
4
|
+
|
|
5
|
+
// TODO: add test
|
|
6
|
+
export const toCommanderOption = (cliOption: CLIOption): Option => {
|
|
7
|
+
const argument = createArgumentString(cliOption)
|
|
8
|
+
const option = new Option(`--${cliOption.name} ${argument}`, cliOption.description)
|
|
9
|
+
|
|
10
|
+
if (cliOption.choices !== undefined) {
|
|
11
|
+
option.choices(cliOption.choices)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (!cliOption.required && cliOption.default !== undefined) {
|
|
15
|
+
option.default(cliOption.default)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return option
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const createArgumentString = (cliOption: CLIOption): string => {
|
|
22
|
+
const prefix = cliOption.required ? '<' : '['
|
|
23
|
+
const suffix = cliOption.required ? '>' : ']'
|
|
24
|
+
const name = createArgumentNameString(cliOption.type)
|
|
25
|
+
return `${prefix}${name}${suffix}`
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const createArgumentNameString = (optionType: OptionType): string => {
|
|
29
|
+
switch (optionType) {
|
|
30
|
+
case OptionType.String:
|
|
31
|
+
return 'value'
|
|
32
|
+
case OptionType.StringArray:
|
|
33
|
+
return 'values...'
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {
|
|
2
|
+
intersection,
|
|
3
|
+
partial,
|
|
4
|
+
string,
|
|
5
|
+
type,
|
|
6
|
+
type TypeOf
|
|
7
|
+
} from 'io-ts'
|
|
8
|
+
import { PackageMetadataDependencies } from './PackageMetadataDependencies'
|
|
9
|
+
|
|
10
|
+
const PackageMetadata = intersection([
|
|
11
|
+
type({
|
|
12
|
+
name: string,
|
|
13
|
+
version: string
|
|
14
|
+
}),
|
|
15
|
+
partial({
|
|
16
|
+
dependencies: PackageMetadataDependencies,
|
|
17
|
+
devDependencies: PackageMetadataDependencies,
|
|
18
|
+
peerDependencies: PackageMetadataDependencies,
|
|
19
|
+
optionalDependencies: PackageMetadataDependencies
|
|
20
|
+
})
|
|
21
|
+
])
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
23
|
+
export type PackageMetadata = TypeOf<typeof PackageMetadata>
|
|
24
|
+
export const isPackageMetadata = PackageMetadata.is
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
record,
|
|
3
|
+
string,
|
|
4
|
+
type TypeOf
|
|
5
|
+
} from 'io-ts'
|
|
6
|
+
|
|
7
|
+
export const PackageMetadataDependencies = record(string, string)
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
9
|
+
export type PackageMetadataDependencies = TypeOf<typeof PackageMetadataDependencies>
|
|
10
|
+
export const isPackageMetadataDependencies = PackageMetadataDependencies.is
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isPackageMetadata,
|
|
3
|
+
type PackageMetadata
|
|
4
|
+
} from './PackageMetadata'
|
|
5
|
+
|
|
6
|
+
// TODO: add test
|
|
7
|
+
export const parsePackageJson = (json: string): PackageMetadata => {
|
|
8
|
+
const parsed: unknown = JSON.parse(json)
|
|
9
|
+
|
|
10
|
+
if (isPackageMetadata(parsed)) {
|
|
11
|
+
return parsed
|
|
12
|
+
} else {
|
|
13
|
+
throw new Error(`Failed to parse package.json. json=${json}`)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Terminal } from '../terminal'
|
|
2
|
+
import type { PackageManager } from './PackageManager'
|
|
3
|
+
|
|
4
|
+
// TODO: add test
|
|
5
|
+
export class Npm implements PackageManager {
|
|
6
|
+
readonly packageFile = 'package.json'
|
|
7
|
+
readonly lockFile = 'package-lock.json'
|
|
8
|
+
|
|
9
|
+
constructor (private readonly terminal: Terminal) {}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @see https://docs.npmjs.com/cli/v8/commands/npm-install
|
|
13
|
+
*/
|
|
14
|
+
async install (): Promise<void> {
|
|
15
|
+
await this.terminal.run('npm', 'install')
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const PackageManagerName = {
|
|
2
|
+
Npm: 'npm',
|
|
3
|
+
Yarn: 'yarn'
|
|
4
|
+
} as const
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
6
|
+
export type PackageManagerName = typeof PackageManagerName[keyof typeof PackageManagerName]
|
|
7
|
+
const packageManagerNames = Object.values(PackageManagerName)
|
|
8
|
+
export const isPackageManagerName = (value: any): value is PackageManagerName => packageManagerNames.includes(value)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Terminal } from '../terminal'
|
|
2
|
+
import type { PackageManager } from './PackageManager'
|
|
3
|
+
|
|
4
|
+
// TODO: add test
|
|
5
|
+
export class Yarn implements PackageManager {
|
|
6
|
+
readonly packageFile = 'package.json'
|
|
7
|
+
readonly lockFile = 'yarn.lock'
|
|
8
|
+
|
|
9
|
+
constructor (private readonly terminal: Terminal) {}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @see https://classic.yarnpkg.com/en/docs/cli/install
|
|
13
|
+
*/
|
|
14
|
+
async install (): Promise<void> {
|
|
15
|
+
await this.terminal.run('yarn', 'install')
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Terminal } from '../terminal'
|
|
2
|
+
import { createPackageManager } from './createPackageManager'
|
|
3
|
+
import { Npm } from './Npm'
|
|
4
|
+
import { PackageManagerName } from './PackageManagerName'
|
|
5
|
+
import { Yarn } from './Yarn'
|
|
6
|
+
|
|
7
|
+
describe('createPackageManager', () => {
|
|
8
|
+
const terminal = new Terminal()
|
|
9
|
+
|
|
10
|
+
it(`returns new Npm instance if packageManager is ${PackageManagerName.Npm}`, () => {
|
|
11
|
+
const packageManager = createPackageManager({
|
|
12
|
+
terminal,
|
|
13
|
+
packageManager: PackageManagerName.Npm
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
expect(packageManager).toBeInstanceOf(Npm)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it(`returns new Yarn instance if packageManager is ${PackageManagerName.Yarn}`, () => {
|
|
20
|
+
const packageManager = createPackageManager({
|
|
21
|
+
terminal,
|
|
22
|
+
packageManager: PackageManagerName.Yarn
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
expect(packageManager).toBeInstanceOf(Yarn)
|
|
26
|
+
})
|
|
27
|
+
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Terminal } from '../terminal'
|
|
2
|
+
import { Npm } from './Npm'
|
|
3
|
+
import type { PackageManager } from './PackageManager'
|
|
4
|
+
import { PackageManagerName } from './PackageManagerName'
|
|
5
|
+
import { Yarn } from './Yarn'
|
|
6
|
+
|
|
7
|
+
export const createPackageManager = ({
|
|
8
|
+
terminal,
|
|
9
|
+
packageManager
|
|
10
|
+
}: {
|
|
11
|
+
terminal: Terminal
|
|
12
|
+
packageManager: PackageManagerName
|
|
13
|
+
}): PackageManager => {
|
|
14
|
+
switch (packageManager) {
|
|
15
|
+
case PackageManagerName.Npm:
|
|
16
|
+
return new Npm(terminal)
|
|
17
|
+
case PackageManagerName.Yarn:
|
|
18
|
+
return new Yarn(terminal)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SemVer } from './SemVer'
|
|
2
|
+
|
|
3
|
+
describe('SemVer', () => {
|
|
4
|
+
describe('of', () => {
|
|
5
|
+
it('returns new SemVer instance if version is valid', () => {
|
|
6
|
+
const semver = SemVer.of('^1.2.3')
|
|
7
|
+
expect(semver.version).toBe('1.2.3')
|
|
8
|
+
expect(semver.major).toBe(1)
|
|
9
|
+
expect(semver.minor).toBe(2)
|
|
10
|
+
expect(semver.patch).toBe(3)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('throws error if version is invalid', () => {
|
|
14
|
+
expect(() => SemVer.of('')).toThrow(Error)
|
|
15
|
+
})
|
|
16
|
+
})
|
|
17
|
+
})
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { coerce } from 'semver'
|
|
2
|
+
|
|
3
|
+
export class SemVer {
|
|
4
|
+
readonly version: string
|
|
5
|
+
readonly major: number
|
|
6
|
+
readonly minor: number
|
|
7
|
+
readonly patch: number
|
|
8
|
+
|
|
9
|
+
private constructor ({
|
|
10
|
+
version,
|
|
11
|
+
major,
|
|
12
|
+
minor,
|
|
13
|
+
patch
|
|
14
|
+
}: {
|
|
15
|
+
version: string
|
|
16
|
+
major: number
|
|
17
|
+
minor: number
|
|
18
|
+
patch: number
|
|
19
|
+
}) {
|
|
20
|
+
this.version = version
|
|
21
|
+
this.major = major
|
|
22
|
+
this.minor = minor
|
|
23
|
+
this.patch = patch
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
static of (version: string): SemVer {
|
|
27
|
+
const semver = coerce(version)
|
|
28
|
+
|
|
29
|
+
if (semver === null) {
|
|
30
|
+
throw new Error(`Failed to parse version. version=${version}`)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return new SemVer({
|
|
34
|
+
version: semver.version,
|
|
35
|
+
major: semver.major,
|
|
36
|
+
minor: semver.minor,
|
|
37
|
+
patch: semver.patch
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const SemVerLevel = {
|
|
2
|
+
Major: 'major',
|
|
3
|
+
Minor: 'minor',
|
|
4
|
+
Patch: 'patch'
|
|
5
|
+
} as const
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
7
|
+
export type SemVerLevel = typeof SemVerLevel[keyof typeof SemVerLevel]
|
|
8
|
+
const semVerLevels = Object.values(SemVerLevel)
|
|
9
|
+
export const isSemVerLevel = (value: any): value is SemVerLevel => semVerLevels.includes(value)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { compareSemVers } from './compareSemVers'
|
|
2
|
+
import { SemVer } from './SemVer'
|
|
3
|
+
import { SemVerLevel } from './SemVerLevel'
|
|
4
|
+
|
|
5
|
+
describe('compareSemVers', () => {
|
|
6
|
+
it('returns SemVerLevel.Major if major versions are different', () => {
|
|
7
|
+
expect(compareSemVers(SemVer.of('1.0.0'), SemVer.of('2.1.1'))).toBe(SemVerLevel.Major)
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
it('returns SemVerLevel.Minor if minor versions are different', () => {
|
|
11
|
+
expect(compareSemVers(SemVer.of('1.0.0'), SemVer.of('1.1.1'))).toBe(SemVerLevel.Minor)
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('returns SemVerLevel.Patch if patch versions are different', () => {
|
|
15
|
+
expect(compareSemVers(SemVer.of('1.0.0'), SemVer.of('1.0.1'))).toBe(SemVerLevel.Patch)
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
it('returns undefined if both versions are same', () => {
|
|
19
|
+
expect(compareSemVers(SemVer.of('1.0.0'), SemVer.of('1.0.0'))).toBeUndefined()
|
|
20
|
+
})
|
|
21
|
+
})
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SemVer } from './SemVer'
|
|
2
|
+
import { SemVerLevel } from './SemVerLevel'
|
|
3
|
+
|
|
4
|
+
export const compareSemVers = (version1: SemVer, version2: SemVer): SemVerLevel | undefined => {
|
|
5
|
+
if (version1.major !== version2.major) {
|
|
6
|
+
return SemVerLevel.Major
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if (version1.minor !== version2.minor) {
|
|
10
|
+
return SemVerLevel.Minor
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (version1.patch !== version2.patch) {
|
|
14
|
+
return SemVerLevel.Patch
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import execa from 'execa'
|
|
2
|
+
import type { ExecaReturnValue } from 'execa'
|
|
3
|
+
|
|
4
|
+
// TODO: add test
|
|
5
|
+
export class Terminal {
|
|
6
|
+
async run (
|
|
7
|
+
command: string,
|
|
8
|
+
...args: string[]
|
|
9
|
+
): Promise<ExecaReturnValue<string>> {
|
|
10
|
+
return await execa(command, args)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Terminal'
|
package/tsconfig.json
ADDED
package/dist/app.js
DELETED