Skip to content

Commit

Permalink
feat: upgrade command support canary
Browse files Browse the repository at this point in the history
  • Loading branch information
winchesHe committed Dec 5, 2024
1 parent 4dc65d8 commit cca8220
Show file tree
Hide file tree
Showing 7 changed files with 137 additions and 71 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
},
"dependencies": {
"@clack/prompts": "0.7.0",
"@winches/prompts": "0.0.6",
"@winches/prompts": "0.0.7",
"async-retry": "1.3.3",
"chalk": "5.3.0",
"commander": "11.0.0",
Expand Down
10 changes: 5 additions & 5 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 26 additions & 5 deletions src/actions/upgrade-action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import type {AppendKeyValue} from '@helpers/type';
import fs from 'node:fs';

import {getBetaVersion} from '@helpers/beta';
import {getCanaryVersion} from '@helpers/canary';
import {checkIllegalComponents} from '@helpers/check';
import {detect} from '@helpers/detect';
import {exec} from '@helpers/exec';
Expand All @@ -27,24 +28,35 @@ interface UpgradeActionOptions {
patch?: boolean;
write?: boolean;
beta?: boolean;
canary?: boolean;
}

type TransformComponent = Required<
AppendKeyValue<NextUIComponents[0], 'latestVersion', string> & {isLatest: boolean}
>;

function betaCompareVersions(version: string, latestVersion: string, beta: boolean) {
function extraCompareVersions(
version: string,
latestVersion: string,
beta: boolean,
canary: boolean
) {
const compareResult = compareVersions(version, latestVersion);

// Beta version is greater than latest version if beta is true
// Example: 2.1.0 < 2.1.0-beta.0
return beta && compareResult === 1 && !version.includes('beta') ? false : compareResult >= 0;
return beta && compareResult === 1 && !version.includes('beta')
? false
: canary && compareResult === 1 && !version.includes('canary')
? false
: compareResult >= 0;
}

export async function upgradeAction(components: string[], options: UpgradeActionOptions) {
const {
all = false,
beta = false,
canary = false,
packagePath = resolver('package.json'),
write = false
} = options;
Expand All @@ -60,8 +72,12 @@ export async function upgradeAction(components: string[], options: UpgradeAction
const latestVersion =
store.nextUIComponentsMap[component.name]?.version ||
(await getLatestVersion(component.package));
const mergedVersion = beta ? await getBetaVersion(component.package) : latestVersion;
const compareResult = betaCompareVersions(component.version, mergedVersion, beta);
const mergedVersion = beta
? await getBetaVersion(component.package)
: canary
? await getCanaryVersion(component.package)
: latestVersion;
const compareResult = extraCompareVersions(component.version, mergedVersion, beta, canary);

transformComponents.push({
...component,
Expand Down Expand Up @@ -103,7 +119,12 @@ export async function upgradeAction(components: string[], options: UpgradeAction
components = await getAutocompleteMultiselect(
'Select the components to upgrade',
transformComponents.map((component) => {
const isUpToDate = betaCompareVersions(component.version, component.latestVersion, beta);
const isUpToDate = extraCompareVersions(
component.version,
component.latestVersion,
beta,
canary
);

return {
disabled: isUpToDate,
Expand Down
Loading

0 comments on commit cca8220

Please sign in to comment.