diff --git a/go.go b/go.go index a642a87..9c6df43 100644 --- a/go.go +++ b/go.go @@ -163,7 +163,7 @@ func extractImports(fields []*Field, fullPackageName string, aliases map[string] } } -func renderTSRPCServiceProxies(services map[string]*Service, fullPackageName string, packageName string, config *config.Target, g *code) error { +func renderTSRPCServiceProxies(services ServiceList, fullPackageName string, packageName string, config *config.Target, g *code) error { aliases := map[string]string{ "time": "time", "net/http": "http", @@ -171,7 +171,7 @@ func renderTSRPCServiceProxies(services map[string]*Service, fullPackageName str } for _, service := range services { - // Check if we should render this service as ts rcp + // Check if we should render this service as ts rpc // Note: remove once there's a separate gorcp generator if !config.IsTSRPC(service.Name) { continue @@ -193,7 +193,7 @@ func renderTSRPCServiceProxies(services map[string]*Service, fullPackageName str ` + imports + ` ) `) - for endpoint, service := range services { + for _, service := range services { // Check if we should render this service as ts rcp // Note: remove once there's a separate gorcp generator if !config.IsTSRPC(service.Name) { @@ -210,7 +210,7 @@ func renderTSRPCServiceProxies(services map[string]*Service, fullPackageName str func NewDefault` + proxyName + `(service *` + service.Name + `, allowOrigin []string) *` + proxyName + ` { return &` + proxyName + `{ - EndPoint: "` + endpoint + `", + EndPoint: "` + service.Endpoint + `", allowOrigin : allowOrigin, service: service, } @@ -344,7 +344,7 @@ func renderTSRPCServiceProxies(services map[string]*Service, fullPackageName str return nil } -func renderTSRPCServiceClients(services map[string]*Service, fullPackageName string, packageName string, config *config.Target, g *code) error { +func renderTSRPCServiceClients(services ServiceList, fullPackageName string, packageName string, config *config.Target, g *code) error { aliases := map[string]string{ "github.com/foomo/gotsrpc": "gotsrpc", } @@ -373,7 +373,7 @@ func renderTSRPCServiceClients(services map[string]*Service, fullPackageName str ` + imports + ` ) `) - for endpoint, service := range services { + for _, service := range services { // Check if we should render this service as ts rcp // Note: remove once there's a separate gorcp generator if !config.IsTSRPC(service.Name) { @@ -388,7 +388,7 @@ func renderTSRPCServiceClients(services map[string]*Service, fullPackageName str } func NewDefault` + clientName + `(url string) *` + clientName + ` { - return New` + clientName + `(url, "` + endpoint + `") + return New` + clientName + `(url, "` + service.Endpoint + `") } func New` + clientName + `(url string, endpoint string) *` + clientName + ` { @@ -428,7 +428,7 @@ func renderTSRPCServiceClients(services map[string]*Service, fullPackageName str return nil } -func renderGoRPCServiceProxies(services map[string]*Service, fullPackageName string, packageName string, config *config.Target, g *code) error { +func renderGoRPCServiceProxies(services ServiceList, fullPackageName string, packageName string, config *config.Target, g *code) error { aliases := map[string]string{ "fmt": "fmt", "time": "time", @@ -596,7 +596,7 @@ func renderGoRPCServiceProxies(services map[string]*Service, fullPackageName str return nil } -func renderGoRPCServiceClients(services map[string]*Service, fullPackageName string, packageName string, config *config.Target, g *code) error { +func renderGoRPCServiceClients(services ServiceList, fullPackageName string, packageName string, config *config.Target, g *code) error { aliases := map[string]string{ "crypto/tls": "tls", "github.com/valyala/gorpc": "gorpc", @@ -699,7 +699,7 @@ func renderGoRPCServiceClients(services map[string]*Service, fullPackageName str return nil } -func RenderGoTSRPCProxies(services map[string]*Service, longPackageName, packageName string, config *config.Target) (gocode string, err error) { +func RenderGoTSRPCProxies(services ServiceList, longPackageName, packageName string, config *config.Target) (gocode string, err error) { g := newCode(" ") err = renderTSRPCServiceProxies(services, longPackageName, packageName, config, g) if err != nil { @@ -709,7 +709,7 @@ func RenderGoTSRPCProxies(services map[string]*Service, longPackageName, package return } -func RenderGoTSRPCClients(services map[string]*Service, longPackageName, packageName string, config *config.Target) (gocode string, err error) { +func RenderGoTSRPCClients(services ServiceList, longPackageName, packageName string, config *config.Target) (gocode string, err error) { g := newCode(" ") err = renderTSRPCServiceClients(services, longPackageName, packageName, config, g) if err != nil { @@ -719,7 +719,7 @@ func RenderGoTSRPCClients(services map[string]*Service, longPackageName, package return } -func RenderGoRPCProxies(services map[string]*Service, longPackageName, packageName string, config *config.Target) (gocode string, err error) { +func RenderGoRPCProxies(services ServiceList, longPackageName, packageName string, config *config.Target) (gocode string, err error) { g := newCode(" ") err = renderGoRPCServiceProxies(services, longPackageName, packageName, config, g) if err != nil { @@ -729,7 +729,7 @@ func RenderGoRPCProxies(services map[string]*Service, longPackageName, packageNa return } -func RenderGoRPCClients(services map[string]*Service, longPackageName, packageName string, config *config.Target) (gocode string, err error) { +func RenderGoRPCClients(services ServiceList, longPackageName, packageName string, config *config.Target) (gocode string, err error) { g := newCode(" ") err = renderGoRPCServiceClients(services, longPackageName, packageName, config, g) if err != nil { diff --git a/gotsrpc.go b/gotsrpc.go index 277fb20..1c60e0c 100644 --- a/gotsrpc.go +++ b/gotsrpc.go @@ -100,7 +100,7 @@ func parseDir(goPaths []string, packageName string) (map[string]*ast.Package, er fset := token.NewFileSet() var dir string if strings.HasSuffix(goPath, "vendor") { - dir = path.Join(goPath,packageName) + dir = path.Join(goPath, packageName) } else { dir = path.Join(goPath, "src", packageName) } diff --git a/model.go b/model.go index 8a761ac..7085e18 100644 --- a/model.go +++ b/model.go @@ -48,12 +48,15 @@ type Field struct { } type Service struct { - Name string - Methods ServiceMethods + Name string + Methods ServiceMethods + Endpoint string } type ServiceMethods []*Method +type ServiceList []*Service + func (sm ServiceMethods) Len() int { return len(sm) } func (sm ServiceMethods) Swap(i, j int) { sm[i], sm[j] = sm[j], sm[i] } func (sm ServiceMethods) Less(i, j int) bool { return sm[i].Name < sm[j].Name } diff --git a/php.go b/php.go index 7544400..5a227ac 100644 --- a/php.go +++ b/php.go @@ -93,7 +93,7 @@ func renderPHPRPCServiceClients(service *Service, namespce string, g *code) erro return nil } -func RenderPHPRPCClients(services map[string]*Service, config *config.Target) (code map[string]string, err error) { +func RenderPHPRPCClients(services ServiceList, config *config.Target) (code map[string]string, err error) { code = map[string]string{} for _, service := range services { // Check if we should render this service as ts rcp diff --git a/servicereader.go b/servicereader.go index 28c186a..bbb3967 100644 --- a/servicereader.go +++ b/servicereader.go @@ -10,7 +10,11 @@ import ( "strings" ) -func readServiceFile(file *ast.File, packageName string, services map[string]*Service) error { +func (sl ServiceList) Len() int { return len(sl) } +func (sl ServiceList) Swap(i, j int) { sl[i], sl[j] = sl[j], sl[i] } +func (sl ServiceList) Less(i, j int) bool { return strings.Compare(sl[i].Name, sl[j].Name) > 0 } + +func readServiceFile(file *ast.File, packageName string, services ServiceList) error { findService := func(serviceName string) (service *Service, ok bool) { for _, service := range services { if service.Name == serviceName { @@ -132,13 +136,14 @@ func readFields(fieldList *ast.FieldList, fileImports fileImportSpecMap) (fields } -func readServicesInPackage(pkg *ast.Package, packageName string, serviceMap map[string]string) (services map[string]*Service, err error) { - services = map[string]*Service{} +func readServicesInPackage(pkg *ast.Package, packageName string, serviceMap map[string]string) (services ServiceList, err error) { + services = ServiceList{} for endpoint, serviceName := range serviceMap { - services[endpoint] = &Service{ - Name: serviceName, - Methods: []*Method{}, - } + services = append(services, &Service{ + Name: serviceName, + Methods: []*Method{}, + Endpoint: endpoint, + }) } for _, file := range pkg.Files { err = readServiceFile(file, packageName, services) @@ -147,6 +152,7 @@ func readServicesInPackage(pkg *ast.Package, packageName string, serviceMap map[ } } + sort.Sort(services) return } @@ -185,7 +191,7 @@ func loadConstants(pkg *ast.Package) map[string]*ast.BasicLit { } -func Read(goPaths []string, packageName string, serviceMap map[string]string) (services map[string]*Service, structs map[string]*Struct, scalars map[string]*Scalar, constants map[string]map[string]*ast.BasicLit, err error) { +func Read(goPaths []string, packageName string, serviceMap map[string]string) (services ServiceList, structs map[string]*Struct, scalars map[string]*Scalar, constants map[string]map[string]*ast.BasicLit, err error) { if len(serviceMap) == 0 { err = errors.New("nothing to do service names are empty") return diff --git a/typescript.go b/typescript.go index 804984f..2ee5af3 100644 --- a/typescript.go +++ b/typescript.go @@ -99,22 +99,22 @@ func renderStruct(str *Struct, mappings config.TypeScriptMappings, scalarTypes m return nil } -func renderService(skipGoTSRPC bool, moduleKind config.ModuleKind, service *Service, endpoint string, mappings config.TypeScriptMappings, scalarTypes map[string]*Scalar, ts *code) error { +func renderService(skipGoTSRPC bool, moduleKind config.ModuleKind, service *Service, mappings config.TypeScriptMappings, scalarTypes map[string]*Scalar, ts *code) error { clientName := service.Name + "Client" ts.l("export class " + clientName + " {").ind(1) if moduleKind == config.ModuleKindCommonJS { if skipGoTSRPC { - ts.l("constructor(public endPoint:string = \"" + endpoint + "\", public transport:(endPoint:string, method:string, args:any[], success:any, err:any) => void) { }") + ts.l("constructor(public endPoint:string = \"" + service.Endpoint + "\", public transport:(endPoint:string, method:string, args:any[], success:any, err:any) => void) { }") } else { ts.l("static defaultInst = new " + clientName + ";") - ts.l("constructor(public endPoint:string = \"" + endpoint + "\", public transport = call) { }") + ts.l("constructor(public endPoint:string = \"" + service.Endpoint + "\", public transport = call) { }") } } else { ts.l("static defaultInst = new " + clientName + ";") - ts.l("constructor(public endPoint:string = \"" + endpoint + "\", public transport = GoTSRPC.call) { }") + ts.l("constructor(public endPoint:string = \"" + service.Endpoint + "\", public transport = GoTSRPC.call) { }") } for _, method := range service.Methods { @@ -285,7 +285,7 @@ func ucFirst(str string) string { return constPrefix } -func RenderTypeScriptServices(moduleKind config.ModuleKind, services map[string]*Service, mappings config.TypeScriptMappings, scalarTypes map[string]*Scalar, target *config.Target) (typeScript string, err error) { +func RenderTypeScriptServices(moduleKind config.ModuleKind, services ServiceList, mappings config.TypeScriptMappings, scalarTypes map[string]*Scalar, target *config.Target) (typeScript string, err error) { ts := newCode(" ") if !SkipGoTSRPC { @@ -327,13 +327,13 @@ func RenderTypeScriptServices(moduleKind config.ModuleKind, services map[string] ts.ind(1) } - for endPoint, service := range services { + for _, service := range services { // Check if we should render this service as ts rcp // Note: remove once there's a separate gorcp generator if !target.IsTSRPC(service.Name) { continue } - err = renderService(SkipGoTSRPC, moduleKind, service, endPoint, mappings, scalarTypes, ts) + err = renderService(SkipGoTSRPC, moduleKind, service, mappings, scalarTypes, ts) if err != nil { return }