mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-05 04:50:09 +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
|
package backendjs
|
||||||
|
|
||||||
import (
|
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
|
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||||
// This file is automatically generated. DO NOT EDIT
|
// 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}}
|
{{end}}
|
||||||
module.exports = {
|
module.exports = {
|
||||||
{{range .}}{{.Name}}: {{.Name}},{{end}}
|
{{range .Methods}}{{.Name}}: {{.Name}},{{end}}
|
||||||
}
|
}
|
@ -3,6 +3,7 @@ package backendjs
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"reflect"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -38,10 +39,40 @@ func parsePackages() ([]*Package, error) {
|
|||||||
|
|
||||||
result = append(result, &Package{
|
result = append(result, &Package{
|
||||||
Name: "mypackage",
|
Name: "mypackage",
|
||||||
Comments: []string{"// mypackage is awesome"},
|
Comments: []string{"mypackage is awesome"},
|
||||||
Methods: []*Method{
|
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 {
|
if err != nil {
|
||||||
return errors.Wrap(err, "Error generating index.js file")
|
return errors.Wrap(err, "Error generating index.js file")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = generatePackageFiles(packages)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(err, "Error generating packages")
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateIndexJS(packages []*Package) error {
|
func generateIndexJS(packages []*Package) error {
|
||||||
|
|
||||||
// Get path to local file
|
// Get path to local file
|
||||||
templateFile := fs.RelativePath("./package.template")
|
templateFile := fs.RelativePath("./index.template")
|
||||||
|
|
||||||
// Load template
|
// Load template
|
||||||
templateData := fs.MustLoadString(templateFile)
|
templateData := fs.MustLoadString(templateFile)
|
||||||
packagesTemplate, err := template.New("packages").Parse(templateData)
|
packagesTemplate, err := template.New("index").Parse(templateData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "Error creating template")
|
return errors.Wrap(err, "Error creating template")
|
||||||
}
|
}
|
||||||
@ -80,7 +117,7 @@ func generateIndexJS(packages []*Package) error {
|
|||||||
// Calculate target filename
|
// Calculate target filename
|
||||||
indexJS, err := fs.RelativeToCwd("./frontend/backend/index.js")
|
indexJS, err := fs.RelativeToCwd("./frontend/backend/index.js")
|
||||||
if err != nil {
|
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)
|
err = ioutil.WriteFile(indexJS, buffer.Bytes(), 0755)
|
||||||
@ -90,3 +127,40 @@ func generateIndexJS(packages []*Package) error {
|
|||||||
|
|
||||||
return nil
|
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 (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Parameter defines a parameter used by a struct method
|
// Parameter defines a parameter used by a struct method
|
||||||
type Parameter struct {
|
type Parameter struct {
|
||||||
Name string
|
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
|
// Method defines a struct method
|
||||||
@ -18,6 +25,18 @@ type Method struct {
|
|||||||
Comments []string
|
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() {
|
// func generateStructFile() {
|
||||||
// // Create string buffer
|
// // Create string buffer
|
||||||
// var result bytes.Buffer
|
// var result bytes.Buffer
|
||||||
|
Loading…
Reference in New Issue
Block a user