mirror of
https://github.com/taigrr/wails.git
synced 2026-04-14 02:48:21 -07:00
Final touches
This commit is contained in:
@@ -20,23 +20,25 @@ const (
|
||||
JsUnsupported = "*"
|
||||
)
|
||||
|
||||
func goTypeToJS(input string) JSType {
|
||||
switch input {
|
||||
func goTypeToJS(input *Field) string {
|
||||
switch input.Type {
|
||||
case "string":
|
||||
return JsString
|
||||
return "string"
|
||||
case "int", "int8", "int16", "int32", "int64", "uint", "uint8", "uint16", "uint32", "uint64":
|
||||
return JsInt
|
||||
return "number"
|
||||
case "float32", "float64":
|
||||
return JsFloat
|
||||
return "number"
|
||||
case "bool":
|
||||
return JsBoolean
|
||||
return "boolean"
|
||||
// case reflect.Array, reflect.Slice:
|
||||
// return JsArray
|
||||
// case reflect.Ptr, reflect.Struct, reflect.Map, reflect.Interface:
|
||||
// return JsObject
|
||||
case "struct":
|
||||
return input.Struct.ToString()
|
||||
default:
|
||||
println("UNSUPPORTED: ", input)
|
||||
return JsUnsupported
|
||||
return "*"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
{{range .DeclarationReferences}}/// <reference types="../{{.}}" />{{end}}
|
||||
|
||||
{{- range .DeclarationReferences}}
|
||||
/// <reference types="../{{.}}" />{{- end}}
|
||||
|
||||
declare module {{.Name}} { {{range .Structs}}
|
||||
{{if .Comments }}{{range .Comments}}// {{ . }}{{end}}{{end}}
|
||||
interface {{.Name}} { {{ if $.StructIsUsedAsData .Name }}
|
||||
{{range .Fields}}{{if .Comments }}
|
||||
{{- range .Fields}}{{if .Comments }}
|
||||
{{range .Comments}}//{{ . }}{{end}}{{end}}
|
||||
{{.Name}}: {{.TypeAsTSType}}; {{end}} {{ end }}
|
||||
{{range .Methods}}
|
||||
{{if .Comments }}{{range .Comments}}// {{ . }}{{end}}{{end}}
|
||||
{{.Name}}: {{.TypeAsTSType}}; {{- end}} {{ end }}
|
||||
{{- range .Methods}}
|
||||
{{- range .Comments}}
|
||||
// {{ . }}{{- end}}
|
||||
{{.Name}}({{.InputsAsTSText}}): Promise<{{.OutputsAsTSText}}>;
|
||||
{{end}}
|
||||
{{- end}}
|
||||
}{{end}}
|
||||
|
||||
}
|
||||
@@ -120,6 +120,31 @@ func generatePackage(pkg *Package, moduledir string) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error writing backend package file")
|
||||
}
|
||||
|
||||
// Get path to local file
|
||||
javascriptTemplateFile := fs.RelativePath("./package.template")
|
||||
|
||||
// Load javascript template
|
||||
javascriptTemplateData := fs.MustLoadString(javascriptTemplateFile)
|
||||
javascriptTemplate, err := template.New("javascript").Parse(javascriptTemplateData)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error creating template")
|
||||
}
|
||||
|
||||
// Reset the buffer
|
||||
buffer.Reset()
|
||||
|
||||
err = javascriptTemplate.Execute(&buffer, pkg)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error generating code")
|
||||
}
|
||||
|
||||
// Save javascript file
|
||||
err = ioutil.WriteFile(filepath.Join(moduledir, "index.js"), buffer.Bytes(), 0755)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error writing backend package file")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
24
v2/pkg/commands/build/internal/backendjs/package.template
Normal file
24
v2/pkg/commands/build/internal/backendjs/package.template
Normal file
@@ -0,0 +1,24 @@
|
||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
|
||||
{{range $struct := .Structs }} {{ if .Methods }}
|
||||
export const {{.Name}} = {
|
||||
{{range .Methods }}
|
||||
/**{{if .Comments }}
|
||||
{{range .Comments}} * {{ . }}{{end}}
|
||||
*{{end}}
|
||||
* @function {{.Name}}
|
||||
{{range .Inputs}} * @param {{"{"}}{{.JSType}}{{"}"}} {{.Name}}
|
||||
{{end}} *
|
||||
* @returns {Promise<{{.OutputsAsTSText}}>}
|
||||
*/
|
||||
{{.Name}}: function({{.InputsAsJSText}}) {
|
||||
return window.backend.{{$.Name}}.{{$struct.Name}}.{{.Name}}({{.InputsAsJSText}});
|
||||
},
|
||||
{{end}}
|
||||
}
|
||||
{{end}}
|
||||
{{end}}
|
||||
|
||||
|
||||
|
||||
@@ -29,6 +29,15 @@ type StructName struct {
|
||||
Package string
|
||||
}
|
||||
|
||||
// ToString returns a text representation of the struct name
|
||||
func (s *StructName) ToString() string {
|
||||
result := ""
|
||||
if s.Package != "" {
|
||||
result = s.Package + "."
|
||||
}
|
||||
return result + s.Name
|
||||
}
|
||||
|
||||
// Field defines a parsed struct field
|
||||
type Field struct {
|
||||
Name string
|
||||
@@ -37,6 +46,11 @@ type Field struct {
|
||||
Comments []string
|
||||
}
|
||||
|
||||
// JSType returns the Javascript type for this field
|
||||
func (f *Field) JSType() string {
|
||||
return goTypeToJS(f)
|
||||
}
|
||||
|
||||
// TypeAsTSType converts the Field type to something TS wants
|
||||
func (f *Field) TypeAsTSType() string {
|
||||
var result = ""
|
||||
@@ -204,3 +218,15 @@ func (m *Method) OutputsAsTSText() string {
|
||||
}
|
||||
return strings.Join(result, ", ")
|
||||
}
|
||||
|
||||
// InputsAsJSText generates a string with the method inputs
|
||||
// formatted in a way acceptable to Javascript
|
||||
func (m *Method) InputsAsJSText() string {
|
||||
var inputs []string
|
||||
|
||||
for _, input := range m.Inputs {
|
||||
inputs = append(inputs, input.Name)
|
||||
}
|
||||
|
||||
return strings.Join(inputs, ", ")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user