5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-02 18:42:23 +08:00
wails/v2/internal/app/app_bindings.go
Oleg Gulevskyy ca8a1fab36
Ability to define prefix / suffix for TS module (#2101)
* add tspostfix and tsprefix flags + organise under struct

* postifx -> suffix

* tsPrefix options on bindings struct

* pass prefix and suffix to the executable

* add support for CLI flags for generating module

* method to set TSpref/suff to bindings

* use passed ts prefix for typescriptify

* add brief Readme udpate to include new flags

* create reusable common flags

* use common flags instead of hardcoded text

* support tsprefix & suffix for dev

* add tsPrefix & tsSuffix for build cmd

* take pref & suff in account when gen d.ts

* export colorsful log functions into utils for reuse

* detect and warn the user about usage of reserved keyword

* fmt

* add TrimSpace on fn input

* refactor utils -> logutils

* add bindings -> ts_generation options to wailsjson parse

* use wailsjson for ts generation

* update warning message + extract to func

* remove suff/pref info from readme

* update json schema

* add tests for prefix and suffix case

* rename suffix method

* Update v2/internal/typescriptify/typescriptify.go

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>

* Update website/static/schemas/config.v2.json

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>

* Update website/static/schemas/config.v2.json

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>

* update changelog

* Minor tweaks

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2022-11-24 21:33:58 +11:00

115 lines
2.5 KiB
Go

//go:build bindings
package app
import (
"os"
"path/filepath"
"flag"
"github.com/leaanthony/gosod"
"github.com/wailsapp/wails/v2/internal/binding"
"github.com/wailsapp/wails/v2/internal/frontend/runtime/wrapper"
"github.com/wailsapp/wails/v2/internal/fs"
"github.com/wailsapp/wails/v2/internal/logger"
"github.com/wailsapp/wails/v2/internal/project"
"github.com/wailsapp/wails/v2/pkg/options"
)
func (a *App) Run() error {
// Create binding exemptions - Ugly hack. There must be a better way
bindingExemptions := []interface{}{
a.options.OnStartup,
a.options.OnShutdown,
a.options.OnDomReady,
a.options.OnBeforeClose,
}
// Check for CLI Flags
bindingFlags := flag.NewFlagSet("bindings", flag.ContinueOnError)
var tsPrefixFlag *string
var tsPostfixFlag *string
tsPrefix := os.Getenv("tsprefix")
if tsPrefix == "" {
tsPrefixFlag = bindingFlags.String("tsprefix", "", "Prefix for generated typescript entities")
}
tsSuffix := os.Getenv("tssuffix")
if tsSuffix == "" {
tsPostfixFlag = bindingFlags.String("tssuffix", "", "Suffix for generated typescript entities")
}
_ = bindingFlags.Parse(os.Args[1:])
if tsPrefixFlag != nil {
tsPrefix = *tsPrefixFlag
}
if tsPostfixFlag != nil {
tsSuffix = *tsPostfixFlag
}
appBindings := binding.NewBindings(a.logger, a.options.Bind, bindingExemptions, IsObfuscated())
appBindings.SetTsPrefix(tsPrefix)
appBindings.SetTsPostfix(tsSuffix)
err := generateBindings(appBindings)
if err != nil {
return err
}
return nil
}
// CreateApp creates the app!
func CreateApp(appoptions *options.App) (*App, error) {
// Set up logger
myLogger := logger.New(appoptions.Logger)
myLogger.SetLogLevel(appoptions.LogLevel)
result := &App{
logger: myLogger,
options: appoptions,
}
return result, nil
}
func generateBindings(bindings *binding.Bindings) error {
cwd, err := os.Getwd()
if err != nil {
return err
}
projectConfig, err := project.Load(cwd)
if err != nil {
return err
}
wailsjsbasedir := filepath.Join(projectConfig.GetWailsJSDir(), "wailsjs")
runtimeDir := filepath.Join(wailsjsbasedir, "runtime")
_ = os.RemoveAll(runtimeDir)
extractor := gosod.New(wrapper.RuntimeWrapper)
err = extractor.Extract(runtimeDir, nil)
if err != nil {
return err
}
goBindingsDir := filepath.Join(wailsjsbasedir, "go")
err = os.RemoveAll(goBindingsDir)
if err != nil {
return err
}
_ = fs.MkDirs(goBindingsDir)
err = bindings.GenerateGoBindings(goBindingsDir)
if err != nil {
return err
}
return fs.SetPermissions(wailsjsbasedir, 0755)
}