mirror of
https://github.com/taigrr/wails.git
synced 2026-04-13 18:38:11 -07:00
JS Object generation. Linting.
This commit is contained in:
@@ -147,7 +147,7 @@ func (p *Parser) parseField(file *ast.File, field *ast.Field, pkg *Package) ([]*
|
||||
|
||||
default:
|
||||
spew.Dump(t)
|
||||
return nil, fmt.Errorf("Unsupported field found in struct: %+v", t)
|
||||
return nil, fmt.Errorf("unsupported field found in struct: %+v", t)
|
||||
}
|
||||
|
||||
// Loop over names if we have
|
||||
|
||||
@@ -69,26 +69,33 @@ func (p *Parser) findBoundStructs(pkg *Package) error {
|
||||
return false
|
||||
}
|
||||
if strct == nil {
|
||||
parseError = fmt.Errorf("Unable to resolve function returntype: %s", fn.Name)
|
||||
parseError = fmt.Errorf("unable to resolve function returntype: %s", fn.Name)
|
||||
return false
|
||||
}
|
||||
println("Found bound function return type:", strct.Name)
|
||||
strct.Package.boundStructs.Add(strct.Name)
|
||||
// case *ast.SelectorExpr:
|
||||
// ident, ok := fn.X.(*ast.Ident)
|
||||
// if !ok {
|
||||
// return true
|
||||
// }
|
||||
// packageName := ident.Name
|
||||
// functionName := fn.Sel.Name
|
||||
// println("Found bound function:", packageName+"."+functionName)
|
||||
case *ast.SelectorExpr:
|
||||
ident, ok := fn.X.(*ast.Ident)
|
||||
if !ok {
|
||||
return true
|
||||
}
|
||||
packageName := ident.Name
|
||||
functionName := fn.Sel.Name
|
||||
println("Found bound function:", packageName+"."+functionName)
|
||||
|
||||
// strct := p.getFunctionReturnType(packageName, functionName)
|
||||
// if strct == nil {
|
||||
// // Unable to resolve function
|
||||
// return true
|
||||
// }
|
||||
// boundStructs = append(boundStructs, strct)
|
||||
// Get package for package name
|
||||
externalPackageName := pkg.getImportByName(packageName, fileAst)
|
||||
externalPackage := p.getPackageByID(externalPackageName.ID)
|
||||
|
||||
strct, err := p.getFunctionReturnType(externalPackage, functionName)
|
||||
if err != nil {
|
||||
parseError = err
|
||||
return false
|
||||
}
|
||||
if strct == nil {
|
||||
// Unable to resolve function
|
||||
return true
|
||||
}
|
||||
externalPackage.boundStructs.Add(strct.Name)
|
||||
}
|
||||
|
||||
// Binding struct pointer literals
|
||||
|
||||
@@ -44,19 +44,13 @@ func (p *Parser) generateModule() error {
|
||||
|
||||
for _, pkg := range packagesToGenerate {
|
||||
|
||||
// Calculate directory
|
||||
dir := filepath.Join(moduleDir, pkg.gopackage.Name)
|
||||
|
||||
// Create the directory if it doesn't exist
|
||||
fs.Mkdir(dir)
|
||||
|
||||
err := generatePackage(pkg, dir)
|
||||
err := generatePackage(pkg, moduleDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Copy the package file
|
||||
// Copy the standard files
|
||||
srcFile := fs.RelativePath("./package.json")
|
||||
tgtFile := filepath.Join(moduleDir, "package.json")
|
||||
err = fs.CopyFile(srcFile, tgtFile)
|
||||
@@ -64,6 +58,14 @@ func (p *Parser) generateModule() error {
|
||||
return err
|
||||
}
|
||||
|
||||
// Copy the globals.d.ts file
|
||||
srcFile = fs.RelativePath("./globals.d.ts")
|
||||
tgtFile = filepath.Join(moduleDir, "globals.d.ts")
|
||||
err = fs.CopyFile(srcFile, tgtFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Generate the index.js file
|
||||
err = generateIndexJS(moduleDir, packagesToGenerate)
|
||||
if err != nil {
|
||||
@@ -97,28 +99,28 @@ func createBackendJSDirectory() (string, error) {
|
||||
|
||||
func generatePackage(pkg *Package, moduledir string) error {
|
||||
|
||||
// Get path to local file
|
||||
typescriptTemplateFile := fs.RelativePath("./package.d.template")
|
||||
// // Get path to local file
|
||||
// typescriptTemplateFile := fs.RelativePath("./package.d.template")
|
||||
|
||||
// Load typescript template
|
||||
typescriptTemplateData := fs.MustLoadString(typescriptTemplateFile)
|
||||
typescriptTemplate, err := template.New("typescript").Parse(typescriptTemplateData)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error creating template")
|
||||
}
|
||||
// // Load typescript template
|
||||
// typescriptTemplateData := fs.MustLoadString(typescriptTemplateFile)
|
||||
// typescriptTemplate, err := template.New("typescript").Parse(typescriptTemplateData)
|
||||
// if err != nil {
|
||||
// return errors.Wrap(err, "Error creating template")
|
||||
// }
|
||||
|
||||
// Execute javascript template
|
||||
var buffer bytes.Buffer
|
||||
err = typescriptTemplate.Execute(&buffer, pkg)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error generating code")
|
||||
}
|
||||
// err = typescriptTemplate.Execute(&buffer, pkg)
|
||||
// if err != nil {
|
||||
// return errors.Wrap(err, "Error generating code")
|
||||
// }
|
||||
|
||||
// Save typescript file
|
||||
err = ioutil.WriteFile(filepath.Join(moduledir, "index.d.ts"), buffer.Bytes(), 0755)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error writing backend package file")
|
||||
}
|
||||
// // Save typescript file
|
||||
// err = ioutil.WriteFile(filepath.Join(moduledir, "index.d.ts"), buffer.Bytes(), 0755)
|
||||
// if err != nil {
|
||||
// return errors.Wrap(err, "Error writing backend package file")
|
||||
// }
|
||||
|
||||
// Get path to local file
|
||||
javascriptTemplateFile := fs.RelativePath("./package.template")
|
||||
@@ -139,7 +141,7 @@ func generatePackage(pkg *Package, moduledir string) error {
|
||||
}
|
||||
|
||||
// Save javascript file
|
||||
err = ioutil.WriteFile(filepath.Join(moduledir, "index.js"), buffer.Bytes(), 0755)
|
||||
err = ioutil.WriteFile(filepath.Join(moduledir, "_"+pkg.Name+".js"), buffer.Bytes(), 0755)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error writing backend package file")
|
||||
}
|
||||
|
||||
6
v2/pkg/parser/globals.d.ts
vendored
Normal file
6
v2/pkg/parser/globals.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
|
||||
interface window {
|
||||
backend: any
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
|
||||
{{- range .}}
|
||||
const {{.Name}} = require('./{{.Name}}');
|
||||
const {{.Name}} = require('./_{{.Name}}');
|
||||
{{- end}}
|
||||
|
||||
module.exports = {
|
||||
|
||||
@@ -2,6 +2,21 @@
|
||||
// This file is automatically generated. DO NOT EDIT
|
||||
|
||||
{{- range $struct := .Structs }}
|
||||
{{- if .IsUsedAsData }}
|
||||
/**
|
||||
{{if .Comments }}{{range .Comments}} *{{ . }}{{end}}{{end}}
|
||||
* @typedef {object} {{.Name}}
|
||||
{{range .Fields}} * @property {{"{"}}{{.JSType}}{{"}"}} {{.Name}}
|
||||
{{- if .Comments}} - {{- range .Comments}}{{ . }}{{- end}}{{- end}}
|
||||
{{end}} *
|
||||
*/
|
||||
export const {{.Name}} = {
|
||||
{{- range .Fields}}
|
||||
{{.Name}},
|
||||
{{- end}}
|
||||
}
|
||||
|
||||
{{- end}}
|
||||
{{- if .IsBound }}
|
||||
{{if .Methods }}
|
||||
{{if .Comments }}{{range .Comments}}// {{ . }}{{end}}{{end}}
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// Package parser provides the ability to parse the data that is bound in Wails projects.
|
||||
// Using this, it can also generate a Javascript module that represents the DTOs used, as
|
||||
// well as providing wrappers for bound methods.
|
||||
package parser
|
||||
|
||||
import (
|
||||
|
||||
@@ -44,7 +44,7 @@ func parseStructNameFromStarExpr(starExpr *ast.StarExpr) (string, string, error)
|
||||
pkg = i.Name
|
||||
default:
|
||||
// TODO: Store warnings?
|
||||
return "", "", errors.WithStack(fmt.Errorf("Unknown type in selector for *ast.SelectorExpr: ", i))
|
||||
return "", "", errors.WithStack(fmt.Errorf("unknown type in selector for *ast.SelectorExpr: %+v", i))
|
||||
}
|
||||
|
||||
name = x.Sel.Name
|
||||
@@ -56,13 +56,13 @@ func parseStructNameFromStarExpr(starExpr *ast.StarExpr) (string, string, error)
|
||||
name = s.Name
|
||||
default:
|
||||
// TODO: Store warnings?
|
||||
return "", "", errors.WithStack(fmt.Errorf("Unknown type in selector for *ast.StarExpr: ", s))
|
||||
return "", "", errors.WithStack(fmt.Errorf("unknown type in selector for *ast.StarExpr: %+v", s))
|
||||
}
|
||||
case *ast.Ident:
|
||||
name = x.Name
|
||||
default:
|
||||
// TODO: Store warnings?
|
||||
return "", "", errors.WithStack(fmt.Errorf("Unknown type in selector for *ast.StarExpr: ", starExpr))
|
||||
return "", "", errors.WithStack(fmt.Errorf("unknown type in selector for *ast.StarExpr: %+v", starExpr))
|
||||
}
|
||||
return pkg, name, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user