@@ -5,6 +5,7 @@ import prompts from "prompts";
5
5
6
6
import { Language } from "./getLanguage" ;
7
7
import { kebabCase } from "./stringHelpers" ;
8
+ import { toMinorSolanaVersion } from "./solanaCli" ;
8
9
9
10
export const allClients = [ "js" , "rust" ] as const ;
10
11
export type Client = ( typeof allClients ) [ number ] ;
@@ -13,19 +14,20 @@ export type Inputs = {
13
14
jsClient : boolean ;
14
15
jsClientPackageName : string ;
15
16
organizationName : string ;
16
- programAddress : string ;
17
+ programAddress ? : string ;
17
18
programCrateName : string ;
18
19
programFramework : "shank" | "anchor" ;
19
20
programName : string ;
20
21
rustClient : boolean ;
21
22
rustClientCrateName : string ;
22
23
shouldOverride : boolean ;
24
+ solanaVersion ?: string ;
23
25
targetDirectoryName : string ;
24
26
useDefaults : boolean ;
25
27
} ;
26
28
27
29
export async function getInputs ( language : Language ) : Promise < Inputs > {
28
- const argInputs = getInputsFromArgs ( ) ;
30
+ const argInputs = getInputsFromArgs ( language ) ;
29
31
const defaultInputs = getDefaultInputs ( argInputs ) ;
30
32
31
33
if ( argInputs . useDefaults ) {
@@ -97,8 +99,8 @@ async function getInputsFromPrompts(
97
99
message : ( ) => {
98
100
const dirForPrompt =
99
101
defaultInputs . targetDirectoryName === "."
100
- ? language . shouldOverride . dirForPrompts . current
101
- : `${ language . shouldOverride . dirForPrompts . target } "${ defaultInputs . targetDirectoryName } "` ;
102
+ ? language . shouldOverride . dirForPrompts ! . current
103
+ : `${ language . shouldOverride . dirForPrompts ! . target } "${ defaultInputs . targetDirectoryName } "` ;
102
104
103
105
return `${ dirForPrompt } ${ language . shouldOverride . message } ` ;
104
106
} ,
@@ -140,13 +142,13 @@ async function getInputsFromPrompts(
140
142
initial : 0 ,
141
143
choices : [
142
144
{
143
- title : language . programFramework . selectOptions . shank . title ,
144
- description : language . programFramework . selectOptions . shank . desc ,
145
+ title : language . programFramework . selectOptions ! . shank . title ,
146
+ description : language . programFramework . selectOptions ! . shank . desc ,
145
147
value : "shank" ,
146
148
} ,
147
149
{
148
- title : language . programFramework . selectOptions . anchor . title ,
149
- description : language . programFramework . selectOptions . anchor . desc ,
150
+ title : language . programFramework . selectOptions ! . anchor . title ,
151
+ description : language . programFramework . selectOptions ! . anchor . desc ,
150
152
value : "anchor" ,
151
153
disabled : true ,
152
154
} ,
@@ -165,8 +167,8 @@ async function getInputsFromPrompts(
165
167
hint : language . clients . hint ,
166
168
instructions : language . instructions . multiselect ,
167
169
choices : allClients . map ( ( client ) => ( {
168
- title : language . clients . selectOptions [ client ] . title ,
169
- description : language . clients . selectOptions [ client ] . desc ,
170
+ title : language . clients . selectOptions ! [ client ] . title ,
171
+ description : language . clients . selectOptions ! [ client ] . desc ,
170
172
value : client ,
171
173
selected : true ,
172
174
} ) ) ,
@@ -206,12 +208,12 @@ async function getInputsFromPrompts(
206
208
207
209
return parsePromptInputs ( promptInputs ) ;
208
210
} catch ( cancelled ) {
209
- console . log ( cancelled . message ) ;
211
+ console . log ( ( cancelled as Error ) . message ) ;
210
212
process . exit ( 1 ) ;
211
213
}
212
214
}
213
215
214
- function getInputsFromArgs ( ) : Partial < Inputs > {
216
+ function getInputsFromArgs ( language : Language ) : Partial < Inputs > {
215
217
type ArgInputs = {
216
218
address ?: string ;
217
219
anchorProgram : boolean ;
@@ -221,20 +223,26 @@ function getInputsFromArgs(): Partial<Inputs> {
221
223
organizationName ?: string ;
222
224
programName ?: string ;
223
225
shankProgram : boolean ;
226
+ solanaVersion ?: string ;
224
227
useDefaults : boolean ;
225
228
targetDirectoryName ?: string ;
226
229
} ;
227
230
228
231
function parseArgInputs ( argInputs : ArgInputs ) : Partial < Inputs > {
229
232
const inputs = { } as Partial < Inputs > ;
230
233
231
- if ( argInputs . targetDirectoryName )
232
- inputs . targetDirectoryName = argInputs . targetDirectoryName ;
233
234
if ( argInputs . address ) inputs . programAddress = argInputs . address ;
234
235
if ( argInputs . organizationName )
235
236
inputs . organizationName = kebabCase ( argInputs . organizationName ) ;
236
237
if ( argInputs . programName )
237
238
inputs . programName = kebabCase ( argInputs . programName ) ;
239
+ if ( argInputs . solanaVersion )
240
+ inputs . solanaVersion = toMinorSolanaVersion (
241
+ language ,
242
+ argInputs . solanaVersion
243
+ ) ;
244
+ if ( argInputs . targetDirectoryName )
245
+ inputs . targetDirectoryName = argInputs . targetDirectoryName ;
238
246
if ( argInputs . force ) inputs . shouldOverride = true ;
239
247
if ( argInputs . useDefaults ) inputs . useDefaults = true ;
240
248
@@ -267,6 +275,7 @@ function getInputsFromArgs(): Partial<Inputs> {
267
275
"no-clients" : { type : "boolean" } ,
268
276
org : { type : "string" } ,
269
277
shank : { type : "boolean" } ,
278
+ solana : { type : "string" } ,
270
279
} ,
271
280
strict : false ,
272
281
} ) ;
@@ -280,6 +289,7 @@ function getInputsFromArgs(): Partial<Inputs> {
280
289
organizationName : options . org ,
281
290
programName : positionals [ 1 ] ,
282
291
shankProgram : options . shank ?? false ,
292
+ solanaVersion : options . solana ,
283
293
useDefaults : options . default ?? false ,
284
294
targetDirectoryName : positionals [ 0 ] ,
285
295
} as ArgInputs ) ;
@@ -302,7 +312,6 @@ export function getDefaultInputs(partialInputs: Partial<Inputs>): Inputs {
302
312
jsClient : true ,
303
313
jsClientPackageName : `@${ organizationName } /${ programName } ` ,
304
314
organizationName,
305
- programAddress : "MyProgram1111111111111111111111111111111111" ,
306
315
programCrateName,
307
316
programFramework : "shank" ,
308
317
programName,
0 commit comments