@@ -4,12 +4,13 @@ import { lstat, mkdir, open, readdir, readFile } from 'fs/promises';
44
55import arg from 'arg' ;
66import { Project } from '@tact-lang/compiler' ;
7+ import chalk from 'chalk' ;
78
89import { getConfig } from '../config/utils' ;
910import { getRootTactConfig , TactConfig , updateRootTactConfig } from '../config/tact.config' ;
1011import { Args , extractFirstArg , Runner } from './Runner' ;
1112import { executeTemplate , TEMPLATES_DIR } from '../template' ;
12- import { assertValidContractName , selectOption , toSnakeCase } from '../utils' ;
13+ import { validateContractName , selectOption , toSnakeCase } from '../utils' ;
1314import { UIProvider } from '../ui/UIProvider' ;
1415import { buildOne } from '../build' ;
1516import { helpArgs , helpMessages , templateTypes } from './constants' ;
@@ -85,8 +86,15 @@ export const create: Runner = async (_args: Args, ui: UIProvider) => {
8586 return ;
8687 }
8788
88- const name = extractFirstArg ( localArgs ) ?? ( await ui . input ( 'Contract name (PascalCase)' ) ) ;
89- assertValidContractName ( name ) ;
89+ const argName = extractFirstArg ( localArgs ) ;
90+ if ( argName !== undefined ) {
91+ const error = validateContractName ( argName ) ;
92+ if ( error ) {
93+ throw new Error ( error ) ;
94+ }
95+ }
96+
97+ const name = argName ?? ( await requestContractName ( 'Contract name (PascalCase)' , ui ) ) ;
9098
9199 const which = (
92100 await selectOption ( templateTypes , {
@@ -120,3 +128,16 @@ export const create: Runner = async (_args: Args, ui: UIProvider) => {
120128 await createFiles ( path . join ( TEMPLATES_DIR , lang , template ) , process . cwd ( ) , replaces ) ;
121129 }
122130} ;
131+
132+ export async function requestContractName ( message : string , ui : UIProvider ) : Promise < string > {
133+ while ( true ) {
134+ const name = await ui . input ( message ) ;
135+ const error = validateContractName ( name ) ;
136+ if ( error !== undefined ) {
137+ ui . write ( chalk . redBright ( `Error: ` ) + error ) ;
138+ // ask user again
139+ continue ;
140+ }
141+ return name ;
142+ }
143+ }
0 commit comments