Generation of index.js

This commit is contained in:
Lea Anthony
2020-10-30 11:56:58 +11:00
parent bea8aa477f
commit 3ea069d312
7 changed files with 185 additions and 41 deletions

View File

@@ -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=

View File

@@ -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)
}

View File

@@ -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
}

View 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
}

View 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}}
}

View 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
}

View 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
// }