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:
parent
cc50f9f062
commit
662b14fffb
15
v2/pkg/commands/build/internal/backendjs/package.d.template
Normal file
15
v2/pkg/commands/build/internal/backendjs/package.d.template
Normal 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}}
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user