Skip to content

Commit

Permalink
feat: upgrade command add peerDep upgrade (#30)
Browse files Browse the repository at this point in the history
* feat: upgrade command add peerDep upgrade

* feat: optimize upgrade peer output

* feat: optimize upgrade all dep output

* feat: optimize upgrade losing to missing

* fix: ignore lose

* fix: some optimize

* refactor: upgrade command all option include others components (#42)

* feat: update components.json

* feat: typo

* fix: output lose alignment

* fix: output component lose alignment

* fix: upgrade error about all select

* feat: add peerDep warn about min version required

* feat: get the missing dep inside and add install

* feat: optimize output log
  • Loading branch information
winchesHe committed Apr 26, 2024
1 parent faa34d8 commit d5931e8
Show file tree
Hide file tree
Showing 10 changed files with 409 additions and 133 deletions.
74 changes: 58 additions & 16 deletions src/actions/upgrade-action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,16 @@ import {checkIllegalComponents} from '@helpers/check';
import {detect} from '@helpers/detect';
import {exec} from '@helpers/exec';
import {Logger} from '@helpers/logger';
import {colorMatchRegex} from '@helpers/output-info';
import {getPackageInfo} from '@helpers/package';
import {upgrade} from '@helpers/upgrade';
import {getColorVersion, getPackageManagerInfo} from '@helpers/utils';
import {type NextUIComponents} from 'src/constants/component';
import {resolver} from 'src/constants/path';
import {NEXT_UI} from 'src/constants/required';
import {store} from 'src/constants/store';
import {getAutocompleteMultiselect, getSelect} from 'src/prompts';
import {getLatestVersion} from 'src/scripts/helpers';
import {getAutocompleteMultiselect, getMultiselect, getSelect} from 'src/prompts';
import {compareVersions, getLatestVersion} from 'src/scripts/helpers';

interface UpgradeActionOptions {
packagePath?: string;
Expand All @@ -41,7 +42,7 @@ export async function upgradeAction(components: string[], options: UpgradeAction

transformComponents.push({
...component,
isLatest: component.version === latestVersion,
isLatest: compareVersions(component.version, latestVersion) >= 0,
latestVersion
});
}
Expand All @@ -53,9 +54,7 @@ export async function upgradeAction(components: string[], options: UpgradeAction
return;
}

if (isNextUIAll) {
components = [NEXT_UI];
} else if (all) {
if (all) {
components = currentComponents.map((component) => component.package);
} else if (!components.length) {
components = await getAutocompleteMultiselect(
Expand Down Expand Up @@ -95,31 +94,74 @@ export async function upgradeAction(components: string[], options: UpgradeAction
/** ======================== Upgrade ======================== */
const upgradeOptionList = transformComponents.filter((c) => components.includes(c.package));

const result = await upgrade({
let result = await upgrade({
all,
allDependencies,
isNextUIAll,
upgradeOptionList
});
let ignoreList: string[] = [];

if (result.length) {
const isExecute = await getSelect('Would you like to proceed with the upgrade?', [
{
title: 'Yes',
value: true
},
{title: 'No', value: false}
{
description: 'Select this if you wish to exclude certain packages from the upgrade',
title: 'No',
value: false
}
]);

if (isExecute) {
const packageManager = await detect();
const {install} = getPackageManagerInfo(packageManager);

await exec(
`${packageManager} ${install} ${result.reduce((acc, component) => {
return `${acc} ${component.package}@${component.latestVersion}`;
}, '')}`
const packageManager = await detect();
const {install} = getPackageManagerInfo(packageManager);

if (!isExecute) {
// Ask whether need to remove some package not to upgrade
const isNeedRemove = await getSelect(
'Would you like to exclude any packages from the upgrade?',
[
{
description: 'Select this to choose packages to exclude',
title: 'Yes',
value: true
},
{
description: 'Select this to proceed without excluding any packages',
title: 'No',
value: false
}
]
);

if (isNeedRemove) {
ignoreList = await getMultiselect(
'Select the packages you want to exclude from the upgrade:',
result.map((c) => {
return {
description: `${c.version} -> ${getColorVersion(c.version, c.latestVersion)}`,
title: c.package,
value: c.package
};
})
);
}
}

// Remove the components that need to be ignored
result = result.filter((r) => {
return !ignoreList.some((ignore) => r.package === ignore);
});

await exec(
`${packageManager} ${install} ${result.reduce((acc, component, index) => {
return `${acc}${index === 0 ? '' : ' '}${
component.package
}@${component.latestVersion.replace(colorMatchRegex, '')}`;
}, '')}`
);
}

Logger.newLine();
Expand Down
Loading

0 comments on commit d5931e8

Please sign in to comment.