From 3869f09f5ad34277c9a188445b82bcedd6c6a63c Mon Sep 17 00:00:00 2001 From: Ben Croker Date: Sat, 12 Apr 2025 08:01:48 -0600 Subject: [PATCH 1/4] Add star history chart [deploy-site] --- README.md | 4 +++- build/consts_datastar_readme.qtpl | 2 ++ library/README.md | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1926229d..01d82edf 100644 --- a/README.md +++ b/README.md @@ -57,4 +57,6 @@ You can manually add your own plugins to the core: // Look ma’, I made a plugin! ) -``` \ No newline at end of file +``` + +[![Star History Chart](https://api.star-history.com/svg?repos=starfederation/datastar&type=Date)](https://www.star-history.com/#starfederation/datastar&Date) \ No newline at end of file diff --git a/build/consts_datastar_readme.qtpl b/build/consts_datastar_readme.qtpl index 94fbd85e..b7b5bd9c 100644 --- a/build/consts_datastar_readme.qtpl +++ b/build/consts_datastar_readme.qtpl @@ -63,4 +63,6 @@ You can manually add your own plugins to the core: ``` +[![Star History Chart](https://api.star-history.com/svg?repos=starfederation/datastar&type=Date)](https://www.star-history.com/#starfederation/datastar&Date) + {%- endfunc -%} diff --git a/library/README.md b/library/README.md index 1926229d..01d82edf 100644 --- a/library/README.md +++ b/library/README.md @@ -57,4 +57,6 @@ You can manually add your own plugins to the core: // Look ma’, I made a plugin! ) -``` \ No newline at end of file +``` + +[![Star History Chart](https://api.star-history.com/svg?repos=starfederation/datastar&type=Date)](https://www.star-history.com/#starfederation/datastar&Date) \ No newline at end of file From aa138d5a1958006e12005f91c56875c328b908fd Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Sat, 12 Apr 2025 07:27:49 -0700 Subject: [PATCH 2/4] Fix go tools (#829) * update to go 1.24 * run go mod tidy * make qtc a go tool * remove tools installation from dockerfile dev since it is now taken care of by the go tool command * update makefile to use go tool task --- DOCKER.md | 2 +- Dockerfile | 2 +- Dockerfile-dev | 9 +-------- Makefile | 10 +++++----- Taskfile.yml | 3 +-- go.mod | 3 +++ go.sum | 4 ++++ 7 files changed, 16 insertions(+), 17 deletions(-) diff --git a/DOCKER.md b/DOCKER.md index c8ae82c7..08d97c78 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -53,7 +53,7 @@ Below are details and options available in each of the provided `make` commands: You can pass in optional CLI arguments to override the default settings Datastar dev uses: -* `TAG=` (default: `1.23.1-alpine`) - allows you to specify the official [golang Docker image](https://hub.docker.com/_/golang) tag that should be used. Using this, you can change the version of Go the container runs, e.g.: `make image-build TAG="1.23-alpine"` will use the latest version of Go 1.23 for Alpine Linux. +* `TAG=` (default is defined in `Dockerfile-dev`) - allows you to specify the official [golang Docker image](https://hub.docker.com/_/golang) tag that should be used. Using this, you can change the version of Go the container runs, e.g.: `make image-build TAG="1.24"` will use the latest patch version of Go 1.24 official Docker image. ### Terminating diff --git a/Dockerfile b/Dockerfile index d2f7e693..bde47417 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/golang:1.23.3-alpine AS build +FROM docker.io/golang:1.24.2-alpine AS build RUN apk add --no-cache upx ENV PORT=8080 diff --git a/Dockerfile-dev b/Dockerfile-dev index 8974b62c..37e8ea05 100644 --- a/Dockerfile-dev +++ b/Dockerfile-dev @@ -1,4 +1,4 @@ -ARG TAG=1.23 +ARG TAG=1.24 FROM golang:$TAG @@ -37,13 +37,6 @@ RUN apt update && sudo apt upgrade \ npm install -g npm@^10.0.0 \ npm install -g pnpm \ && \ - # Install needed Go tooling \ - go install github.com/go-task/task/v3/cmd/task@latest \ - && \ - go install github.com/a-h/templ/cmd/templ@latest \ - && \ - go install github.com/valyala/quicktemplate/qtc@latest \ - && \ # Install flyctl cli \ curl -L https://fly.io/install.sh | sh \ && \ diff --git a/Makefile b/Makefile index bd9c9c1c..8563984f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -TAG?=1.23 +TAG?=1.24 CONTAINER?=$(shell basename $(CURDIR))-dev DEV_PORT?=8080 IMAGE_INFO=$(shell docker image inspect $(CONTAINER):$(TAG)) @@ -17,17 +17,17 @@ clean: docker volume rm go-modules # Run the development server dev: --image-check - ${DOCKER_RUN} --name ${CONTAINER}-$@ -e DEV_PORT="${DEV_PORT}" -p ${DEV_PORT}:${DEV_PORT} ${IMAGE_NAME} -c 'task -w' + ${DOCKER_RUN} --name ${CONTAINER}-$@ -e DEV_PORT="${DEV_PORT}" -p ${DEV_PORT}:${DEV_PORT} ${IMAGE_NAME} -c 'go tool task -w' # Build the Docker image image-build: docker build -f Dockerfile-dev . -t ${IMAGE_NAME} --build-arg TAG=${TAG} --no-cache - ${DOCKER_RUN} --name ${CONTAINER}-$@ ${IMAGE_NAME} -c 'task tools' + ${DOCKER_RUN} --name ${CONTAINER}-$@ ${IMAGE_NAME} -c 'go tool task tools' # Run the passed in task command task: --image-check - ${DOCKER_RUN} --name ${CONTAINER}-$@ -e DEV_PORT="${DEV_PORT}" -p ${DEV_PORT}:${DEV_PORT} ${IMAGE_NAME} -c 'task $(filter-out $@,$(MAKECMDGOALS)) $(MAKEFLAGS)' + ${DOCKER_RUN} --name ${CONTAINER}-$@ -e DEV_PORT="${DEV_PORT}" -p ${DEV_PORT}:${DEV_PORT} ${IMAGE_NAME} -c 'go tool task $(filter-out $@,$(MAKECMDGOALS)) $(MAKEFLAGS)' # Run the test suite test: --image-check - ${DOCKER_RUN} --name ${CONTAINER}-$@ -e DEV_PORT="${DEV_PORT}" -p ${DEV_PORT}:${DEV_PORT} ${IMAGE_NAME} -c 'task test' + ${DOCKER_RUN} --name ${CONTAINER}-$@ -e DEV_PORT="${DEV_PORT}" -p ${DEV_PORT}:${DEV_PORT} ${IMAGE_NAME} -c 'go tool task test' # Open a shell inside of the container ssh: --image-check ${DOCKER_RUN} --name ${CONTAINER}-$@ --entrypoint=/bin/sh ${IMAGE_NAME} diff --git a/Taskfile.yml b/Taskfile.yml index 0086c352..774b35b7 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -44,7 +44,6 @@ tasks: cmd: test -f site/tailwindcli || (echo "#!/bin/sh" > site/tailwindcli && echo "tailwindcss $@" >> site/tailwindcli) - chmod +x site/tailwindcli - - go install github.com/valyala/quicktemplate/qtc@latest version: cmds: @@ -56,7 +55,7 @@ tasks: generates: - "**/*.qtpl.go" cmds: - - qtc + - go tool qtc build: deps: diff --git a/go.mod b/go.mod index 4717d623..0de2580d 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.24.2 require ( github.com/CAFxX/httpcompression v0.0.9 github.com/Jeffail/gabs/v2 v2.7.0 + github.com/TwiN/go-away v1.6.15 github.com/a-h/templ v0.3.857 github.com/alecthomas/chroma v0.10.0 github.com/benbjohnson/hashfs v0.2.2 @@ -33,6 +34,7 @@ require ( github.com/segmentio/encoding v0.4.1 github.com/stretchr/testify v1.10.0 github.com/valyala/bytebufferpool v1.0.0 + github.com/valyala/quicktemplate v1.8.0 github.com/wcharczuk/go-chart/v2 v2.1.2 github.com/ysmood/gson v0.7.3 github.com/zeebo/xxh3 v1.0.2 @@ -152,4 +154,5 @@ require ( tool ( github.com/a-h/templ/cmd/templ github.com/go-task/task/v3/cmd/task + github.com/valyala/quicktemplate/qtc ) diff --git a/go.sum b/go.sum index 2eab4843..599f375e 100644 --- a/go.sum +++ b/go.sum @@ -15,6 +15,8 @@ github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/RoaringBitmap/roaring v1.9.3 h1:t4EbC5qQwnisr5PrP9nt0IRhRTb9gMUgQF4t4S2OByM= github.com/RoaringBitmap/roaring v1.9.3/go.mod h1:6AXUsoIEzDTFFQCe1RbGA6uFONMhvejWj5rqITANK90= +github.com/TwiN/go-away v1.6.15 h1:pm1UvsteYNnOWl4bcbhAXQnebR5UcqfcuCi3kl6LJhE= +github.com/TwiN/go-away v1.6.15/go.mod h1:cgCIChHZZU7u9QjVuGAf3X95MPoMPuceCwnvj8+JDB0= github.com/a-h/parse v0.0.0-20250122154542-74294addb73e h1:HjVbSQHy+dnlS6C3XajZ69NYAb5jbGNfHanvm1+iYlo= github.com/a-h/parse v0.0.0-20250122154542-74294addb73e/go.mod h1:3mnrkvGpurZ4ZrTDbYU84xhwXW2TjTKShSwjRi2ihfQ= github.com/a-h/templ v0.3.857 h1:6EqcJuGZW4OL+2iZ3MD+NnIcG7nGkaQeF2Zq5kf9ZGg= @@ -289,6 +291,8 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/gozstd v1.20.1 h1:xPnnnvjmaDDitMFfDxmQ4vpx0+3CdTg2o3lALvXTU/g= github.com/valyala/gozstd v1.20.1/go.mod h1:y5Ew47GLlP37EkTB+B4s7r6A5rdaeB7ftbl9zoYiIPQ= +github.com/valyala/quicktemplate v1.8.0 h1:zU0tjbIqTRgKQzFY1L42zq0qR3eh4WoQQdIdqCysW5k= +github.com/valyala/quicktemplate v1.8.0/go.mod h1:qIqW8/igXt8fdrUln5kOSb+KWMaJ4Y8QUsfd1k6L2jM= github.com/wcharczuk/go-chart/v2 v2.1.2 h1:Y17/oYNuXwZg6TFag06qe8sBajwwsuvPiJJXcUcLL6E= github.com/wcharczuk/go-chart/v2 v2.1.2/go.mod h1:Zi4hbaqlWpYajnXB2K22IUYVXRXaLfSGNNR7P4ukyyQ= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= From c4a99869cb1a63883ee2f47278c642b0486e3c09 Mon Sep 17 00:00:00 2001 From: Dmitry Kotik <7944694+dkotik@users.noreply.github.com> Date: Sat, 12 Apr 2025 10:29:05 -0400 Subject: [PATCH 3/4] Add hot reload example to Golang SDK (#834) * externalize interface compatibility for two optional template engines Templ and GoStar are currently module dependencies for Golang SDK. They should not be required for 1.0 release. This step replaces two component interfaces with copies that ensure compatibility without having to include various optional engines as dependencies with each Datastar deployment. * update comments and documentation for Golang SDK Added comments to `execute.go` file. I will make similar changes to other files. I submit those as a way of getting feedback. The only public API change is the removal of execute script options struct. It is changed to private by letter case because the options pattern is used to configure script execution. The struct serves no purpose and pollutes the public API. * add hot reload example to Golang SDK Updated the Golang SDK README.md file to include a list of examples that will be expanded in the future. A basic example is moved into its own directory. A hot reload example is added alongside it. --- sdk/go/README.md | 83 +++------------------------- sdk/go/examples/basic/main.go | 73 +++++++++++++++++++++++++ sdk/go/examples/hotreload/main.go | 91 +++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 76 deletions(-) create mode 100644 sdk/go/examples/basic/main.go create mode 100644 sdk/go/examples/hotreload/main.go diff --git a/sdk/go/README.md b/sdk/go/README.md index 7fdbde54..a423cea2 100644 --- a/sdk/go/README.md +++ b/sdk/go/README.md @@ -3,85 +3,16 @@ [![Go Reference](https://pkg.go.dev/badge/github.com/starfederation/datastar.svg)](https://pkg.go.dev/github.com/starfederation/datastar) Implements the [SDK spec](../README.md) and exposes an abstract -ServerSentEventGenerator struct that can be used to implement runtime specific -classes. +ServerSentEventGenerator struct that can be used to implement runtime specific classes. -```go -package main +## Installation -import ( - "crypto/rand" - "encoding/hex" - "fmt" - "log/slog" - "net/http" - "os" - "time" - - datastar "github.com/starfederation/datastar/sdk/go" -) - -const port = 9001 - -func main() { - logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) - mux := http.NewServeMux() - - cdn := "https://cdn.jsdelivr.net/gh/starfederation/datastar@develop/bundles/datastar.js" - style := "display:flex;flex-direction:column;background-color:oklch(25.3267% 0.015896 252.417568);height:100vh;justify-content:center;align-items:center;font-family:ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';" - - page := []byte(fmt.Sprintf(` - - - - - - - - - - - - - - `, cdn, style, datastar.GetSSE("/stream"))) - - mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { - w.Write(page) - }) - - mux.HandleFunc("GET /stream", func(w http.ResponseWriter, r *http.Request) { - ticker := time.NewTicker(100 * time.Millisecond) - defer ticker.Stop() - - sse := datastar.NewSSE(w, r) - for { - select { - case <-r.Context().Done(): - logger.Debug("Client connection closed") - return - case <-ticker.C: - bytes := make([]byte, 3) - - if _, err := rand.Read(bytes); err != nil { - logger.Error("Error generating random bytes: ", slog.String("error", err.Error())) - return - } - hexString := hex.EncodeToString(bytes) - frag := fmt.Sprintf(`%s`, hexString, hexString, hexString) - - sse.MergeFragments(frag) - } - } - }) - - logger.Info(fmt.Sprintf("Server starting at 0.0.0.0:%d", port)) - if err := http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", port), mux); err != nil { - logger.Error("Error starting server:", slog.String("error", err.Error())) - } -} +```sh +go get -u github.com/starfederation/datastar/sdk/go ``` ## Examples -The [Datastar website](https://data-star.dev) acts as a [set of examples](https://github.com/starfederation/datastar/tree/develop/site) for how to use the SDK. +- [Basic Usage](https://github.com/starfederation/datastar/tree/develop/sdk/go/examples/basic) +- [Hot Reload](https://github.com/starfederation/datastar/tree/develop/sdk/go/examples/hotreload) +- The [Datastar website](https://data-star.dev) also acts as a [set of examples](https://github.com/starfederation/datastar/tree/develop/site) for how to use the SDK. diff --git a/sdk/go/examples/basic/main.go b/sdk/go/examples/basic/main.go new file mode 100644 index 00000000..8115154d --- /dev/null +++ b/sdk/go/examples/basic/main.go @@ -0,0 +1,73 @@ +package main + +import ( + "crypto/rand" + "encoding/hex" + "fmt" + "log/slog" + "net/http" + "time" + + datastar "github.com/starfederation/datastar/sdk/go" +) + +const ( + cdn = "https://cdn.jsdelivr.net/gh/starfederation/datastar@develop/bundles/datastar.js" + port = 9001 +) + +func main() { + mux := http.NewServeMux() + + style := "display:flex;flex-direction:column;background-color:oklch(25.3267% 0.015896 252.417568);height:100vh;justify-content:center;align-items:center;font-family:ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';" + + page := []byte(fmt.Sprintf(` + + + + + + + + + + + + + + `, cdn, style, datastar.GetSSE("/stream"))) + + mux.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { + w.Write(page) + }) + + mux.HandleFunc("GET /stream", func(w http.ResponseWriter, r *http.Request) { + ticker := time.NewTicker(100 * time.Millisecond) + defer ticker.Stop() + + sse := datastar.NewSSE(w, r) + for { + select { + case <-r.Context().Done(): + slog.Debug("Client connection closed") + return + case <-ticker.C: + bytes := make([]byte, 3) + + if _, err := rand.Read(bytes); err != nil { + slog.Error("Error generating random bytes: ", slog.String("error", err.Error())) + return + } + hexString := hex.EncodeToString(bytes) + frag := fmt.Sprintf(`%s`, hexString, hexString, hexString) + + sse.MergeFragments(frag) + } + } + }) + + slog.Info(fmt.Sprintf("Server starting at 0.0.0.0:%d", port)) + if err := http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", port), mux); err != nil { + slog.Error("Error starting server:", slog.String("error", err.Error())) + } +} diff --git a/sdk/go/examples/hotreload/main.go b/sdk/go/examples/hotreload/main.go new file mode 100644 index 00000000..52600dba --- /dev/null +++ b/sdk/go/examples/hotreload/main.go @@ -0,0 +1,91 @@ +package main + +import ( + "fmt" + "log/slog" + "net/http" + "sync" + "time" + + datastar "github.com/starfederation/datastar/sdk/go" +) + +const ( + serverAddress = "localhost:9001" + cdn = "https://cdn.jsdelivr.net/gh/starfederation/datastar@develop/bundles/datastar.js" +) + +var hotReloadOnlyOnce sync.Once + +func HotReloadHandler(w http.ResponseWriter, r *http.Request) { + sse := datastar.NewSSE(w, r) + hotReloadOnlyOnce.Do(func() { + // Refresh the client page as soon as connection + // is established. This will occur only once + // after the server starts. + sse.ExecuteScript( + "window.location.reload()", + datastar.WithExecuteScriptRetryDuration(time.Second), + ) + }) + + // Freeze the event stream until the connection + // is lost for any reason. This will force the client + // to attempt to reconnect after the server reboots. + <-r.Context().Done() +} + +func PageWithHotReload(w http.ResponseWriter, r *http.Request) { + _, _ = w.Write([]byte(fmt.Sprintf(` + + + + + + + + + + +
+

+ This page will automatically reload on any filesystem change. Update this paragraph, save changes, and + switch back to the open browser tab to observe + the update. +

+
+ + + + `, cdn))) +} + +func main() { + // Hot reload requires a file system watcher and + // a refresh script. Reflex is one of the best tools + // for running a command on each file change. + // + // $ go install github.com/cespare/reflex@latest + // $ reflex --start-service -- sh -c 'go run .' + // + // The refresh script is a Datastar handler + // that emits a page refresh event only once + // for each server start. + // + // When the the file watcher forces the server to restart, + // Datastar client will lose the network connection to the + // server and attempt to reconnect. Once the connection is + // established, the client will receive the refresh event. + http.HandleFunc("/hotreload", HotReloadHandler) + http.HandleFunc("/", PageWithHotReload) + slog.Info(fmt.Sprintf( + "Open your browser to: http://%s/", + serverAddress, + )) + http.ListenAndServe(serverAddress, nil) + + // Tip: read the reflex documentation to see advanced usage + // options like responding to specific file changes by filter. + // + // $ reflex --help +} From 439c71341b808ad227d0057e2cd4fc2550d6b10b Mon Sep 17 00:00:00 2001 From: Alex Bozhenko Date: Sat, 12 Apr 2025 07:29:27 -0700 Subject: [PATCH 4/4] upd (#833) --- go.mod | 21 +++++++++++---------- go.sum | 44 ++++++++++++++++++++++++-------------------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index 0de2580d..aaa0dc9a 100644 --- a/go.mod +++ b/go.mod @@ -26,10 +26,10 @@ require ( github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/huantt/plaintext-extractor v1.1.0 github.com/joho/godotenv v1.5.1 - github.com/klauspost/compress v1.17.11 + github.com/klauspost/compress v1.18.0 github.com/lithammer/fuzzysearch v1.1.8 - github.com/nats-io/nats-server/v2 v2.10.24 - github.com/nats-io/nats.go v1.38.0 + github.com/nats-io/nats-server/v2 v2.11.1 + github.com/nats-io/nats.go v1.41.1 github.com/samber/lo v1.47.0 github.com/segmentio/encoding v0.4.1 github.com/stretchr/testify v1.10.0 @@ -94,6 +94,7 @@ require ( github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.1 // indirect + github.com/google/go-tpm v0.9.3 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/securecookie v1.1.2 // indirect github.com/iancoleman/strcase v0.3.0 // indirect @@ -109,7 +110,7 @@ require ( github.com/mschoch/smat v0.2.0 // indirect github.com/natefinch/atomic v1.0.1 // indirect github.com/nats-io/jwt/v2 v2.7.3 // indirect - github.com/nats-io/nkeys v0.4.9 // indirect + github.com/nats-io/nkeys v0.4.10 // indirect github.com/nats-io/nuid v1.0.1 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/pjbgf/sha1cd v0.3.2 // indirect @@ -129,16 +130,16 @@ require ( github.com/ysmood/got v0.40.0 // indirect github.com/ysmood/leakless v0.9.0 // indirect go.etcd.io/bbolt v1.3.7 // indirect - golang.org/x/crypto v0.36.0 // indirect + golang.org/x/crypto v0.37.0 // indirect golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect golang.org/x/image v0.23.0 // indirect golang.org/x/mod v0.22.0 // indirect golang.org/x/net v0.37.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect - golang.org/x/time v0.9.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/term v0.31.0 // indirect + golang.org/x/text v0.24.0 // indirect + golang.org/x/time v0.11.0 // indirect golang.org/x/tools v0.29.0 // indirect google.golang.org/protobuf v1.36.2 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect diff --git a/go.sum b/go.sum index 599f375e..99a3049c 100644 --- a/go.sum +++ b/go.sum @@ -34,6 +34,8 @@ github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7X github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/antithesishq/antithesis-sdk-go v0.4.3-default-no-op h1:+OSa/t11TFhqfrX0EOSqQBDJ0YlpmK0rDSiB19dg9M0= +github.com/antithesishq/antithesis-sdk-go v0.4.3-default-no-op/go.mod h1:IUpT2DPAKh6i/YhSbt6Gl3v2yvUZjmKncl7U91fup7E= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/benbjohnson/hashfs v0.2.2 h1:vFZtksphM5LcnMRFctj49jCUkCc7wp3NP6INyfjkse4= @@ -166,6 +168,8 @@ github.com/google/brotli/go/cbrotli v0.0.0-20230829110029-ed738e842d2f/go.mod h1 github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-tpm v0.9.3 h1:+yx0/anQuGzi+ssRqeD6WpXjW2L/V0dItUayO0i9sRc= +github.com/google/go-tpm v0.9.3/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= @@ -195,8 +199,8 @@ github.com/json-iterator/go v0.0.0-20171115153421-f7279a603ede/go.mod h1:+SdeFBv github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= @@ -226,12 +230,12 @@ github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0 github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM= github.com/nats-io/jwt/v2 v2.7.3 h1:6bNPK+FXgBeAqdj4cYQ0F8ViHRbi7woQLq4W29nUAzE= github.com/nats-io/jwt/v2 v2.7.3/go.mod h1:GvkcbHhKquj3pkioy5put1wvPxs78UlZ7D/pY+BgZk4= -github.com/nats-io/nats-server/v2 v2.10.24 h1:KcqqQAD0ZZcG4yLxtvSFJY7CYKVYlnlWoAiVZ6i/IY4= -github.com/nats-io/nats-server/v2 v2.10.24/go.mod h1:olvKt8E5ZlnjyqBGbAXtxvSQKsPodISK5Eo/euIta4s= -github.com/nats-io/nats.go v1.38.0 h1:A7P+g7Wjp4/NWqDOOP/K6hfhr54DvdDQUznt5JFg9XA= -github.com/nats-io/nats.go v1.38.0/go.mod h1:IGUM++TwokGnXPs82/wCuiHS02/aKrdYUQkU8If6yjw= -github.com/nats-io/nkeys v0.4.9 h1:qe9Faq2Gxwi6RZnZMXfmGMZkg3afLLOtrU+gDZJ35b0= -github.com/nats-io/nkeys v0.4.9/go.mod h1:jcMqs+FLG+W5YO36OX6wFIFcmpdAns+w1Wm6D3I/evE= +github.com/nats-io/nats-server/v2 v2.11.1 h1:LwdauqMqMNhTxTN3+WFTX6wGDOKntHljgZ+7gL5HCnk= +github.com/nats-io/nats-server/v2 v2.11.1/go.mod h1:leXySghbdtXSUmWem8K9McnJ6xbJOb0t9+NQ5HTRZjI= +github.com/nats-io/nats.go v1.41.1 h1:lCc/i5x7nqXbspxtmXaV4hRguMPHqE/kYltG9knrCdU= +github.com/nats-io/nats.go v1.41.1/go.mod h1:mzHiutcAdZrg6WLfYVKXGseqqow2fWmwlTEUOHsI4jY= +github.com/nats-io/nkeys v0.4.10 h1:glmRrpCmYLHByYcePvnTBEAwawwapjCPMjy2huw20wc= +github.com/nats-io/nkeys v0.4.10/go.mod h1:OjRrnIKnWBFl+s4YK5ChQfvHP2fxqZexrKJoVVyWB3U= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= @@ -326,8 +330,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA= golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= @@ -357,8 +361,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -376,8 +380,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -386,8 +390,8 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -398,10 +402,10 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= -golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= +golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=