Skip to content

Commit 81b7e35

Browse files
Vision010antfu
andauthoredMar 4, 2024
feat: support next as release type (#15)
Co-authored-by: Anthony Fu <github@antfu.me> Co-authored-by: Anthony Fu <anthonyfu117@hotmail.com>
1 parent d9660fe commit 81b7e35

7 files changed

+20
-21
lines changed
 

‎package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@
5555
"upgrade": "npm-check -u && npm audit fix",
5656
"bumpp": "esno src/cli/run.ts",
5757
"prepublishOnly": "npm run clean && npm run build",
58-
"release": "npm run bumpp && npm publish"
58+
"release": "npm run bumpp && npm publish",
59+
"typecheck": "tsc --noEmit"
5960
},
6061
"dependencies": {
6162
"@jsdevtools/ez-spawn": "^3.0.4",

‎src/get-new-version.ts

+9-8
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,12 @@ export async function getNewVersion(operation: Operation): Promise<Operation> {
3636
*/
3737
function getNextVersion(oldVersion: string, bump: BumpRelease): string {
3838
const oldSemVer = new SemVer(oldVersion)
39-
const newSemVer = oldSemVer.inc(bump.type as any, bump.preid)
39+
40+
const type = bump.type === 'next'
41+
? oldSemVer.prerelease.length ? 'prerelease' : 'patch'
42+
: bump.type
43+
44+
const newSemVer = oldSemVer.inc(type, bump.preid)
4045

4146
if (
4247
isPrerelease(bump.type)
@@ -58,19 +63,15 @@ function getNextVersion(oldVersion: string, bump: BumpRelease): string {
5863
/**
5964
* Returns the next version number for all release types.
6065
*/
61-
function getNextVersions(oldVersion: string, preid: string): Record<ReleaseType | 'next', string> {
66+
function getNextVersions(oldVersion: string, preid: string): Record<ReleaseType, string> {
6267
const next: Record<string, string> = {}
6368

6469
const parse = semver.parse(oldVersion)
6570
if (typeof parse?.prerelease[0] === 'string')
6671
preid = parse?.prerelease[0] || 'preid'
6772

6873
for (const type of releaseTypes)
69-
next[type] = semver.inc(oldVersion, type, preid)!
70-
71-
next.next = parse?.prerelease?.length
72-
? semver.inc(oldVersion, 'prerelease', preid)!
73-
: semver.inc(oldVersion, 'patch')!
74+
next[type] = getNextVersion(oldVersion, { type, preid })
7475

7576
return next
7677
}
@@ -121,7 +122,7 @@ async function promptForNewVersion(operation: Operation): Promise<Operation> {
121122
},
122123
},
123124
]) as {
124-
release: ReleaseType | 'next' | 'none' | 'custom' | 'config'
125+
release: ReleaseType | 'none' | 'custom' | 'config'
125126
custom?: string
126127
}
127128

‎src/manifest.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,9 @@ export function isManifest(obj: any): obj is Manifest {
3434
* Determines whether the specified manifest is package-lock.json
3535
*/
3636
export function isPackageLockManifest(
37-
manifest: Manifest
37+
manifest: Manifest,
3838
): manifest is PackageLockManifest {
39-
return (
40-
typeof (manifest as PackageLockManifest).packages?.['']?.version ===
41-
'string'
42-
)
39+
return (typeof (manifest as PackageLockManifest).packages?.['']?.version === 'string')
4340
}
4441

4542
/**

‎src/normalize-options.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export async function normalizeOptions(raw: VersionBumpOptions): Promise<Normali
7878
if (!raw.release || raw.release === 'prompt')
7979
release = { type: 'prompt', preid }
8080

81-
else if (isReleaseType(raw.release))
81+
else if (isReleaseType(raw.release) || raw.release === 'next')
8282
release = { type: raw.release, preid }
8383

8484
else

‎src/release-type.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import type { ReleaseType } from 'semver'
1+
import type { ReleaseType as SemverReleaseType } from 'semver'
22

3-
export type { ReleaseType }
3+
export type ReleaseType = SemverReleaseType | 'next'
44

55
/**
66
* The different types of pre-releases.
@@ -10,7 +10,7 @@ export const prereleaseTypes: ReleaseType[] = ['premajor', 'preminor', 'prepatch
1010
/**
1111
* All possible release types.
1212
*/
13-
export const releaseTypes: ReleaseType[] = prereleaseTypes.concat(['major', 'minor', 'patch'])
13+
export const releaseTypes: ReleaseType[] = prereleaseTypes.concat(['major', 'minor', 'patch', 'next'])
1414

1515
/**
1616
* Determines whether the specified value is a pre-release.

‎src/types/version-bump-options.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export interface VersionBumpOptions {
110110
/**
111111
* A callback that is provides information about the progress of the `versionBump()` function.
112112
*/
113-
progress?(progress: VersionBumpProgress): void
113+
progress?: (progress: VersionBumpProgress) => void
114114

115115
/**
116116
* Excute additional command after bumping and before commiting

‎src/update-files.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ async function updateManifestFile(relPath: string, operation: Operation): Promis
6868

6969
if (isManifest(file.data) && file.data.version !== newVersion) {
7070
file.data.version = newVersion
71-
if (isPackageLockManifest(file.data)) {
71+
if (isPackageLockManifest(file.data))
7272
file.data.packages[''].version = newVersion
73-
}
73+
7474
await writeJsonFile(file)
7575
modified = true
7676
}

0 commit comments

Comments
 (0)
Please sign in to comment.