mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-04 19:21:21 +08:00
93 lines
1.8 KiB
Go
93 lines
1.8 KiB
Go
package backendjs
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
"text/template"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/wailsapp/wails/v2/internal/fs"
|
|
)
|
|
|
|
// Package defines a single package that contains bound structs
|
|
type Package struct {
|
|
Name string
|
|
Comments []string
|
|
Methods []*Method
|
|
}
|
|
|
|
func generatePackages() error {
|
|
|
|
packages, err := parsePackages()
|
|
if err != nil {
|
|
return errors.Wrap(err, "Error parsing struct packages:")
|
|
}
|
|
|
|
err = generateJSFiles(packages)
|
|
if err != nil {
|
|
return errors.Wrap(err, "Error generating struct js file:")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func parsePackages() ([]*Package, error) {
|
|
|
|
// STUB!
|
|
var result []*Package
|
|
|
|
result = append(result, &Package{
|
|
Name: "mypackage",
|
|
Comments: []string{"// mypackage is awesome"},
|
|
Methods: []*Method{
|
|
{
|
|
Name: "Naked",
|
|
},
|
|
},
|
|
})
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func generateJSFiles(packages []*Package) error {
|
|
|
|
err := generateIndexJS(packages)
|
|
if err != nil {
|
|
return errors.Wrap(err, "Error generating index.js file")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func generateIndexJS(packages []*Package) error {
|
|
|
|
// Get path to local file
|
|
templateFile := fs.RelativePath("./package.template")
|
|
|
|
// Load template
|
|
templateData := fs.MustLoadString(templateFile)
|
|
packagesTemplate, err := template.New("packages").Parse(templateData)
|
|
if err != nil {
|
|
return errors.Wrap(err, "Error creating template")
|
|
}
|
|
|
|
// Execute template
|
|
var buffer bytes.Buffer
|
|
err = packagesTemplate.Execute(&buffer, packages)
|
|
if err != nil {
|
|
return errors.Wrap(err, "Error generating code")
|
|
}
|
|
|
|
// Calculate target filename
|
|
indexJS, err := fs.RelativeToCwd("./frontend/backend/index.js")
|
|
if err != nil {
|
|
return errors.Wrap(err, "Error creating backend js directory")
|
|
}
|
|
|
|
err = ioutil.WriteFile(indexJS, buffer.Bytes(), 0755)
|
|
if err != nil {
|
|
return errors.Wrap(err, "Error writing backend package index.js file")
|
|
}
|
|
|
|
return nil
|
|
}
|