@@ -55,7 +55,9 @@ function getUnmigratableReason(reasonCode: string): string {
55
55
}
56
56
}
57
57
58
- function filterAppsByProjectName ( projectConfig ?: LoadedProjectConfig ) {
58
+ function filterAppsByProjectName (
59
+ projectConfig ?: LoadedProjectConfig
60
+ ) : ( app : MigrationApp ) => boolean {
59
61
return ( app : MigrationApp ) => {
60
62
if ( projectConfig ) {
61
63
return app . projectName === projectConfig ?. projectConfig ?. name ;
@@ -64,16 +66,11 @@ function filterAppsByProjectName(projectConfig?: LoadedProjectConfig) {
64
66
} ;
65
67
}
66
68
67
- async function handleMigrationSetup (
69
+ async function fetchMigrationApps (
70
+ appId : MigrateAppArgs [ 'appId' ] ,
68
71
derivedAccountId : number ,
69
- options : ArgumentsCamelCase < MigrateAppArgs > ,
70
72
projectConfig ?: LoadedProjectConfig
71
- ) : Promise < {
72
- appIdToMigrate ?: number | undefined ;
73
- projectName ?: string ;
74
- projectDest ?: string ;
75
- } > {
76
- const { name, dest, appId } = options ;
73
+ ) : Promise < MigrationApp [ ] > {
77
74
const {
78
75
data : { migratableApps, unmigratableApps } ,
79
76
} = await listAppsForMigration ( derivedAccountId ) ;
@@ -118,6 +115,22 @@ async function handleMigrationSetup(
118
115
throw new Error ( lib . migrate . errors . appWithAppIdNotFound ( appId ) ) ;
119
116
}
120
117
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
+
121
134
const appChoices = allApps . map ( app => ( {
122
135
name : app . isMigratable
123
136
? app . appName
@@ -170,6 +183,30 @@ async function handleMigrationSetup(
170
183
171
184
logger . log ( ) ;
172
185
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 ) ;
173
210
174
211
if ( ! proceed ) {
175
212
return { } ;
@@ -453,7 +490,7 @@ export function logInvalidAccountError(): void {
453
490
logger . error ( lib . migrate . errors . invalidAccountTypeTitle ) ;
454
491
logger . log (
455
492
lib . migrate . errors . invalidAccountTypeDescription (
456
- uiCommandReference ( 'hs accounts use' ) ,
493
+ uiCommandReference ( 'hs account use' ) ,
457
494
uiCommandReference ( 'hs auth' )
458
495
)
459
496
) ;
0 commit comments