@@ -2,9 +2,8 @@ package cmd
22
33import (
44 "fmt"
5- "regexp"
65
7- "github.com/AlecAivazis/survey/v2 "
6+ "github.com/onkernel/cli/pkg/create "
87 "github.com/spf13/cobra"
98)
109
@@ -21,68 +20,28 @@ func init() {
2120 createCmd .Flags ().String ("template" , "" , "Template to use for the application" )
2221}
2322
24- const defaultAppName = "my-kernel-app"
25-
26- // projectNameValidator ensures the project name is safe for file systems and package managers.
27- func projectNameValidator (val any ) error {
28- str , ok := val .(string )
29- if ! ok {
30- return fmt .Errorf ("invalid input type" )
31- }
32-
33- // Project name must be non-empty
34- if len (str ) == 0 {
35- return fmt .Errorf ("project name cannot be empty" )
36- }
23+ func runCreateApp (cmd * cobra.Command , args []string ) error {
24+ appName , _ := cmd .Flags ().GetString ("name" )
25+ language , _ := cmd .Flags ().GetString ("language" )
26+ template , _ := cmd .Flags ().GetString ("template" )
3727
38- // Validate project name: only letters, numbers, underscores, and hyphens
39- // This regex prevents special characters that might break shell commands or filesystem paths.
40- matched , err := regexp .MatchString (`^[A-Za-z\-_\d]+$` , str )
28+ appName , err := create .PromptForAppName (appName )
4129 if err != nil {
42- return err
43- }
44- if ! matched {
45- return fmt .Errorf ("project name may only include letters, numbers, underscores, and hyphens" )
46- }
47- return nil
48- }
49-
50- // promptForAppName prompts the user for the application name if not provided
51- func promptForAppName (providedAppName string ) (string , error ) {
52- if providedAppName != "" {
53- return providedAppName , nil
54- }
55-
56- var appName string
57- prompt := & survey.Input {
58- Message : "What is the name of your project?" ,
59- Default : defaultAppName ,
30+ return fmt .Errorf ("failed to get app name: %w" , err )
6031 }
6132
62- err := survey . AskOne ( prompt , & appName , survey . WithValidator ( projectNameValidator ) )
33+ language , err = create . PromptForLanguage ( language )
6334 if err != nil {
64- return " " , err
35+ return fmt . Errorf ( "failed to get language: %w " , err )
6536 }
6637
67- return appName , nil
68- }
69-
70- func runCreateApp (cmd * cobra.Command , args []string ) error {
71- providedAppName , _ := cmd .Flags ().GetString ("name" )
72- language , _ := cmd .Flags ().GetString ("language" )
73- template , _ := cmd .Flags ().GetString ("template" )
74-
75- // Prompt for app name if not provided
76- appName , err := promptForAppName (providedAppName )
38+ template , err = create .PromptForTemplate (template )
7739 if err != nil {
78- return fmt .Errorf ("failed to get app name : %w" , err )
40+ return fmt .Errorf ("failed to get template : %w" , err )
7941 }
8042
8143 fmt .Printf ("Creating application '%s' with language '%s' and template '%s'...\n " , appName , language , template )
8244
83- // TODO: prompt the user for the language of the app, suggest a default language (typescript)
84- // TODO: prompt the user for the template of the app, suggest a default template (sample-app)
85-
8645 // TODO: create the project structure
8746
8847 // print "Creating a new TypeScript Sample App" or similar. Essentially the language and template name combined.
0 commit comments