@@ -32,7 +32,7 @@ var clientTSIndexTemplate string
3232//go:embed templates/new/client/ts/game.ts.tmpl
3333var clientTSGameTemplate string
3434
35- //go:embed templates/new/client/js/ index.html.tmpl
35+ //go:embed templates/new/client/index.html.tmpl
3636var clientIndexHTMLTemplate string
3737
3838func CreateNewClient (projectName string ) error {
@@ -52,7 +52,13 @@ func CreateNewClient(projectName string) error {
5252 return err
5353 }
5454
55- runtime , err := cli .SelectString ("Runtime:" , []string {"Browser" , "Node.js" }, []string {"browser" , "node" })
55+ var runtime string
56+
57+ if typescript {
58+ runtime , err = cli .SelectString ("Runtime:" , []string {"Node.js" , "Browser (with Parcel)" }, []string {"node" , "bundler" })
59+ } else {
60+ runtime , err = cli .SelectString ("Runtime:" , []string {"Node.js" , "Browser" , "Browser (with Parcel)" }, []string {"node" , "browser" , "bundler" })
61+ }
5662 if err != nil {
5763 return err
5864 }
@@ -67,12 +73,6 @@ func CreateNewClient(projectName string) error {
6773 return err
6874 }
6975
70- node := runtime == "node"
71-
72- if ! node && typescript {
73- panic ("not implemented" )
74- }
75-
7676 cge , err := api .GetCGEFile ()
7777 if err != nil {
7878 return err
@@ -87,7 +87,7 @@ func CreateNewClient(projectName string) error {
8787 return err
8888 }
8989
90- err = createClientTemplate (projectName , info , eventNames , commandNames , node , typescript )
90+ err = createClientTemplate (projectName , info , eventNames , commandNames , runtime , typescript )
9191 if err != nil {
9292 return err
9393 }
@@ -110,32 +110,42 @@ func CreateNewClient(projectName string) error {
110110 return err
111111 }
112112 } else {
113- if ! node {
113+ if runtime == "browser" {
114114 _ , err = exec .Execute (true , "npm" , "install" , "--save-dev" , "serve" )
115- if err != nil {
116- return err
117- }
115+ }
116+ if err != nil {
117+ return err
118+ }
119+ }
120+ if runtime == "bundler" {
121+ _ , err = exec .Execute (true , "npm" , "install" , "--save-dev" , "parcel" )
122+ if err != nil {
123+ return err
118124 }
119125 }
120126 cli .FinishLoading ()
121127
122128 return nil
123129}
124130
125- func createClientTemplate (projectName string , info server.GameInfo , eventNames , commandNames []string , node , typescript bool ) error {
126- return execClientTemplate (projectName , info , eventNames , commandNames , node , typescript , false )
131+ func createClientTemplate (projectName string , info server.GameInfo , eventNames , commandNames []string , runtime string , typescript bool ) error {
132+ return execClientTemplate (projectName , info , eventNames , commandNames , runtime , typescript , false )
127133}
128134
129- func execClientTemplate (projectName string , info server.GameInfo , eventNames , commandNames []string , node , typescript , update bool ) error {
135+ func execClientTemplate (projectName string , info server.GameInfo , eventNames , commandNames []string , runtime string , typescript , update bool ) error {
136+ wrapperDir := info .Name
137+ if runtime != "browser" {
138+ wrapperDir = filepath .Join ("src" , wrapperDir )
139+ }
130140 if update {
131- cli .Warn ("This action will ERASE and regenerate ALL files in '%s/'.\n You will have to manually update your code to work with the new version." , info . Name )
141+ cli .Warn ("This action will ERASE and regenerate ALL files in '%s/'.\n You will have to manually update your code to work with the new version." , wrapperDir )
132142 ok , err := cli .YesNo ("Continue?" , false )
133143 if err != nil || ! ok {
134144 return cli .ErrCanceled
135145 }
136- os .RemoveAll (info . Name )
146+ os .RemoveAll (wrapperDir )
137147 } else {
138- cli .Warn ("DO NOT EDIT the `%s/` directory inside of the project. ALL CHANGES WILL BE LOST when running `codegame update`." , info . Name )
148+ cli .Warn ("DO NOT EDIT the `%s/` directory inside of the project. ALL CHANGES WILL BE LOST when running `codegame update`." , wrapperDir )
139149 }
140150
141151 type event struct {
@@ -170,22 +180,32 @@ func execClientTemplate(projectName string, info server.GameInfo, eventNames, co
170180 GameName string
171181 Version string
172182 Node bool
183+ Bundler bool
173184 TypeScript bool
174185 Events []event
175186 Commands []event
176187 }{
177188 ProjectName : projectName ,
178189 GameName : info .Name ,
179190 Version : info .Version ,
180- Node : node ,
191+ Node : runtime == "node" ,
192+ Bundler : runtime == "bundler" ,
181193 TypeScript : typescript ,
182194 Events : events ,
183195 Commands : commands ,
184196 }
185197
186198 if typescript {
187199 if ! update {
188- err := ExecTemplate (clientTSIndexTemplate , "src/index.ts" , data )
200+ indexName := "src/index.ts"
201+ if runtime == "bundler" {
202+ indexName = "src/app.ts"
203+ err := ExecTemplate (clientIndexHTMLTemplate , "src/index.html" , data )
204+ if err != nil {
205+ return err
206+ }
207+ }
208+ err := ExecTemplate (clientTSIndexTemplate , indexName , data )
189209 if err != nil {
190210 return err
191211 }
@@ -194,32 +214,38 @@ func execClientTemplate(projectName string, info server.GameInfo, eventNames, co
194214 return err
195215 }
196216 }
197- err := ExecTemplate (clientTSGameTemplate , filepath .Join ("src" , info . Name , "game.ts" ), data )
217+ err := ExecTemplate (clientTSGameTemplate , filepath .Join (wrapperDir , "game.ts" ), data )
198218 if err != nil {
199219 return err
200220 }
201221 } else {
202222 if ! update {
203- indexName := "index.js"
204- if ! node {
223+ indexName := "src/ index.js"
224+ if runtime == "browser" {
205225 indexName = "app.js"
206226 err := ExecTemplate (clientIndexHTMLTemplate , "index.html" , data )
207227 if err != nil {
208228 return err
209229 }
230+ } else if runtime == "bundler" {
231+ indexName = "src/app.js"
232+ err := ExecTemplate (clientIndexHTMLTemplate , "src/index.html" , data )
233+ if err != nil {
234+ return err
235+ }
210236 }
211237 err := ExecTemplate (clientJSIndexTemplate , indexName , data )
212238 if err != nil {
213239 return err
214240 }
215241 }
216- err := ExecTemplate (clientJSGameTemplate , filepath .Join (info . Name , "game.js" ), data )
242+ err := ExecTemplate (clientJSGameTemplate , filepath .Join (wrapperDir , "game.js" ), data )
217243 if err != nil {
218244 return err
219245 }
220246 }
221247
222- if ! update && node {
248+ if ! update {
223249 err := ExecTemplate (clientPackageJSONTemplate , "package.json" , data )
224250 if err != nil {
225251 return err
0 commit comments