Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial WebAssembly interpreter support #211

Merged
merged 157 commits into from
Apr 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
157 commits
Select commit Hold shift + click to select a range
44cd525
feat: refactor js worker logic
x1unix Jun 26, 2022
0cd7619
feat: refactor js worker logic
x1unix Jun 26, 2022
3919c73
feat: add interpreter base code
x1unix Jun 26, 2022
bb98643
save changes
x1unix Oct 22, 2022
bb1d665
chore: playing with wasm
x1unix Oct 30, 2022
acf8b4e
feat: attempting to build stack value reader
x1unix Dec 13, 2022
71caa96
feat: impl bool reader
x1unix Dec 13, 2022
88c83fa
feat: impl 64-bit read
x1unix Dec 13, 2022
993bfcc
feat: impl floats read
x1unix Dec 13, 2022
8b736a4
feat: support memory alignment
x1unix Dec 13, 2022
10e91b1
feat: support uintptr
x1unix Dec 14, 2022
114dfac
feat: implement stack frame writer
x1unix Dec 14, 2022
df71278
feat: test multiple elements return
x1unix Dec 15, 2022
807a6c3
feat(wasm): remove old test code
x1unix Dec 15, 2022
bcb1cc0
chore(wasm): trying to read struct
x1unix Dec 15, 2022
fa11e7c
feat(wasm): implement struct read
x1unix Dec 16, 2022
fecf930
feat(wasm): implement struct read
x1unix Dec 16, 2022
e675acb
feat(wasm): simplify stack reader and writer
x1unix Dec 16, 2022
3febf4e
feat(wasm): move duplicate logic to type impl
x1unix Dec 16, 2022
80fb7cb
feat(wasm): implement proper read/write for struct
x1unix Dec 16, 2022
1e43af3
feat(wasm): implement slice read
x1unix Dec 17, 2022
b428c6a
feat(wasm): port Go wrapper to TS
x1unix Dec 18, 2022
6c8ecd5
feat(wasm): port Go wrapper to TS
x1unix Dec 18, 2022
0076ef8
feat(wasm): fix Go wrapper
x1unix Dec 19, 2022
1669510
feat(wasm): implement custom value reader
x1unix Dec 19, 2022
5e19ce0
feat(wasm): fix Ref dereference and write
x1unix Dec 19, 2022
ce2eb37
feat(wasm): don't change SP if new SP is equal
x1unix Dec 19, 2022
7899428
feat(wasm): patch global before init
x1unix Dec 20, 2022
b54f63d
feat(wasm): add 'dixie'
x1unix Dec 20, 2022
c82484a
feat(wasm): remove obsolete files
x1unix Dec 20, 2022
2bcf9dc
feat(wasm): add TODOs to golib
x1unix Dec 20, 2022
e2dedfb
chore(wasm): prototyping data storage
x1unix Dec 20, 2022
39eceac
chore: add browserfs base stubs
x1unix Mar 30, 2023
4402ac6
chore(web): add eslint
x1unix Mar 30, 2023
87eae10
chore: add fs stubs
x1unix Mar 30, 2023
b89a96d
chore: add fs stubs
x1unix Mar 30, 2023
ac4fca1
chore: playing with atomics
x1unix Mar 31, 2023
aafcbd9
chore: got web worker working
x1unix Mar 31, 2023
1f66012
chore: playing with callback-based sync
x1unix Mar 31, 2023
0e1231d
fix: fixed function call impl
x1unix Mar 31, 2023
a98c10a
fix: finish async implementation
x1unix Mar 31, 2023
14a3a2a
fix: finish binder helper
x1unix Mar 31, 2023
7269291
feat: introduce syscall helper
x1unix Mar 31, 2023
ca9c9c1
feat: implement export helper for TS
x1unix Mar 31, 2023
20878b7
feat: add syscall interface for filesystem
x1unix Mar 31, 2023
3f3c271
feat: add browser FS stubs
x1unix Mar 31, 2023
83bbb56
chore: add builtin packages list collector
x1unix Apr 3, 2023
4e8f2f2
fix: return error body from goproxy
x1unix Apr 4, 2023
22d2851
fix: detect known package urls
x1unix Apr 4, 2023
49a3a8e
feat: add fallback in case of lookup miss
x1unix Apr 4, 2023
1b28a00
feat: implement package download
x1unix Apr 4, 2023
b6c0e2b
feat: cache latest sub-dependency
x1unix Apr 4, 2023
a6bdf72
feat: refactor package cache
x1unix Apr 5, 2023
395bcd8
feat: register package version
x1unix Apr 5, 2023
f013a76
feat: split pkg registry and storage
x1unix Apr 5, 2023
579b301
feat: ignore test files
x1unix Apr 5, 2023
ec52b65
feat: implement browserfs on Go side
x1unix Apr 6, 2023
128398f
feat: implement package index js interface
x1unix Apr 6, 2023
a0d2f25
chore: document WASM imports
x1unix Apr 6, 2023
41d33ae
feat: implement wasm logger
x1unix Apr 6, 2023
8d76eb4
feat: read debug log variable
x1unix Apr 6, 2023
70bab31
feat: use wlog package
x1unix Apr 6, 2023
99241d3
feat: add stubs
x1unix Apr 6, 2023
4f12d85
feat: add tool to generate export stubs
x1unix Apr 7, 2023
db9f0c4
feat: re-generate stubs
x1unix Apr 7, 2023
0e087b4
feat: re-generate stubs
x1unix Apr 7, 2023
b7075b1
feat: implement customizable stdio
x1unix Apr 7, 2023
4e34523
feat: add worker skeleton
x1unix Apr 7, 2023
869453b
feat: goimports
x1unix Apr 7, 2023
b1a047b
chore: prepare test
x1unix Apr 7, 2023
d37f380
feat: add memory view to work with heap
x1unix Apr 7, 2023
5afd185
feat: add helper for async handlers
x1unix Apr 7, 2023
7cf0b56
feat: remove old experiments
x1unix Apr 7, 2023
62f3957
feat: export memory view
x1unix Apr 7, 2023
2fc8e8d
feat: export memory view
x1unix Apr 7, 2023
19d7c11
feat: implement browserfs binding
x1unix Apr 8, 2023
7c12dba
feat: implement packagedb binding
x1unix Apr 8, 2023
11d67bb
feat: implement core bindings
x1unix Apr 9, 2023
1806037
feat: implement core bindings
x1unix Apr 9, 2023
1aff677
feat: implement browserfs binding
x1unix Apr 9, 2023
5d300a8
feat: pass file id to readFile
x1unix Apr 9, 2023
4ccc7ec
feat: pass file id to readFile
x1unix Apr 9, 2023
b88fce2
feat: create test worker
x1unix Apr 9, 2023
1af0004
fix: fix uint8 type def
x1unix Apr 9, 2023
e53063e
fix: remove old tests
x1unix Apr 9, 2023
19d4962
fix: skip header in logWrite
x1unix Apr 9, 2023
594cd77
chore: dump struct name on error
x1unix Apr 9, 2023
bbaa46a
fix: fix callback result pass
x1unix Apr 9, 2023
cf0c025
fix: fix file contents table name
x1unix Apr 9, 2023
2fa3977
fix: use copy by default to avoid use-after-free
x1unix Apr 9, 2023
9c4ad11
fix: check if passed value is object
x1unix Apr 10, 2023
04b1d81
fix: use Int64TypeSpec for int64
x1unix Apr 10, 2023
1c1f1f5
fix: allow to write incomplete arrays
x1unix Apr 10, 2023
764b584
fix: fix inode marshal
x1unix Apr 10, 2023
a355282
fix: use proper packages dir in worker fs
x1unix Apr 10, 2023
8dd1536
fix: disable debug in worker
x1unix Apr 10, 2023
c947fee
feat: suppress low severity errors
x1unix Apr 10, 2023
387660e
feat: remove logs
x1unix Apr 10, 2023
b4c727f
feat: use wlog logger
x1unix Apr 10, 2023
db703c3
fix: fix caller file name display
x1unix Apr 10, 2023
026c61b
fix: avoid copy on log write
x1unix Apr 10, 2023
4587d4a
fix: disable debug
x1unix Apr 10, 2023
fd22ef0
chore: bump yaegi to v0.15.1
x1unix Apr 10, 2023
8f9546c
feat: update ignore list
x1unix Apr 10, 2023
c59e6cf
feat: detect quota errors
x1unix Apr 10, 2023
44c879f
feat: add progress reported for package manager
x1unix Apr 10, 2023
81b051c
feat: add worker skeleton
x1unix Apr 10, 2023
8682f03
feat: add bindings to ui
x1unix Apr 11, 2023
c660f9a
feat: update registerWorkerEntrypoint
x1unix Apr 12, 2023
2da9a6c
feat: update worker bindings
x1unix Apr 12, 2023
b07e726
feat: log worker stop
x1unix Apr 12, 2023
e029e69
feat: add notification component
x1unix Apr 14, 2023
834bf9d
feat: finish notification styling
x1unix Apr 14, 2023
1e631d2
feat: finish notification styling
x1unix Apr 14, 2023
7339c09
feat: add notifications to state
x1unix Apr 15, 2023
a376fb0
feat: attach webworker to interface
x1unix Apr 16, 2023
57b4e59
feat: fix notification display
x1unix Apr 16, 2023
d02113a
fix: fix code buffer initialization
x1unix Apr 16, 2023
bbab299
fix: fix percentage
x1unix Apr 16, 2023
a917378
fix: fix package manager init
x1unix Apr 16, 2023
bcb55b1
fix: fix WASM_DEBUG variable init
x1unix Apr 16, 2023
5089b15
feat: add debug methods whitelist
x1unix Apr 16, 2023
0a9e7b2
fix: fix memory alignment function
x1unix Apr 16, 2023
8711210
fix: increase start Go timeout
x1unix Apr 16, 2023
019cf6b
fix: start event listener
x1unix Apr 16, 2023
fc144fe
fix: report worker download progress
x1unix Apr 16, 2023
1be9c53
fix: capture worker crash
x1unix Apr 16, 2023
f30ed85
fix: restart worker on crash
x1unix Apr 16, 2023
92644e6
fix: release callback on result
x1unix Apr 16, 2023
c594d5b
fix: use swissmap instead of regular map
x1unix Apr 16, 2023
aa78b6a
fix: use sync.Map for callback pool
x1unix Apr 16, 2023
b0a1815
fix: pass raw arraybuffer to callback
x1unix Apr 16, 2023
e493e57
fix: pass raw memory to reader
x1unix Apr 16, 2023
a1f4509
fix: add memory ballast
x1unix Apr 16, 2023
e113f08
fix: capture panics in yaegi
x1unix Apr 16, 2023
3bca50e
fix: bind system stdout to event pipe
x1unix Apr 16, 2023
4538930
feat: add new runtime type
x1unix Apr 16, 2023
cb2d5b1
feat: add new runtime type
x1unix Apr 16, 2023
1f4d129
feat: add new runtime type
x1unix Apr 16, 2023
2bb802d
feat: omit errors in proxy
x1unix Apr 16, 2023
1079a99
feat: use GoWrapper for WebAssembly executables
x1unix Apr 16, 2023
91e0f63
feat: update status in footer
x1unix Apr 16, 2023
549c872
feat: update runtime options
x1unix Apr 16, 2023
4aae196
feat: rename runtime name
x1unix Apr 16, 2023
edf3d22
feat: build interpreter worker
x1unix Apr 16, 2023
8381767
feat: build interpreter worker
x1unix Apr 16, 2023
ecbcb43
feat: fix lint issues
x1unix Apr 16, 2023
17a87b0
chore: disable 'fmt' linter
x1unix Apr 16, 2023
b77cb77
chore: try to fix golang-ci-lint action
x1unix Apr 16, 2023
a5b2686
chore: use Go 1.19
x1unix Apr 16, 2023
fdcb46a
chore: pin Go test version to 1.18
x1unix Apr 16, 2023
3797737
chore: bump golangci-lint version
x1unix Apr 16, 2023
743c94c
chore: bump golangci-lint version
x1unix Apr 16, 2023
9c37b47
fix: fix stubs for tests
x1unix Apr 16, 2023
627f8b4
fix: remove unused flag
x1unix Apr 16, 2023
69b013e
fix: resolve lint issues
x1unix Apr 16, 2023
33f16da
chore: bump caniuse-lite
x1unix Apr 16, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ jobs:
- name: Run ESLint
run: yarn lint
working-directory: ./web
- name: golangci-lint
uses: golangci/golangci-lint-action@v3.4.0
with:
version: v1.44.2
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: "^1.18.0"
- name: golangci-lint
uses: golangci/golangci-lint-action@v3.4.0
with:
version: v1.52.2
- run: go version
- run: go test ./...
5 changes: 5 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,8 @@ run:
skip-dirs:
- pkg/worker
- cmd/webworker
issues:
exclude-rules:
- path: 'internal/gowasm/(.+)\.go'
linters:
- typecheck
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
v19.0.0
22 changes: 19 additions & 3 deletions build.mk
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ GOROOT ?= $(shell go env GOROOT)
TOOLS ?= ./tools
PUBLIC_DIR ?= $(UI)/public
WEBWORKER_PKG ?= ./cmd/webworker
INTERPRETER_PKG ?= ./cmd/go-repl

.PHONY: clean
clean:
Expand Down Expand Up @@ -44,15 +45,30 @@ build-ui:
@echo ":: Building UI..." && \
$(YARN) --cwd="$(UI)" build

.PHONY:copy-wasm-exec
copy-wasm-exec:
@cp "$(GOROOT)/misc/wasm/wasm_exec.js" $(PUBLIC_DIR)

.PHONY:build-webworker
build-webworker:
@echo ":: Building Go Webworker module..." && \
GOOS=js GOARCH=wasm $(GO) build -o $(PUBLIC_DIR)/worker.wasm $(WEBWORKER_PKG) && \
cp "$(GOROOT)/misc/wasm/wasm_exec.js" $(PUBLIC_DIR)
GOOS=js GOARCH=wasm $(GO) build -o $(PUBLIC_DIR)/worker.wasm $(WEBWORKER_PKG)

.PHONY:go-repl
go-repl:
@echo ":: Building Go interpreter module..." && \
GOOS=js GOARCH=wasm $(GO) build -o $(PUBLIC_DIR)/$(INTERPRETER_WORKER_NAME) $(INTERPRETER_PKG)

.PHONY:build-wasm
build-wasm: copy-wasm-exec build-webworker go-repl

.PHONY: build
build: check-go check-yarn clean preinstall collect-meta build-server build-webworker build-ui
build: check-go check-yarn clean preinstall collect-meta build-server build-wasm build-ui
@echo ":: Copying assets..." && \
cp -rfv ./data $(TARGET)/data && \
mv -v $(UI)/build $(TARGET)/public && \
echo ":: Build done - $(TARGET)"

.PHONY:gen
gen:
@find . -name '*_js.go' -print0 | xargs -0 -n1 go generate
6 changes: 4 additions & 2 deletions build/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ ARG GITHUB_URL='https://github.com/x1unix/go-playground'
RUN yarn install --silent && \
REACT_APP_VERSION=$APP_VERSION NODE_ENV=production REACT_APP_GITHUB_URL=$GITHUB_URL yarn build

FROM golang:1.18-alpine as build
FROM golang:1.19-alpine as build
WORKDIR /tmp/playground
COPY cmd ./cmd
COPY pkg ./pkg
Expand All @@ -15,10 +15,11 @@ COPY go.sum .
ARG APP_VERSION=1.0.0
RUN echo "Building server with version $APP_VERSION" && \
go build -o server -ldflags="-X 'main.Version=$APP_VERSION'" ./cmd/playground && \
GOOS=js GOARCH=wasm go build -o ./go-repl.wasm ./cmd/go-repl && \
GOOS=js GOARCH=wasm go build -o ./worker.wasm ./cmd/webworker && \
cp $(go env GOROOT)/misc/wasm/wasm_exec.js .

FROM golang:1.18-alpine as production
FROM golang:1.19-alpine as production
WORKDIR /opt/playground
ENV GOROOT /usr/local/go
ENV APP_CLEAN_INTERVAL=10m
Expand All @@ -30,6 +31,7 @@ COPY data ./data
COPY --from=ui-build /tmp/web/build ./public
COPY --from=build /tmp/playground/server .
COPY --from=build /tmp/playground/worker.wasm ./public
COPY --from=build /tmp/playground/go-repl.wasm ./public
COPY --from=build /tmp/playground/wasm_exec.js ./public
EXPOSE 8000
ENTRYPOINT /opt/playground/server \
Expand Down
4 changes: 3 additions & 1 deletion build/release.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#
# Use Dockerfile for simple single-arch build process

FROM golang:1.18-alpine as build
FROM golang:1.19-alpine as build
WORKDIR /tmp/playground
COPY cmd ./cmd
COPY pkg ./pkg
Expand All @@ -17,6 +17,7 @@ ARG APP_VERSION=1.0.0
RUN echo "Building server with version $APP_VERSION" && \
go build -o server -ldflags="-X 'main.Version=$APP_VERSION'" ./cmd/playground && \
GOOS=js GOARCH=wasm go build -o ./worker.wasm ./cmd/webworker && \
GOOS=js GOARCH=wasm go build -o ./go-repl.wasm ./cmd/go-repl && \
cp $(go env GOROOT)/misc/wasm/wasm_exec.js .

FROM golang:1.18-alpine as production
Expand All @@ -31,6 +32,7 @@ COPY data ./data
COPY web/build ./public
COPY --from=build /tmp/playground/server .
COPY --from=build /tmp/playground/worker.wasm ./public
COPY --from=build /tmp/playground/go-repl.wasm ./public
COPY --from=build /tmp/playground/wasm_exec.js ./public
EXPOSE 8000
ENTRYPOINT /opt/playground/server \
Expand Down
36 changes: 36 additions & 0 deletions cmd/go-repl/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//go:build js

//
// "go-repl" is a self-contained Go REPL with package downloader to be run in web browser as WASM binary.
//

package main

import (
"github.com/x1unix/go-playground/internal/gorepl"
"github.com/x1unix/go-playground/internal/gorepl/uihost"
"github.com/x1unix/go-playground/internal/gowasm"
"github.com/x1unix/go-playground/internal/gowasm/browserfs"
"github.com/x1unix/go-playground/internal/gowasm/packagedb"
"github.com/x1unix/go-playground/pkg/goproxy"
)

func main() {
// Go memory ballast, 10MiB
_ = make([]byte, 10<<20)

worker := gowasm.NewWorker()

vendorFS := browserfs.NewFS()
pkgIndex := packagedb.NewPackageIndex()
client := goproxy.NewClientFromEnv()
pmObserver := uihost.NewPackageDownloadObserver()
pmObserver.Start(worker.Context())

runner := gorepl.NewRunner(vendorFS, pkgIndex, client, pmObserver)
handler := gorepl.NewHandler(client, runner)
worker.Export("runProgram", handler.HandleRunProgram)
worker.Export("terminateProgram", handler.HandleTerminateProgram)
worker.Export("updateGoProxyAddress", handler.HandleUpdateGoProxyAddress)
worker.Run()
}
57 changes: 4 additions & 53 deletions cmd/webworker/webworker.go
Original file line number Diff line number Diff line change
@@ -1,68 +1,19 @@
//go:build js
// +build js

package main

import (
"fmt"
"os"
"syscall/js"

"github.com/x1unix/go-playground/pkg/analyzer/check"

"github.com/x1unix/go-playground/pkg/worker"
)

type void = struct{}

var (
done = make(chan void, 0)
onResult js.Value
)

func main() {
entrypoint, err := getEntrypointFunction()
if err != nil {
panic(err)
}

// prepare exports object
analyzeCodeCb := worker.FuncOf(analyzeCode)
exitCb := js.FuncOf(exit)
module := map[string]interface{}{
"analyzeCode": analyzeCodeCb,
"exit": exitCb,
}

defer analyzeCodeCb.Release()
defer exitCb.Release()

entrypoint.Invoke(js.ValueOf(module))
<-done
fmt.Println("Go: exit")
}

func getEntrypointFunction() (js.Value, error) {
if len(os.Args) < 2 {
return js.Value{}, fmt.Errorf("WASM module requires at least 2 arguments: 'js' and entrypoint function name")
}

entrypointName := os.Args[1]
entrypoint := js.Global().Get(entrypointName)
switch t := entrypoint.Type(); t {
case js.TypeFunction:
return entrypoint, nil
case js.TypeUndefined:
return js.Value{}, fmt.Errorf("function %q doesn't exists on global JS scope", entrypointName)
default:
return js.Value{}, fmt.Errorf("%q should be callable JS function, but got %d instead", entrypointName, t)
}
}

func exit(this js.Value, args []js.Value) interface{} {
go func() {
done <- void{}
}()
return nil
worker.ExportAndStart(worker.Exports{
"analyzeCode": analyzeCode,
})
}

func analyzeCode(this js.Value, args worker.Args) (interface{}, error) {
Expand Down
9 changes: 9 additions & 0 deletions docs/wasm/dirlist.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
js: registered callback handler {value: {…}, id: 1}
fs.Open - "/go/src/main/vendor/go.uber.org/zap"
fs.Open - "/go/src/main/go.uber.org/zap"
fs.Open - "/go/src/vendor/go.uber.org/zap"
fs.Open - "/go/src/go.uber.org/zap"
fs.Open - "/go/src/vendor/go.uber.org/zap"
fs.Open - "/go/src/go.uber.org/zap"
Result: <nil>
Error: 4:2: import "go.uber.org/zap" error: unable to find source related to: "go.uber.org/zap". Either the GOPATH environment variable, or the Interpreter.Options.GoPath needs to be set
90 changes: 90 additions & 0 deletions docs/wasm/download.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
"Version": "v0.5.1",
"Time": "2022-05-10T13:46:14Z"
}
wasm_exec.js:22 Uncompressed: 33468 bytes
wasm_exec.js:22 Header: 504b0304
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/.gitlab-ci.yml
BaseName: .gitlab-ci.yml
Size: 1192
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/LICENSE
BaseName: LICENSE
Size: 1054
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/README.md
BaseName: README.md
Size: 11873
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/db.go
BaseName: db.go
Size: 2872
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/doc_test.go
BaseName: doc_test.go
Size: 3416
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/driver.go
BaseName: driver.go
Size: 2937
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/go.mod
BaseName: go.mod
Size: 604
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/go.sum
BaseName: go.sum
Size: 3011
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/mssql.go
BaseName: mssql.go
Size: 367
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/mssql_test.go
BaseName: mssql_test.go
Size: 2762
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/mysql.go
BaseName: mysql.go
Size: 1236
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/mysql_test.go
BaseName: mysql_test.go
Size: 2558
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/postgresql.go
BaseName: postgresql.go
Size: 435
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/postgresql_test.go
BaseName: postgresql_test.go
Size: 3486
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/slice_test.go
BaseName: slice_test.go
Size: 3184
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/sqlite.go
BaseName: sqlite.go
Size: 319
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/sqlite_test.go
BaseName: sqlite_test.go
Size: 1862
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/squalus.go
BaseName: squalus.go
Size: 6470
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/squalus_test.go
BaseName: squalus_test.go
Size: 13733
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/struct.go
BaseName: struct.go
Size: 2467
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/struct_convert_test.go
BaseName: struct_convert_test.go
Size: 4290
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/struct_test.go
BaseName: struct_test.go
Size: 5396
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/test/docker-compose.yml
BaseName: docker-compose.yml
Size: 583
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/test/gitlab-ci/Dockerfile
BaseName: Dockerfile
Size: 780
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/test/gitlab-ci/revive.toml
BaseName: revive.toml
Size: 987
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/test/test.sh
BaseName: test.sh
Size: 1138
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/tx.go
BaseName: tx.go
Size: 1675
wasm_exec.js:22 * Name: gitlab.com/qosenergy/squalus@v0.5.1/tx_test.go
BaseName: tx_test.go
Size: 2716
27 changes: 20 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,20 +1,33 @@
module github.com/x1unix/go-playground

go 1.13
go 1.18

require (
github.com/TheZeroSlave/zapsentry v1.10.0
github.com/getsentry/sentry-go v0.13.0 // indirect
github.com/gorilla/mux v1.7.3
github.com/kelseyhightower/envconfig v1.4.0
github.com/pkg/errors v0.8.1
github.com/stretchr/testify v1.7.0
github.com/samber/lo v1.38.1
github.com/spf13/cobra v1.7.0
github.com/stretchr/testify v1.8.2
github.com/tevino/abool v0.0.0-20170917061928-9b9efcf221b5
github.com/traefik/yaegi v0.15.1
github.com/x1unix/foundation v1.0.0
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.8.0 // indirect
go.uber.org/zap v1.21.0
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f // indirect
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6 // indirect
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
golang.org/x/mod v0.10.0
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
)

require (
github.com/benbjohnson/clock v1.1.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/getsentry/sentry-go v0.13.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.8.0 // indirect
golang.org/x/sys v0.3.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Loading