Compare commits
4 Commits
firebug
...
387-Suppor
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6203dba146 | ||
|
|
0cd8d6b760 | ||
|
|
7dd51bc4db | ||
|
|
8b1d20f979 |
10
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -8,12 +8,8 @@ assignees: ''
|
|||||||
---
|
---
|
||||||
|
|
||||||
#####################################################
|
#####################################################
|
||||||
**If you have a technical issue, please do not open a bug this way!**
|
If you have a technical issue, please do not open a bug this way!
|
||||||
Please use the `wails issue` command!
|
Please use the `wails issue` command!
|
||||||
If you do not do this then the issue may be closed automatically.
|
|
||||||
|
|
||||||
NOTE: If your bug is related to Windows, make sure you read
|
|
||||||
the [Windows Developer Guide](https://wails.app/guides/windows/)
|
|
||||||
#####################################################
|
#####################################################
|
||||||
|
|
||||||
**Description**
|
**Description**
|
||||||
@@ -37,5 +33,3 @@ Please provide your platform, GO version and variables, etc
|
|||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context about the problem here.
|
Add any other context about the problem here.
|
||||||
|
|
||||||
- [ ] This issue is for Windows and I have read the [Windows Developer Guide](https://wails.app/guides/windows/)
|
|
||||||
|
|||||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature request
|
|
||||||
about: Suggest an idea for this project
|
|
||||||
title: ''
|
|
||||||
labels: enhancement
|
|
||||||
assignees: ''
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Is your feature request related to a problem? Please describe.**
|
|
||||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
||||||
|
|
||||||
**Describe the solution you'd like**
|
|
||||||
A clear and concise description of what you want to happen.
|
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
|
|
||||||
**Additional context**
|
|
||||||
Add any other context or screenshots about the feature request here.
|
|
||||||
6
.github/workflows/latest-pre.yml
vendored
@@ -13,10 +13,10 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Set up Go 1.13
|
- name: Set up Go 1.12
|
||||||
uses: actions/setup-go@v1
|
uses: actions/setup-go@v1
|
||||||
with:
|
with:
|
||||||
go-version: 1.13
|
go-version: 1.12
|
||||||
id: go
|
id: go
|
||||||
|
|
||||||
- name: Check out code into the Go module directory
|
- name: Check out code into the Go module directory
|
||||||
@@ -27,6 +27,6 @@ jobs:
|
|||||||
go get -v -d ./...
|
go get -v -d ./...
|
||||||
- name: Build
|
- name: Build
|
||||||
run: go build -v ./cmd/wails
|
run: go build -v ./cmd/wails
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
run: ./wails version
|
run: ./wails version
|
||||||
|
|||||||
6
.github/workflows/pr.yml
vendored
@@ -13,10 +13,10 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Set up Go 1.13
|
- name: Set up Go 1.12
|
||||||
uses: actions/setup-go@v1
|
uses: actions/setup-go@v1
|
||||||
with:
|
with:
|
||||||
go-version: 1.13
|
go-version: 1.12
|
||||||
id: go
|
id: go
|
||||||
|
|
||||||
- name: Check out code into the Go module directory
|
- name: Check out code into the Go module directory
|
||||||
@@ -27,6 +27,6 @@ jobs:
|
|||||||
go get -v -d ./...
|
go get -v -d ./...
|
||||||
- name: Build
|
- name: Build
|
||||||
run: go build -v ./cmd/wails
|
run: go build -v ./cmd/wails
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
run: ./wails version
|
run: ./wails version
|
||||||
8
.github/workflows/release.yml
vendored
@@ -4,7 +4,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
tags:
|
tags:
|
||||||
- '!**pre**'
|
- '!**pre**'
|
||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
build:
|
build:
|
||||||
@@ -15,10 +15,10 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Set up Go 1.13
|
- name: Set up Go 1.12
|
||||||
uses: actions/setup-go@v1
|
uses: actions/setup-go@v1
|
||||||
with:
|
with:
|
||||||
go-version: 1.13
|
go-version: 1.12
|
||||||
id: go
|
id: go
|
||||||
|
|
||||||
- name: Check out code into the Go module directory
|
- name: Check out code into the Go module directory
|
||||||
@@ -29,6 +29,6 @@ jobs:
|
|||||||
go get -v -d ./...
|
go get -v -d ./...
|
||||||
- name: Build
|
- name: Build
|
||||||
run: go build -v ./cmd/wails
|
run: go build -v ./cmd/wails
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
run: ./wails version
|
run: ./wails version
|
||||||
7
.gitignore
vendored
@@ -16,9 +16,4 @@ examples/**/example*
|
|||||||
cmd/wails/wails
|
cmd/wails/wails
|
||||||
.DS_Store
|
.DS_Store
|
||||||
tmp
|
tmp
|
||||||
node_modules/
|
node_modules/
|
||||||
v2/test/kitchensink/frontend/public
|
|
||||||
v2/internal/ffenestri/runtime.c
|
|
||||||
v2/internal/runtime/assets/desktop.js
|
|
||||||
v2/test/kitchensink/build/darwin/desktop/kitchensink
|
|
||||||
v2/test/kitchensink/frontend/package.json.md5
|
|
||||||
@@ -15,6 +15,7 @@ Wails is what it is because of the time and effort given by these great people.
|
|||||||
* [admin_3.exe](https://github.com/bh90210)
|
* [admin_3.exe](https://github.com/bh90210)
|
||||||
* [iceleo-com](https://github.com/iceleo-com)
|
* [iceleo-com](https://github.com/iceleo-com)
|
||||||
* [fallendusk](https://github.com/fallendusk)
|
* [fallendusk](https://github.com/fallendusk)
|
||||||
|
* [Florian Didran](https://github.com/fdidron)
|
||||||
* [Nikolai Zimmermann](https://github.com/Chronophylos)
|
* [Nikolai Zimmermann](https://github.com/Chronophylos)
|
||||||
* [Toyam Cox](https://github.com/Vaelatern)
|
* [Toyam Cox](https://github.com/Vaelatern)
|
||||||
* [Robin Eklind](https://github.com/mewmew)
|
* [Robin Eklind](https://github.com/mewmew)
|
||||||
@@ -27,15 +28,3 @@ Wails is what it is because of the time and effort given by these great people.
|
|||||||
* [Konez2k](https://github.com/konez2k)
|
* [Konez2k](https://github.com/konez2k)
|
||||||
* [msms](https://github.com/sayuthisobri)
|
* [msms](https://github.com/sayuthisobri)
|
||||||
* [dedo1911](https://github.com/dedo1911)
|
* [dedo1911](https://github.com/dedo1911)
|
||||||
* [Florian Didron](https://github.com/fdidron)
|
|
||||||
* [Christopher Murphy](https://github.com/Splode)
|
|
||||||
* [Zámbó, Levente](https://github.com/Lyimmi)
|
|
||||||
* [artem](https://github.com/Unix4ever)
|
|
||||||
* [Tim Kipp](https://github.com/timkippdev)
|
|
||||||
* [Dmitry Gomzyakov](https://github.com/kyoto44)
|
|
||||||
* [Arthur Wiebe](https://github.com/artooro)
|
|
||||||
* [Ilgıt Yıldırım](https://github.com/ilgityildirim)
|
|
||||||
* [Altynbek](https://github.com/gelleson)
|
|
||||||
* [Kyle](https://github.com/kmuchmore)
|
|
||||||
* [Balakrishna Prasad Ganne](https://github.com/aayush420)
|
|
||||||
* [Charaf Rezrazi](https://github.com/Rezrazi)
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
<a href="https://houndci.com"><img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg"/></a>
|
<a href="https://houndci.com"><img src="https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg"/></a>
|
||||||
<a href="https://github.com/avelino/awesome-go" rel="nofollow"><img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome"></a>
|
<a href="https://github.com/avelino/awesome-go" rel="nofollow"><img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome"></a>
|
||||||
<a href="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" rel="nofollow"><img src="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" alt="Release Pipelines"></a>
|
<a href="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" rel="nofollow"><img src="https://github.com/wailsapp/wails/workflows/release/badge.svg?branch=master" alt="Release Pipelines"></a>
|
||||||
|
<a href="https://github.com/wailsapp/wails/workflows/latest-pre/badge.svg?branch=masterr" rel="nofollow"><img src="https://github.com/wailsapp/wails/workflows/latest-pre/badge.svg?branch=master" alt="Pre-Release Pipelines"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
The traditional method of providing web interfaces to Go programs is via a built-in web server. Wails offers a different approach: it provides the ability to wrap both Go code and a web frontend into a single binary. Tools are provided to make this easy for you by handling project creation, compilation and bundling. All you have to do is get creative!
|
The traditional method of providing web interfaces to Go programs is via a built-in web server. Wails offers a different approach: it provides the ability to wrap both Go code and a web frontend into a single binary. Tools are provided to make this easy for you by handling project creation, compilation and bundling. All you have to do is get creative!
|
||||||
@@ -35,7 +36,7 @@ The official docs can be found at [https://wails.app](https://wails.app).
|
|||||||
|
|
||||||
Wails uses cgo to bind to the native rendering engines so a number of platform dependent libraries are needed as well as an installation of Go. The basic requirements are:
|
Wails uses cgo to bind to the native rendering engines so a number of platform dependent libraries are needed as well as an installation of Go. The basic requirements are:
|
||||||
|
|
||||||
- Go 1.13
|
- Go 1.12
|
||||||
- npm
|
- npm
|
||||||
|
|
||||||
### MacOS
|
### MacOS
|
||||||
@@ -56,7 +57,7 @@ _Ubuntu: 16.04, 18.04, 19.04_
|
|||||||
|
|
||||||
_Also succesfully tested on: Zorin 15, Parrot 4.7, Linuxmint 19, Elementary 5, Kali, Neon_, Pop!_OS
|
_Also succesfully tested on: Zorin 15, Parrot 4.7, Linuxmint 19, Elementary 5, Kali, Neon_, Pop!_OS
|
||||||
|
|
||||||
#### Arch Linux / ArchLabs / Ctlos Linux
|
#### Arch Linux / ArchLabs
|
||||||
|
|
||||||
`sudo pacman -S webkit2gtk gtk3`
|
`sudo pacman -S webkit2gtk gtk3`
|
||||||
|
|
||||||
|
|||||||
19
app.go
@@ -2,6 +2,7 @@ package wails
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
"runtime"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/syossan27/tebata"
|
"github.com/syossan27/tebata"
|
||||||
@@ -12,7 +13,6 @@ import (
|
|||||||
"github.com/wailsapp/wails/lib/ipc"
|
"github.com/wailsapp/wails/lib/ipc"
|
||||||
"github.com/wailsapp/wails/lib/logger"
|
"github.com/wailsapp/wails/lib/logger"
|
||||||
"github.com/wailsapp/wails/lib/renderer"
|
"github.com/wailsapp/wails/lib/renderer"
|
||||||
wailsruntime "github.com/wailsapp/wails/runtime"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// -------------------------------- Compile time Flags ------------------------------
|
// -------------------------------- Compile time Flags ------------------------------
|
||||||
@@ -20,16 +20,6 @@ import (
|
|||||||
// BuildMode indicates what mode we are in
|
// BuildMode indicates what mode we are in
|
||||||
var BuildMode = cmd.BuildModeProd
|
var BuildMode = cmd.BuildModeProd
|
||||||
|
|
||||||
// Runtime is the Go Runtime struct
|
|
||||||
type Runtime = wailsruntime.Runtime
|
|
||||||
|
|
||||||
// Store is a state store used for syncing with
|
|
||||||
// the front end
|
|
||||||
type Store = wailsruntime.Store
|
|
||||||
|
|
||||||
// CustomLogger is a specialised logger
|
|
||||||
type CustomLogger = logger.CustomLogger
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------------
|
||||||
|
|
||||||
// App defines the main application struct
|
// App defines the main application struct
|
||||||
@@ -116,6 +106,11 @@ func (a *App) start() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Enable console for Windows debug builds
|
||||||
|
if runtime.GOOS == "windows" && BuildMode == cmd.BuildModeDebug {
|
||||||
|
a.renderer.EnableConsole()
|
||||||
|
}
|
||||||
|
|
||||||
// Start signal handler
|
// Start signal handler
|
||||||
t := tebata.New(os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
|
t := tebata.New(os.Interrupt, os.Kill, syscall.SIGTERM, syscall.SIGINT, syscall.SIGKILL)
|
||||||
t.Reserve(func() {
|
t.Reserve(func() {
|
||||||
@@ -130,7 +125,7 @@ func (a *App) start() error {
|
|||||||
a.ipc.Start(a.eventManager, a.bindingManager)
|
a.ipc.Start(a.eventManager, a.bindingManager)
|
||||||
|
|
||||||
// Create the runtime
|
// Create the runtime
|
||||||
a.runtime = wailsruntime.NewRuntime(a.eventManager, a.renderer)
|
a.runtime = NewRuntime(a.eventManager, a.renderer)
|
||||||
|
|
||||||
// Start binding manager and give it our renderer
|
// Start binding manager and give it our renderer
|
||||||
err = a.bindingManager.Start(a.renderer, a.runtime)
|
err = a.bindingManager.Start(a.renderer, a.runtime)
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ import (
|
|||||||
"github.com/leaanthony/spinner"
|
"github.com/leaanthony/spinner"
|
||||||
)
|
)
|
||||||
|
|
||||||
const xgoVersion = "1.0.1"
|
|
||||||
|
|
||||||
var fs = NewFSHelper()
|
var fs = NewFSHelper()
|
||||||
|
|
||||||
// ValidateFrontendConfig checks if the frontend config is valid
|
// ValidateFrontendConfig checks if the frontend config is valid
|
||||||
@@ -92,17 +90,16 @@ func InitializeCrossCompilation(verbose bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var packSpinner *spinner.Spinner
|
var packSpinner *spinner.Spinner
|
||||||
msg := fmt.Sprintf("Pulling wailsapp/xgo:%s docker image... (may take a while)", xgoVersion)
|
|
||||||
if !verbose {
|
if !verbose {
|
||||||
packSpinner = spinner.New(msg)
|
packSpinner = spinner.New("Pulling wailsapp/xgo:latest docker image... (may take a while)")
|
||||||
packSpinner.SetSpinSpeed(50)
|
packSpinner.SetSpinSpeed(50)
|
||||||
packSpinner.Start()
|
packSpinner.Start()
|
||||||
} else {
|
} else {
|
||||||
println(msg)
|
println("Pulling wailsapp/xgo:latest docker image... (may take a while)")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := NewProgramHelper(verbose).RunCommandArray([]string{"docker",
|
err := NewProgramHelper(verbose).RunCommandArray([]string{"docker",
|
||||||
"pull", fmt.Sprintf("wailsapp/xgo:%s", xgoVersion)})
|
"pull", "wailsapp/xgo:latest"})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if packSpinner != nil {
|
if packSpinner != nil {
|
||||||
@@ -117,7 +114,7 @@ func InitializeCrossCompilation(verbose bool) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildDocker builds the project using the cross compiling wailsapp/xgo:<xgoVersion> container
|
// BuildDocker builds the project using the cross compiling wailsapp/xgo:latest container
|
||||||
func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOptions) error {
|
func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOptions) error {
|
||||||
var packSpinner *spinner.Spinner
|
var packSpinner *spinner.Spinner
|
||||||
if buildMode == BuildModeBridge {
|
if buildMode == BuildModeBridge {
|
||||||
@@ -143,31 +140,24 @@ func BuildDocker(binaryName string, buildMode string, projectOptions *ProjectOpt
|
|||||||
"-v", fmt.Sprintf("%s:/build", filepath.Join(fs.Cwd(), "build")),
|
"-v", fmt.Sprintf("%s:/build", filepath.Join(fs.Cwd(), "build")),
|
||||||
"-v", fmt.Sprintf("%s:/source", fs.Cwd()),
|
"-v", fmt.Sprintf("%s:/source", fs.Cwd()),
|
||||||
"-e", fmt.Sprintf("LOCAL_USER_ID=%v", userid),
|
"-e", fmt.Sprintf("LOCAL_USER_ID=%v", userid),
|
||||||
"-e", fmt.Sprintf("FLAG_TAGS=%s", projectOptions.Tags),
|
|
||||||
"-e", fmt.Sprintf("FLAG_LDFLAGS=%s", ldFlags(projectOptions, buildMode)),
|
"-e", fmt.Sprintf("FLAG_LDFLAGS=%s", ldFlags(projectOptions, buildMode)),
|
||||||
"-e", "FLAG_V=false",
|
"-e", "FLAG_V=false",
|
||||||
"-e", "FLAG_X=false",
|
"-e", "FLAG_X=false",
|
||||||
"-e", "FLAG_RACE=false",
|
"-e", "FLAG_RACE=false",
|
||||||
"-e", "FLAG_BUILDMODE=default",
|
"-e", "FLAG_BUILDMODE=default",
|
||||||
"-e", "FLAG_TRIMPATH=false",
|
"-e", "FLAG_TRIMPATH=false",
|
||||||
"-e", fmt.Sprintf("TARGETS=%s/%s", projectOptions.Platform, projectOptions.Architecture),
|
"-e", fmt.Sprintf("TARGETS=%s", projectOptions.Platform+"/"+projectOptions.Architecture),
|
||||||
"-e", "GOPROXY=",
|
"-e", "GOPROXY=",
|
||||||
"-e", "GO111MODULE=on",
|
"-e", "GO111MODULE=on",
|
||||||
|
"wailsapp/xgo:latest",
|
||||||
|
".",
|
||||||
} {
|
} {
|
||||||
buildCommand.Add(arg)
|
buildCommand.Add(arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if projectOptions.GoPath != "" {
|
|
||||||
buildCommand.Add("-v")
|
|
||||||
buildCommand.Add(fmt.Sprintf("%s:/go", projectOptions.GoPath))
|
|
||||||
}
|
|
||||||
|
|
||||||
buildCommand.Add(fmt.Sprintf("wailsapp/xgo:%s", xgoVersion))
|
|
||||||
buildCommand.Add(".")
|
|
||||||
|
|
||||||
compileMessage := fmt.Sprintf(
|
compileMessage := fmt.Sprintf(
|
||||||
"Packing + Compiling project for %s/%s using docker image wailsapp/xgo:%s",
|
"Packing + Compiling project for %s/%s using docker image wailsapp/xgo:latest",
|
||||||
projectOptions.Platform, projectOptions.Architecture, xgoVersion)
|
projectOptions.Platform, projectOptions.Architecture)
|
||||||
|
|
||||||
if buildMode == BuildModeDebug {
|
if buildMode == BuildModeDebug {
|
||||||
compileMessage += " (Debug Mode)"
|
compileMessage += " (Debug Mode)"
|
||||||
@@ -226,6 +216,10 @@ func BuildNative(binaryName string, forceRebuild bool, buildMode string, project
|
|||||||
buildCommand.Add("go")
|
buildCommand.Add("go")
|
||||||
|
|
||||||
buildCommand.Add("build")
|
buildCommand.Add("build")
|
||||||
|
if buildMode == BuildModeBridge {
|
||||||
|
// Ignore errors
|
||||||
|
buildCommand.Add("-i")
|
||||||
|
}
|
||||||
|
|
||||||
if binaryName != "" {
|
if binaryName != "" {
|
||||||
// Alter binary name based on OS
|
// Alter binary name based on OS
|
||||||
@@ -249,10 +243,6 @@ func BuildNative(binaryName string, forceRebuild bool, buildMode string, project
|
|||||||
|
|
||||||
buildCommand.AddSlice([]string{"-ldflags", ldFlags(projectOptions, buildMode)})
|
buildCommand.AddSlice([]string{"-ldflags", ldFlags(projectOptions, buildMode)})
|
||||||
|
|
||||||
if projectOptions.Tags != "" {
|
|
||||||
buildCommand.AddSlice([]string{"--tags", projectOptions.Tags})
|
|
||||||
}
|
|
||||||
|
|
||||||
if projectOptions.Verbose {
|
if projectOptions.Verbose {
|
||||||
fmt.Printf("Command: %v\n", buildCommand.AsSlice())
|
fmt.Printf("Command: %v\n", buildCommand.AsSlice())
|
||||||
}
|
}
|
||||||
@@ -303,11 +293,9 @@ func BuildApplication(binaryName string, forceRebuild bool, buildMode string, pa
|
|||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Removed by popular demand
|
if projectOptions.Platform == "windows" {
|
||||||
// TODO: Potentially add a flag to cleanup
|
helper.CleanWindows(projectOptions)
|
||||||
// if projectOptions.Platform == "windows" {
|
}
|
||||||
// helper.CleanWindows(projectOptions)
|
|
||||||
// }
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if projectOptions.CrossCompile {
|
if projectOptions.CrossCompile {
|
||||||
@@ -540,9 +528,6 @@ func InstallProdRuntime(projectDir string, projectOptions *ProjectOptions) error
|
|||||||
func ServeProject(projectOptions *ProjectOptions, logger *Logger) error {
|
func ServeProject(projectOptions *ProjectOptions, logger *Logger) error {
|
||||||
go func() {
|
go func() {
|
||||||
time.Sleep(2 * time.Second)
|
time.Sleep(2 * time.Second)
|
||||||
if projectOptions.Platform == "windows" {
|
|
||||||
logger.Yellow("*** Please note: Windows builds use mshtml which is only compatible with IE11. We strongly recommend only using IE11 when running 'wails serve'! For more information, please read https://wails.app/guides/windows/ ***")
|
|
||||||
}
|
|
||||||
logger.Green(">>>>> To connect, you will need to run '" + projectOptions.FrontEnd.Serve + "' in the '" + projectOptions.FrontEnd.Dir + "' directory <<<<<")
|
logger.Green(">>>>> To connect, you will need to run '" + projectOptions.FrontEnd.Serve + "' in the '" + projectOptions.FrontEnd.Dir + "' directory <<<<<")
|
||||||
}()
|
}()
|
||||||
location, err := filepath.Abs(filepath.Join("build", projectOptions.BinaryName))
|
location, err := filepath.Abs(filepath.Join("build", projectOptions.BinaryName))
|
||||||
@@ -574,17 +559,8 @@ func ldFlags(po *ProjectOptions, buildMode string) string {
|
|||||||
ldflags += "-H windowsgui "
|
ldflags += "-H windowsgui "
|
||||||
}
|
}
|
||||||
|
|
||||||
if po.UseFirebug {
|
|
||||||
ldflags += "-X github.com/wailsapp/wails/lib/renderer.UseFirebug=true "
|
|
||||||
}
|
|
||||||
|
|
||||||
ldflags += "-X github.com/wailsapp/wails.BuildMode=" + buildMode
|
ldflags += "-X github.com/wailsapp/wails.BuildMode=" + buildMode
|
||||||
|
|
||||||
// Add additional ldflags passed in via the `ldflags` cli flag
|
|
||||||
if len(po.LdFlags) > 0 {
|
|
||||||
ldflags += " " + po.LdFlags
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we wish to generate typescript
|
// If we wish to generate typescript
|
||||||
if po.typescriptDefsFilename != "" {
|
if po.typescriptDefsFilename != "" {
|
||||||
cwd, err := os.Getwd()
|
cwd, err := os.Getwd()
|
||||||
|
|||||||
@@ -63,8 +63,6 @@ const (
|
|||||||
PopOS
|
PopOS
|
||||||
// Solus distribution
|
// Solus distribution
|
||||||
Solus
|
Solus
|
||||||
// Ctlos Linux distribution
|
|
||||||
Ctlos
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// DistroInfo contains all the information relating to a linux distribution
|
// DistroInfo contains all the information relating to a linux distribution
|
||||||
@@ -113,7 +111,7 @@ func parseOsRelease(osRelease string) *DistroInfo {
|
|||||||
}
|
}
|
||||||
switch splitLine[0] {
|
switch splitLine[0] {
|
||||||
case "ID":
|
case "ID":
|
||||||
osID = strings.ToLower(strings.Trim(splitLine[1], "\""))
|
osID = strings.Trim(splitLine[1], "\"")
|
||||||
case "NAME":
|
case "NAME":
|
||||||
osNAME = strings.Trim(splitLine[1], "\"")
|
osNAME = strings.Trim(splitLine[1], "\"")
|
||||||
case "VERSION_ID":
|
case "VERSION_ID":
|
||||||
@@ -122,7 +120,7 @@ func parseOsRelease(osRelease string) *DistroInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check distro name against list of distros
|
// Check distro name against list of distros
|
||||||
switch osID {
|
switch strings.ToLower(osID) {
|
||||||
case "fedora":
|
case "fedora":
|
||||||
result.Distribution = Fedora
|
result.Distribution = Fedora
|
||||||
case "centos":
|
case "centos":
|
||||||
@@ -131,8 +129,6 @@ func parseOsRelease(osRelease string) *DistroInfo {
|
|||||||
result.Distribution = Arch
|
result.Distribution = Arch
|
||||||
case "archlabs":
|
case "archlabs":
|
||||||
result.Distribution = ArchLabs
|
result.Distribution = ArchLabs
|
||||||
case "ctlos":
|
|
||||||
result.Distribution = Ctlos
|
|
||||||
case "debian":
|
case "debian":
|
||||||
result.Distribution = Debian
|
result.Distribution = Debian
|
||||||
case "ubuntu":
|
case "ubuntu":
|
||||||
|
|||||||
@@ -193,16 +193,7 @@ distributions:
|
|||||||
name: ArchLabs
|
name: ArchLabs
|
||||||
gccversioncommand: *gccdumpversion
|
gccversioncommand: *gccdumpversion
|
||||||
programs: *archdefaultprograms
|
programs: *archdefaultprograms
|
||||||
libraries: *archdefaultlibraries
|
libraries: *archdefaultlibraries
|
||||||
ctlos:
|
|
||||||
id: ctlos
|
|
||||||
releases:
|
|
||||||
default:
|
|
||||||
version: default
|
|
||||||
name: Ctlos Linux
|
|
||||||
gccversioncommand: *gccdumpversion
|
|
||||||
programs: *archdefaultprograms
|
|
||||||
libraries: *archdefaultlibraries
|
|
||||||
manjaro:
|
manjaro:
|
||||||
id: manjaro
|
id: manjaro
|
||||||
releases:
|
releases:
|
||||||
|
|||||||
@@ -212,8 +212,6 @@ func (b *PackageHelper) packageOSX(po *ProjectOptions) error {
|
|||||||
packageID := strings.Join([]string{"wails", name, version}, ".")
|
packageID := strings.Join([]string{"wails", name, version}, ".")
|
||||||
plistData := newPlistData(name, exe, packageID, version, author)
|
plistData := newPlistData(name, exe, packageID, version, author)
|
||||||
appname := po.Name + ".app"
|
appname := po.Name + ".app"
|
||||||
plistFilename := path.Join(build, appname, "Contents", "Info.plist")
|
|
||||||
customPlist := path.Join(b.fs.Cwd(), "info.plist")
|
|
||||||
|
|
||||||
// Check binary exists
|
// Check binary exists
|
||||||
source := path.Join(build, exe)
|
source := path.Join(build, exe)
|
||||||
@@ -232,48 +230,28 @@ func (b *PackageHelper) packageOSX(po *ProjectOptions) error {
|
|||||||
// Remove the existing package
|
// Remove the existing package
|
||||||
os.RemoveAll(appname)
|
os.RemoveAll(appname)
|
||||||
|
|
||||||
// Create directories
|
|
||||||
exeDir := path.Join(build, appname, "/Contents/MacOS")
|
exeDir := path.Join(build, appname, "/Contents/MacOS")
|
||||||
b.fs.MkDirs(exeDir, 0755)
|
b.fs.MkDirs(exeDir, 0755)
|
||||||
resourceDir := path.Join(build, appname, "/Contents/Resources")
|
resourceDir := path.Join(build, appname, "/Contents/Resources")
|
||||||
b.fs.MkDirs(resourceDir, 0755)
|
b.fs.MkDirs(resourceDir, 0755)
|
||||||
|
tmpl := template.New("infoPlist")
|
||||||
|
plistFile := filepath.Join(b.getPackageFileBaseDir(), "info.plist")
|
||||||
|
infoPlist, err := ioutil.ReadFile(plistFile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
tmpl.Parse(string(infoPlist))
|
||||||
|
|
||||||
// Do we have a custom plist in the project directory?
|
// Write the template to a buffer
|
||||||
if !fs.FileExists(customPlist) {
|
var tpl bytes.Buffer
|
||||||
|
err = tmpl.Execute(&tpl, plistData)
|
||||||
// No - create a new plist from our defaults
|
if err != nil {
|
||||||
tmpl := template.New("infoPlist")
|
return err
|
||||||
plistFile := filepath.Join(b.getPackageFileBaseDir(), "info.plist")
|
}
|
||||||
infoPlist, err := ioutil.ReadFile(plistFile)
|
filename := path.Join(build, appname, "Contents", "Info.plist")
|
||||||
if err != nil {
|
err = ioutil.WriteFile(filename, tpl.Bytes(), 0644)
|
||||||
return err
|
if err != nil {
|
||||||
}
|
return err
|
||||||
tmpl.Parse(string(infoPlist))
|
|
||||||
|
|
||||||
// Write the template to a buffer
|
|
||||||
var tpl bytes.Buffer
|
|
||||||
err = tmpl.Execute(&tpl, plistData)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save to the package
|
|
||||||
err = ioutil.WriteFile(plistFilename, tpl.Bytes(), 0644)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Also write to project directory for customisation
|
|
||||||
err = ioutil.WriteFile(customPlist, tpl.Bytes(), 0644)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Yes - we have a plist. Copy it to the package verbatim
|
|
||||||
err = fs.CopyFile(customPlist, plistFilename)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy executable
|
// Copy executable
|
||||||
@@ -315,7 +293,7 @@ func (b *PackageHelper) PackageWindows(po *ProjectOptions, cleanUp bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generate icon from PNG
|
// Generate icon from PNG
|
||||||
err = generateWindowsIcon(icon, basename+".ico")
|
err = generateWindowsIcon(icon, po.BinaryName+".ico")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -151,7 +150,6 @@ type ProjectOptions struct {
|
|||||||
Template string `json:"-"`
|
Template string `json:"-"`
|
||||||
BinaryName string `json:"binaryname"`
|
BinaryName string `json:"binaryname"`
|
||||||
FrontEnd *frontend `json:"frontend,omitempty"`
|
FrontEnd *frontend `json:"frontend,omitempty"`
|
||||||
Tags string `json:"tags"`
|
|
||||||
NPMProjectName string `json:"-"`
|
NPMProjectName string `json:"-"`
|
||||||
system *SystemHelper
|
system *SystemHelper
|
||||||
log *Logger
|
log *Logger
|
||||||
@@ -163,26 +161,6 @@ type ProjectOptions struct {
|
|||||||
CrossCompile bool
|
CrossCompile bool
|
||||||
Platform string
|
Platform string
|
||||||
Architecture string
|
Architecture string
|
||||||
LdFlags string
|
|
||||||
GoPath string
|
|
||||||
UseFirebug bool
|
|
||||||
|
|
||||||
// Supported platforms
|
|
||||||
Platforms []string `json:"platforms,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// PlatformSupported returns true if the template is supported
|
|
||||||
// on the current platform
|
|
||||||
func (po *ProjectOptions) PlatformSupported() bool {
|
|
||||||
|
|
||||||
// Default is all platforms supported
|
|
||||||
if len(po.Platforms) == 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check that the platform is in the list
|
|
||||||
platformsSupported := slicer.String(po.Platforms)
|
|
||||||
return platformsSupported.Contains(runtime.GOOS)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Defaults sets the default project template
|
// Defaults sets the default project template
|
||||||
@@ -253,16 +231,13 @@ func (po *ProjectOptions) PromptForInputs() error {
|
|||||||
for _, k := range keys {
|
for _, k := range keys {
|
||||||
templateDetail := templateDetails[k]
|
templateDetail := templateDetails[k]
|
||||||
templateList.Add(templateDetail)
|
templateList.Add(templateDetail)
|
||||||
if !templateDetail.Metadata.PlatformSupported() {
|
|
||||||
templateDetail.Metadata.Name = "* " + templateDetail.Metadata.Name
|
|
||||||
}
|
|
||||||
options.Add(fmt.Sprintf("%s - %s", templateDetail.Metadata.Name, templateDetail.Metadata.ShortDescription))
|
options.Add(fmt.Sprintf("%s - %s", templateDetail.Metadata.Name, templateDetail.Metadata.ShortDescription))
|
||||||
}
|
}
|
||||||
|
|
||||||
templateIndex := 0
|
templateIndex := 0
|
||||||
|
|
||||||
if len(options.AsSlice()) > 1 {
|
if len(options.AsSlice()) > 1 {
|
||||||
templateIndex = PromptSelection("Please select a template (* means unsupported on current platform)", options.AsSlice(), 0)
|
templateIndex = PromptSelection("Please select a template", options.AsSlice(), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(templateList.AsSlice()) == 0 {
|
if len(templateList.AsSlice()) == 0 {
|
||||||
@@ -273,10 +248,6 @@ func (po *ProjectOptions) PromptForInputs() error {
|
|||||||
po.selectedTemplate = templateList.AsSlice()[templateIndex].(*TemplateDetails)
|
po.selectedTemplate = templateList.AsSlice()[templateIndex].(*TemplateDetails)
|
||||||
}
|
}
|
||||||
|
|
||||||
po.selectedTemplate.Metadata.Name = strings.TrimPrefix(po.selectedTemplate.Metadata.Name, "* ")
|
|
||||||
if !po.selectedTemplate.Metadata.PlatformSupported() {
|
|
||||||
println("WARNING: This template is unsupported on this platform!")
|
|
||||||
}
|
|
||||||
fmt.Println("Template: " + po.selectedTemplate.Metadata.Name)
|
fmt.Println("Template: " + po.selectedTemplate.Metadata.Name)
|
||||||
|
|
||||||
// Setup NPM Project name
|
// Setup NPM Project name
|
||||||
@@ -399,9 +370,5 @@ func processTemplateMetadata(templateMetadata *TemplateMetadata, po *ProjectOpti
|
|||||||
}
|
}
|
||||||
po.FrontEnd.Serve = templateMetadata.Serve
|
po.FrontEnd.Serve = templateMetadata.Serve
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save platforms
|
|
||||||
po.Platforms = templateMetadata.Platforms
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,11 +5,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
homedir "github.com/mitchellh/go-homedir"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SystemHelper - Defines everything related to the system
|
// SystemHelper - Defines everything related to the system
|
||||||
@@ -37,11 +38,10 @@ func NewSystemHelper() *SystemHelper {
|
|||||||
// setSystemDirs calculates the system directories it is interested in
|
// setSystemDirs calculates the system directories it is interested in
|
||||||
func (s *SystemHelper) setSystemDirs() {
|
func (s *SystemHelper) setSystemDirs() {
|
||||||
var err error
|
var err error
|
||||||
s.homeDir, err = os.UserHomeDir()
|
s.homeDir, err = homedir.Dir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Cannot find home directory! Please file a bug report!")
|
log.Fatal("Cannot find home directory! Please file a bug report!")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: A better config system
|
// TODO: A better config system
|
||||||
s.wailsSystemDir = filepath.Join(s.homeDir, ".wails")
|
s.wailsSystemDir = filepath.Join(s.homeDir, ".wails")
|
||||||
s.wailsSystemConfig = filepath.Join(s.wailsSystemDir, s.configFilename)
|
s.wailsSystemConfig = filepath.Join(s.wailsSystemDir, s.configFilename)
|
||||||
@@ -132,7 +132,7 @@ func (s *SystemHelper) setup() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const introText = `
|
const introText = `
|
||||||
Wails is a lightweight framework for creating web-like desktop apps in Go.
|
Wails is a lightweight framework for creating web-like desktop apps in Go.
|
||||||
I'll need to ask you a few questions so I can fill in your project templates and then I will try and see if you have the correct dependencies installed. If you don't have the right tools installed, I'll try and suggest how to install them.
|
I'll need to ask you a few questions so I can fill in your project templates and then I will try and see if you have the correct dependencies installed. If you don't have the right tools installed, I'll try and suggest how to install them.
|
||||||
`
|
`
|
||||||
|
|
||||||
@@ -276,7 +276,7 @@ func CheckDependencies(logger *Logger) (bool, error) {
|
|||||||
switch distroInfo.Distribution {
|
switch distroInfo.Distribution {
|
||||||
case Ubuntu, Debian, Zorin, Parrot, Linuxmint, Elementary, Kali, Neon, Deepin, Raspbian, PopOS:
|
case Ubuntu, Debian, Zorin, Parrot, Linuxmint, Elementary, Kali, Neon, Deepin, Raspbian, PopOS:
|
||||||
libraryChecker = DpkgInstalled
|
libraryChecker = DpkgInstalled
|
||||||
case Arch, ArcoLinux, ArchLabs, Ctlos, Manjaro, ManjaroARM:
|
case Arch, ArcoLinux, ArchLabs, Manjaro, ManjaroARM:
|
||||||
libraryChecker = PacmanInstalled
|
libraryChecker = PacmanInstalled
|
||||||
case CentOS, Fedora, Tumbleweed, Leap:
|
case CentOS, Fedora, Tumbleweed, Leap:
|
||||||
libraryChecker = RpmInstalled
|
libraryChecker = RpmInstalled
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
|
||||||
@@ -30,26 +29,6 @@ type TemplateMetadata struct {
|
|||||||
Bridge string `json:"bridge"`
|
Bridge string `json:"bridge"`
|
||||||
WailsDir string `json:"wailsdir"`
|
WailsDir string `json:"wailsdir"`
|
||||||
TemplateDependencies []*TemplateDependency `json:"dependencies,omitempty"`
|
TemplateDependencies []*TemplateDependency `json:"dependencies,omitempty"`
|
||||||
|
|
||||||
// List of platforms that this template is supported on.
|
|
||||||
// No value means all platforms. A platform name is the same string
|
|
||||||
// as `runtime.GOOS` will return, eg: "darwin". NOTE: This is
|
|
||||||
// case sensitive.
|
|
||||||
Platforms []string `json:"platforms,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// PlatformSupported returns true if this template supports the
|
|
||||||
// currently running platform
|
|
||||||
func (m *TemplateMetadata) PlatformSupported() bool {
|
|
||||||
|
|
||||||
// Default is all platforms supported
|
|
||||||
if len(m.Platforms) == 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check that the platform is in the list
|
|
||||||
platformsSupported := slicer.String(m.Platforms)
|
|
||||||
return platformsSupported.Contains(runtime.GOOS)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TemplateDependency defines a binary dependency for the template
|
// TemplateDependency defines a binary dependency for the template
|
||||||
@@ -149,11 +128,11 @@ func (t *TemplateHelper) GetTemplateDetails() (map[string]*TemplateDetails, erro
|
|||||||
result[name] = &TemplateDetails{
|
result[name] = &TemplateDetails{
|
||||||
Path: dir,
|
Path: dir,
|
||||||
}
|
}
|
||||||
|
_ = &TemplateMetadata{}
|
||||||
metadata, err := t.LoadMetadata(dir)
|
metadata, err := t.LoadMetadata(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result[name].Metadata = metadata
|
result[name].Metadata = metadata
|
||||||
if metadata.Name != "" {
|
if metadata.Name != "" {
|
||||||
result[name].Name = metadata.Name
|
result[name].Name = metadata.Name
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ const routes: Routes = [];
|
|||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
RouterModule.forRoot(routes,{useHash:true})
|
RouterModule.forRoot(routes)
|
||||||
],
|
],
|
||||||
exports: [RouterModule]
|
exports: [RouterModule]
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"core-js": "^3.6.4",
|
"core-js": "^3.6.4",
|
||||||
"react": "^16.13.1",
|
"react": "^16.13.0",
|
||||||
"react-dom": "^16.13.1",
|
"react-dom": "^16.13.0",
|
||||||
"wails-react-scripts": "3.0.1-2",
|
"wails-react-scripts": "3.0.1-2",
|
||||||
"react-modal": "3.11.2",
|
"react-modal": "3.11.2",
|
||||||
"@wailsapp/runtime": "^1.0.10"
|
"@wailsapp/runtime": "^1.0.10"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.8 KiB |
@@ -1,13 +1,10 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
<head>
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<meta name="theme-color" content="#000000" />
|
<meta name="theme-color" content="#000000" />
|
||||||
<meta name="description" content="Web site created using create-react-app" />
|
|
||||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
|
||||||
<!--
|
<!--
|
||||||
manifest.json provides metadata used when your web app is installed on a
|
manifest.json provides metadata used when your web app is installed on a
|
||||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||||
@@ -23,9 +20,8 @@
|
|||||||
Learn how to configure a non-root public URL by running `npm run build`.
|
Learn how to configure a non-root public URL by running `npm run build`.
|
||||||
-->
|
-->
|
||||||
<title>React App</title>
|
<title>React App</title>
|
||||||
</head>
|
</head>
|
||||||
|
<body>
|
||||||
<body>
|
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<!--
|
<!--
|
||||||
@@ -38,6 +34,5 @@
|
|||||||
To begin the development, run `npm start` or `yarn start`.
|
To begin the development, run `npm start` or `yarn start`.
|
||||||
To create a production bundle, use `npm run build` or `yarn build`.
|
To create a production bundle, use `npm run build` or `yarn build`.
|
||||||
-->
|
-->
|
||||||
</body>
|
</body>
|
||||||
|
</html>
|
||||||
</html>
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 176 KiB |
@@ -6,16 +6,6 @@
|
|||||||
"src": "favicon.ico",
|
"src": "favicon.ico",
|
||||||
"sizes": "64x64 32x32 24x24 16x16",
|
"sizes": "64x64 32x32 24x24 16x16",
|
||||||
"type": "image/x-icon"
|
"type": "image/x-icon"
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "logo192.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "192x192"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"src": "logo512.png",
|
|
||||||
"type": "image/png",
|
|
||||||
"sizes": "512x512"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"start_url": ".",
|
"start_url": ".",
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
# https://www.robotstxt.org/robotstxt.html
|
|
||||||
User-agent: *
|
|
||||||
Disallow:
|
|
||||||
@@ -3,16 +3,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.App-logo {
|
.App-logo {
|
||||||
|
animation: App-logo-spin infinite 20s linear;
|
||||||
height: 40vmin;
|
height: 40vmin;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
.App-logo {
|
|
||||||
animation: App-logo-spin infinite 20s linear;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-header {
|
.App-header {
|
||||||
background-color: #282c34;
|
background-color: #282c34;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
|
|||||||
@@ -1,35 +1,48 @@
|
|||||||
import React, { useState } from 'react';
|
import React from 'react';
|
||||||
import Modal from 'react-modal';
|
import Modal from 'react-modal';
|
||||||
|
|
||||||
function HelloWorld() {
|
class HelloWorld extends React.Component {
|
||||||
const [showModal, setShowModal] = useState(false);
|
constructor(props, context) {
|
||||||
const [result, setResult] = useState(null);
|
super();
|
||||||
|
this.state = {
|
||||||
|
showModal: false
|
||||||
|
};
|
||||||
|
|
||||||
const handleOpenModal = () => {
|
this.handleOpenModal = this.handleOpenModal.bind(this);
|
||||||
setShowModal(true);
|
this.handleCloseModal = this.handleCloseModal.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
window.backend.basic().then((result) => setResult(result));
|
handleOpenModal () {
|
||||||
};
|
this.setState({ showModal: true });
|
||||||
|
|
||||||
const handleCloseModal = () => {
|
window.backend.basic().then(result =>
|
||||||
setShowModal(false);
|
this.setState({
|
||||||
};
|
result
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
handleCloseModal () {
|
||||||
<div className="App">
|
this.setState({ showModal: false });
|
||||||
<button onClick={() => handleOpenModal()} type="button">
|
}
|
||||||
Hello
|
|
||||||
</button>
|
render() {
|
||||||
<Modal
|
const { result } = this.state;
|
||||||
appElement={document.getElementById("app")}
|
return (
|
||||||
isOpen={showModal}
|
<div className="App">
|
||||||
contentLabel="Minimal Modal Example"
|
<button onClick={this.handleOpenModal} type="button">
|
||||||
>
|
Hello
|
||||||
<p>{result}</p>
|
</button>
|
||||||
<button onClick={() => handleCloseModal()}>Close Modal</button>
|
<Modal
|
||||||
</Modal>
|
isOpen={this.state.showModal}
|
||||||
</div>
|
contentLabel="Minimal Modal Example"
|
||||||
);
|
>
|
||||||
|
<p>{result}</p>
|
||||||
|
<button onClick={this.handleCloseModal}>Close Modal</button>
|
||||||
|
</Modal>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default HelloWorld;
|
export default HelloWorld;
|
||||||
|
|||||||
@@ -3,20 +3,9 @@ import ReactDOM from 'react-dom';
|
|||||||
import 'core-js/stable';
|
import 'core-js/stable';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
import App from './App';
|
import App from './App';
|
||||||
import * as serviceWorker from './serviceWorker';
|
|
||||||
|
|
||||||
import * as Wails from '@wailsapp/runtime';
|
import * as Wails from '@wailsapp/runtime';
|
||||||
|
|
||||||
Wails.Init(() => {
|
Wails.Init(() => {
|
||||||
ReactDOM.render(
|
ReactDOM.render(<App />, document.getElementById('app'));
|
||||||
<React.StrictMode>
|
|
||||||
<App />
|
|
||||||
</React.StrictMode>,
|
|
||||||
document.getElementById("app")
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// If you want your app to work offline and load faster, you can change
|
|
||||||
// unregister() to register() below. Note this comes with some pitfalls.
|
|
||||||
// Learn more about service workers: https://bit.ly/CRA-PWA
|
|
||||||
serviceWorker.unregister();
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "React JS",
|
"name": "React JS",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"shortdescription": "Create React App v4 template",
|
"shortdescription": "Create React App v3 template",
|
||||||
"description": "Create React App v4 standard tooling",
|
"description": "Create React App v3 standar tooling",
|
||||||
"install": "npm install",
|
"install": "npm install",
|
||||||
"build": "npm run build",
|
"build": "npm run build",
|
||||||
"author": "bh90210 <ktc@pm.me>",
|
"author": "bh90210 <ktc@pm.me>",
|
||||||
|
|||||||
4
cmd/templates/svelte/frontend/.gitignore
vendored
@@ -1,4 +0,0 @@
|
|||||||
/node_modules/
|
|
||||||
/public/build/
|
|
||||||
|
|
||||||
.DS_Store
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
*Looking for a shareable component template? Go here --> [sveltejs/component-template](https://github.com/sveltejs/component-template)*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# svelte app
|
|
||||||
|
|
||||||
This is a project template for [Svelte](https://svelte.dev) apps. It lives at https://github.com/sveltejs/template.
|
|
||||||
|
|
||||||
To create a new project based on this template using [degit](https://github.com/Rich-Harris/degit):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx degit sveltejs/template svelte-app
|
|
||||||
cd svelte-app
|
|
||||||
```
|
|
||||||
|
|
||||||
*Note that you will need to have [Node.js](https://nodejs.org) installed.*
|
|
||||||
|
|
||||||
|
|
||||||
## Get started
|
|
||||||
|
|
||||||
Install the dependencies...
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd svelte-app
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
...then start [Rollup](https://rollupjs.org):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Navigate to [localhost:5000](http://localhost:5000). You should see your app running. Edit a component file in `src`, save it, and reload the page to see your changes.
|
|
||||||
|
|
||||||
By default, the server will only respond to requests from localhost. To allow connections from other computers, edit the `sirv` commands in package.json to include the option `--host 0.0.0.0`.
|
|
||||||
|
|
||||||
|
|
||||||
## Building and running in production mode
|
|
||||||
|
|
||||||
To create an optimised version of the app:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
You can run the newly built app with `npm run start`. This uses [sirv](https://github.com/lukeed/sirv), which is included in your package.json's `dependencies` so that the app will work when you deploy to platforms like [Heroku](https://heroku.com).
|
|
||||||
|
|
||||||
|
|
||||||
## Single-page app mode
|
|
||||||
|
|
||||||
By default, sirv will only respond to requests that match files in `public`. This is to maximise compatibility with static fileservers, allowing you to deploy your app anywhere.
|
|
||||||
|
|
||||||
If you're building a single-page app (SPA) with multiple routes, sirv needs to be able to respond to requests for *any* path. You can make it so by editing the `"start"` command in package.json:
|
|
||||||
|
|
||||||
```js
|
|
||||||
"start": "sirv public --single"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Deploying to the web
|
|
||||||
|
|
||||||
### With [Vercel](https://vercel.com)
|
|
||||||
|
|
||||||
Install `vercel` if you haven't already:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install -g vercel
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, from within your project folder:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd public
|
|
||||||
vercel deploy --name my-project
|
|
||||||
```
|
|
||||||
|
|
||||||
### With [surge](https://surge.sh/)
|
|
||||||
|
|
||||||
Install `surge` if you haven't already:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install -g surge
|
|
||||||
```
|
|
||||||
|
|
||||||
Then, from within your project folder:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm run build
|
|
||||||
surge public my-project.surge.sh
|
|
||||||
```
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "{{.NPMProjectName}}",
|
|
||||||
"author": "{{.Author.Name}}<{{.Author.Email}}>",
|
|
||||||
"scripts": {
|
|
||||||
"build": "rollup -c",
|
|
||||||
"dev": "rollup -c -w",
|
|
||||||
"start": "sirv public"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@babel/core": "^7.11.6",
|
|
||||||
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
|
||||||
"@babel/plugin-transform-runtime": "^7.11.5",
|
|
||||||
"@babel/preset-env": "^7.11.5",
|
|
||||||
"@rollup/plugin-commonjs": "^14.0.0",
|
|
||||||
"@rollup/plugin-image": "^2.0.5",
|
|
||||||
"@rollup/plugin-node-resolve": "^8.0.0",
|
|
||||||
"core-js": "^3.6.5",
|
|
||||||
"rollup": "^2.3.4",
|
|
||||||
"rollup-plugin-babel": "^4.4.0",
|
|
||||||
"rollup-plugin-livereload": "^2.0.0",
|
|
||||||
"rollup-plugin-polyfill": "^3.0.0",
|
|
||||||
"rollup-plugin-svelte": "^6.0.0",
|
|
||||||
"rollup-plugin-terser": "^7.0.0",
|
|
||||||
"svelte": "^3.0.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"sirv-cli": "^1.0.0",
|
|
||||||
"@wailsapp/runtime": "^1.0.10",
|
|
||||||
"svelte-simple-modal": "^0.6.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -1,17 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset='utf-8'>
|
|
||||||
<meta name='viewport' content='width=device-width,initial-scale=1'>
|
|
||||||
|
|
||||||
<title>Svelte app</title>
|
|
||||||
|
|
||||||
<link rel='icon' type='image/png' href='/favicon.png'>
|
|
||||||
<link rel='stylesheet' href='/build/bundle.css'>
|
|
||||||
|
|
||||||
<script defer src='/build/bundle.js'></script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
import svelte from 'rollup-plugin-svelte';
|
|
||||||
import resolve from '@rollup/plugin-node-resolve';
|
|
||||||
import commonjs from '@rollup/plugin-commonjs';
|
|
||||||
import livereload from 'rollup-plugin-livereload';
|
|
||||||
import { terser } from 'rollup-plugin-terser';
|
|
||||||
import image from '@rollup/plugin-image';
|
|
||||||
import babel from 'rollup-plugin-babel';
|
|
||||||
import polyfill from 'rollup-plugin-polyfill';
|
|
||||||
|
|
||||||
const production = !process.env.ROLLUP_WATCH;
|
|
||||||
|
|
||||||
function serve() {
|
|
||||||
let server;
|
|
||||||
|
|
||||||
function toExit() {
|
|
||||||
if (server) server.kill(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
writeBundle() {
|
|
||||||
if (server) return;
|
|
||||||
server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
|
|
||||||
stdio: ['ignore', 'inherit', 'inherit'],
|
|
||||||
shell: true
|
|
||||||
});
|
|
||||||
|
|
||||||
process.on('SIGTERM', toExit);
|
|
||||||
process.on('exit', toExit);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
input: 'src/main.js',
|
|
||||||
output: {
|
|
||||||
sourcemap: true,
|
|
||||||
format: 'iife',
|
|
||||||
name: 'app',
|
|
||||||
file: 'public/build/bundle.js'
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
image(),
|
|
||||||
svelte({
|
|
||||||
// enable run-time checks when not in production
|
|
||||||
dev: !production,
|
|
||||||
// we'll extract any component CSS out into
|
|
||||||
// a separate file - better for performance
|
|
||||||
css: css => {
|
|
||||||
css.write('bundle.css');
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
|
|
||||||
// If you have external dependencies installed from
|
|
||||||
// npm, you'll most likely need these plugins. In
|
|
||||||
// some cases you'll need additional configuration -
|
|
||||||
// consult the documentation for details:
|
|
||||||
// https://github.com/rollup/plugins/tree/master/packages/commonjs
|
|
||||||
resolve({
|
|
||||||
browser: true,
|
|
||||||
dedupe: ['svelte', 'svelte/transition', 'svelte/internal']
|
|
||||||
}),
|
|
||||||
commonjs(),
|
|
||||||
|
|
||||||
// In dev mode, call `npm run start` once
|
|
||||||
// the bundle has been generated
|
|
||||||
!production && serve(),
|
|
||||||
|
|
||||||
// Watch the `public` directory and refresh the
|
|
||||||
// browser on changes when not in production
|
|
||||||
!production && livereload('public'),
|
|
||||||
|
|
||||||
// Credit: https://blog.az.sg/posts/svelte-and-ie11/
|
|
||||||
babel({
|
|
||||||
extensions: [ '.js', '.jsx', '.es6', '.es', '.mjs', '.svelte', '.html' ],
|
|
||||||
runtimeHelpers: true,
|
|
||||||
exclude: [ 'node_modules/@babel/**', 'node_modules/core-js/**' ],
|
|
||||||
presets: [
|
|
||||||
[
|
|
||||||
'@babel/preset-env',
|
|
||||||
{
|
|
||||||
targets: '> 0.25%, not dead, IE 11',
|
|
||||||
modules: false,
|
|
||||||
spec: true,
|
|
||||||
useBuiltIns: 'usage',
|
|
||||||
forceAllTransforms: true,
|
|
||||||
corejs: 3,
|
|
||||||
},
|
|
||||||
|
|
||||||
]
|
|
||||||
],
|
|
||||||
plugins: [
|
|
||||||
'@babel/plugin-syntax-dynamic-import',
|
|
||||||
[
|
|
||||||
'@babel/plugin-transform-runtime',
|
|
||||||
{
|
|
||||||
useESModules: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
]
|
|
||||||
}),
|
|
||||||
polyfill(['@webcomponents/webcomponentsjs']),
|
|
||||||
|
|
||||||
// If we're building for production (npm run build
|
|
||||||
// instead of npm run dev), minify
|
|
||||||
production && terser()
|
|
||||||
],
|
|
||||||
watch: {
|
|
||||||
clearScreen: false
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import Modal from 'svelte-simple-modal';
|
|
||||||
import HelloWorld from './components/HelloWorld.svelte'
|
|
||||||
import logo from './logo.png';
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<main>
|
|
||||||
<div class="App">
|
|
||||||
<header class="App-header">
|
|
||||||
<Modal>
|
|
||||||
<img src={logo} class="App-logo" alt="logo" />
|
|
||||||
<p>Welcome to your new <code>wails/svelte</code> project.</p>
|
|
||||||
<HelloWorld/>
|
|
||||||
</Modal>
|
|
||||||
</header>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
:global(body) {
|
|
||||||
margin: 0;
|
|
||||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
|
|
||||||
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
|
|
||||||
sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
.App {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-logo {
|
|
||||||
height: 40vmin;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
.App-logo {
|
|
||||||
animation: App-logo-spin infinite 20s linear;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-header {
|
|
||||||
background-color: #282c34;
|
|
||||||
min-height: 100vh;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-size: calc(10px + 2vmin);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes App-logo-spin {
|
|
||||||
from {
|
|
||||||
transform: rotate(0deg);
|
|
||||||
}
|
|
||||||
to {
|
|
||||||
transform: rotate(360deg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<script>
|
|
||||||
import { getContext } from 'svelte';
|
|
||||||
import ModalContent from './ModalContent.svelte'
|
|
||||||
|
|
||||||
const { open } = getContext('simple-modal');
|
|
||||||
|
|
||||||
const handleOpenModal = () => {
|
|
||||||
window.backend.basic().then((result) => {
|
|
||||||
open(ModalContent, { message: result });
|
|
||||||
});
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<main>
|
|
||||||
<p><button on:click={handleOpenModal}>Hello</button></p>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<style></style>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<script>
|
|
||||||
export let message;
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
{message}
|
|
||||||
</p>
|
|
||||||
|
Before Width: | Height: | Size: 301 KiB |
@@ -1,13 +0,0 @@
|
|||||||
import App from './App.svelte';
|
|
||||||
|
|
||||||
import * as Wails from '@wailsapp/runtime';
|
|
||||||
|
|
||||||
let app;
|
|
||||||
|
|
||||||
Wails.Init(() => {
|
|
||||||
app = new App({
|
|
||||||
target: document.body,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
export default app;
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
module {{.BinaryName}}
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/wailsapp/wails {{.WailsVersion}}
|
|
||||||
)
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/leaanthony/mewn"
|
|
||||||
"github.com/wailsapp/wails"
|
|
||||||
)
|
|
||||||
|
|
||||||
func basic() string {
|
|
||||||
return "World!"
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
js := mewn.String("./frontend/public/build/bundle.js")
|
|
||||||
css := mewn.String("./frontend/public/build/bundle.css")
|
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
|
||||||
Width: 1024,
|
|
||||||
Height: 768,
|
|
||||||
Title: "{{.Name}}",
|
|
||||||
JS: js,
|
|
||||||
CSS: css,
|
|
||||||
Colour: "#131313",
|
|
||||||
})
|
|
||||||
|
|
||||||
app.Bind(basic)
|
|
||||||
app.Run()
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Svelte",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"shortdescription": "A basic Svelte template",
|
|
||||||
"description": "A basic Svelte template",
|
|
||||||
"install": "npm install",
|
|
||||||
"build": "npm run build",
|
|
||||||
"author": "Tim Kipp <timkipp.22.developer@gmail.com>",
|
|
||||||
"created": "2020-09-06 13:06:10.469848 -0700 PDT m=+213.578828559",
|
|
||||||
"frontenddir": "frontend",
|
|
||||||
"serve": "npm run dev",
|
|
||||||
"bridge": "src",
|
|
||||||
"wailsdir": ""
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
# README
|
|
||||||
|
|
||||||
This is an experimental template for vanilla HTML/JS/CSS.
|
|
||||||
|
|
||||||
The webpack rules may need to be adjusted to correctly embed all assets. Babel may also need to be setup correctly.
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"math/rand"
|
|
||||||
|
|
||||||
"github.com/wailsapp/wails"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Counter is what we use for counting
|
|
||||||
type Counter struct {
|
|
||||||
r *wails.Runtime
|
|
||||||
store *wails.Store
|
|
||||||
}
|
|
||||||
|
|
||||||
// WailsInit is called when the component is being initialised
|
|
||||||
func (c *Counter) WailsInit(runtime *wails.Runtime) error {
|
|
||||||
c.r = runtime
|
|
||||||
c.store = runtime.Store.New("Counter", 0)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RandomValue sets the counter to a random value
|
|
||||||
func (c *Counter) RandomValue() {
|
|
||||||
c.store.Set(rand.Intn(1000))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Increment will increment the counter
|
|
||||||
func (c *Counter) Increment() {
|
|
||||||
|
|
||||||
increment := func(data int) int {
|
|
||||||
return data + 1
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the store using the increment function
|
|
||||||
c.store.Update(increment)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decrement will decrement the counter
|
|
||||||
func (c *Counter) Decrement() {
|
|
||||||
|
|
||||||
decrement := func(data int) int {
|
|
||||||
return data - 1
|
|
||||||
}
|
|
||||||
// Update the store using the decrement function
|
|
||||||
c.store.Update(decrement)
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "vanilla",
|
|
||||||
"author": "Lea<l>",
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
|
||||||
"serve": "webpack-dev-server",
|
|
||||||
"build": "npx webpack"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"core-js": "^3.6.4",
|
|
||||||
"regenerator-runtime": "^0.13.3",
|
|
||||||
"@wailsapp/runtime": "^1.0.10"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"babel-eslint": "^10.1.0",
|
|
||||||
"copy-webpack-plugin": "^6.0.2",
|
|
||||||
"eslint": "^6.8.0",
|
|
||||||
"eventsource-polyfill": "^0.9.6",
|
|
||||||
"webpack": "^4.43.0",
|
|
||||||
"webpack-cli": "^3.3.11",
|
|
||||||
"webpack-dev-server": "^3.11.0",
|
|
||||||
"webpack-hot-middleware": "^2.25.0"
|
|
||||||
},
|
|
||||||
"eslintConfig": {
|
|
||||||
"root": true,
|
|
||||||
"env": {
|
|
||||||
"node": true
|
|
||||||
},
|
|
||||||
"extends": [
|
|
||||||
"eslint:recommended"
|
|
||||||
],
|
|
||||||
"rules": {},
|
|
||||||
"parserOptions": {
|
|
||||||
"parser": "babel-eslint"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"browserslist": [
|
|
||||||
"> 1%",
|
|
||||||
"last 2 versions",
|
|
||||||
"not ie <= 8"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<html>
|
|
||||||
<head>
|
|
||||||
<link rel="stylesheet" type="text/css" href="main.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="app"></div>
|
|
||||||
<script src="main.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
import 'core-js/stable';
|
|
||||||
const runtime = require('@wailsapp/runtime');
|
|
||||||
|
|
||||||
// Main entry point
|
|
||||||
function start() {
|
|
||||||
|
|
||||||
var mystore = runtime.Store.New('Counter');
|
|
||||||
|
|
||||||
// Ensure the default app div is 100% wide/high
|
|
||||||
var app = document.getElementById('app');
|
|
||||||
app.style.width = '100%';
|
|
||||||
app.style.height = '100%';
|
|
||||||
|
|
||||||
// Inject html
|
|
||||||
app.innerHTML = `
|
|
||||||
<div class='logo'></div>
|
|
||||||
<div class='container'>
|
|
||||||
<button onClick='window.backend.Counter.Increment()'>
|
|
||||||
Increment Counter
|
|
||||||
</button>
|
|
||||||
<button onClick='window.backend.Counter.Decrement()'>
|
|
||||||
Decrement Counter
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class='result'>Counter: <span id='counter'></span></div>
|
|
||||||
<div class='container'>
|
|
||||||
<input id='newCounter' type="number" value="0"/>
|
|
||||||
<button id='setvalue'>Set Counter Value</button>
|
|
||||||
<button onclick='window.backend.Counter.RandomValue()'>Set to Random Value</button>
|
|
||||||
</div>
|
|
||||||
`;
|
|
||||||
|
|
||||||
// Connect counter value button to Go method
|
|
||||||
document.getElementById('setvalue').onclick = function() {
|
|
||||||
let newValue = parseInt(document.getElementById('newCounter').value,10);
|
|
||||||
mystore.set(newValue);
|
|
||||||
};
|
|
||||||
|
|
||||||
mystore.subscribe( function(state) {
|
|
||||||
document.getElementById('counter').innerText = state;
|
|
||||||
});
|
|
||||||
|
|
||||||
mystore.set(0);
|
|
||||||
};
|
|
||||||
|
|
||||||
// We provide our entrypoint as a callback for runtime.Init
|
|
||||||
runtime.Init(start);
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
const path = require('path');
|
|
||||||
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
|
||||||
|
|
||||||
let imageSizeLimit = 9007199254740991; // Number.MAX_SAFE_INTEGER
|
|
||||||
let sourceDir = path.resolve(__dirname, 'src');
|
|
||||||
let buildDir = path.resolve(__dirname, 'build');
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
entry: {
|
|
||||||
index: path.resolve(sourceDir, 'main.js')
|
|
||||||
},
|
|
||||||
output: {
|
|
||||||
path: buildDir,
|
|
||||||
filename: 'main.js'
|
|
||||||
},
|
|
||||||
optimization: {
|
|
||||||
splitChunks: false
|
|
||||||
},
|
|
||||||
devServer: {
|
|
||||||
disableHostCheck: true,
|
|
||||||
contentBase: path.join(__dirname, 'src'),
|
|
||||||
compress: true,
|
|
||||||
open: true,
|
|
||||||
port: 8090
|
|
||||||
},
|
|
||||||
mode: 'production',
|
|
||||||
module: {
|
|
||||||
rules: [
|
|
||||||
{
|
|
||||||
test: /\.(png|gif|jpg|woff2?|eot|ttf|otf|svg)(\?.*)?$/i,
|
|
||||||
use: [
|
|
||||||
{
|
|
||||||
loader: 'url-loader',
|
|
||||||
options: {
|
|
||||||
limit: imageSizeLimit
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
new CopyWebpackPlugin({
|
|
||||||
patterns: [
|
|
||||||
{
|
|
||||||
from: path.resolve(sourceDir, 'main.css'),
|
|
||||||
to: path.resolve(buildDir, 'main.css')
|
|
||||||
},
|
|
||||||
{
|
|
||||||
from: path.resolve(sourceDir, 'index.html'),
|
|
||||||
to: path.resolve(buildDir, 'index.html')
|
|
||||||
},
|
|
||||||
]
|
|
||||||
})
|
|
||||||
]
|
|
||||||
};
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
module {{.BinaryName}}
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/wailsapp/wails {{.WailsVersion}}
|
|
||||||
)
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/leaanthony/mewn"
|
|
||||||
"github.com/wailsapp/wails"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
js := mewn.String("./frontend/build/main.js")
|
|
||||||
css := mewn.String("./frontend/build/main.css")
|
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
|
||||||
Width: 1024,
|
|
||||||
Height: 768,
|
|
||||||
Title: "{{.Name}}",
|
|
||||||
JS: js,
|
|
||||||
CSS: css,
|
|
||||||
Colour: "#131313",
|
|
||||||
})
|
|
||||||
app.Bind(&Counter{})
|
|
||||||
app.Run()
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Vanilla",
|
|
||||||
"shortdescription": "A Vanilla HTML/JS template",
|
|
||||||
"description": "A basic template using plain html/js and bundled using Webpack 4",
|
|
||||||
"author": "Lea Anthony<lea.anthony@gmail.com>",
|
|
||||||
"created": "2020-06-14",
|
|
||||||
"frontenddir": "frontend",
|
|
||||||
"install": "npm install",
|
|
||||||
"build": "npm run build",
|
|
||||||
"serve": "npm run serve",
|
|
||||||
"bridge": "src"
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
> 1%
|
|
||||||
last 2 versions
|
|
||||||
not dead
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
root: true,
|
|
||||||
env: {
|
|
||||||
node: true
|
|
||||||
},
|
|
||||||
'extends': [
|
|
||||||
'plugin:vue/vue3-essential',
|
|
||||||
'eslint:recommended',
|
|
||||||
'@vue/typescript/recommended'
|
|
||||||
],
|
|
||||||
parserOptions: {
|
|
||||||
ecmaVersion: 2020
|
|
||||||
},
|
|
||||||
rules: {
|
|
||||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
|
||||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
|
|
||||||
},
|
|
||||||
overrides: [
|
|
||||||
{
|
|
||||||
files: [
|
|
||||||
'**/__tests__/*.{j,t}s?(x)',
|
|
||||||
'**/tests/unit/**/*.spec.{j,t}s?(x)'
|
|
||||||
],
|
|
||||||
env: {
|
|
||||||
mocha: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
21
cmd/templates/vue3-full/frontend/.gitignore
vendored
@@ -1,21 +0,0 @@
|
|||||||
.DS_Store
|
|
||||||
node_modules
|
|
||||||
/dist
|
|
||||||
|
|
||||||
# local env files
|
|
||||||
.env.local
|
|
||||||
.env.*.local
|
|
||||||
|
|
||||||
# Log files
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
|
|
||||||
# Editor directories and files
|
|
||||||
.idea
|
|
||||||
.vscode
|
|
||||||
*.suo
|
|
||||||
*.ntvs*
|
|
||||||
*.njsproj
|
|
||||||
*.sln
|
|
||||||
*.sw*
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
# vue basic
|
|
||||||
|
|
||||||
## Project setup
|
|
||||||
|
|
||||||
```
|
|
||||||
npm install
|
|
||||||
```
|
|
||||||
|
|
||||||
### Compiles and hot-reloads for development
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run serve
|
|
||||||
```
|
|
||||||
|
|
||||||
### Compiles and minifies for production
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run build
|
|
||||||
```
|
|
||||||
|
|
||||||
### Run your tests
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run test
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lints and fixes files
|
|
||||||
|
|
||||||
```
|
|
||||||
npm run lint
|
|
||||||
```
|
|
||||||
|
|
||||||
### Customize configuration
|
|
||||||
|
|
||||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "{{.NPMProjectName}}",
|
|
||||||
"author": "{{.Author.Name}}<{{.Author.Email}}>",
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
|
||||||
"serve": "vue-cli-service serve",
|
|
||||||
"build": "vue-cli-service build",
|
|
||||||
"test:unit": "vue-cli-service test:unit",
|
|
||||||
"lint": "vue-cli-service lint"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"vue": "^3.0.0-0",
|
|
||||||
"vue-router": "^4.0.0-0",
|
|
||||||
"regenerator-runtime": "^0.13.7",
|
|
||||||
"@wailsapp/runtime": "^1.1.1"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/chai": "^4.2.12",
|
|
||||||
"@types/mocha": "^8.0.3",
|
|
||||||
"@typescript-eslint/eslint-plugin": "^4.3.0",
|
|
||||||
"@typescript-eslint/parser": "^4.3.0",
|
|
||||||
"@vue/cli-plugin-eslint": "~4.5.6",
|
|
||||||
"@vue/cli-plugin-router": "~4.5.6",
|
|
||||||
"@vue/cli-plugin-typescript": "~4.5.6",
|
|
||||||
"@vue/cli-plugin-unit-mocha": "~4.5.6",
|
|
||||||
"@vue/cli-service": "~4.5.6",
|
|
||||||
"@vue/compiler-sfc": "^3.0.0",
|
|
||||||
"@vue/eslint-config-typescript": "^5.1.0",
|
|
||||||
"@vue/test-utils": "^2.0.0-0",
|
|
||||||
"chai": "^4.2.0",
|
|
||||||
"eslint": "^7.10.0",
|
|
||||||
"eslint-plugin-vue": "^7.0.0",
|
|
||||||
"node-sass": "^4.14.1",
|
|
||||||
"sass-loader": "^10.0.2",
|
|
||||||
"typescript": "~4.0.3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div id=app>
|
|
||||||
<div id="nav">
|
|
||||||
<router-link to="/">Home</router-link> |
|
|
||||||
<router-link to="/about">About</router-link>
|
|
||||||
</div>
|
|
||||||
<router-view/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
#app {
|
|
||||||
font-family: Avenir, Helvetica, Arial, sans-serif;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
text-align: center;
|
|
||||||
color: #2c3e50;
|
|
||||||
}
|
|
||||||
|
|
||||||
#nav {
|
|
||||||
padding: 30px;
|
|
||||||
|
|
||||||
a {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #2c3e50;
|
|
||||||
|
|
||||||
&.router-link-exact-active {
|
|
||||||
color: #42b983;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
Before Width: | Height: | Size: 106 KiB |
@@ -1,34 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="hello">
|
|
||||||
<h1>{{ msg }}</h1>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { defineComponent } from 'vue';
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: 'HelloWorld',
|
|
||||||
props: {
|
|
||||||
msg: String,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
|
||||||
<style scoped lang="scss">
|
|
||||||
h3 {
|
|
||||||
margin: 40px 0 0;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 0 10px;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #42b983;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
import { createApp } from 'vue';
|
|
||||||
import App from './App.vue';
|
|
||||||
import router from './router';
|
|
||||||
import * as Wails from '@wailsapp/runtime';
|
|
||||||
|
|
||||||
Wails.Init(() => {
|
|
||||||
createApp(App).use(router).mount('#app');
|
|
||||||
});
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
import { createRouter, createMemoryHistory, RouteRecordRaw } from 'vue-router'
|
|
||||||
import Home from '../views/Home.vue'
|
|
||||||
import About from '../views/About.vue'
|
|
||||||
|
|
||||||
const routes: Array<RouteRecordRaw> = [
|
|
||||||
{
|
|
||||||
path: '/',
|
|
||||||
name: 'Home',
|
|
||||||
component: Home
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/about',
|
|
||||||
name: 'About',
|
|
||||||
// route level code-splitting
|
|
||||||
// this generates a separate chunk (about.[hash].js) for this route
|
|
||||||
// which is lazy-loaded when the route is visited.
|
|
||||||
// component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
|
|
||||||
component: About
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
const router = createRouter({
|
|
||||||
history: createMemoryHistory(),
|
|
||||||
routes
|
|
||||||
})
|
|
||||||
|
|
||||||
export default router
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
declare module '*.vue' {
|
|
||||||
import { defineComponent } from 'vue'
|
|
||||||
const component: ReturnType<typeof defineComponent>
|
|
||||||
export default component
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="about">
|
|
||||||
<h1>This is an about page</h1>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="home">
|
|
||||||
<img @click="getMessage" alt="Vue logo" src="../assets/appicon.png" :style="{ height: '400px' }"/>
|
|
||||||
<HelloWorld :msg="message" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { ref, defineComponent } from "vue";
|
|
||||||
import HelloWorld from "@/components/HelloWorld.vue"; // @ is an alias to /src
|
|
||||||
|
|
||||||
interface Backend {
|
|
||||||
basic(): Promise<string>;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare global {
|
|
||||||
interface Window {
|
|
||||||
backend: Backend;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default defineComponent({
|
|
||||||
name: "Home",
|
|
||||||
components: {
|
|
||||||
HelloWorld,
|
|
||||||
},
|
|
||||||
setup() {
|
|
||||||
|
|
||||||
const message = ref("Click the Icon");
|
|
||||||
|
|
||||||
const getMessage = () => {
|
|
||||||
window.backend.basic().then(result => {
|
|
||||||
message.value = result;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return { message: message, getMessage: getMessage };
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
import { expect } from 'chai';
|
|
||||||
import { describe, it } from 'mocha';
|
|
||||||
import { shallowMount } from '@vue/test-utils';
|
|
||||||
import HelloWorld from '@/components/HelloWorld.vue';
|
|
||||||
|
|
||||||
describe('HelloWorld.vue', () => {
|
|
||||||
it('renders props.msg when passed', () => {
|
|
||||||
const msg = 'new message';
|
|
||||||
const wrapper = shallowMount(HelloWorld, {
|
|
||||||
props: { msg }
|
|
||||||
});
|
|
||||||
expect(wrapper.text()).to.include(msg);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
{
|
|
||||||
"compilerOptions": {
|
|
||||||
"target": "es5",
|
|
||||||
"module": "esnext",
|
|
||||||
"strict": true,
|
|
||||||
"jsx": "preserve",
|
|
||||||
"importHelpers": true,
|
|
||||||
"moduleResolution": "node",
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"esModuleInterop": true,
|
|
||||||
"allowSyntheticDefaultImports": true,
|
|
||||||
"sourceMap": true,
|
|
||||||
"baseUrl": ".",
|
|
||||||
"types": [
|
|
||||||
"webpack-env",
|
|
||||||
"mocha",
|
|
||||||
"chai"
|
|
||||||
],
|
|
||||||
"paths": {
|
|
||||||
"@/*": [
|
|
||||||
"src/*"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"lib": [
|
|
||||||
"esnext",
|
|
||||||
"dom",
|
|
||||||
"dom.iterable",
|
|
||||||
"scripthost"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include": [
|
|
||||||
"src/**/*.ts",
|
|
||||||
"src/**/*.tsx",
|
|
||||||
"src/**/*.vue",
|
|
||||||
"tests/**/*.ts",
|
|
||||||
"tests/**/*.tsx"
|
|
||||||
],
|
|
||||||
"exclude": [
|
|
||||||
"node_modules"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
let cssConfig = {};
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV == 'production') {
|
|
||||||
cssConfig = {
|
|
||||||
extract: {
|
|
||||||
filename: '[name].css',
|
|
||||||
chunkFilename: '[name].css'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
chainWebpack: config => {
|
|
||||||
let limit = 9999999999999999;
|
|
||||||
config.module
|
|
||||||
.rule('images')
|
|
||||||
.test(/\.(png|gif|jpg)(\?.*)?$/i)
|
|
||||||
.use('url-loader')
|
|
||||||
.loader('url-loader')
|
|
||||||
.tap(options => Object.assign(options, { limit: limit }));
|
|
||||||
config.module
|
|
||||||
.rule('fonts')
|
|
||||||
.test(/\.(woff2?|eot|ttf|otf|svg)(\?.*)?$/i)
|
|
||||||
.use('url-loader')
|
|
||||||
.loader('url-loader')
|
|
||||||
.options({
|
|
||||||
limit: limit
|
|
||||||
});
|
|
||||||
},
|
|
||||||
css: cssConfig,
|
|
||||||
configureWebpack: {
|
|
||||||
output: {
|
|
||||||
filename: '[name].js'
|
|
||||||
},
|
|
||||||
optimization: {
|
|
||||||
splitChunks: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
devServer: {
|
|
||||||
disableHostCheck: true
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
module {{.BinaryName}}
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/wailsapp/wails {{.WailsVersion}}
|
|
||||||
)
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/leaanthony/mewn"
|
|
||||||
"github.com/wailsapp/wails"
|
|
||||||
)
|
|
||||||
|
|
||||||
func basic() string {
|
|
||||||
return "Hello World!"
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
|
|
||||||
js := mewn.String("./frontend/dist/app.js")
|
|
||||||
css := mewn.String("./frontend/dist/app.css")
|
|
||||||
|
|
||||||
app := wails.CreateApp(&wails.AppConfig{
|
|
||||||
Width: 1024,
|
|
||||||
Height: 768,
|
|
||||||
Title: "{{.Name}}",
|
|
||||||
JS: js,
|
|
||||||
CSS: css,
|
|
||||||
Colour: "#131313",
|
|
||||||
})
|
|
||||||
app.Bind(basic)
|
|
||||||
app.Run()
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Vue3 Full",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"shortdescription": "Vue 3, Vuex, Vue-router, and Webpack4",
|
|
||||||
"description": "Vue3.0.0 Vuex, Vue-router, and Webpack 4",
|
|
||||||
"install": "npm install",
|
|
||||||
"build": "npm run build",
|
|
||||||
"author": "Kyle Muchmore <kmuchmor@gmail.com>",
|
|
||||||
"created": "2020-09-24 21:18:55.09417 +0000 UTC m=+90.125590001",
|
|
||||||
"frontenddir": "frontend",
|
|
||||||
"serve": "npm run serve",
|
|
||||||
"bridge": "src",
|
|
||||||
"wailsdir": "",
|
|
||||||
"platforms": ["linux", "darwin"]
|
|
||||||
}
|
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
"core-js": "^3.6.4",
|
"core-js": "^3.6.4",
|
||||||
"regenerator-runtime": "^0.13.3",
|
"regenerator-runtime": "^0.13.3",
|
||||||
"vue": "^2.6.11",
|
"vue": "^2.6.11",
|
||||||
"vuetify": "^2.3.15",
|
"vuetify": "^2.2.15",
|
||||||
"@wailsapp/runtime": "^1.0.10"
|
"@wailsapp/runtime": "^1.0.10"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -24,13 +24,13 @@
|
|||||||
<v-app-bar-nav-icon @click.stop="drawer = !drawer"></v-app-bar-nav-icon>
|
<v-app-bar-nav-icon @click.stop="drawer = !drawer"></v-app-bar-nav-icon>
|
||||||
<v-toolbar-title>Application</v-toolbar-title>
|
<v-toolbar-title>Application</v-toolbar-title>
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
<v-main>
|
<v-content>
|
||||||
<v-container fluid class="px-0">
|
<v-container fluid class="px-0">
|
||||||
<v-layout justify-center align-center class="px-0">
|
<v-layout justify-center align-center class="px-0">
|
||||||
<hello-world></hello-world>
|
<hello-world></hello-world>
|
||||||
</v-layout>
|
</v-layout>
|
||||||
</v-container>
|
</v-container>
|
||||||
</v-main>
|
</v-content>
|
||||||
<v-footer app fixed>
|
<v-footer app fixed>
|
||||||
<span style="margin-left:1em">© You</span>
|
<span style="margin-left:1em">© You</span>
|
||||||
</v-footer>
|
</v-footer>
|
||||||
@@ -57,4 +57,4 @@
|
|||||||
.logo {
|
.logo {
|
||||||
width: 16em;
|
width: 16em;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
// Version - Wails version
|
// Version - Wails version
|
||||||
const Version = "v1.8.1-pre6"
|
const Version = "v1.6.0-pre3"
|
||||||
|
|||||||
@@ -26,13 +26,9 @@ func init() {
|
|||||||
var packageApp = false
|
var packageApp = false
|
||||||
var forceRebuild = false
|
var forceRebuild = false
|
||||||
var debugMode = false
|
var debugMode = false
|
||||||
var usefirebug = false
|
|
||||||
var gopath = ""
|
|
||||||
var typescriptFilename = ""
|
var typescriptFilename = ""
|
||||||
var verbose = false
|
var verbose = false
|
||||||
var platform = ""
|
var platform = ""
|
||||||
var ldflags = ""
|
|
||||||
var tags = ""
|
|
||||||
|
|
||||||
buildSpinner := spinner.NewSpinner()
|
buildSpinner := spinner.NewSpinner()
|
||||||
buildSpinner.SetSpinSpeed(50)
|
buildSpinner.SetSpinSpeed(50)
|
||||||
@@ -43,12 +39,8 @@ func init() {
|
|||||||
BoolFlag("p", "Package application on successful build", &packageApp).
|
BoolFlag("p", "Package application on successful build", &packageApp).
|
||||||
BoolFlag("f", "Force rebuild of application components", &forceRebuild).
|
BoolFlag("f", "Force rebuild of application components", &forceRebuild).
|
||||||
BoolFlag("d", "Build in Debug mode", &debugMode).
|
BoolFlag("d", "Build in Debug mode", &debugMode).
|
||||||
BoolFlag("firebug", "Enable firebug console for debug builds", &usefirebug).
|
|
||||||
BoolFlag("verbose", "Verbose output", &verbose).
|
BoolFlag("verbose", "Verbose output", &verbose).
|
||||||
StringFlag("t", "Generate Typescript definitions to given file (at runtime)", &typescriptFilename).
|
StringFlag("t", "Generate Typescript definitions to given file (at runtime)", &typescriptFilename)
|
||||||
StringFlag("ldflags", "Extra options for -ldflags", &ldflags).
|
|
||||||
StringFlag("gopath", "Specify your GOPATH location. Mounted to /go during cross-compilation.", &gopath).
|
|
||||||
StringFlag("tags", "Build tags to pass to the go compiler (quoted and space separated)", &tags)
|
|
||||||
|
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
for _, plat := range getSupportedPlatforms() {
|
for _, plat := range getSupportedPlatforms() {
|
||||||
@@ -73,7 +65,6 @@ func init() {
|
|||||||
// Project options
|
// Project options
|
||||||
projectOptions := &cmd.ProjectOptions{}
|
projectOptions := &cmd.ProjectOptions{}
|
||||||
projectOptions.Verbose = verbose
|
projectOptions.Verbose = verbose
|
||||||
projectOptions.UseFirebug = usefirebug
|
|
||||||
|
|
||||||
// Check we are in project directory
|
// Check we are in project directory
|
||||||
// Check project.json loads correctly
|
// Check project.json loads correctly
|
||||||
@@ -83,11 +74,6 @@ func init() {
|
|||||||
return fmt.Errorf("Unable to find 'project.json'. Please check you are in a Wails project directory")
|
return fmt.Errorf("Unable to find 'project.json'. Please check you are in a Wails project directory")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that this platform is supported
|
|
||||||
if !projectOptions.PlatformSupported() {
|
|
||||||
logger.Yellow("WARNING: This project is unsupported on %s - it probably won't work!\n Valid platforms: %s\n", runtime.GOOS, strings.Join(projectOptions.Platforms, ", "))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set cross-compile
|
// Set cross-compile
|
||||||
projectOptions.Platform = runtime.GOOS
|
projectOptions.Platform = runtime.GOOS
|
||||||
if len(platform) > 0 {
|
if len(platform) > 0 {
|
||||||
@@ -98,7 +84,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !supported {
|
if !supported {
|
||||||
return fmt.Errorf("unsupported platform '%s' specified.\nPlease run `wails build -h` to see the supported platform/architecture options", platform)
|
return fmt.Errorf("Unsupported platform '%s' specified.\nPlease run `wails build -h` to see the supported platform/architecture options.", platform)
|
||||||
}
|
}
|
||||||
|
|
||||||
projectOptions.CrossCompile = true
|
projectOptions.CrossCompile = true
|
||||||
@@ -107,13 +93,6 @@ func init() {
|
|||||||
projectOptions.Architecture = plat[1]
|
projectOptions.Architecture = plat[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add ldflags
|
|
||||||
projectOptions.LdFlags = ldflags
|
|
||||||
projectOptions.GoPath = gopath
|
|
||||||
|
|
||||||
// Add tags
|
|
||||||
projectOptions.Tags = tags
|
|
||||||
|
|
||||||
// Validate config
|
// Validate config
|
||||||
// Check if we have a frontend
|
// Check if we have a frontend
|
||||||
err = cmd.ValidateFrontendConfig(projectOptions)
|
err = cmd.ValidateFrontendConfig(projectOptions)
|
||||||
@@ -197,10 +176,6 @@ func init() {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if projectOptions.Platform == "windows" {
|
|
||||||
logger.Yellow("*** Please note: Windows builds use mshtml which is only compatible with IE11. For more information, please read https://wails.app/guides/windows/ ***")
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.Yellow("Awesome! Project '%s' built!", projectOptions.Name)
|
logger.Yellow("Awesome! Project '%s' built!", projectOptions.Name)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ func init() {
|
|||||||
|
|
||||||
// Project options
|
// Project options
|
||||||
projectOptions := &cmd.ProjectOptions{}
|
projectOptions := &cmd.ProjectOptions{}
|
||||||
|
projectOptions.Verbose = verbose
|
||||||
|
projectOptions.Platform = runtime.GOOS
|
||||||
|
|
||||||
// Check we are in project directory
|
// Check we are in project directory
|
||||||
// Check project.json loads correctly
|
// Check project.json loads correctly
|
||||||
@@ -44,10 +46,6 @@ func init() {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set project options
|
|
||||||
projectOptions.Verbose = verbose
|
|
||||||
projectOptions.Platform = runtime.GOOS
|
|
||||||
|
|
||||||
// Save project directory
|
// Save project directory
|
||||||
projectDir := fs.Cwd()
|
projectDir := fs.Cwd()
|
||||||
|
|
||||||
@@ -70,7 +68,6 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger.Yellow("Awesome! Project '%s' built!", projectOptions.Name)
|
logger.Yellow("Awesome! Project '%s' built!", projectOptions.Name)
|
||||||
|
|
||||||
return cmd.ServeProject(projectOptions, logger)
|
return cmd.ServeProject(projectOptions, logger)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/leaanthony/spinner"
|
"github.com/leaanthony/spinner"
|
||||||
|
"github.com/mitchellh/go-homedir"
|
||||||
"github.com/wailsapp/wails/cmd"
|
"github.com/wailsapp/wails/cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -146,7 +146,7 @@ func updateToVersion(targetVersion *cmd.SemanticVersion, force bool) error {
|
|||||||
updateSpinner.Start("Installing Wails " + desiredVersion)
|
updateSpinner.Start("Installing Wails " + desiredVersion)
|
||||||
|
|
||||||
// Run command in non module directory
|
// Run command in non module directory
|
||||||
homeDir, err := os.UserHomeDir()
|
homeDir, err := homedir.Dir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Cannot find home directory! Please file a bug report!")
|
log.Fatal("Cannot find home directory! Please file a bug report!")
|
||||||
}
|
}
|
||||||
|
|||||||
8
go.mod
@@ -14,18 +14,20 @@ require (
|
|||||||
github.com/leaanthony/spinner v0.5.3
|
github.com/leaanthony/spinner v0.5.3
|
||||||
github.com/mattn/go-colorable v0.1.1 // indirect
|
github.com/mattn/go-colorable v0.1.1 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.7 // indirect
|
github.com/mattn/go-isatty v0.0.7 // indirect
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
|
||||||
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4
|
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4
|
||||||
github.com/pkg/errors v0.8.1 // indirect
|
github.com/pkg/errors v0.8.1 // indirect
|
||||||
github.com/sirupsen/logrus v1.4.1
|
github.com/sirupsen/logrus v1.4.1
|
||||||
github.com/stretchr/testify v1.3.0 // indirect
|
github.com/stretchr/testify v1.3.0 // indirect
|
||||||
github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba
|
github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba
|
||||||
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 // indirect
|
||||||
golang.org/x/image v0.0.0-20200430140353-33d19683fad8
|
golang.org/x/image v0.0.0-20200430140353-33d19683fad8
|
||||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344 // indirect
|
golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5 // indirect
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd
|
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862
|
||||||
golang.org/x/text v0.3.0
|
golang.org/x/text v0.3.0
|
||||||
gopkg.in/AlecAivazis/survey.v1 v1.8.4
|
gopkg.in/AlecAivazis/survey.v1 v1.8.4
|
||||||
gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22
|
gopkg.in/yaml.v3 v3.0.0-20190709130402-674ba3eaed22
|
||||||
)
|
)
|
||||||
|
|
||||||
go 1.13
|
go 1.12
|
||||||
|
|||||||
14
go.sum
@@ -46,6 +46,8 @@ github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc
|
|||||||
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
|
||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||||
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98=
|
github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98=
|
||||||
@@ -66,21 +68,21 @@ github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba h1:2DHfQOxcpWdGf5
|
|||||||
github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba/go.mod h1:iLnlXG2Pakcii2CU0cbY07DRCSvpWNa7nFxtevhOChk=
|
github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba/go.mod h1:iLnlXG2Pakcii2CU0cbY07DRCSvpWNa7nFxtevhOChk=
|
||||||
golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529 h1:iMGN4xG0cnqj3t+zOM8wUB0BiPKHEwSxEZCvzcbZuvk=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw=
|
golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw=
|
||||||
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
|
golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5 h1:6M3SDHlHHDCx2PcQw3S4KsR170vGqDhJDOmpVd4Hjak=
|
||||||
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20190509222800-a4d6f7feada5/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180606202747-9527bec2660b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
|
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862 h1:rM0ROo5vb9AdYJi1110yjWGMej9ITfKddS89P3Fkhug=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190509141414-a5b02f93d862/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
gopkg.in/AlecAivazis/survey.v1 v1.8.4 h1:10xXXN3wgIhPheb5NI58zFgZv32Ana7P3Tl4shW+0Qc=
|
gopkg.in/AlecAivazis/survey.v1 v1.8.4 h1:10xXXN3wgIhPheb5NI58zFgZv32Ana7P3Tl4shW+0Qc=
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ func (b *boundMethod) processWailsInit() error {
|
|||||||
// It must be *wails.Runtime
|
// It must be *wails.Runtime
|
||||||
inputName := b.inputs[0].String()
|
inputName := b.inputs[0].String()
|
||||||
b.log.Debugf("WailsInit input type: %s", inputName)
|
b.log.Debugf("WailsInit input type: %s", inputName)
|
||||||
if inputName != "*runtime.Runtime" {
|
if inputName != "*wails.Runtime" {
|
||||||
return fmt.Errorf("Invalid WailsInit() definition. Expected input to be wails.Runtime, but got %s", inputName)
|
return fmt.Errorf("Invalid WailsInit() definition. Expected input to be wails.Runtime, but got %s", inputName)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +219,7 @@ func (b *boundMethod) processWailsInit() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *boundMethod) processWailsShutdown() error {
|
func (b *boundMethod) processWailsShutdown() error {
|
||||||
// We must not have any inputs
|
// We must have only 1 input, it must be *wails.Runtime
|
||||||
if len(b.inputs) != 0 {
|
if len(b.inputs) != 0 {
|
||||||
return fmt.Errorf("Invalid WailsShutdown() definition. Expected 0 inputs, but got %d", len(b.inputs))
|
return fmt.Errorf("Invalid WailsShutdown() definition. Expected 0 inputs, but got %d", len(b.inputs))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
type Renderer interface {
|
type Renderer interface {
|
||||||
Initialise(AppConfig, IPCManager, EventManager) error
|
Initialise(AppConfig, IPCManager, EventManager) error
|
||||||
Run() error
|
Run() error
|
||||||
|
EnableConsole()
|
||||||
|
|
||||||
// Binding
|
// Binding
|
||||||
NewBinding(bindingName string) error
|
NewBinding(bindingName string) error
|
||||||
@@ -16,9 +17,9 @@ type Renderer interface {
|
|||||||
NotifyEvent(eventData *messages.EventData) error
|
NotifyEvent(eventData *messages.EventData) error
|
||||||
|
|
||||||
// Dialog Runtime
|
// Dialog Runtime
|
||||||
SelectFile(title string, filter string) string
|
SelectFile() string
|
||||||
SelectDirectory() string
|
SelectDirectory() string
|
||||||
SelectSaveFile(title string, filter string) string
|
SelectSaveFile() string
|
||||||
|
|
||||||
// Window Runtime
|
// Window Runtime
|
||||||
SetColour(string) error
|
SetColour(string) error
|
||||||
|
|||||||
@@ -56,6 +56,10 @@ func (h *Bridge) Initialise(appConfig interfaces.AppConfig, ipcManager interface
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EnableConsole not needed for bridge!
|
||||||
|
func (h *Bridge) EnableConsole() {
|
||||||
|
}
|
||||||
|
|
||||||
func (h *Bridge) wsBridgeHandler(w http.ResponseWriter, r *http.Request) {
|
func (h *Bridge) wsBridgeHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
conn, err := websocket.Upgrade(w, r, w.Header(), 1024, 1024)
|
conn, err := websocket.Upgrade(w, r, w.Header(), 1024, 1024)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -110,7 +114,7 @@ func (h *Bridge) NewBinding(methodName string) error {
|
|||||||
|
|
||||||
// SelectFile is unsupported for Bridge but required
|
// SelectFile is unsupported for Bridge but required
|
||||||
// for the Renderer interface
|
// for the Renderer interface
|
||||||
func (h *Bridge) SelectFile(title string, filter string) string {
|
func (h *Bridge) SelectFile() string {
|
||||||
h.log.Warn("SelectFile() unsupported in bridge mode")
|
h.log.Warn("SelectFile() unsupported in bridge mode")
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@@ -124,7 +128,7 @@ func (h *Bridge) SelectDirectory() string {
|
|||||||
|
|
||||||
// SelectSaveFile is unsupported for Bridge but required
|
// SelectSaveFile is unsupported for Bridge but required
|
||||||
// for the Renderer interface
|
// for the Renderer interface
|
||||||
func (h *Bridge) SelectSaveFile(title string, filter string) string {
|
func (h *Bridge) SelectSaveFile() string {
|
||||||
h.log.Warn("SelectSaveFile() unsupported in bridge mode")
|
h.log.Warn("SelectSaveFile() unsupported in bridge mode")
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@@ -148,19 +152,12 @@ func (h *Bridge) NotifyEvent(event *messages.EventData) error {
|
|||||||
// Marshall the data
|
// Marshall the data
|
||||||
data, err = json.Marshal(event.Data)
|
data, err = json.Marshal(event.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.log.Errorf("Cannot marshal JSON data in event: %s ", err.Error())
|
h.log.Errorf("Cannot unmarshall JSON data in event: %s ", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Double encode data to ensure everything is escaped correctly.
|
message := fmt.Sprintf("window.wails._.Notify('%s','%s')", event.Name, data)
|
||||||
data, err = json.Marshal(string(data))
|
|
||||||
if err != nil {
|
|
||||||
h.log.Errorf("Cannot marshal JSON data in event: %s ", err.Error())
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
message := "window.wails._.Notify('" + event.Name + "'," + string(data) + ")"
|
|
||||||
dead := []*session{}
|
dead := []*session{}
|
||||||
for _, session := range h.sessions {
|
for _, session := range h.sessions {
|
||||||
err := session.evalJS(message, notifyMessage)
|
err := session.evalJS(message, notifyMessage)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package renderer
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/leaanthony/mewn"
|
"github.com/leaanthony/mewn"
|
||||||
@@ -49,7 +50,7 @@ func (s *session) Identifier() string {
|
|||||||
|
|
||||||
func (s *session) sendMessage(msg string) error {
|
func (s *session) sendMessage(msg string) error {
|
||||||
if !s.done {
|
if !s.done {
|
||||||
s.writeChan <- []byte(msg)
|
s.writeChan <- *(*[]byte)(unsafe.Pointer(&msg))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,17 +18,14 @@ import (
|
|||||||
|
|
||||||
// WebView defines the main webview application window
|
// WebView defines the main webview application window
|
||||||
// Default values in []
|
// Default values in []
|
||||||
|
|
||||||
// UseFirebug indicates whether to inject the firebug console
|
|
||||||
var UseFirebug = ""
|
|
||||||
|
|
||||||
type WebView struct {
|
type WebView struct {
|
||||||
window wv.WebView // The webview object
|
window wv.WebView // The webview object
|
||||||
ipc interfaces.IPCManager
|
ipc interfaces.IPCManager
|
||||||
log *logger.CustomLogger
|
log *logger.CustomLogger
|
||||||
config interfaces.AppConfig
|
config interfaces.AppConfig
|
||||||
eventManager interfaces.EventManager
|
eventManager interfaces.EventManager
|
||||||
bindingCache []string
|
bindingCache []string
|
||||||
|
enableConsole bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewWebView returns a new WebView struct
|
// NewWebView returns a new WebView struct
|
||||||
@@ -107,6 +104,11 @@ func (w *WebView) evalJS(js string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EnableConsole enables the console!
|
||||||
|
func (w *WebView) EnableConsole() {
|
||||||
|
w.enableConsole = true
|
||||||
|
}
|
||||||
|
|
||||||
// Escape the Javascripts!
|
// Escape the Javascripts!
|
||||||
func escapeJS(js string) (string, error) {
|
func escapeJS(js string) (string, error) {
|
||||||
result := strings.Replace(js, "\\", "\\\\", -1)
|
result := strings.Replace(js, "\\", "\\\\", -1)
|
||||||
@@ -177,9 +179,10 @@ func (w *WebView) Run() error {
|
|||||||
w.log.Info("Running...")
|
w.log.Info("Running...")
|
||||||
|
|
||||||
// Inject firebug in debug mode on Windows
|
// Inject firebug in debug mode on Windows
|
||||||
if UseFirebug != "" {
|
if w.enableConsole {
|
||||||
w.log.Debug("Injecting Firebug")
|
w.log.Debug("Enabling Wails console")
|
||||||
w.evalJS(`window.usefirebug=true;`)
|
console := mewn.String("../../runtime/assets/console.js")
|
||||||
|
w.evalJS(console)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Runtime assets
|
// Runtime assets
|
||||||
@@ -242,7 +245,7 @@ func (w *WebView) NewBinding(methodName string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SelectFile opens a dialog that allows the user to select a file
|
// SelectFile opens a dialog that allows the user to select a file
|
||||||
func (w *WebView) SelectFile(title string, filter string) string {
|
func (w *WebView) SelectFile() string {
|
||||||
var result string
|
var result string
|
||||||
|
|
||||||
// We need to run this on the main thread, however Dispatch is
|
// We need to run this on the main thread, however Dispatch is
|
||||||
@@ -252,7 +255,7 @@ func (w *WebView) SelectFile(title string, filter string) string {
|
|||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
w.window.Dispatch(func() {
|
w.window.Dispatch(func() {
|
||||||
result = w.window.Dialog(wv.DialogTypeOpen, 0, title, "", filter)
|
result = w.window.Dialog(wv.DialogTypeOpen, 0, "Select File", "")
|
||||||
wg.Done()
|
wg.Done()
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
@@ -270,7 +273,7 @@ func (w *WebView) SelectDirectory() string {
|
|||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
w.window.Dispatch(func() {
|
w.window.Dispatch(func() {
|
||||||
result = w.window.Dialog(wv.DialogTypeOpen, wv.DialogFlagDirectory, "Select Directory", "", "")
|
result = w.window.Dialog(wv.DialogTypeOpen, wv.DialogFlagDirectory, "Select Directory", "")
|
||||||
wg.Done()
|
wg.Done()
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
@@ -279,7 +282,7 @@ func (w *WebView) SelectDirectory() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SelectSaveFile opens a dialog that allows the user to select a file to save
|
// SelectSaveFile opens a dialog that allows the user to select a file to save
|
||||||
func (w *WebView) SelectSaveFile(title string, filter string) string {
|
func (w *WebView) SelectSaveFile() string {
|
||||||
var result string
|
var result string
|
||||||
// We need to run this on the main thread, however Dispatch is
|
// We need to run this on the main thread, however Dispatch is
|
||||||
// non-blocking so we launch this in a goroutine and wait for
|
// non-blocking so we launch this in a goroutine and wait for
|
||||||
@@ -288,7 +291,7 @@ func (w *WebView) SelectSaveFile(title string, filter string) string {
|
|||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
w.window.Dispatch(func() {
|
w.window.Dispatch(func() {
|
||||||
result = w.window.Dialog(wv.DialogTypeSave, 0, title, "", filter)
|
result = w.window.Dialog(wv.DialogTypeSave, 0, "Save file", "")
|
||||||
wg.Done()
|
wg.Done()
|
||||||
})
|
})
|
||||||
}()
|
}()
|
||||||
@@ -326,14 +329,7 @@ func (w *WebView) NotifyEvent(event *messages.EventData) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Double encode data to ensure everything is escaped correctly.
|
message := fmt.Sprintf("wails._.Notify('%s','%s')", event.Name, data)
|
||||||
data, err = json.Marshal(string(data))
|
|
||||||
if err != nil {
|
|
||||||
w.log.Errorf("Cannot marshal JSON data in event: %s ", err.Error())
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
message := "window.wails._.Notify('" + event.Name + "'," + string(data) + ")"
|
|
||||||
return w.evalJS(message)
|
return w.evalJS(message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -74,9 +74,9 @@ static inline void CgoWebViewSetColor(void *w, uint8_t r, uint8_t g, uint8_t b,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline void CgoDialog(void *w, int dlgtype, int flags,
|
static inline void CgoDialog(void *w, int dlgtype, int flags,
|
||||||
char *title, char *arg, char *res, size_t ressz, char *filter) {
|
char *title, char *arg, char *res, size_t ressz) {
|
||||||
webview_dialog(w, dlgtype, flags,
|
webview_dialog(w, dlgtype, flags,
|
||||||
(const char*)title, (const char*) arg, res, ressz, filter);
|
(const char*)title, (const char*) arg, res, ressz);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int CgoWebViewEval(void *w, char *js) {
|
static inline int CgoWebViewEval(void *w, char *js) {
|
||||||
@@ -186,7 +186,7 @@ type WebView interface {
|
|||||||
// Dialog() opens a system dialog of the given type and title. String
|
// Dialog() opens a system dialog of the given type and title. String
|
||||||
// argument can be provided for certain dialogs, such as alert boxes. For
|
// argument can be provided for certain dialogs, such as alert boxes. For
|
||||||
// alert boxes argument is a message inside the dialog box.
|
// alert boxes argument is a message inside the dialog box.
|
||||||
Dialog(dlgType DialogType, flags int, title string, arg string, filter string) string
|
Dialog(dlgType DialogType, flags int, title string, arg string) string
|
||||||
// Terminate() breaks the main UI loop. This method must be called from the main thread
|
// Terminate() breaks the main UI loop. This method must be called from the main thread
|
||||||
// only. See Dispatch() for more details.
|
// only. See Dispatch() for more details.
|
||||||
Terminate()
|
Terminate()
|
||||||
@@ -311,7 +311,7 @@ func (w *webview) SetFullscreen(fullscreen bool) {
|
|||||||
C.CgoWebViewSetFullscreen(w.w, C.int(boolToInt(fullscreen)))
|
C.CgoWebViewSetFullscreen(w.w, C.int(boolToInt(fullscreen)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *webview) Dialog(dlgType DialogType, flags int, title string, arg string, filter string) string {
|
func (w *webview) Dialog(dlgType DialogType, flags int, title string, arg string) string {
|
||||||
const maxPath = 4096
|
const maxPath = 4096
|
||||||
titlePtr := C.CString(title)
|
titlePtr := C.CString(title)
|
||||||
defer C.free(unsafe.Pointer(titlePtr))
|
defer C.free(unsafe.Pointer(titlePtr))
|
||||||
@@ -319,10 +319,8 @@ func (w *webview) Dialog(dlgType DialogType, flags int, title string, arg string
|
|||||||
defer C.free(unsafe.Pointer(argPtr))
|
defer C.free(unsafe.Pointer(argPtr))
|
||||||
resultPtr := (*C.char)(C.calloc((C.size_t)(unsafe.Sizeof((*C.char)(nil))), (C.size_t)(maxPath)))
|
resultPtr := (*C.char)(C.calloc((C.size_t)(unsafe.Sizeof((*C.char)(nil))), (C.size_t)(maxPath)))
|
||||||
defer C.free(unsafe.Pointer(resultPtr))
|
defer C.free(unsafe.Pointer(resultPtr))
|
||||||
filterPtr := C.CString(filter)
|
|
||||||
defer C.free(unsafe.Pointer(filterPtr))
|
|
||||||
C.CgoDialog(w.w, C.int(dlgType), C.int(flags), titlePtr,
|
C.CgoDialog(w.w, C.int(dlgType), C.int(flags), titlePtr,
|
||||||
argPtr, resultPtr, C.size_t(maxPath), filterPtr)
|
argPtr, resultPtr, C.size_t(maxPath))
|
||||||
return C.GoString(resultPtr)
|
return C.GoString(resultPtr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ struct webview_priv
|
|||||||
WEBVIEW_API void webview_dialog(struct webview *w,
|
WEBVIEW_API void webview_dialog(struct webview *w,
|
||||||
enum webview_dialog_type dlgtype, int flags,
|
enum webview_dialog_type dlgtype, int flags,
|
||||||
const char *title, const char *arg,
|
const char *title, const char *arg,
|
||||||
char *result, size_t resultsz, char *filter);
|
char *result, size_t resultsz);
|
||||||
WEBVIEW_API void webview_dispatch(struct webview *w, webview_dispatch_fn fn,
|
WEBVIEW_API void webview_dispatch(struct webview *w, webview_dispatch_fn fn,
|
||||||
void *arg);
|
void *arg);
|
||||||
WEBVIEW_API void webview_terminate(struct webview *w);
|
WEBVIEW_API void webview_terminate(struct webview *w);
|
||||||
@@ -418,7 +418,7 @@ struct webview_priv
|
|||||||
WEBVIEW_API void webview_dialog(struct webview *w,
|
WEBVIEW_API void webview_dialog(struct webview *w,
|
||||||
enum webview_dialog_type dlgtype, int flags,
|
enum webview_dialog_type dlgtype, int flags,
|
||||||
const char *title, const char *arg,
|
const char *title, const char *arg,
|
||||||
char *result, size_t resultsz, char *filter)
|
char *result, size_t resultsz)
|
||||||
{
|
{
|
||||||
GtkWidget *dlg;
|
GtkWidget *dlg;
|
||||||
if (result != NULL)
|
if (result != NULL)
|
||||||
@@ -438,17 +438,6 @@ struct webview_priv
|
|||||||
"_Cancel", GTK_RESPONSE_CANCEL,
|
"_Cancel", GTK_RESPONSE_CANCEL,
|
||||||
(dlgtype == WEBVIEW_DIALOG_TYPE_OPEN ? "_Open" : "_Save"),
|
(dlgtype == WEBVIEW_DIALOG_TYPE_OPEN ? "_Open" : "_Save"),
|
||||||
GTK_RESPONSE_ACCEPT, NULL);
|
GTK_RESPONSE_ACCEPT, NULL);
|
||||||
if (filter[0] != '\0') {
|
|
||||||
GtkFileFilter *file_filter = gtk_file_filter_new();
|
|
||||||
gchar **filters = g_strsplit(filter, ",", -1);
|
|
||||||
gint i;
|
|
||||||
for(i = 0; filters && filters[i]; i++) {
|
|
||||||
gtk_file_filter_add_pattern(file_filter, filters[i]);
|
|
||||||
}
|
|
||||||
gtk_file_filter_set_name(file_filter, filter);
|
|
||||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dlg), file_filter);
|
|
||||||
g_strfreev(filters);
|
|
||||||
}
|
|
||||||
gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dlg), FALSE);
|
gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dlg), FALSE);
|
||||||
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dlg), FALSE);
|
gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dlg), FALSE);
|
||||||
gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dlg), TRUE);
|
gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dlg), TRUE);
|
||||||
@@ -1431,13 +1420,6 @@ struct webview_priv
|
|||||||
style = WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU;
|
style = WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scale
|
|
||||||
// Credit: https://github.com/webview/webview/issues/54#issuecomment-379528243
|
|
||||||
HDC hDC = GetDC(NULL);
|
|
||||||
w->width = GetDeviceCaps(hDC, 88)*w->width/96.0;
|
|
||||||
w->height = GetDeviceCaps(hDC, 90)*w->height/96.0;
|
|
||||||
ReleaseDC(NULL, hDC);
|
|
||||||
|
|
||||||
rect.left = 0;
|
rect.left = 0;
|
||||||
rect.top = 0;
|
rect.top = 0;
|
||||||
rect.right = w->width;
|
rect.right = w->width;
|
||||||
@@ -1800,7 +1782,7 @@ struct webview_priv
|
|||||||
WEBVIEW_API void webview_dialog(struct webview *w,
|
WEBVIEW_API void webview_dialog(struct webview *w,
|
||||||
enum webview_dialog_type dlgtype, int flags,
|
enum webview_dialog_type dlgtype, int flags,
|
||||||
const char *title, const char *arg,
|
const char *title, const char *arg,
|
||||||
char *result, size_t resultsz, char *filter)
|
char *result, size_t resultsz)
|
||||||
{
|
{
|
||||||
if (dlgtype == WEBVIEW_DIALOG_TYPE_OPEN ||
|
if (dlgtype == WEBVIEW_DIALOG_TYPE_OPEN ||
|
||||||
dlgtype == WEBVIEW_DIALOG_TYPE_SAVE)
|
dlgtype == WEBVIEW_DIALOG_TYPE_SAVE)
|
||||||
@@ -1840,32 +1822,6 @@ struct webview_priv
|
|||||||
FOS_NOTESTFILECREATE | FOS_NODEREFERENCELINKS |
|
FOS_NOTESTFILECREATE | FOS_NODEREFERENCELINKS |
|
||||||
FOS_FORCESHOWHIDDEN | FOS_DEFAULTNOMINIMODE;
|
FOS_FORCESHOWHIDDEN | FOS_DEFAULTNOMINIMODE;
|
||||||
}
|
}
|
||||||
if (filter[0] != '\0')
|
|
||||||
{
|
|
||||||
int count;
|
|
||||||
int i=0;
|
|
||||||
char* token;
|
|
||||||
char* filter_dup = strdup(filter);
|
|
||||||
for (count=1; filter[count]; filter[count]==',' ? count++ : *filter++);
|
|
||||||
COMDLG_FILTERSPEC rgSpec[count];
|
|
||||||
char* filters[count];
|
|
||||||
token = strtok(filter_dup, ",");
|
|
||||||
while(token != NULL)
|
|
||||||
{
|
|
||||||
filters[i] = token;
|
|
||||||
token = strtok(NULL, ",");
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
for (int i=0; i < count; i++) {
|
|
||||||
wchar_t *wFilter = (wchar_t *)malloc(4096);
|
|
||||||
MultiByteToWideChar(CP_ACP, 0, filters[i], -1, wFilter, 4096);
|
|
||||||
rgSpec[i].pszName = wFilter;
|
|
||||||
rgSpec[i].pszSpec = wFilter;
|
|
||||||
}
|
|
||||||
if (dlg->lpVtbl->SetFileTypes(dlg, count, rgSpec) != S_OK) {
|
|
||||||
goto error_dlg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (dlg->lpVtbl->GetOptions(dlg, &opts) != S_OK)
|
if (dlg->lpVtbl->GetOptions(dlg, &opts) != S_OK)
|
||||||
{
|
{
|
||||||
goto error_dlg;
|
goto error_dlg;
|
||||||
@@ -1984,7 +1940,7 @@ struct webview_priv
|
|||||||
(struct webview *)objc_getAssociatedObject(self, "webview");
|
(struct webview *)objc_getAssociatedObject(self, "webview");
|
||||||
|
|
||||||
webview_dialog(w, WEBVIEW_DIALOG_TYPE_OPEN, WEBVIEW_DIALOG_FLAG_FILE, "", "",
|
webview_dialog(w, WEBVIEW_DIALOG_TYPE_OPEN, WEBVIEW_DIALOG_FLAG_FILE, "", "",
|
||||||
filename, 255, "");
|
filename, 255);
|
||||||
filename[255] = '\0';
|
filename[255] = '\0';
|
||||||
if (strlen(filename) > 0)
|
if (strlen(filename) > 0)
|
||||||
{
|
{
|
||||||
@@ -2247,16 +2203,12 @@ struct webview_priv
|
|||||||
WEBVIEW_API void webview_dialog(struct webview *w,
|
WEBVIEW_API void webview_dialog(struct webview *w,
|
||||||
enum webview_dialog_type dlgtype, int flags,
|
enum webview_dialog_type dlgtype, int flags,
|
||||||
const char *title, const char *arg,
|
const char *title, const char *arg,
|
||||||
char *result, size_t resultsz, char *filter)
|
char *result, size_t resultsz)
|
||||||
{
|
{
|
||||||
if (dlgtype == WEBVIEW_DIALOG_TYPE_OPEN ||
|
if (dlgtype == WEBVIEW_DIALOG_TYPE_OPEN ||
|
||||||
dlgtype == WEBVIEW_DIALOG_TYPE_SAVE)
|
dlgtype == WEBVIEW_DIALOG_TYPE_SAVE)
|
||||||
{
|
{
|
||||||
NSSavePanel *panel;
|
NSSavePanel *panel;
|
||||||
NSString *filter_str = [NSString stringWithUTF8String:filter];
|
|
||||||
filter_str = [filter_str stringByReplacingOccurrencesOfString:@"*."
|
|
||||||
withString:@""];
|
|
||||||
NSArray *fileTypes = [filter_str componentsSeparatedByString:@","];
|
|
||||||
if (dlgtype == WEBVIEW_DIALOG_TYPE_OPEN)
|
if (dlgtype == WEBVIEW_DIALOG_TYPE_OPEN)
|
||||||
{
|
{
|
||||||
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
|
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
|
||||||
@@ -2269,10 +2221,6 @@ struct webview_priv
|
|||||||
{
|
{
|
||||||
[openPanel setCanChooseFiles:YES];
|
[openPanel setCanChooseFiles:YES];
|
||||||
[openPanel setCanChooseDirectories:NO];
|
[openPanel setCanChooseDirectories:NO];
|
||||||
if(filter[0] != NULL)
|
|
||||||
{
|
|
||||||
[openPanel setAllowedFileTypes:fileTypes];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
[openPanel setResolvesAliases:NO];
|
[openPanel setResolvesAliases:NO];
|
||||||
[openPanel setAllowsMultipleSelection:NO];
|
[openPanel setAllowsMultipleSelection:NO];
|
||||||
@@ -2286,10 +2234,6 @@ struct webview_priv
|
|||||||
[panel setShowsHiddenFiles:YES];
|
[panel setShowsHiddenFiles:YES];
|
||||||
[panel setExtensionHidden:NO];
|
[panel setExtensionHidden:NO];
|
||||||
[panel setCanSelectHiddenExtension:NO];
|
[panel setCanSelectHiddenExtension:NO];
|
||||||
if(filter[0] != NULL)
|
|
||||||
{
|
|
||||||
[panel setAllowedFileTypes:fileTypes];
|
|
||||||
}
|
|
||||||
[panel setTreatsFilePackagesAsDirectories:YES];
|
[panel setTreatsFilePackagesAsDirectories:YES];
|
||||||
[panel beginSheetModalForWindow:w->priv.window
|
[panel beginSheetModalForWindow:w->priv.window
|
||||||
completionHandler:^(NSInteger result) {
|
completionHandler:^(NSInteger result) {
|
||||||
|
|||||||
32
runtime.go
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package wails
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/wailsapp/wails/lib/interfaces"
|
||||||
|
"github.com/wailsapp/wails/lib/logger"
|
||||||
|
"github.com/wailsapp/wails/runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CustomLogger type alias
|
||||||
|
type CustomLogger = logger.CustomLogger
|
||||||
|
|
||||||
|
// Runtime is the Wails Runtime Interface, given to a user who has defined the WailsInit method
|
||||||
|
type Runtime struct {
|
||||||
|
Events *runtime.Events
|
||||||
|
Log *runtime.Log
|
||||||
|
Dialog *runtime.Dialog
|
||||||
|
Window *runtime.Window
|
||||||
|
Browser *runtime.Browser
|
||||||
|
FileSystem *runtime.FileSystem
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRuntime creates a new Runtime struct
|
||||||
|
func NewRuntime(eventManager interfaces.EventManager, renderer interfaces.Renderer) *Runtime {
|
||||||
|
return &Runtime{
|
||||||
|
Events: runtime.NewEvents(eventManager),
|
||||||
|
Log: runtime.NewLog(),
|
||||||
|
Dialog: runtime.NewDialog(renderer),
|
||||||
|
Window: runtime.NewWindow(renderer),
|
||||||
|
Browser: runtime.NewBrowser(),
|
||||||
|
FileSystem: runtime.NewFileSystem(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import "github.com/wailsapp/wails/lib/interfaces"
|
import "github.com/wailsapp/wails/lib/interfaces"
|
||||||
import "strings"
|
|
||||||
|
|
||||||
// Dialog exposes an interface to native dialogs
|
// Dialog exposes an interface to native dialogs
|
||||||
type Dialog struct {
|
type Dialog struct {
|
||||||
@@ -16,16 +15,8 @@ func NewDialog(renderer interfaces.Renderer) *Dialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SelectFile prompts the user to select a file
|
// SelectFile prompts the user to select a file
|
||||||
func (r *Dialog) SelectFile(params ...string) string {
|
func (r *Dialog) SelectFile() string {
|
||||||
title := "Select File"
|
return r.renderer.SelectFile()
|
||||||
filter := ""
|
|
||||||
if len(params) > 0 {
|
|
||||||
title = params[0]
|
|
||||||
}
|
|
||||||
if len(params) > 1 {
|
|
||||||
filter = strings.Replace(params[1], " ", "", -1)
|
|
||||||
}
|
|
||||||
return r.renderer.SelectFile(title, filter)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SelectDirectory prompts the user to select a directory
|
// SelectDirectory prompts the user to select a directory
|
||||||
@@ -34,14 +25,6 @@ func (r *Dialog) SelectDirectory() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SelectSaveFile prompts the user to select a file for saving
|
// SelectSaveFile prompts the user to select a file for saving
|
||||||
func (r *Dialog) SelectSaveFile(params ...string) string {
|
func (r *Dialog) SelectSaveFile() string {
|
||||||
title := "Select Save"
|
return r.renderer.SelectSaveFile()
|
||||||
filter := ""
|
|
||||||
if len(params) > 0 {
|
|
||||||
title = params[0]
|
|
||||||
}
|
|
||||||
if len(params) > 1 {
|
|
||||||
filter = strings.Replace(params[1], " ", "", -1)
|
|
||||||
}
|
|
||||||
return r.renderer.SelectSaveFile(title, filter)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package runtime
|
package runtime
|
||||||
|
|
||||||
import "os"
|
import homedir "github.com/mitchellh/go-homedir"
|
||||||
|
|
||||||
// FileSystem exposes file system utilities to the runtime
|
// FileSystem exposes file system utilities to the runtime
|
||||||
type FileSystem struct{}
|
type FileSystem struct {}
|
||||||
|
|
||||||
// NewFileSystem creates a new FileSystem struct
|
// NewFileSystem creates a new FileSystem struct
|
||||||
func NewFileSystem() *FileSystem {
|
func NewFileSystem() *FileSystem {
|
||||||
@@ -12,5 +12,5 @@ func NewFileSystem() *FileSystem {
|
|||||||
|
|
||||||
// HomeDir returns the user's home directory
|
// HomeDir returns the user's home directory
|
||||||
func (r *FileSystem) HomeDir() (string, error) {
|
func (r *FileSystem) HomeDir() (string, error) {
|
||||||
return os.UserHomeDir()
|
return homedir.Dir()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,8 @@ import * as Browser from './browser';
|
|||||||
import { On, OnMultiple, Emit, Notify, Heartbeat, Acknowledge } from './events';
|
import { On, OnMultiple, Emit, Notify, Heartbeat, Acknowledge } from './events';
|
||||||
import { NewBinding } from './bindings';
|
import { NewBinding } from './bindings';
|
||||||
import { Callback } from './calls';
|
import { Callback } from './calls';
|
||||||
import { AddScript, InjectCSS, InjectFirebug } from './utils';
|
import { AddScript, InjectCSS } from './utils';
|
||||||
import { AddIPCListener } from './ipc';
|
import { AddIPCListener } from './ipc';
|
||||||
import * as Store from './store';
|
|
||||||
|
|
||||||
// Initialise global if not already
|
// Initialise global if not already
|
||||||
window.wails = window.wails || {};
|
window.wails = window.wails || {};
|
||||||
@@ -43,7 +42,6 @@ var runtime = {
|
|||||||
Heartbeat,
|
Heartbeat,
|
||||||
Acknowledge,
|
Acknowledge,
|
||||||
},
|
},
|
||||||
Store,
|
|
||||||
_: internal,
|
_: internal,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -60,11 +58,6 @@ window.onerror = function (msg, url, lineNo, columnNo, error) {
|
|||||||
window.wails.Log.Error('error: ' + error);
|
window.wails.Log.Error('error: ' + error);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Use firebug?
|
|
||||||
if( window.usefirebug ) {
|
|
||||||
InjectFirebug();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Emit loaded event
|
// Emit loaded event
|
||||||
Emit('wails:loaded');
|
Emit('wails:loaded');
|
||||||
|
|
||||||
|
|||||||
@@ -1,82 +0,0 @@
|
|||||||
/*
|
|
||||||
_ __ _ __
|
|
||||||
| | / /___ _(_) /____
|
|
||||||
| | /| / / __ `/ / / ___/
|
|
||||||
| |/ |/ / /_/ / / (__ )
|
|
||||||
|__/|__/\__,_/_/_/____/
|
|
||||||
The lightweight framework for web-like apps
|
|
||||||
(c) Lea Anthony 2019-present
|
|
||||||
*/
|
|
||||||
/* jshint esversion: 6 */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new sync store with the given name and optional default value
|
|
||||||
*
|
|
||||||
* @export
|
|
||||||
* @param {string} name
|
|
||||||
* @param {*} optionalDefault
|
|
||||||
*/
|
|
||||||
export function New(name, optionalDefault) {
|
|
||||||
|
|
||||||
var data;
|
|
||||||
|
|
||||||
// Check we are initialised
|
|
||||||
if( !window.wails) {
|
|
||||||
throw Error('Wails is not initialised');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store for the callbacks
|
|
||||||
let callbacks = [];
|
|
||||||
|
|
||||||
// Subscribe to updates by providing a callback
|
|
||||||
this.subscribe = (callback) => {
|
|
||||||
callbacks.push(callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
// sets the store data to the provided `newdata` value
|
|
||||||
this.set = (newdata) => {
|
|
||||||
|
|
||||||
data = newdata;
|
|
||||||
|
|
||||||
// Emit a notification to back end
|
|
||||||
window.wails.Events.Emit('wails:sync:store:updatedbyfrontend:'+name, JSON.stringify(data));
|
|
||||||
|
|
||||||
// Notify callbacks
|
|
||||||
callbacks.forEach( function(callback) {
|
|
||||||
callback(data);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// update mutates the value in the store by calling the
|
|
||||||
// provided method with the current value. The value returned
|
|
||||||
// by the updater function will be set as the new store value
|
|
||||||
this.update = (updater) => {
|
|
||||||
var newValue = updater(data);
|
|
||||||
this.set(newValue);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Setup event callback
|
|
||||||
window.wails.Events.On('wails:sync:store:updatedbybackend:'+name, function(result) {
|
|
||||||
|
|
||||||
// Parse data
|
|
||||||
result = JSON.parse(result);
|
|
||||||
|
|
||||||
// Todo: Potential preprocessing?
|
|
||||||
|
|
||||||
// Save data
|
|
||||||
data = result;
|
|
||||||
|
|
||||||
// Notify callbacks
|
|
||||||
callbacks.forEach( function(callback) {
|
|
||||||
callback(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Set to the optional default if set
|
|
||||||
if( optionalDefault ) {
|
|
||||||
this.set(optionalDefault);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
@@ -20,18 +20,6 @@ export function AddScript(js, callbackID) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function InjectFirebug() {
|
|
||||||
// set the debug attribute on HTML
|
|
||||||
var html = document.getElementsByTagName('html')[0];
|
|
||||||
html.setAttribute('debug', 'true');
|
|
||||||
var firebugURL = 'https://wails.app/assets/js/firebug-lite.js#startOpened=true,disableWhenFirebugActive=false';
|
|
||||||
var script = document.createElement('script');
|
|
||||||
script.src = firebugURL;
|
|
||||||
script.type = 'application/javascript';
|
|
||||||
document.head.appendChild(script);
|
|
||||||
window.wails.Log.Info('Injected firebug');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Adapted from webview - thanks zserge!
|
// Adapted from webview - thanks zserge!
|
||||||
export function InjectCSS(css) {
|
export function InjectCSS(css) {
|
||||||
var elem = document.createElement('style');
|
var elem = document.createElement('style');
|
||||||
|
|||||||
6745
runtime/js/package-lock.json
generated
@@ -29,15 +29,15 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/wailsapp/runtime#readme",
|
"homepage": "https://github.com/wailsapp/runtime#readme",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.11.5",
|
"@babel/cli": "^7.5.0",
|
||||||
"@babel/core": "^7.11.5",
|
"@babel/core": "^7.5.4",
|
||||||
"@babel/plugin-transform-object-assign": "^7.10.4",
|
"@babel/plugin-transform-object-assign": "^7.2.0",
|
||||||
"@babel/preset-env": "^7.11.5",
|
"@babel/preset-env": "^7.5.4",
|
||||||
"babel-loader": "^8.1.0",
|
"babel-loader": "^8.0.6",
|
||||||
"babel-preset-minify": "^0.5.1",
|
"babel-preset-minify": "^0.5.0",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.1.4",
|
||||||
"eslint": "^7.8.1",
|
"eslint": "^6.5.1",
|
||||||
"webpack": "^4.44.1",
|
"webpack": "^4.35.3",
|
||||||
"webpack-cli": "^3.3.12"
|
"webpack-cli": "^3.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,12 +13,10 @@ const Log = require('./log');
|
|||||||
const Browser = require('./browser');
|
const Browser = require('./browser');
|
||||||
const Events = require('./events');
|
const Events = require('./events');
|
||||||
const Init = require('./init');
|
const Init = require('./init');
|
||||||
const Store = require('./store');
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
Log: Log,
|
Log: Log,
|
||||||
Browser: Browser,
|
Browser: Browser,
|
||||||
Events: Events,
|
Events: Events,
|
||||||
Init: Init,
|
Init: Init
|
||||||
Store: Store,
|
|
||||||
};
|
};
|
||||||
492
runtime/js/runtime/package-lock.json
generated
@@ -1,492 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@wailsapp/runtime",
|
|
||||||
"version": "1.1.0",
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"requires": true,
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
|
||||||
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"camelcase": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"cliui": {
|
|
||||||
"version": "3.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
|
|
||||||
"integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"string-width": "^1.0.1",
|
|
||||||
"strip-ansi": "^3.0.1",
|
|
||||||
"wrap-ansi": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"code-point-at": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"decamelize": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"dts-dom": {
|
|
||||||
"version": "3.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/dts-dom/-/dts-dom-3.6.0.tgz",
|
|
||||||
"integrity": "sha512-on5jxTgt+A6r0Zyyz6ZRHXaAO7J1VPnOd6+AmvI1vH440AlAZZNc5rUHzgPuTjGlrVr1rOWQYNl7ZJK6rDohbw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"dts-gen": {
|
|
||||||
"version": "0.5.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/dts-gen/-/dts-gen-0.5.8.tgz",
|
|
||||||
"integrity": "sha512-kIAV6dlHaF7r5J+tIuOC1BJls2P72YM0cyWQUR88zcJEpX2ccRZe+HmXLfkkvfPwjvSO3FEqUiyC8On/grx5qw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"dts-dom": "^3.6.0",
|
|
||||||
"parse-git-config": "^1.1.1",
|
|
||||||
"typescript": "^3.5.1",
|
|
||||||
"yargs": "^4.8.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"error-ex": {
|
|
||||||
"version": "1.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
|
||||||
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"is-arrayish": "^0.2.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extend-shallow": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"is-extendable": "^0.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"find-up": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
|
|
||||||
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"path-exists": "^2.0.0",
|
|
||||||
"pinkie-promise": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fs-exists-sync": {
|
|
||||||
"version": "0.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
|
|
||||||
"integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"get-caller-file": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
|
|
||||||
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"git-config-path": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"extend-shallow": "^2.0.1",
|
|
||||||
"fs-exists-sync": "^0.1.0",
|
|
||||||
"homedir-polyfill": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"graceful-fs": {
|
|
||||||
"version": "4.2.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
|
||||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"homedir-polyfill": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
|
|
||||||
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"parse-passwd": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"hosted-git-info": {
|
|
||||||
"version": "2.8.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
|
|
||||||
"integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"ini": {
|
|
||||||
"version": "1.3.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
|
||||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"invert-kv": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"is-arrayish": {
|
|
||||||
"version": "0.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
|
||||||
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"is-extendable": {
|
|
||||||
"version": "0.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
|
|
||||||
"integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"is-fullwidth-code-point": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"number-is-nan": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"is-utf8": {
|
|
||||||
"version": "0.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
|
|
||||||
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"lcid": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"invert-kv": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"load-json-file": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.1.2",
|
|
||||||
"parse-json": "^2.2.0",
|
|
||||||
"pify": "^2.0.0",
|
|
||||||
"pinkie-promise": "^2.0.0",
|
|
||||||
"strip-bom": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lodash.assign": {
|
|
||||||
"version": "4.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
|
|
||||||
"integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"normalize-package-data": {
|
|
||||||
"version": "2.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
|
||||||
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"hosted-git-info": "^2.1.4",
|
|
||||||
"resolve": "^1.10.0",
|
|
||||||
"semver": "2 || 3 || 4 || 5",
|
|
||||||
"validate-npm-package-license": "^3.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"number-is-nan": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"os-locale": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
|
|
||||||
"integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"lcid": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parse-git-config": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-1.1.1.tgz",
|
|
||||||
"integrity": "sha1-06mYQxcTL1c5hxK7pDjhKVkN34w=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"extend-shallow": "^2.0.1",
|
|
||||||
"fs-exists-sync": "^0.1.0",
|
|
||||||
"git-config-path": "^1.0.1",
|
|
||||||
"ini": "^1.3.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parse-json": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
|
|
||||||
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"error-ex": "^1.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parse-passwd": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"path-exists": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
|
|
||||||
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"pinkie-promise": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path-parse": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
|
||||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"path-type": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.1.2",
|
|
||||||
"pify": "^2.0.0",
|
|
||||||
"pinkie-promise": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pify": {
|
|
||||||
"version": "2.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
|
||||||
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"pinkie": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
|
|
||||||
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"pinkie-promise": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
|
|
||||||
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"pinkie": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"read-pkg": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"load-json-file": "^1.0.0",
|
|
||||||
"normalize-package-data": "^2.3.2",
|
|
||||||
"path-type": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"read-pkg-up": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"find-up": "^1.0.0",
|
|
||||||
"read-pkg": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"require-directory": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
|
||||||
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"require-main-filename": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"resolve": {
|
|
||||||
"version": "1.17.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
|
|
||||||
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"path-parse": "^1.0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"semver": {
|
|
||||||
"version": "5.7.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
|
||||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"set-blocking": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"spdx-correct": {
|
|
||||||
"version": "3.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
|
|
||||||
"integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"spdx-expression-parse": "^3.0.0",
|
|
||||||
"spdx-license-ids": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"spdx-exceptions": {
|
|
||||||
"version": "2.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
|
|
||||||
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"spdx-expression-parse": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"spdx-exceptions": "^2.1.0",
|
|
||||||
"spdx-license-ids": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"spdx-license-ids": {
|
|
||||||
"version": "3.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
|
|
||||||
"integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"string-width": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"code-point-at": "^1.0.0",
|
|
||||||
"is-fullwidth-code-point": "^1.0.0",
|
|
||||||
"strip-ansi": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"strip-ansi": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
|
||||||
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-regex": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"strip-bom": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"is-utf8": "^0.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"typescript": {
|
|
||||||
"version": "3.9.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz",
|
|
||||||
"integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"validate-npm-package-license": {
|
|
||||||
"version": "3.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
|
|
||||||
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"spdx-correct": "^3.0.0",
|
|
||||||
"spdx-expression-parse": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"which-module": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"window-size": {
|
|
||||||
"version": "0.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz",
|
|
||||||
"integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"wrap-ansi": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
|
|
||||||
"integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"string-width": "^1.0.1",
|
|
||||||
"strip-ansi": "^3.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"y18n": {
|
|
||||||
"version": "3.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
|
|
||||||
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"yargs": {
|
|
||||||
"version": "4.8.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz",
|
|
||||||
"integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"cliui": "^3.2.0",
|
|
||||||
"decamelize": "^1.1.1",
|
|
||||||
"get-caller-file": "^1.0.1",
|
|
||||||
"lodash.assign": "^4.0.3",
|
|
||||||
"os-locale": "^1.4.0",
|
|
||||||
"read-pkg-up": "^1.0.1",
|
|
||||||
"require-directory": "^2.1.1",
|
|
||||||
"require-main-filename": "^1.0.1",
|
|
||||||
"set-blocking": "^2.0.0",
|
|
||||||
"string-width": "^1.0.1",
|
|
||||||
"which-module": "^1.0.0",
|
|
||||||
"window-size": "^0.2.0",
|
|
||||||
"y18n": "^3.2.1",
|
|
||||||
"yargs-parser": "^2.4.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"yargs-parser": {
|
|
||||||
"version": "2.4.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz",
|
|
||||||
"integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"camelcase": "^3.0.0",
|
|
||||||
"lodash.assign": "^4.0.6"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||