diff --git a/packages/core/src/plugins/version.ts b/packages/core/src/plugins/version.ts index 98833ba..4c2a742 100644 --- a/packages/core/src/plugins/version.ts +++ b/packages/core/src/plugins/version.ts @@ -2,7 +2,7 @@ import { writeFile } from 'fs/promises' import { readFileSync } from 'fs' import { gt, SemVer } from 'semver' import kleur from 'kleur' -import Yakumo, { confirm, Context, cwd, PackageJson } from '../index.js' +import Yakumo, { Arguments, confirm, Context, cwd, PackageJson } from '../index.js' const bumpTypes = ['major', 'minor', 'patch', 'version', 'reset'] as const type BumpType = typeof bumpTypes[number] @@ -18,11 +18,13 @@ class Package { this.version = this.meta.version } - bump(flag: BumpType, options: any, prerelease: boolean) { + bump(flag: BumpType, options: any, args: Arguments) { if (this.meta.private) return let version = new SemVer(this.meta.version) const reset = flag === 'reset' - if (prerelease) { + if (args.stable) { + version.prerelease = [] + } else if (args.prerelease) { if (version.prerelease.length) { version.prerelease = [{ alpha: 'beta', @@ -95,8 +97,8 @@ class Graph { return results } - bump(node: Package, flag: BumpType, isPre: boolean) { - const version = node.bump(flag, this.project.argv, isPre) + bump(node: Package, flag: BumpType, args: Arguments) { + const version = node.bump(flag, this.project.argv, args) if (!version) return const dependents = new Set() this.each((target) => { @@ -128,7 +130,7 @@ class Graph { } }) if (!this.project.argv.recursive) return - dependents.forEach(dep => this.bump(dep, flag, isPre)) + dependents.forEach(dep => this.bump(dep, flag, args)) } async save() { @@ -165,7 +167,7 @@ export default function apply(ctx: Context) { const graph = new Graph(ctx.yakumo) const paths = ctx.yakumo.locate(ctx.yakumo.argv._) for (const path of paths) { - graph.bump(graph.nodes[path], flag, ctx.yakumo.argv.prerelease) + graph.bump(graph.nodes[path], flag, ctx.yakumo.argv) } await graph.save() @@ -176,9 +178,10 @@ export default function apply(ctx: Context) { patch: ['3'], reset: ['0'], prerelease: ['p'], + stable: ['P'], version: ['v'], recursive: ['r'], }, - boolean: ['major', 'minor', 'patch', 'reset', 'prerelease', 'recursive'], + boolean: ['major', 'minor', 'patch', 'reset', 'prerelease', 'stable', 'recursive'], }) } diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index f0ab219..32f1153 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -41,11 +41,11 @@ let registryTask: Promise export namespace latest { export interface Options { - version?: string + version: string } } -export async function latest(name: string, options: latest.Options = {}) { +export async function latest(name: string, options: latest.Options) { const registry = await (registryTask ||= getRegistry()) const packageUrl = new URL(encodeURIComponent(name).replace(/^%40/, '@'), registry) const response = await fetch(packageUrl, { @@ -53,7 +53,7 @@ export async function latest(name: string, options: latest.Options = {}) { 'Accept': 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*', }, }) - const { version = 'latest' } = options + const { version } = options const data = await response.json() if (data['dist-tags'][version]) { return data['dist-tags'][version] @@ -61,6 +61,6 @@ export async function latest(name: string, options: latest.Options = {}) { return version } else { const versions = Object.keys(data.versions) - return semver.maxSatisfying(versions, version) + return semver.maxSatisfying(versions, version, { includePrerelease: true }) } }