5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 08:19:35 +08:00

Initial generation of typescript declarations

This commit is contained in:
Lea Anthony 2020-10-30 15:06:25 +11:00
parent cc50f9f062
commit 662b14fffb
3 changed files with 82 additions and 8 deletions

View File

@ -0,0 +1,15 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
{{range .Comments}}// {{.}}{{end}}
{{range .Methods}}
/**{{if .Comments }}
{{range .Comments}} * {{ . }}{{end}}
*{{end}}
* @function {{.Name}}
{{range .Inputs}} * @param {{"{"}}{{.JSType}}{{"}"}} {{.Name}}
{{end}} *
* @returns {Promise}
*/
export function {{.Name}}({{.InputsAsTSText}}): Promise<{{.OutputsAsTSText}}>;
{{end}}

View File

@ -102,8 +102,8 @@ func generateIndexJS(packages []*Package) error {
templateFile := fs.RelativePath("./index.template")
// Load template
templateData := fs.MustLoadString(templateFile)
packagesTemplate, err := template.New("index").Parse(templateData)
javascriptTemplateData := fs.MustLoadString(templateFile)
packagesTemplate, err := template.New("index").Parse(javascriptTemplateData)
if err != nil {
return errors.Wrap(err, "Error creating template")
}
@ -132,11 +132,21 @@ func generateIndexJS(packages []*Package) error {
func generatePackageFiles(packages []*Package) error {
// Get path to local file
templateFile := fs.RelativePath("./package.template")
javascriptTemplateFile := fs.RelativePath("./package.template")
// Load template
templateData := fs.MustLoadString(templateFile)
packagesTemplate, err := template.New("package").Parse(templateData)
// Load javascript template
javascriptTemplateData := fs.MustLoadString(javascriptTemplateFile)
javascriptTemplate, err := template.New("javascript").Parse(javascriptTemplateData)
if err != nil {
return errors.Wrap(err, "Error creating template")
}
// Get path to local file
typescriptTemplateFile := fs.RelativePath("./package.d.template")
// Load typescript template
typescriptTemplateData := fs.MustLoadString(typescriptTemplateFile)
typescriptTemplate, err := template.New("typescript").Parse(typescriptTemplateData)
if err != nil {
return errors.Wrap(err, "Error creating template")
}
@ -153,17 +163,33 @@ func generatePackageFiles(packages []*Package) error {
// Make the dir but ignore if it already exists
fs.Mkdir(packageDir)
// Execute template
// Execute javascript template
var buffer bytes.Buffer
err = packagesTemplate.Execute(&buffer, thisPackage)
err = javascriptTemplate.Execute(&buffer, thisPackage)
if err != nil {
return errors.Wrap(err, "Error generating code")
}
// Save javascript file
err = ioutil.WriteFile(filepath.Join(packageDir, "index.js"), buffer.Bytes(), 0755)
if err != nil {
return errors.Wrap(err, "Error writing backend package file")
}
// Clear buffer
buffer.Reset()
// Execute typescript template
err = typescriptTemplate.Execute(&buffer, thisPackage)
if err != nil {
return errors.Wrap(err, "Error generating code")
}
// Save typescript file
err = ioutil.WriteFile(filepath.Join(packageDir, "index.d.ts"), buffer.Bytes(), 0755)
if err != nil {
return errors.Wrap(err, "Error writing backend package file")
}
}
return nil

View File

@ -1,6 +1,7 @@
package backendjs
import (
"fmt"
"reflect"
"strings"
)
@ -37,6 +38,38 @@ func (m *Method) InputsAsJSText() string {
return strings.Join(inputs, ", ")
}
// InputsAsTSText generates a string with the method inputs
// formatted in a way acceptable to Typescript
func (m *Method) InputsAsTSText() string {
var inputs []string
for _, input := range m.Inputs {
inputText := fmt.Sprintf("%s: %s", input.Name, goTypeToJS(input.Type))
inputs = append(inputs, inputText)
}
return strings.Join(inputs, ", ")
}
// OutputsAsTSText generates a string with the method inputs
// formatted in a way acceptable to Javascript
func (m *Method) OutputsAsTSText() string {
if len(m.Outputs) != 2 {
return "any"
}
jsType := goTypeToJS(m.Outputs[1].Type)
switch jsType {
case JsArray:
return "Array<any>"
case JsObject:
return "any"
default:
return string(jsType)
}
}
// func generateStructFile() {
// // Create string buffer
// var result bytes.Buffer