mirror of
https://github.com/foomo/gotsrpc.git
synced 2025-10-16 12:35:35 +00:00
implemented ServiceList to get determistically sorted code
This commit is contained in:
parent
6a7d7e1065
commit
d471deace5
26
go.go
26
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 {
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
7
model.go
7
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 }
|
||||
|
||||
2
php.go
2
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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user