mirror of
https://github.com/taigrr/wails.git
synced 2026-04-05 22:52:42 -07:00
* Get it compiling
* Stubs in place to compile
* Semi runs
* add darwin platform for server
* Evaluation working correctly. Still WIP
* Ignore favicon for desktop
* lint
* Remove feature flag code
* More feature flag removal
* Support sending messages to the backend
* Callbacks working
* Add Center + refactor prefs
* Fix logger
* Callback hooks for MOAE
* Update packages
* ignore test builds
* Support Un/Fullscreen
* vscode stuff
* Only show window when rendered
* Get it compiling again!
* Support tons of stuff!
* Tidy up
* More refactoring
* WIP [bugged]
* Got get frame working
* fix setsize and setposition
* Add Mac Application Options
* Add HideTitleBar
* Support more mac window options
* Add Toolbar support for Mac
* Support colour
* Support runtime colour change
* Moved options to own package
* Refactored mac titlebar options
* Support hidden titlebar
* Support HiddenInset Titlebar
* Support TitleBar Default
Fixed merging defaults
* Sample titlebars
* Fix minmax app
* Min/Max size supported
* WIP: Support multiple value return
* Support OpenDialog
* Remove old dialog code
* change service bus topics for dialogs
* Revert changes to v1
* Use options struct for dialogs
* Initial support for OpenDialog
* Support selecting files+dirs
* Support multiple files in dialog
* Support all dialog properties
* Add comments
* Filter support
* Support default directory
* Support SaveDialog
* Tidy Up
* WIP: Basics of window drag
* Support window dragging
* Update tests
* Frameless is calculated for Mac
* Tidy up
* Support vibrancy and transparency for webview
Options Colour -> RGBA
* Rename vibrancy to appearance
* Add default appearance
* Refactor part 1
* Refactor Part 2
* Support Translucent Window Background
* Update runtime test
* Add IsDarkMode
Updated runtime test
* Support theme mode change event
* Misc fixes for events
* Support OnMultiple
* Small fixes to frontend events
* Add System calls to runtime
* Add system calls to js runtime
* Support System calls in Go Runtime
* Port Sync Store
* Refactor store. Add get().
* Refactor system. Add IsDarkMode state store
* Use IsDarkMode state store
* Remove generated files
* Support setting app state at startup
* Add Store to go runtime
* Update runtime to v1.0.3
* Remove unused event messages
* Debugging
* initial kitchen sink
* Fix right click crash
* Better drag support
* WIP
* Remove log package
* Add Log to Go runtime
* Add logging to kitchen sink
* Improved CodeBlock. Dark mode to store.
* Start Events. List styling moved to global scope.
* Make logger a public package
* Revert logger package
* Major logging refactor
* Make Ffenestri use logging subsystem.
* Debug refactor
* Add trace to JS runtime
* Migrate runtime to @wails
* Support Trace in kitchensink
* Support trace in go runtime
* Support log level
* Support Print in JS runtime
* Runtime v1.0.1
* Move Info message to Trace
* Support Print logging
* Updated Logger interface
* Fix number of methods in Log
* Support SetLogLevel() at runtime
Refactor of loglevel
* Made go runtime package public.
Using loglevel store to keep loglevel in sync
* Support dynamic loglevel
* Runtime refactor
* Fully refactored logging
* Better looking scrollbar
* Terminal output component
* Link component
* SetLogLevel fully supported
* Runtime defs update.
Slight System refactor
* More Logging updates
* Move preview for SetLogLevel
* Fix log level reactivity.
Misc fixes and tweaks
* logging: slight refactor
* Update logger constants to fix default values
* @wails/runtime v1.0.4
* Fix change in logging levels
* hook in windowWillClose
* refactor clilogger
* WIP Events.On
* Add Events.On
* Improved error handling?
* Disable annoying smart quotes
* update runtime definitions
* Support Emit & Once. Improved On.
* Remove old event methods
* Remove old Event methods
* Update runtime in kitchensink
* Revert Fatal on JS Error
* Tidy up events runtime
* Finish events page
* Update Browser runtime API
* Unify Browser runtime
* JS Runtime v1.0.8
* Fix browser runtime export
* Remove debug line
* Add Browser examples
* Update title
* Improved runtime.System
* Update runtime.System to make all methods
* Expose System methods in Go runtime
* Add System to kitchensink
* Huge improvement to calls: Now handles objects
* Add JS runtime Dialog
* Dialog WIP
* Js package generation (#554)
* WIP
* Generation of index.js
* Add RelativeToCwd
* Add JSDoc comments
* Convert to ES6 syntax
* Fix typo
* Initial generation of typescript declarations
* Typescript improvements
* Improved @returns jsdoc
* Improved declaration files
* Simplified output
* Rename file
* Tidy up
* Revert "Simplified output"
This reverts commit 15cdf7382b.
* Now parsing actual code
* Support Array types
* Reimagined parser
* Wrap parsing in Parser
* Rewritten module generator (TS Only)
* Final touches
* Slight refactor to improve output
* Struct comments. External struct literal binding
* Reworked project parser *working*
* remove debug info
* Refactor of parser
* remove the spew
* Better Ts support
* Better project generation logic
* Support local functions in bind()
* JS Object generation. Linting.
* Support json tags in module generation
* Updated mod files
* Support vscode file generation
* Better global.d.ts
* add ts-check to templates
* Support TS declaration files
* improved 'generate' command for module
Co-authored-by: Travis McLane <tmclane@gmail.com>
157 lines
4.5 KiB
Go
157 lines
4.5 KiB
Go
package parser
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/leaanthony/slicer"
|
|
)
|
|
|
|
// JSType represents a javascript type
|
|
type JSType string
|
|
|
|
const (
|
|
// JsString is a JS string
|
|
JsString JSType = "string"
|
|
// JsBoolean is a JS bool
|
|
JsBoolean = "boolean"
|
|
// JsInt is a JS number
|
|
JsInt = "number"
|
|
// JsFloat is a JS number
|
|
JsFloat = "number"
|
|
// JsArray is a JS array
|
|
JsArray = "Array"
|
|
// JsObject is a JS object
|
|
JsObject = "Object"
|
|
// JsUnsupported represents a type that cannot be converted
|
|
JsUnsupported = "*"
|
|
)
|
|
|
|
func goTypeToJS(input *Field) string {
|
|
switch input.Type {
|
|
case "string":
|
|
return "string"
|
|
case "int", "int8", "int16", "int32", "int64", "uint", "uint8", "uint16", "uint32", "uint64":
|
|
return "number"
|
|
case "float32", "float64":
|
|
return "number"
|
|
case "bool":
|
|
return "boolean"
|
|
// case reflect.Array, reflect.Slice:
|
|
// return JsArray
|
|
// case reflect.Ptr, reflect.Struct, reflect.Map, reflect.Interface:
|
|
// return JsObject
|
|
case "struct":
|
|
return input.Struct.Name
|
|
default:
|
|
fmt.Printf("Unsupported input to goTypeToJS: %+v", input)
|
|
return "*"
|
|
}
|
|
}
|
|
|
|
// goTypeToTS converts the given field into a Typescript type
|
|
// The pkgName is the package that the field is being output in.
|
|
// This is used to ensure we don't qualify local structs.
|
|
func goTypeToTS(input *Field, pkgName string) string {
|
|
var result string
|
|
switch input.Type {
|
|
case "string":
|
|
result = "string"
|
|
case "int", "int8", "int16", "int32", "int64", "uint", "uint8", "uint16", "uint32", "uint64":
|
|
result = "number"
|
|
case "float32", "float64":
|
|
result = "number"
|
|
case "bool":
|
|
result = "boolean"
|
|
case "struct":
|
|
if input.Struct.Package.Name != "" {
|
|
if input.Struct.Package.Name != pkgName {
|
|
result = input.Struct.Package.Name + "."
|
|
}
|
|
}
|
|
result += input.Struct.Name
|
|
// case reflect.Array, reflect.Slice:
|
|
// return string(JsArray)
|
|
// case reflect.Ptr, reflect.Struct:
|
|
// fqt := input.Type().String()
|
|
// return strings.Split(fqt, ".")[1]
|
|
// case reflect.Map, reflect.Interface:
|
|
// return string(JsObject)
|
|
default:
|
|
fmt.Printf("Unsupported input to goTypeToTS: %+v", input)
|
|
return JsUnsupported
|
|
}
|
|
|
|
if input.IsArray {
|
|
result = result + "[]"
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func goTypeToTSDeclaration(input *Field, pkgName string) string {
|
|
var result string
|
|
switch input.Type {
|
|
case "string":
|
|
result = "string"
|
|
case "int", "int8", "int16", "int32", "int64", "uint", "uint8", "uint16", "uint32", "uint64":
|
|
result = "number"
|
|
case "float32", "float64":
|
|
result = "number"
|
|
case "bool":
|
|
result = "boolean"
|
|
case "struct":
|
|
if input.Struct.Package.Name != "" {
|
|
if input.Struct.Package.Name != pkgName {
|
|
result = `import("./_` + input.Struct.Package.Name + `").`
|
|
}
|
|
}
|
|
result += input.Struct.Name
|
|
// case reflect.Array, reflect.Slice:
|
|
// return string(JsArray)
|
|
// case reflect.Ptr, reflect.Struct:
|
|
// fqt := input.Type().String()
|
|
// return strings.Split(fqt, ".")[1]
|
|
// case reflect.Map, reflect.Interface:
|
|
// return string(JsObject)
|
|
default:
|
|
fmt.Printf("Unsupported input to goTypeToTS: %+v", input)
|
|
return JsUnsupported
|
|
}
|
|
|
|
if input.IsArray {
|
|
result = result + "[]"
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func isUnresolvedType(typeName string) bool {
|
|
switch typeName {
|
|
case "string":
|
|
return false
|
|
case "int", "int8", "int16", "int32", "int64", "uint", "uint8", "uint16", "uint32", "uint64":
|
|
return false
|
|
case "float32", "float64":
|
|
return false
|
|
case "bool":
|
|
return false
|
|
case "struct":
|
|
return false
|
|
default:
|
|
return true
|
|
}
|
|
}
|
|
|
|
var reservedJSWords []string = []string{"abstract", "arguments", "await", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "debugger", "default", "delete", "do", "double", "else", "enum", "eval", "export", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if", "implements", "import", "in", "instanceof", "int", "interface", "let", "long", "native", "new", "null", "package", "private", "protected", "public", "return", "short", "static", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "true", "try", "typeof", "var", "void", "volatile", "while", "with", "yield", "Array", "Date", "eval", "function", "hasOwnProperty", "Infinity", "isFinite", "isNaN", "isPrototypeOf", "length", "Math", "NaN", "Number", "Object", "prototype", "String", "toString", "undefined", "valueOf"}
|
|
var jsReservedWords *slicer.StringSlicer = slicer.String(reservedJSWords)
|
|
|
|
func isJSReservedWord(input string) bool {
|
|
return jsReservedWords.Contains(input)
|
|
}
|
|
|
|
func startsWithLowerCaseLetter(input string) bool {
|
|
firstLetter := string(input[0])
|
|
return strings.ToLower(firstLetter) == firstLetter
|
|
}
|