mirror of
https://github.com/taigrr/wails.git
synced 2026-04-15 03:11:14 -07:00
Generation of index.js
This commit is contained in:
@@ -87,6 +87,7 @@ github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
|
||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||
github.com/wailsapp/wails v1.9.0 h1:KF6tQRoQIp/LMEM/kvecG5+HCP80h1WLl+g3WpkL1VA=
|
||||
github.com/xyproto/xpm v1.2.1 h1:trdvGjjWBsOOKzBBUPT6JvaIQM3acJEEYfbxN7M96wg=
|
||||
github.com/xyproto/xpm v1.2.1/go.mod h1:cMnesLsD0PBXLgjDfTDEaKr8XyTFsnP1QycSqRw7BiY=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
package build
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/wailsapp/wails/v2/internal/fs"
|
||||
)
|
||||
|
||||
// GenerateBackendJSPackage will attempt to create the backend javascript package
|
||||
// used by the frontend to access methods and structs
|
||||
func GenerateBackendJSPackage(options *Options) error {
|
||||
|
||||
// Create directory
|
||||
err := createBackendJSDirectory()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error Generating Backend JS Package")
|
||||
}
|
||||
|
||||
// Generate index.js
|
||||
|
||||
// Generate Method wrappers
|
||||
// err = generateMethodWrappers()
|
||||
|
||||
// Generate Structs
|
||||
|
||||
//
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func createBackendJSDirectory() error {
|
||||
|
||||
// Path to package dir
|
||||
packageDir, err := filepath.Abs("./frontend/backend")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return fs.Mkdir(packageDir)
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/leaanthony/slicer"
|
||||
"github.com/wailsapp/wails/v2/internal/project"
|
||||
"github.com/wailsapp/wails/v2/pkg/clilogger"
|
||||
"github.com/wailsapp/wails/v2/pkg/commands/build/internal/backendjs"
|
||||
)
|
||||
|
||||
// Mode is the type used to indicate the build modes
|
||||
@@ -91,7 +92,7 @@ func Build(options *Options) (string, error) {
|
||||
|
||||
// Generate Frontend JS Package
|
||||
outputLogger.Print(" - Generating Backend JS Package")
|
||||
err = GenerateBackendJSPackage(options)
|
||||
err = backendjs.GenerateBackendJSPackage()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
43
v2/pkg/commands/build/internal/backendjs/backendjs.go
Normal file
43
v2/pkg/commands/build/internal/backendjs/backendjs.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package backendjs
|
||||
|
||||
import (
|
||||
"github.com/pkg/errors"
|
||||
"github.com/wailsapp/wails/v2/internal/fs"
|
||||
)
|
||||
|
||||
// GenerateBackendJSPackage will attempt to create the backend javascript package
|
||||
// used by the frontend to access methods and structs
|
||||
func GenerateBackendJSPackage() error {
|
||||
|
||||
// Create directory
|
||||
err := createBackendJSDirectory()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error creating backend directory:")
|
||||
}
|
||||
|
||||
// Generate Packages
|
||||
err = generatePackages()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error generating method wrappers:")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func createBackendJSDirectory() error {
|
||||
|
||||
// Calculate the package directory
|
||||
// Note this is *always* called from the project directory
|
||||
// so using paths relative to CWD is fine
|
||||
dir, err := fs.RelativeToCwd("./frontend/backend")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error creating backend js directory")
|
||||
}
|
||||
|
||||
// Only create the directory if it doesn't exit
|
||||
if !fs.DirExists(dir) {
|
||||
return fs.Mkdir(dir)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -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}}
|
||||
}
|
||||
92
v2/pkg/commands/build/internal/backendjs/packages.go
Normal file
92
v2/pkg/commands/build/internal/backendjs/packages.go
Normal file
@@ -0,0 +1,92 @@
|
||||
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
|
||||
}
|
||||
38
v2/pkg/commands/build/internal/backendjs/structs.go
Normal file
38
v2/pkg/commands/build/internal/backendjs/structs.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package backendjs
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
)
|
||||
|
||||
// Parameter defines a parameter used by a struct method
|
||||
type Parameter struct {
|
||||
Name string
|
||||
Type reflect.Type
|
||||
}
|
||||
|
||||
// Method defines a struct method
|
||||
type Method struct {
|
||||
Name string
|
||||
Inputs []*Parameter
|
||||
Outputs []*Parameter
|
||||
Comments []string
|
||||
}
|
||||
|
||||
// func generateStructFile() {
|
||||
// // Create string buffer
|
||||
// var result bytes.Buffer
|
||||
|
||||
// // Add some standard comments
|
||||
// _, err := result.WriteString(structJSHeader + )
|
||||
// if err != nil {
|
||||
// return errors.Wrap(err, "Error writing string")
|
||||
// }
|
||||
|
||||
// // Loop over the methods
|
||||
// for _, method := range methods {
|
||||
// generatedCode := generateMethodWrapper(method) {
|
||||
|
||||
// }
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
Reference in New Issue
Block a user