From 1e29c54030e2e3d6ec2e959b159b0c39bafb30d6 Mon Sep 17 00:00:00 2001 From: Egor Aristov Date: Thu, 23 Oct 2025 07:53:38 +0300 Subject: [PATCH] tons of code --- kitcom/go_gen.tmpl | 4 +-- kitcom/gogen.go | 4 +-- kitcom/tsgen.go | 65 ++++++++++++++++++++++++++++++++++++++++++++-- lib/golang/lib.go | 4 +++ 4 files changed, 71 insertions(+), 6 deletions(-) diff --git a/kitcom/go_gen.tmpl b/kitcom/go_gen.tmpl index 0a8a859..dd03539 100644 --- a/kitcom/go_gen.tmpl +++ b/kitcom/go_gen.tmpl @@ -1,5 +1,5 @@ -{{- /*gotype: efprojects.com/kitten-ipc/kitcom.genData*/ -}} +{{- /*gotype: efprojects.com/kitten-ipc/kitcom.goGenData*/ -}} // Code generated by kitcom. DO NOT EDIT. @@ -20,7 +20,7 @@ func ({{$e.Name | receiver}} *{{$e.Name}}) {{$mtd.Name}} ( {{range $mtd.Ret}}{{.Type | typedef}}, {{end}} ) { return {{$e.Name | receiver}}.Ipc.Call( - "{{$mtd.Name}}", {{range $mtd.Pars}}{{.Name}}, {{end}} + "{{$mtd.Name}}", {{range $mtd.Params}}{{.Name}}, {{end}} ) } {{end}} diff --git a/kitcom/gogen.go b/kitcom/gogen.go index afbf656..dfb74c6 100644 --- a/kitcom/gogen.go +++ b/kitcom/gogen.go @@ -9,7 +9,7 @@ import ( "text/template" ) -type genData struct { +type goGenData struct { PkgName string Api *Api } @@ -19,7 +19,7 @@ type GoApiGenerator struct { } func (g *GoApiGenerator) Generate(api *Api, destFile string) error { - tplCtx := genData{ + tplCtx := goGenData{ PkgName: g.pkgName, Api: api, } diff --git a/kitcom/tsgen.go b/kitcom/tsgen.go index 9abfda1..b38e274 100644 --- a/kitcom/tsgen.go +++ b/kitcom/tsgen.go @@ -1,9 +1,70 @@ package main +import ( + "bytes" + "fmt" + "log" + "os" + "os/exec" + "text/template" +) + +type tsGenData struct { + Api *Api +} + type TypescriptApiGenerator struct { } func (g *TypescriptApiGenerator) Generate(api *Api, destFile string) error { - //TODO implement me - panic("implement me") + tplCtx := tsGenData{ + Api: api, + } + + tpl := template.New("gogen") + tpl = tpl.Funcs(map[string]any{ + "typedef": func(t ValType) (string, error) { + td, ok := map[ValType]string{ + TInt: "number", + TString: "string", + TBool: "bool", + }[t] + if !ok { + return "", fmt.Errorf("cannot generate type %v", t) + } + return td, nil + }, + }) + tpl = template.Must(tpl.ParseFiles("./ts_gen.tmpl")) + + var buf bytes.Buffer + + if err := tpl.ExecuteTemplate(&buf, "ts_gen.tmpl", tplCtx); err != nil { + return fmt.Errorf("execute template: %w", err) + } + + if err := g.writeDest(destFile, buf.Bytes()); err != nil { + return fmt.Errorf("write file: %w", err) + } + + return nil +} + +func (g *TypescriptApiGenerator) writeDest(destFile string, bytes []byte) error { + f, err := os.OpenFile(destFile, os.O_WRONLY|os.O_CREATE, 0644) + if err != nil { + return fmt.Errorf("open destination file: %w", err) + } + defer f.Close() + + if _, err := f.Write(bytes); err != nil { + return fmt.Errorf("write formatted source: %w", err) + } + + prettierCmd := exec.Command("npx", "prettier", destFile, "--write") + if err := prettierCmd.Run(); err != nil { + log.Printf("Prettier returned error: %v", err) + } + + return nil } diff --git a/lib/golang/lib.go b/lib/golang/lib.go index a4a4662..e6fd6f1 100644 --- a/lib/golang/lib.go +++ b/lib/golang/lib.go @@ -136,6 +136,10 @@ func (k *KittenIPC) processMsg(msg Message) { } +func (k *KittenIPC) Call() { + +} + func (k *KittenIPC) raiseErr(err error) { select { case k.errCh <- err: