mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-04 23:59:52 +08:00
Add JSDoc comments
This commit is contained in:
parent
0f41c45de2
commit
b4b16f86bf
@ -1,3 +1,5 @@
|
||||
// Package backendjs deals with generating the `backend` Javascript module
|
||||
// used by the frontend to interact with Go
|
||||
package backendjs
|
||||
|
||||
import (
|
||||
|
43
v2/pkg/commands/build/internal/backendjs/conversion.go
Normal file
43
v2/pkg/commands/build/internal/backendjs/conversion.go
Normal file
@ -0,0 +1,43 @@
|
||||
package backendjs
|
||||
|
||||
import "reflect"
|
||||
|
||||
// JSType represents a javascript type
|
||||
type JSType string
|
||||
|
||||
const (
|
||||
// JsString is a JS string
|
||||
JsString JSType = "string"
|
||||
// JsBoolean is a JS bool
|
||||
JsBoolean = "boolean"
|
||||
// JsInt is a JS number
|
||||
JsInt = "number"
|
||||
// JsFloat is a JS number
|
||||
JsFloat = "number"
|
||||
// JsArray is a JS array
|
||||
JsArray = "Array"
|
||||
// JsObject is a JS object
|
||||
JsObject = "Object"
|
||||
// JsUnsupported represents a type that cannot be converted
|
||||
JsUnsupported = "*"
|
||||
)
|
||||
|
||||
func goTypeToJS(input reflect.Kind) JSType {
|
||||
switch input {
|
||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
|
||||
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
|
||||
return JsInt
|
||||
case reflect.String:
|
||||
return JsString
|
||||
case reflect.Float32, reflect.Float64, reflect.Complex64:
|
||||
return JsFloat
|
||||
case reflect.Bool:
|
||||
return JsBoolean
|
||||
case reflect.Array, reflect.Slice:
|
||||
return JsArray
|
||||
case reflect.Ptr, reflect.Struct, reflect.Map, reflect.Interface:
|
||||
return JsObject
|
||||
default:
|
||||
return JsUnsupported
|
||||
}
|
||||
}
|
9
v2/pkg/commands/build/internal/backendjs/index.template
Normal file
9
v2/pkg/commands/build/internal/backendjs/index.template
Normal file
@ -0,0 +1,9 @@
|
||||
// index.js
|
||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
{{range .}}
|
||||
const {{.Name}} = require('./{{.Name}}');
|
||||
{{end}}
|
||||
module.exports = {
|
||||
{{range .}}{{.Name}}: {{.Name}},{{end}}
|
||||
}
|
@ -1,9 +1,22 @@
|
||||
// index.js
|
||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
{{range .}}
|
||||
const {{.Name}} = require('./{{.Name}}');
|
||||
|
||||
// {{.Name}}.js
|
||||
{{range .Comments}}// {{.}}{{end}}
|
||||
|
||||
{{range .Methods}}
|
||||
/**{{if .Comments }}
|
||||
{{range .Comments}} * {{ . }}{{end}}
|
||||
*{{end}}
|
||||
* @function {{.Name}}
|
||||
{{range .Inputs}} * @param {{"{"}}{{.JSType}}{{"}"}} {{.Name}}
|
||||
{{end}} *
|
||||
* @returns {Promise}
|
||||
*/
|
||||
function {{.Name}}({{.InputsAsJSText}}) {
|
||||
return window.backend.{{$.Name}}.{{.Name}}();
|
||||
}
|
||||
{{end}}
|
||||
module.exports = {
|
||||
{{range .}}{{.Name}}: {{.Name}},{{end}}
|
||||
{{range .Methods}}{{.Name}}: {{.Name}},{{end}}
|
||||
}
|
@ -3,6 +3,7 @@ package backendjs
|
||||
import (
|
||||
"bytes"
|
||||
"io/ioutil"
|
||||
"reflect"
|
||||
"text/template"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
@ -38,10 +39,40 @@ func parsePackages() ([]*Package, error) {
|
||||
|
||||
result = append(result, &Package{
|
||||
Name: "mypackage",
|
||||
Comments: []string{"// mypackage is awesome"},
|
||||
Comments: []string{"mypackage is awesome"},
|
||||
Methods: []*Method{
|
||||
{
|
||||
Name: "Naked",
|
||||
Name: "Naked",
|
||||
Comments: []string{"Naked is a method that does nothing"},
|
||||
},
|
||||
},
|
||||
})
|
||||
result = append(result, &Package{
|
||||
Name: "otherpackage",
|
||||
Comments: []string{"otherpackage is awesome"},
|
||||
Methods: []*Method{
|
||||
{
|
||||
Name: "OneInput",
|
||||
Comments: []string{"OneInput does stuff"},
|
||||
Inputs: []*Parameter{
|
||||
{
|
||||
Name: "name",
|
||||
Type: reflect.String,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "TwoInputs",
|
||||
Inputs: []*Parameter{
|
||||
{
|
||||
Name: "name",
|
||||
Type: reflect.String,
|
||||
},
|
||||
{
|
||||
Name: "age",
|
||||
Type: reflect.Uint8,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
@ -55,17 +86,23 @@ func generateJSFiles(packages []*Package) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error generating index.js file")
|
||||
}
|
||||
|
||||
err = generatePackageFiles(packages)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error generating packages")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func generateIndexJS(packages []*Package) error {
|
||||
|
||||
// Get path to local file
|
||||
templateFile := fs.RelativePath("./package.template")
|
||||
templateFile := fs.RelativePath("./index.template")
|
||||
|
||||
// Load template
|
||||
templateData := fs.MustLoadString(templateFile)
|
||||
packagesTemplate, err := template.New("packages").Parse(templateData)
|
||||
packagesTemplate, err := template.New("index").Parse(templateData)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error creating template")
|
||||
}
|
||||
@ -80,7 +117,7 @@ func generateIndexJS(packages []*Package) error {
|
||||
// Calculate target filename
|
||||
indexJS, err := fs.RelativeToCwd("./frontend/backend/index.js")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error creating backend js directory")
|
||||
return errors.Wrap(err, "Error calculating index js path")
|
||||
}
|
||||
|
||||
err = ioutil.WriteFile(indexJS, buffer.Bytes(), 0755)
|
||||
@ -90,3 +127,40 @@ func generateIndexJS(packages []*Package) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func generatePackageFiles(packages []*Package) error {
|
||||
|
||||
// Get path to local file
|
||||
templateFile := fs.RelativePath("./package.template")
|
||||
|
||||
// Load template
|
||||
templateData := fs.MustLoadString(templateFile)
|
||||
packagesTemplate, err := template.New("package").Parse(templateData)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error creating template")
|
||||
}
|
||||
|
||||
// Iterate over each package
|
||||
for _, thisPackage := range packages {
|
||||
|
||||
// Execute template
|
||||
var buffer bytes.Buffer
|
||||
err = packagesTemplate.Execute(&buffer, thisPackage)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error generating code")
|
||||
}
|
||||
|
||||
// Calculate target filename
|
||||
packageFile, err := fs.RelativeToCwd("./frontend/backend/" + thisPackage.Name + ".js")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error calculating package path")
|
||||
}
|
||||
|
||||
err = ioutil.WriteFile(packageFile, buffer.Bytes(), 0755)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error writing backend package file")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -2,12 +2,19 @@ package backendjs
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Parameter defines a parameter used by a struct method
|
||||
type Parameter struct {
|
||||
Name string
|
||||
Type reflect.Type
|
||||
Type reflect.Kind
|
||||
}
|
||||
|
||||
// JSType returns the Javascript equivalent of the
|
||||
// parameter type
|
||||
func (p *Parameter) JSType() string {
|
||||
return string(goTypeToJS(p.Type))
|
||||
}
|
||||
|
||||
// Method defines a struct method
|
||||
@ -18,6 +25,18 @@ type Method struct {
|
||||
Comments []string
|
||||
}
|
||||
|
||||
// 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, ", ")
|
||||
}
|
||||
|
||||
// func generateStructFile() {
|
||||
// // Create string buffer
|
||||
// var result bytes.Buffer
|
||||
|
Loading…
Reference in New Issue
Block a user