From d5a8ee0132c9b3edecdd39a65899df6c84d62792 Mon Sep 17 00:00:00 2001 From: Ariel Date: Sun, 3 Apr 2022 12:17:20 +0200 Subject: [PATCH] Do not duplicate imports (#1307) * Do not duplicate imports * Fix warning as first element --- v2/internal/binding/generate.go | 38 ++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/v2/internal/binding/generate.go b/v2/internal/binding/generate.go index 1bd3283bf..c04f09ee8 100644 --- a/v2/internal/binding/generate.go +++ b/v2/internal/binding/generate.go @@ -30,10 +30,12 @@ func (b *Bindings) GenerateGoBindings(baseDir string) error { // Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT `) - var tsoutput bytes.Buffer - tsoutput.WriteString(`// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL + var tsBody bytes.Buffer + var tsContent bytes.Buffer + tsContent.WriteString(`// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL // This file is automatically generated. DO NOT EDIT `) + var importClasses []string for methodName, methodDetails := range methods { // Generate JS @@ -53,17 +55,18 @@ func (b *Bindings) GenerateGoBindings(baseDir string) error { // Generate TS if len(methodDetails.StructNames) > 0 { - classes := strings.Join(methodDetails.StructNames, ", ") - tsoutput.WriteString("import {" + classes + "} from '../models';") + for _, structName := range methodDetails.StructNames { + importClasses = append(importClasses, structName) + } } - tsoutput.WriteString(fmt.Sprintf("\nexport function %s(", methodName)) + tsBody.WriteString(fmt.Sprintf("\nexport function %s(", methodName)) args.Clear() for count, input := range methodDetails.Inputs { arg := fmt.Sprintf("arg%d", count+1) args.Add(arg + ":" + goTypeToTypescriptType(input.TypeName, false)) } - tsoutput.WriteString(args.Join(",") + "):") + tsBody.WriteString(args.Join(",") + "):") returnType := "Promise" if methodDetails.OutputCount() > 0 { firstType := goTypeToTypescriptType(methodDetails.Outputs[0].TypeName, false) @@ -76,15 +79,22 @@ func (b *Bindings) GenerateGoBindings(baseDir string) error { } else { returnType = "Promise" } - tsoutput.WriteString(returnType + ";\n") + tsBody.WriteString(returnType + ";\n") } + + importClasses = removeDuplicates(importClasses) + for _, class := range importClasses { + tsContent.WriteString("import {" + class + "} from '../models';\n") + } + tsContent.WriteString(tsBody.String()) + jsfilename := filepath.Join(packageDir, structName+".js") err = os.WriteFile(jsfilename, jsoutput.Bytes(), 0755) if err != nil { return err } tsfilename := filepath.Join(packageDir, structName+".d.ts") - err = os.WriteFile(tsfilename, tsoutput.Bytes(), 0755) + err = os.WriteFile(tsfilename, tsContent.Bytes(), 0755) if err != nil { return err } @@ -323,3 +333,15 @@ func goTypeToTypescriptType(input string, useModelsNamespace bool) string { } return goTypeToJSDocType(input, useModelsNamespace) } + +func removeDuplicates(input []string) []string { + seen := make(map[string]bool) + var result []string + for _, val := range input { + if _, ok := seen[val]; !ok { + result = append(result, val) + seen[val] = true + } + } + return result +}