5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-04 06:59:18 +08:00
wails/v3/internal/parser/bindings.go
2023-03-01 21:31:29 +11:00

81 lines
2.2 KiB
Go

package parser
import (
"strings"
)
const helperTemplate = `function {{structName}}(method) {
return {
packageName: "{{packageName}}",
serviceName: "{{structName}}",
methodName: method,
args: Array.prototype.slice.call(arguments, 1),
};
}`
func GenerateHelper(packageName, structName string) string {
result := strings.ReplaceAll(helperTemplate, "{{packageName}}", packageName)
result = strings.ReplaceAll(result, "{{structName}}", structName)
return result
}
const bindingTemplate = `
/**
* {{structName}}.{{methodName}}
* Comments
* @param name {string}
* @returns {Promise<string>}
*/
function {{methodName}}({{args}}) {
return wails.Call({{structName}}("{{methodName}}", {{args}}));
}
`
func GenerateBinding(structName string, method *BoundMethod) string {
result := strings.ReplaceAll(bindingTemplate, "{{structName}}", structName)
result = strings.ReplaceAll(result, "{{methodName}}", method.Name)
result = strings.ReplaceAll(result, "Comments", strings.TrimSpace(method.DocComment))
var params string
for _, input := range method.Inputs {
params += " * @param " + input.Name + " {" + input.JSType() + "}\n"
}
params = strings.TrimSuffix(params, "\n")
result = strings.ReplaceAll(result, " * @param name {string}", params)
var args string
for _, input := range method.Inputs {
args += input.Name + ", "
}
args = strings.TrimSuffix(args, ", ")
result = strings.ReplaceAll(result, "{{args}}", args)
return result
}
func GenerateBindings(bindings map[string]map[string][]*BoundMethod) string {
var result string
for packageName, packageBindings := range bindings {
for structName, bindings := range packageBindings {
result += GenerateHelper(packageName, structName)
for _, binding := range bindings {
result += GenerateBinding(structName, binding)
}
}
}
result += `
window.go = window.go || {};
`
for packageName, packageBindings := range bindings {
result += "Object.window.go." + packageName + " = {\n"
for structName, methods := range packageBindings {
result += " " + structName + ": {\n"
for _, method := range methods {
result += " " + method.Name + ",\n"
}
result += " }\n"
}
result += "};\n"
}
return result
}