mirror of
https://github.com/taigrr/wails.git
synced 2026-04-13 18:38:11 -07:00
Better Ts support
This commit is contained in:
@@ -40,7 +40,9 @@ func (p *Parser) generateModule() error {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, pkg := range p.packages {
|
||||
packagesToGenerate := p.packagesToGenerate()
|
||||
|
||||
for _, pkg := range packagesToGenerate {
|
||||
|
||||
// Calculate directory
|
||||
dir := filepath.Join(moduleDir, pkg.gopackage.Name)
|
||||
@@ -53,6 +55,21 @@ func (p *Parser) generateModule() error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Copy the package file
|
||||
srcFile := fs.RelativePath("./package.json")
|
||||
tgtFile := filepath.Join(moduleDir, "package.json")
|
||||
err = fs.CopyFile(srcFile, tgtFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Generate the index.js file
|
||||
err = generateIndexJS(moduleDir, packagesToGenerate)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -61,9 +78,9 @@ func createBackendJSDirectory() (string, 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/wails")
|
||||
dir, err := fs.RelativeToCwd("./frontend/backend")
|
||||
if err != nil {
|
||||
return "", errors.Wrap(err, "Error creating wails js directory")
|
||||
return "", errors.Wrap(err, "Error creating backend module directory")
|
||||
}
|
||||
|
||||
// Remove directory if it exists - REGENERATION!
|
||||
@@ -129,3 +146,33 @@ func generatePackage(pkg *Package, moduledir string) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func generateIndexJS(dir string, packages []*Package) error {
|
||||
|
||||
// Get path to local file
|
||||
templateFile := fs.RelativePath("./index.template")
|
||||
|
||||
// Load template
|
||||
templateData := fs.MustLoadString(templateFile)
|
||||
packagesTemplate, err := template.New("index").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 := filepath.Join(dir, "index.js")
|
||||
|
||||
err = ioutil.WriteFile(indexJS, buffer.Bytes(), 0755)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error writing backend package index.js file")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
12
v2/pkg/parser/index.template
Normal file
12
v2/pkg/parser/index.template
Normal file
@@ -0,0 +1,12 @@
|
||||
// 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}}
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
{{range .DeclarationReferences}}
|
||||
/// <reference types="../{{.}}" />{{end}}{{- end}}
|
||||
|
||||
declare module {{.Name}} { {{range .Structs}}
|
||||
export namespace {{.Name}} { {{range .Structs}}
|
||||
{{- if or .IsBound .IsUsedAsData}}
|
||||
{{if .Comments }}{{range .Comments}}// {{ . }}{{end}}{{- end}}
|
||||
interface {{.Name}} { {{ if .IsUsedAsData }}
|
||||
@@ -14,11 +14,18 @@ declare module {{.Name}} { {{range .Structs}}
|
||||
{{.Name}}: {{.TypeAsTSType $.Name}}; {{- end}} {{ end }}
|
||||
{{- if .IsBound }}
|
||||
{{- range .Methods}}
|
||||
{{- range .Comments}}
|
||||
// {{ . }}{{- end}}
|
||||
/**{{if .Comments }}
|
||||
{{range .Comments}} * {{ . }}{{end}}
|
||||
*{{end}}
|
||||
* @function {{.Name}}
|
||||
{{range .Inputs}} * @param {{"{"}}{{.JSType}}{{"}"}} {{.Name}}
|
||||
{{end}} *
|
||||
* @returns {Promise<{{.OutputsAsTSText $.Name}}>}
|
||||
*/
|
||||
{{.Name}}({{.InputsAsTSText $.Name}}): Promise<{{.OutputsAsTSText $.Name}}>;
|
||||
{{- end}}{{end}}
|
||||
}{{- end}}
|
||||
{{end}}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,6 +90,36 @@ func (p *Package) addStruct(strct *Struct) {
|
||||
p.parsedStructs[strct.Name] = strct
|
||||
}
|
||||
|
||||
// HasBoundStructs returns true if any of its structs
|
||||
// are bound
|
||||
func (p *Package) HasBoundStructs() bool {
|
||||
|
||||
for _, strct := range p.parsedStructs {
|
||||
if strct.IsBound {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// HasDataStructs returns true if any of its structs
|
||||
// are used as data
|
||||
func (p *Package) HasDataStructs() bool {
|
||||
for _, strct := range p.parsedStructs {
|
||||
if strct.IsUsedAsData {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// ShouldGenerate returns true when this package should be generated
|
||||
func (p *Package) ShouldGenerate() bool {
|
||||
return p.HasBoundStructs() || p.HasDataStructs()
|
||||
}
|
||||
|
||||
// DeclarationReferences returns a list of external packages
|
||||
// we reference from this package
|
||||
func (p *Package) DeclarationReferences() []string {
|
||||
|
||||
13
v2/pkg/parser/package.json
Normal file
13
v2/pkg/parser/package.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "backend",
|
||||
"version": "1.0.0",
|
||||
"description": "Auto generated module wrapping your Wails backend",
|
||||
"main": "index.js",
|
||||
"types": "index.d.ts",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
@@ -100,3 +100,16 @@ func (p *Parser) loadPackages(projectPath string) error {
|
||||
func (p *Parser) getPackageByID(id string) *Package {
|
||||
return p.packages[id]
|
||||
}
|
||||
|
||||
func (p *Parser) packagesToGenerate() []*Package {
|
||||
|
||||
var result []*Package
|
||||
|
||||
for _, pkg := range p.packages {
|
||||
if pkg.ShouldGenerate() {
|
||||
result = append(result, pkg)
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user