Skip to content

Commit 153ad7e

Browse files
committed
PR feedback
1 parent 170693b commit 153ad7e

File tree

3 files changed

+53
-15
lines changed

3 files changed

+53
-15
lines changed

commands/project/migrate.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,16 @@ export type ProjectMigrateArgs = CommonArgs &
2323
AccountArgs &
2424
EnvironmentArgs &
2525
ConfigArgs & {
26-
dest?: string;
2726
platformVersion: string;
2827
};
2928

3029
export const command = 'migrate';
3130

3231
export const describe = undefined; // i18n('commands.project.subcommands.migrate.noProjectConfig')
3332

34-
export async function handler(options: ArgumentsCamelCase<ProjectMigrateArgs>) {
33+
export async function handler(
34+
options: ArgumentsCamelCase<ProjectMigrateArgs>
35+
): Promise<void> {
3536
const projectConfig = await getProjectConfig();
3637

3738
if (!projectConfig.projectConfig) {
@@ -59,7 +60,7 @@ export async function handler(options: ArgumentsCamelCase<ProjectMigrateArgs>) {
5960
return process.exit(EXIT_CODES.SUCCESS);
6061
}
6162

62-
export function builder(yargs: Argv) {
63+
export function builder(yargs: Argv): Argv<ProjectMigrateArgs> {
6364
addConfigOptions(yargs);
6465
addAccountOptions(yargs);
6566
addGlobalOptions(yargs);

lang/en.lyaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -715,11 +715,11 @@ en:
715715
default: "Create a component within your project"
716716
withFlags: "Use --name and --type flags to bypass the prompt."
717717
migrate:
718-
describe: "Migrate a project to the projects framework."
718+
describe: "Migrate an existing project to the new version of the projects framework."
719719
errors:
720720
noProjectConfig: "No project detected. Please run this command again from a project directory."
721721
examples:
722-
default: "Migrate a project to the projects framework"
722+
default: "Migrate an existing project to the new version of the projects framework."
723723
deploy:
724724
describe: "Deploy a project build."
725725
deployBuildIdPrompt: "[--build] Deploy which build?"

lib/app/migrate.ts

+47-10
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,9 @@ function getUnmigratableReason(reasonCode: string): string {
5555
}
5656
}
5757

58-
function filterAppsByProjectName(projectConfig?: LoadedProjectConfig) {
58+
function filterAppsByProjectName(
59+
projectConfig?: LoadedProjectConfig
60+
): (app: MigrationApp) => boolean {
5961
return (app: MigrationApp) => {
6062
if (projectConfig) {
6163
return app.projectName === projectConfig?.projectConfig?.name;
@@ -64,16 +66,11 @@ function filterAppsByProjectName(projectConfig?: LoadedProjectConfig) {
6466
};
6567
}
6668

67-
async function handleMigrationSetup(
69+
async function fetchMigrationApps(
70+
appId: MigrateAppArgs['appId'],
6871
derivedAccountId: number,
69-
options: ArgumentsCamelCase<MigrateAppArgs>,
7072
projectConfig?: LoadedProjectConfig
71-
): Promise<{
72-
appIdToMigrate?: number | undefined;
73-
projectName?: string;
74-
projectDest?: string;
75-
}> {
76-
const { name, dest, appId } = options;
73+
): Promise<MigrationApp[]> {
7774
const {
7875
data: { migratableApps, unmigratableApps },
7976
} = await listAppsForMigration(derivedAccountId);
@@ -118,6 +115,22 @@ async function handleMigrationSetup(
118115
throw new Error(lib.migrate.errors.appWithAppIdNotFound(appId));
119116
}
120117

118+
return allApps;
119+
}
120+
121+
async function selectAppToMigrate(
122+
allApps: MigrationApp[],
123+
appId?: number
124+
): Promise<{ proceed: boolean; appIdToMigrate?: number }> {
125+
if (
126+
appId &&
127+
!allApps.some(app => {
128+
return app.appId === appId;
129+
})
130+
) {
131+
throw new Error(lib.migrate.errors.appWithAppIdNotFound(appId));
132+
}
133+
121134
const appChoices = allApps.map(app => ({
122135
name: app.isMigratable
123136
? app.appName
@@ -170,6 +183,30 @@ async function handleMigrationSetup(
170183

171184
logger.log();
172185
const proceed = await confirmPrompt(lib.migrate.prompt.proceed);
186+
return {
187+
proceed,
188+
appIdToMigrate,
189+
};
190+
}
191+
192+
async function handleMigrationSetup(
193+
derivedAccountId: number,
194+
options: ArgumentsCamelCase<MigrateAppArgs>,
195+
projectConfig?: LoadedProjectConfig
196+
): Promise<{
197+
appIdToMigrate?: number | undefined;
198+
projectName?: string;
199+
projectDest?: string;
200+
}> {
201+
const { name, dest, appId } = options;
202+
203+
const allApps = await fetchMigrationApps(
204+
appId,
205+
derivedAccountId,
206+
projectConfig
207+
);
208+
209+
const { proceed, appIdToMigrate } = await selectAppToMigrate(allApps, appId);
173210

174211
if (!proceed) {
175212
return {};
@@ -453,7 +490,7 @@ export function logInvalidAccountError(): void {
453490
logger.error(lib.migrate.errors.invalidAccountTypeTitle);
454491
logger.log(
455492
lib.migrate.errors.invalidAccountTypeDescription(
456-
uiCommandReference('hs accounts use'),
493+
uiCommandReference('hs account use'),
457494
uiCommandReference('hs auth')
458495
)
459496
);

0 commit comments

Comments
 (0)