diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 0cff25c0..917ba6a6 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -38,7 +38,7 @@ jobs: run: yarn playwright install --with-deps - name: Install and run Docker Compose - uses: hoverkraft-tech/compose-action@v2.0.2 + uses: hoverkraft-tech/compose-action@v2.2.0 with: compose-file: './docker-compose.yml' diff --git a/.github/workflows/grafana-bench.yml b/.github/workflows/grafana-bench.yml index 27ce2e18..534923dd 100644 --- a/.github/workflows/grafana-bench.yml +++ b/.github/workflows/grafana-bench.yml @@ -3,6 +3,8 @@ on: push: # Only run on push to the main branch branches: [main, master] + pull_request: + branches: [main, master] jobs: test: @@ -35,34 +37,25 @@ jobs: NODE_OPTIONS: '--max_old_space_size=4096' - name: Install and run Docker Compose - uses: hoverkraft-tech/compose-action@v2.0.2 + uses: hoverkraft-tech/compose-action@v2.2.0 with: compose-file: './docker-compose.yml' - - name: Wait for Grafana to start + - name: Ensure Grafana is running run: | curl http://localhost:3000 - #RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000) - #echo $response - #if [ $RESPONSE -ne 200 ]; then - # sleep 5; - # echo "Grafana is not accessible" - # exit 1 - #fi - name: Run Grafana Bench tests run: | docker run --rm \ --network=host \ --volume="./:/home/bench/tests/" \ - us-docker.pkg.dev/grafanalabs-global/docker-grafana-bench-prod/grafana-bench:v0.3.0-rc3 test \ - --grafana-admin-password "admin" \ - --grafana-admin-user "admin" \ + us-docker.pkg.dev/grafanalabs-global/docker-grafana-bench-prod/grafana-bench:v0.3.0 test \ + --test-runner "playwright" \ + --test-suite-base "/home/bench/tests/" \ --grafana-url "http://localhost:3000" \ - --log-level DEBUG \ --pw-execute-cmd "yarn e2e" \ - --pw-prepare-cmd "yarn install --frozen-lockfile && yarn playwright install" \ + --pw-prepare-cmd "yarn install --frozen-lockfile; yarn playwright install" \ --test-env-vars "CI=true" \ - --test-runner "playwright" \ - --test-suite-base "/home/bench/tests/" + --log-level DEBUG diff --git a/CHANGELOG.md b/CHANGELOG.md index 35282038..f54d4466 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,31 @@ # Changelog +## 4.7.0 + +### Features + +- Add JSON column sub-paths to column selection in query builder +- Added events support in trace detail view.(https://github.com/grafana/clickhouse-datasource/pull/1128) + +## 4.6.0 + +### Features + +- Add support for new Variant, Dynamic, and JSON types (https://github.com/grafana/clickhouse-datasource/pull/1108) + +### Fixes + +- Optimized performance for log volumes processing using ClickHouse `multiSearchAny` + +## 4.5.1 + +### Fixes + +- Dependency updates + ## 4.5.0 -## Features +### Features - Implemented log context for log queries - Added configuration options for log context columns diff --git a/go.mod b/go.mod index 5eb6742a..0fad986d 100644 --- a/go.mod +++ b/go.mod @@ -1,54 +1,57 @@ module github.com/grafana/clickhouse-datasource -go 1.22 +go 1.23 -toolchain go1.22.6 +toolchain go1.23.4 require ( - github.com/ClickHouse/clickhouse-go/v2 v2.30.0 - github.com/docker/docker v27.3.1+incompatible + github.com/ClickHouse/clickhouse-go/v2 v2.30.2 + github.com/docker/docker v27.5.1+incompatible github.com/docker/go-units v0.5.0 - github.com/grafana/grafana-plugin-sdk-go v0.258.0 - github.com/grafana/sqlds/v3 v3.4.2 + github.com/grafana/grafana-plugin-sdk-go v0.263.0 + github.com/grafana/sqlds/v4 v4.1.7 github.com/paulmach/orb v0.11.1 github.com/pkg/errors v0.9.1 github.com/shopspring/decimal v1.4.0 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/testcontainers/testcontainers-go v0.33.0 - golang.org/x/net v0.30.0 + golang.org/x/net v0.34.0 ) require ( - github.com/apache/arrow/go/v15 v15.0.2 // indirect + github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 // indirect + github.com/apache/arrow-go/v18 v18.0.1-0.20241212180703-82be143d7c30 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/distribution/reference v0.6.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/goccy/go-json v0.10.2 // indirect - github.com/grafana/dataplane/sdata v0.0.7 // indirect + github.com/goccy/go-json v0.10.4 // indirect + github.com/grafana/dataplane/sdata v0.0.9 // indirect github.com/grafana/otel-profiling-go v0.5.1 // indirect github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // indirect github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 // indirect github.com/jszwedko/go-datemath v0.1.1-0.20230526204004-640a500621d6 // indirect - github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/sys/user v0.1.0 // indirect github.com/moby/sys/userns v0.1.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/zeebo/xxh3 v1.0.2 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect - go.opentelemetry.io/contrib/samplers/jaegerremote v0.25.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 // indirect + go.opentelemetry.io/contrib/samplers/jaegerremote v0.27.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 // indirect - golang.org/x/sync v0.8.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/time v0.9.0 // indirect ) require ( dario.cat/mergo v1.0.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/BurntSushi/toml v1.4.0 // indirect - github.com/ClickHouse/ch-go v0.61.5 // indirect + github.com/ClickHouse/ch-go v0.64.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/andybalholm/brotli v1.1.1 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -60,30 +63,30 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/go-connections v0.5.0 // indirect - github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a + github.com/elazarl/goproxy v1.7.0 github.com/fatih/color v1.15.0 // indirect - github.com/getkin/kin-openapi v0.124.0 // indirect + github.com/getkin/kin-openapi v0.128.0 // indirect github.com/go-faster/city v1.0.1 // indirect github.com/go-faster/errors v0.7.1 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-openapi/jsonpointer v0.20.2 // indirect - github.com/go-openapi/swag v0.22.8 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/flatbuffers v23.5.26+incompatible // indirect + github.com/google/flatbuffers v24.3.25+incompatible // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect - github.com/hashicorp/go-plugin v1.6.1 // indirect + github.com/hashicorp/go-plugin v1.6.2 // indirect github.com/hashicorp/yamux v0.1.1 // indirect - github.com/invopop/yaml v0.2.0 // indirect + github.com/invopop/yaml v0.3.1 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/compress v1.17.11 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect github.com/magefile/mage v1.15.0 // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -93,11 +96,10 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.9 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.14.1 // indirect - github.com/mithrandie/csvq v1.17.10 // indirect - github.com/mithrandie/csvq-driver v1.6.8 // indirect + github.com/mithrandie/csvq v1.18.1 // indirect + github.com/mithrandie/csvq-driver v1.7.0 // indirect github.com/mithrandie/go-file/v2 v2.1.0 // indirect - github.com/mithrandie/go-text v1.5.4 // indirect + github.com/mithrandie/go-text v1.6.0 // indirect github.com/mithrandie/ternary v1.1.1 // indirect github.com/moby/patternmatcher v0.6.0 // indirect github.com/moby/sys/sequential v0.5.0 // indirect @@ -111,12 +113,12 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect - github.com/pierrec/lz4/v4 v4.1.21 // indirect + github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/prometheus/client_golang v1.20.5 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.60.0 // indirect + github.com/prometheus/common v0.61.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/segmentio/asm v1.2.0 // indirect @@ -131,28 +133,28 @@ require ( github.com/unknwon/log v0.0.0-20200308114134-929b1006e34a // indirect github.com/urfave/cli v1.22.16 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0 // indirect - go.opentelemetry.io/contrib/propagators/jaeger v1.31.0 // indirect - go.opentelemetry.io/otel v1.31.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect - go.opentelemetry.io/otel/metric v1.31.0 // indirect - go.opentelemetry.io/otel/sdk v1.31.0 // indirect - go.opentelemetry.io/otel/trace v1.31.0 // indirect - go.opentelemetry.io/proto/otlp v1.3.1 // indirect - golang.org/x/crypto v0.28.0 // indirect - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect - golang.org/x/tools v0.22.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect - google.golang.org/grpc v1.67.1 // indirect - google.golang.org/protobuf v1.35.1 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.57.0 // indirect + go.opentelemetry.io/contrib/propagators/jaeger v1.33.0 // indirect + go.opentelemetry.io/otel v1.34.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 // indirect + go.opentelemetry.io/otel/metric v1.34.0 // indirect + go.opentelemetry.io/otel/sdk v1.34.0 // indirect + go.opentelemetry.io/otel/trace v1.34.0 // indirect + go.opentelemetry.io/proto/otlp v1.4.0 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/sys v0.29.0 // indirect + golang.org/x/term v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/tools v0.28.0 // indirect + golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect + google.golang.org/grpc v1.69.2 // indirect + google.golang.org/protobuf v1.35.2 // indirect gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 07a357b1..e227c42c 100644 --- a/go.sum +++ b/go.sum @@ -1,22 +1,26 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/ClickHouse/ch-go v0.61.5 h1:zwR8QbYI0tsMiEcze/uIMK+Tz1D3XZXLdNrlaOpeEI4= -github.com/ClickHouse/ch-go v0.61.5/go.mod h1:s1LJW/F/LcFs5HJnuogFMta50kKDO0lf9zzfrbl0RQg= -github.com/ClickHouse/clickhouse-go/v2 v2.30.0 h1:AG4D/hW39qa58+JHQIFOSnxyL46H6h2lrmGGk17dhFo= -github.com/ClickHouse/clickhouse-go/v2 v2.30.0/go.mod h1:i9ZQAojcayW3RsdCb3YR+n+wC2h65eJsZCscZ1Z1wyo= +github.com/ClickHouse/ch-go v0.64.0 h1:+MByORSlUvgPwmitmQi7OH/zuC/9Pk87Mulbq1eKa2s= +github.com/ClickHouse/ch-go v0.64.0/go.mod h1:RBUynvczWwVzhS6Up9lPKlH1mrk4UAmle6uzCiW4Pkc= +github.com/ClickHouse/clickhouse-go/v2 v2.30.2 h1:WsG2k1uiDh+0z/YNubK6aAc27sHzmVISlVpK2uGTrBw= +github.com/ClickHouse/clickhouse-go/v2 v2.30.2/go.mod h1:F7dAGn2PQzY7FkzZrY+04rSBodstSjaNg/DIuQHa3uA= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= -github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE= -github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA= +github.com/apache/arrow-go/v18 v18.0.1-0.20241212180703-82be143d7c30 h1:hXVi7QKuCQ0E8Yujfu9b0f0RnzZ72efpWvPnZgnJPrE= +github.com/apache/arrow-go/v18 v18.0.1-0.20241212180703-82be143d7c30/go.mod h1:RNuWDIiGjq5nndL2PyQrndUy9nMLwheA3uWaAV7fe4U= +github.com/apache/thrift v0.21.0 h1:tdPmh/ptjE1IJnhbhrcl2++TauVjy242rkV/UzJChnE= +github.com/apache/thrift v0.21.0/go.mod h1:W1H8aR/QRtYNvrPeFXBtobyRkd0/YVhTc6i07XIAgDw= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= @@ -45,17 +49,14 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI= -github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.5.1+incompatible h1:4PYU5dnBYqRQi0294d1FBECqT9ECWeQAIfE8q4YnPY8= +github.com/docker/docker v27.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= -github.com/elazarl/goproxy/ext v0.0.0-20220115173737-adb46da277ac h1:9yrT5tmn9Zc0ytWPASlaPwQfQMQYnRf0RSDe1XvHw0Q= -github.com/elazarl/goproxy/ext v0.0.0-20220115173737-adb46da277ac/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/elazarl/goproxy v1.7.0 h1:EXv2nV4EjM60ZtsEVLYJG4oBXhDGutMKperpHsZ/v+0= +github.com/elazarl/goproxy v1.7.0/go.mod h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= @@ -64,8 +65,8 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/getkin/kin-openapi v0.124.0 h1:VSFNMB9C9rTKBnQ/fpyDU8ytMTr4dWI9QovSKj9kz/M= -github.com/getkin/kin-openapi v0.124.0/go.mod h1:wb1aSZA/iWmorQP9KTAS/phLj/t17B5jT7+fS8ed9NM= +github.com/getkin/kin-openapi v0.128.0 h1:jqq3D9vC9pPq1dGcOCv7yOp1DaEe7c/T1vzcLbITSp4= +github.com/getkin/kin-openapi v0.128.0/go.mod h1:OZrfXzUfGrNbsKj+xmFBx6E5c6yH3At/tAKSc2UszXM= github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw= github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw= github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg= @@ -78,24 +79,26 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= -github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= -github.com/go-openapi/swag v0.22.8 h1:/9RjDSQ0vbFR+NyjGMkFTsA1IA0fmhKSThmfGZjicbw= -github.com/go-openapi/swag v0.22.8/go.mod h1:6QT22icPLEqAM/z/TChgb4WAveCHF92+2gF0CNjHpPI= -github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= +github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg= -github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI= +github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -110,30 +113,30 @@ github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1 github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/grafana/dataplane/sdata v0.0.7 h1:CImITypIyS1jxijCR6xqKx71JnYAxcwpH9ChK0gH164= -github.com/grafana/dataplane/sdata v0.0.7/go.mod h1:Jvs5ddpGmn6vcxT7tCTWAZ1mgi4sbcdFt9utQx5uMAU= -github.com/grafana/grafana-plugin-sdk-go v0.258.0 h1:rWsaD+5wuGUSNr9fFnSwS6t/jcRtAoEJ51pIR9bbPNs= -github.com/grafana/grafana-plugin-sdk-go v0.258.0/go.mod h1:jN19FbzhAcPTLPIy31X5nvx38rR5eoD/1rASiip0GBY= +github.com/grafana/dataplane/sdata v0.0.9 h1:AGL1LZnCUG4MnQtnWpBPbQ8ZpptaZs14w6kE/MWfg7s= +github.com/grafana/dataplane/sdata v0.0.9/go.mod h1:Jvs5ddpGmn6vcxT7tCTWAZ1mgi4sbcdFt9utQx5uMAU= +github.com/grafana/grafana-plugin-sdk-go v0.263.0 h1:y8vo7hUm50Ei7rdeNNivgehHNsOmCjc8wRmBat5yA3w= +github.com/grafana/grafana-plugin-sdk-go v0.263.0/go.mod h1:U43Cnrj/9DNYyvFcNdeUWNjMXTKNB0jcTcQGpWKd2gw= github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8= github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls= github.com/grafana/pyroscope-go/godeltaprof v0.1.8 h1:iwOtYXeeVSAeYefJNaxDytgjKtUuKQbJqgAIjlnicKg= github.com/grafana/pyroscope-go/godeltaprof v0.1.8/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= -github.com/grafana/sqlds/v3 v3.4.2 h1:CiJBoqr0GD68VHGHuXrAfh993Q90/2OS/YDm4f9zL4U= -github.com/grafana/sqlds/v3 v3.4.2/go.mod h1:NdALlDk49eEyDsmm7CoGP9CkIDDF6tV2adGcpxWRHlk= +github.com/grafana/sqlds/v4 v4.1.7 h1:X5703emD4yZ7AF0cBbh4kwFS4smPL5yVNWRQFjUOOe8= +github.com/grafana/sqlds/v4 v4.1.7/go.mod h1:LnEai8vDHLPvJmggLqamDzMV6ldnzjZmRfMWoUQBKCE= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 h1:kQ0NI7W1B3HwiN5gAYtY+XFItDPbLBwYRxAqbFTyDes= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0/go.mod h1:zrT2dxOAjNFPRGjTUe2Xmb4q4YdUwVvQFV6xiCSf+z0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-plugin v1.6.1 h1:P7MR2UP6gNKGPp+y7EZw2kOiq4IR9WiqLvp0XOsVdwI= -github.com/hashicorp/go-plugin v1.6.1/go.mod h1:XPHFku2tFo3o3QKFgSYo+cghcUhw1NA1hZyMK0PWAw0= +github.com/hashicorp/go-plugin v1.6.2 h1:zdGAEd0V1lCaU0u+MxWQhtSDQmahpkwOun8U8EiRVog= +github.com/hashicorp/go-plugin v1.6.2/go.mod h1:CkgLQ5CZqNmdL9U9JzM532t8ZiYQ35+pj3b1FD37R0Q= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/invopop/yaml v0.2.0 h1:7zky/qH+O0DwAyoobXUqvVBwgBFRxKoQ/3FjcVpjTMY= -github.com/invopop/yaml v0.2.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q= +github.com/invopop/yaml v0.3.1 h1:f0+ZpmhfBSS4MhG+4HYseMdJhoeeopbSKbq5Rpeelso= +github.com/invopop/yaml v0.3.1/go.mod h1:PMOp3nn4/12yEZUFfmOuNHJsZToEEOwoWsT+D81KkeA= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -147,11 +150,13 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +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/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -182,20 +187,22 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= 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/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= -github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mithrandie/csvq v1.17.10 h1:ba8W6rWgB6LfIhY1ttmgXzKNcCoVtT4e6zuZTaGuAQg= -github.com/mithrandie/csvq v1.17.10/go.mod h1:ALXIPvYIbBEJvcoB41WSQhhLqOXT+2P4VommU+2DLLc= -github.com/mithrandie/csvq-driver v1.6.8 h1:0rF4yZ0ByIECznd9Ld+Ry5tIEYq/zxbb3QYuni/JWFk= -github.com/mithrandie/csvq-driver v1.6.8/go.mod h1:SrUKsCbaFKaaxKrptvLJ882CFMJD2hJAjv+Ev1HcUM8= +github.com/mithrandie/csvq v1.18.1 h1:f7NB2scbb7xx2ffPduJ2VtZ85RpWXfvanYskAkGlCBU= +github.com/mithrandie/csvq v1.18.1/go.mod h1:MRJj7AtcXfk7jhNGxLuJGP3LORmh4lpiPWxQ7VyCRn8= +github.com/mithrandie/csvq-driver v1.7.0 h1:ejiavXNWwTPMyr3fJFnhcqd1L1cYudA0foQy9cZrqhw= +github.com/mithrandie/csvq-driver v1.7.0/go.mod h1:HcN3xL9UCJnBYA/AIQOOB/KlyfXAiYr5yxDmiwrGk5o= github.com/mithrandie/go-file/v2 v2.1.0 h1:XA5Tl+73GXMDvgwSE3Sg0uC5FkLr3hnXs8SpUas0hyg= github.com/mithrandie/go-file/v2 v2.1.0/go.mod h1:9YtTF3Xo59GqC1Pxw6KyGVcM/qubAMlxVsqI/u9r++c= -github.com/mithrandie/go-text v1.5.4 h1:2LIASku5RuCqxa6O6eOvQwQ0k5FYWP1ID2hk9egYYGc= -github.com/mithrandie/go-text v1.5.4/go.mod h1:yaVYauF3TLf7LvjGrrQB/mffIkohXTXJpW9zQ206UL8= +github.com/mithrandie/go-text v1.6.0 h1:8gOXTMPbMY8DJbKMTv8kHhADcJlDWXqS/YQH4SyWO6s= +github.com/mithrandie/go-text v1.6.0/go.mod h1:xCgj1xiNbI/d4xA9sLVvXkjh5B2tNx2ZT2/3rpmh8to= github.com/mithrandie/ternary v1.1.1 h1:k/joD6UGVYxHixYmSR8EGgDFNONBMqyD373xT4QRdC4= github.com/mithrandie/ternary v1.1.1/go.mod h1:0D9Ba3+09K2TdSZO7/bFCC0GjSXetCvYuYq0u8FY/1g= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= @@ -235,8 +242,8 @@ github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/En github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= -github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= -github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= +github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -247,11 +254,10 @@ github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+ github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.60.0 h1:+V9PAREWNvJMAuJ1x1BaWl9dewMW4YrHZQbx0sJNllA= -github.com/prometheus/common v0.60.0/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= +github.com/prometheus/common v0.61.0 h1:3gv/GThfX0cV2lpO7gkTUwZru38mxevy90Bj8YFSRQQ= +github.com/prometheus/common v0.61.0/go.mod h1:zr29OCN/2BsJRaFwG8QOBr41D6kkchKbpeNH7pAjb/s= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -287,8 +293,9 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/testcontainers/testcontainers-go v0.33.0 h1:zJS9PfXYT5O0ZFXM2xxXfk4J5UMw/kRiISng037Gxdw= github.com/testcontainers/testcontainers-go v0.33.0/go.mod h1:W80YpTa8D5C3Yy16icheD01UTDu+LmXIA2Keo+jWtT8= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -323,64 +330,68 @@ github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 h1:yMkBS9yViCc7U7yeLzJPM2XizlfdVvBRSmsQDWu6qc0= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0/go.mod h1:n8MR6/liuGB5EmTETUBeU5ZgqMOlqKRxUaqPQBOANZ8= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0 h1:4BZHA+B1wXEQoGNHxW8mURaLhcdGwvRnmhGbm+odRbc= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0/go.mod h1:3qi2EEwMgB4xnKgPLqsDP3j9qxnHDZeHsnAxfjQqTko= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM= -go.opentelemetry.io/contrib/propagators/jaeger v1.31.0 h1:k9P5RQEWIKUP6N18/ouSvPD/uTjc7s+8WPnuVK6lWOI= -go.opentelemetry.io/contrib/propagators/jaeger v1.31.0/go.mod h1:OpgiBRssaVKOTM5lSKkOBIGQh/ixvfZRmxQXARK/kGQ= -go.opentelemetry.io/contrib/samplers/jaegerremote v0.25.0 h1:nwxen/H3auImb5D4Neo8TDhDseskdRYmlHvi7j1sExc= -go.opentelemetry.io/contrib/samplers/jaegerremote v0.25.0/go.mod h1:KjcLnhrgBMLiPPAqyoGhuNmF6jm38LCPV6hdbBeFOTU= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.57.0 h1:7F3XCD6WYzDkwbi8I8N+oYJWquPVScnRosKGgqjsR8c= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.57.0/go.mod h1:Dk3C0BfIlZDZ5c6eVS7TYiH2vssuyUU3vUsgbrR+5V4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 h1:DheMAlT6POBP+gh8RUH19EOTnQIor5QE0uSRPtzCpSw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0/go.mod h1:wZcGmeVO9nzP67aYSLDqXNWK87EZWhi7JWj1v7ZXf94= +go.opentelemetry.io/contrib/propagators/jaeger v1.33.0 h1:Jok/dG8kfp+yod29XKYV/blWgYPlMuRUoRHljrXMF5E= +go.opentelemetry.io/contrib/propagators/jaeger v1.33.0/go.mod h1:ku/EpGk44S5lyVMbtJRK2KFOnXEehxf6SDnhu1eZmjA= +go.opentelemetry.io/contrib/samplers/jaegerremote v0.27.0 h1:Co7WDtZosbvNcG4Nqbs3AEVuHNsN6EMc1/1uGKAvyJk= +go.opentelemetry.io/contrib/samplers/jaegerremote v0.27.0/go.mod h1:IohbtCIY5Erb6wKnDddXOMNlG7GwyZnkrgcqjPmhpaA= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= -go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= -go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o= +go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= +go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 h1:5pojmb1U1AogINhN3SurB+zm/nIcusopeBNp42f45QM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0/go.mod h1:57gTHJSE5S1tqg+EKsLPlTWhpHMsWlVmer+LA926XiA= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= -go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= -go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= +go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= -go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= +go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= +go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= -go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= -go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= -go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= -go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= +go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg= +go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= -golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk= +golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/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-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -399,52 +410,49 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= 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= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= -golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= +golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= -gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 h1:T6rh4haD3GVYsgEfWExoCZA2o2FmbNyKpTuAxbEFPTg= -google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:wp2WsuBYj6j8wUdo3ToZsdxxixbvQNAHqVJrTgi5E5M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 h1:QCqS/PdaHTSWGvupk2F/ehwHtGc0/GYkT+3GAcR1CCc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= +gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= +google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q= +google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 h1:8ZmaLZE4XWrtU3MyClkYqqtl6Oegr3235h7jxsDyqCY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= +google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= +google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= -google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= +google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -454,7 +462,6 @@ gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= diff --git a/package.json b/package.json index b0d4bbea..c01484e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "clickhouse-datasource", - "version": "4.5.0", + "version": "4.7.0", "description": "Clickhouse Datasource", "engines": { "node": ">=20" @@ -26,16 +26,16 @@ "devDependencies": { "@babel/core": "^7.25.7", "@grafana/eslint-config": "^7.0.0", - "@grafana/plugin-e2e": "^1.11.0", + "@grafana/plugin-e2e": "^1.15.0", "@grafana/tsconfig": "^2.0.0", - "@playwright/test": "^1.48.2", + "@playwright/test": "^1.50.0", "@swc/core": "^1.7.26", "@swc/helpers": "^0.5.13", "@swc/jest": "^0.2.36", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "6.5.0", "@testing-library/react": "^16.0.1", - "@testing-library/user-event": "^14.5.2", + "@testing-library/user-event": "^14.6.1", "@types/glob": "^8.1.0", "@types/jest": "^29.5.13", "@types/lodash": "^4.17.10", @@ -43,7 +43,7 @@ "@types/react-router-dom": "^5.3.3", "@types/webpack-livereload-plugin": "^2.3.6", "copy-webpack-plugin": "^12.0.2", - "cspell": "^8.15.5", + "cspell": "^8.17.3", "css-loader": "^7.1.2", "eslint-plugin-deprecation": "^3.0.0", "eslint-webpack-plugin": "^4.2.0", @@ -59,7 +59,7 @@ "sass-loader": "16.0.2", "style-loader": "4.0.0", "swc-loader": "^0.2.6", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "typescript": "5.6.2", @@ -74,8 +74,8 @@ }, "dependencies": { "@emotion/css": "11.13.4", - "@grafana/data": "^11.3.0", - "@grafana/runtime": "^11.3.0", + "@grafana/data": "^11.4.0", + "@grafana/runtime": "^11.4.0", "@grafana/schema": "^11.2.2", "@grafana/ui": "^11.2.2", "js-sql-parser": "^1.6.0", @@ -83,7 +83,7 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-router-dom": "5.3.4", - "semver": "7.6.3", + "semver": "7.7.0", "tslib": "2.7.0" }, "packageManager": "yarn@1.22.22", diff --git a/pkg/converters/converters.go b/pkg/converters/converters.go index b5a38a42..5123a13c 100644 --- a/pkg/converters/converters.go +++ b/pkg/converters/converters.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/ClickHouse/clickhouse-go/v2" "math/big" "net" "reflect" @@ -41,6 +42,11 @@ var matchRegexes = map[string]*regexp.Regexp{ "Point": regexp.MustCompile(`^Point`), "SimpleAggregateFunction()": regexp.MustCompile(`^SimpleAggregateFunction\(.*\)`), "Tuple()": regexp.MustCompile(`^Tuple\(.*\)`), + "Variant()": regexp.MustCompile(`^Variant\(.*\)`), + "Dynamic": regexp.MustCompile(`^Dynamic`), + "Dynamic()": regexp.MustCompile(`Dynamic\(.*\)`), + "JSON": regexp.MustCompile(`^JSON`), + "JSON()": regexp.MustCompile(`^JSON\(.*\)`), } var Converters = map[string]Converter{ @@ -211,6 +217,36 @@ var Converters = map[string]Converter{ matchRegex: matchRegexes["Tuple()"], scanType: reflect.TypeOf((*interface{})(nil)).Elem(), }, + "Variant()": { + convert: jsonConverter, + fieldType: data.FieldTypeNullableJSON, + matchRegex: matchRegexes["Variant()"], + scanType: reflect.TypeOf((*interface{})(nil)).Elem(), + }, + "Dynamic": { + convert: jsonConverter, + fieldType: data.FieldTypeNullableJSON, + matchRegex: matchRegexes["Dynamic"], + scanType: reflect.TypeOf((*interface{})(nil)).Elem(), + }, + "Dynamic()": { + convert: jsonConverter, + fieldType: data.FieldTypeNullableJSON, + matchRegex: matchRegexes["Dynamic()"], + scanType: reflect.TypeOf((*interface{})(nil)).Elem(), + }, + "JSON": { + convert: jsonConverter, + fieldType: data.FieldTypeNullableJSON, + matchRegex: matchRegexes["JSON"], + scanType: reflect.TypeOf((*clickhouse.JSON)(nil)).Elem(), + }, + "JSON()": { + convert: jsonConverter, + fieldType: data.FieldTypeNullableJSON, + matchRegex: matchRegexes["JSON()"], + scanType: reflect.TypeOf((*clickhouse.JSON)(nil)).Elem(), + }, // NestedConverter currently only supports flatten_nested=0 only which can be marshalled into []map[string]interface{} "Nested()": { convert: jsonConverter, diff --git a/pkg/macros/macros.go b/pkg/macros/macros.go index 7a6495a8..b6457e23 100644 --- a/pkg/macros/macros.go +++ b/pkg/macros/macros.go @@ -6,10 +6,10 @@ import ( "strings" "time" - "github.com/grafana/sqlds/v3" + "github.com/grafana/sqlds/v4" + "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data/sqlutil" - "github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource" ) // Converts a time.Time to a Date @@ -49,7 +49,7 @@ func ToTimeFilterMs(query *sqlutil.Query, args []string) (string, error) { func TimeFilter(query *sqlutil.Query, args []string) (string, error) { if len(args) != 1 { - return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false) + return "", backend.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlutil.ErrorBadArgumentCount, len(args))) } var ( @@ -63,7 +63,7 @@ func TimeFilter(query *sqlutil.Query, args []string) (string, error) { func TimeFilterMs(query *sqlutil.Query, args []string) (string, error) { if len(args) != 1 { - return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false) + return "", backend.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlutil.ErrorBadArgumentCount, len(args))) } var ( @@ -77,7 +77,7 @@ func TimeFilterMs(query *sqlutil.Query, args []string) (string, error) { func DateFilter(query *sqlutil.Query, args []string) (string, error) { if len(args) != 1 { - return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false) + return "", backend.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlutil.ErrorBadArgumentCount, len(args))) } var ( column = args[0] @@ -90,7 +90,7 @@ func DateFilter(query *sqlutil.Query, args []string) (string, error) { func DateTimeFilter(query *sqlutil.Query, args []string) (string, error) { if len(args) != 2 { - return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 2 arguments, received %d", sqlds.ErrorBadArgumentCount, len(args)), false) + return "", backend.DownstreamError(fmt.Errorf("%w: expected 2 arguments, received %d", sqlutil.ErrorBadArgumentCount, len(args))) } var ( dateColumn = args[0] @@ -106,7 +106,7 @@ func DateTimeFilter(query *sqlutil.Query, args []string) (string, error) { func TimeInterval(query *sqlutil.Query, args []string) (string, error) { if len(args) != 1 { - return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false) + return "", backend.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlutil.ErrorBadArgumentCount, len(args))) } seconds := math.Max(query.Interval.Seconds(), 1) @@ -115,7 +115,7 @@ func TimeInterval(query *sqlutil.Query, args []string) (string, error) { func TimeIntervalMs(query *sqlutil.Query, args []string) (string, error) { if len(args) != 1 { - return "", errorsource.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlds.ErrorBadArgumentCount, len(args)), false) + return "", backend.DownstreamError(fmt.Errorf("%w: expected 1 argument, received %d", sqlutil.ErrorBadArgumentCount, len(args))) } milliseconds := math.Max(float64(query.Interval.Milliseconds()), 1) diff --git a/pkg/macros/macros_test.go b/pkg/macros/macros_test.go index 8a8a3f5c..4599dcdc 100644 --- a/pkg/macros/macros_test.go +++ b/pkg/macros/macros_test.go @@ -7,7 +7,7 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data/sqlutil" - "github.com/grafana/sqlds/v3" + "github.com/grafana/sqlds/v4" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/pkg/plugin/datasource.go b/pkg/plugin/datasource.go index fbf82703..618e80a1 100644 --- a/pkg/plugin/datasource.go +++ b/pkg/plugin/datasource.go @@ -5,7 +5,7 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" - "github.com/grafana/sqlds/v3" + "github.com/grafana/sqlds/v4" ) func NewDatasource(ctx context.Context, settings backend.DataSourceInstanceSettings) (instancemgmt.Instance, error) { diff --git a/pkg/plugin/driver.go b/pkg/plugin/driver.go index 40ab978e..bdc23078 100644 --- a/pkg/plugin/driver.go +++ b/pkg/plugin/driver.go @@ -21,8 +21,7 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/build" "github.com/grafana/grafana-plugin-sdk-go/data" "github.com/grafana/grafana-plugin-sdk-go/data/sqlutil" - "github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource" - "github.com/grafana/sqlds/v3" + "github.com/grafana/sqlds/v4" "github.com/pkg/errors" "golang.org/x/net/proxy" ) @@ -41,7 +40,7 @@ func getTLSConfig(settings Settings) (*tls.Config, error) { if settings.TlsAuthWithCACert && len(settings.TlsCACert) > 0 { caPool := x509.NewCertPool() if ok := caPool.AppendCertsFromPEM([]byte(settings.TlsCACert)); !ok { - return nil, errorsource.DownstreamError(ErrorInvalidCACertificate, false) + return nil, backend.DownstreamError(ErrorInvalidCACertificate) } tlsConfig.RootCAs = caPool } @@ -121,11 +120,11 @@ func (h *Clickhouse) Connect(ctx context.Context, config backend.DataSourceInsta } t, err := strconv.Atoi(settings.DialTimeout) if err != nil { - return nil, errorsource.DownstreamError(errors.New(fmt.Sprintf("invalid timeout: %s", settings.DialTimeout)), false) + return nil, backend.DownstreamError(errors.New(fmt.Sprintf("invalid timeout: %s", settings.DialTimeout))) } qt, err := strconv.Atoi(settings.QueryTimeout) if err != nil { - return nil, errorsource.DownstreamError(errors.New(fmt.Sprintf("invalid query timeout: %s", settings.QueryTimeout)), false) + return nil, backend.DownstreamError(errors.New(fmt.Sprintf("invalid query timeout: %s", settings.QueryTimeout))) } protocol := clickhouse.Native if settings.Protocol == "http" { diff --git a/pkg/plugin/driver_test.go b/pkg/plugin/driver_test.go index 5e7387cf..d7afb5a2 100644 --- a/pkg/plugin/driver_test.go +++ b/pkg/plugin/driver_test.go @@ -26,7 +26,7 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" "github.com/grafana/grafana-plugin-sdk-go/data/sqlutil" - "github.com/grafana/sqlds/v3" + "github.com/grafana/sqlds/v4" "github.com/shopspring/decimal" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/pkg/plugin/settings.go b/pkg/plugin/settings.go index 36bd0245..259f2ef0 100644 --- a/pkg/plugin/settings.go +++ b/pkg/plugin/settings.go @@ -12,7 +12,6 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/proxy" - "github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource" ) // Settings - data loaded from grafana settings database @@ -53,10 +52,10 @@ const secureHeaderKeyPrefix = "secureHttpHeaders." func (settings *Settings) isValid() (err error) { if settings.Host == "" { - return errorsource.DownstreamError(ErrorMessageInvalidHost, false) + return backend.DownstreamError(ErrorMessageInvalidHost) } if settings.Port == 0 { - return errorsource.DownstreamError(ErrorMessageInvalidPort, false) + return backend.DownstreamError(ErrorMessageInvalidPort) } return nil } @@ -80,7 +79,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings if port, ok := jsonData["port"].(string); ok { settings.Port, err = strconv.ParseInt(port, 0, 64) if err != nil { - return settings, errorsource.DownstreamError(fmt.Errorf("could not parse port value: %w", err), false) + return settings, backend.DownstreamError(fmt.Errorf("could not parse port value: %w", err)) } } else { settings.Port = int64(jsonData["port"].(float64)) @@ -93,7 +92,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings if secure, ok := jsonData["secure"].(string); ok { settings.Secure, err = strconv.ParseBool(secure) if err != nil { - return settings, errorsource.DownstreamError(fmt.Errorf("could not parse secure value: %w", err), false) + return settings, backend.DownstreamError(fmt.Errorf("could not parse secure value: %w", err)) } } else { settings.Secure = jsonData["secure"].(bool) @@ -107,7 +106,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings if tlsSkipVerify, ok := jsonData["tlsSkipVerify"].(string); ok { settings.InsecureSkipVerify, err = strconv.ParseBool(tlsSkipVerify) if err != nil { - return settings, errorsource.DownstreamError(fmt.Errorf("could not parse tlsSkipVerify value: %w", err), false) + return settings, backend.DownstreamError(fmt.Errorf("could not parse tlsSkipVerify value: %w", err)) } } else { settings.InsecureSkipVerify = jsonData["tlsSkipVerify"].(bool) @@ -117,7 +116,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings if tlsAuth, ok := jsonData["tlsAuth"].(string); ok { settings.TlsClientAuth, err = strconv.ParseBool(tlsAuth) if err != nil { - return settings, errorsource.DownstreamError(fmt.Errorf("could not parse tlsAuth value: %w", err), false) + return settings, backend.DownstreamError(fmt.Errorf("could not parse tlsAuth value: %w", err)) } } else { settings.TlsClientAuth = jsonData["tlsAuth"].(bool) @@ -127,7 +126,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings if tlsAuthWithCACert, ok := jsonData["tlsAuthWithCACert"].(string); ok { settings.TlsAuthWithCACert, err = strconv.ParseBool(tlsAuthWithCACert) if err != nil { - return settings, errorsource.DownstreamError(fmt.Errorf("could not parse tlsAuthWithCACert value: %w", err), false) + return settings, backend.DownstreamError(fmt.Errorf("could not parse tlsAuthWithCACert value: %w", err)) } } else { settings.TlsAuthWithCACert = jsonData["tlsAuthWithCACert"].(bool) @@ -175,7 +174,7 @@ func LoadSettings(ctx context.Context, config backend.DataSourceInstanceSettings if forwardGrafanaHeaders, ok := jsonData["forwardGrafanaHeaders"].(string); ok { settings.ForwardGrafanaHeaders, err = strconv.ParseBool(forwardGrafanaHeaders) if err != nil { - return settings, errorsource.DownstreamError(fmt.Errorf("could not parse forwardGrafanaHeaders value: %w", err), false) + return settings, backend.DownstreamError(fmt.Errorf("could not parse forwardGrafanaHeaders value: %w", err)) } } else { settings.ForwardGrafanaHeaders = jsonData["forwardGrafanaHeaders"].(bool) diff --git a/src/components/configEditor/TracesConfig.test.tsx b/src/components/configEditor/TracesConfig.test.tsx index 2f946367..6e9f601a 100644 --- a/src/components/configEditor/TracesConfig.test.tsx +++ b/src/components/configEditor/TracesConfig.test.tsx @@ -24,14 +24,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -56,14 +56,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -95,14 +95,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -134,14 +134,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -172,14 +172,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -211,14 +211,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -250,14 +250,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -289,14 +289,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -328,14 +328,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -367,14 +367,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -406,14 +406,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -445,14 +445,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -484,14 +484,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={onStartTimeColumnChange} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -523,14 +523,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={onTagsColumnChange} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -562,14 +562,14 @@ describe('TracesConfig', () => { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={onServiceTagsColumnChange} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); @@ -582,8 +582,8 @@ describe('TracesConfig', () => { expect(onServiceTagsColumnChange).toHaveBeenCalledWith('changed'); }); - it('should call onKindColumnChange when changed', () => { - const onKindColumnChange = jest.fn(); + it('should call onEventsColumnPrefixChange when changed', () => { + const onEventsColumnPrefixChange = jest.fn(); const result = render( { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} - onKindColumnChange={onKindColumnChange} + onEventsColumnPrefixChange={onEventsColumnPrefixChange} + onLinksColumnPrefixChange={() => {}} + onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); - const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.kind.label)); + const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.eventsPrefix.label)); expect(input).toBeInTheDocument(); fireEvent.change(input, { target: { value: 'changed' } }); fireEvent.blur(input); - expect(onKindColumnChange).toHaveBeenCalledTimes(1); - expect(onKindColumnChange).toHaveBeenCalledWith('changed'); + expect(onEventsColumnPrefixChange).toHaveBeenCalledTimes(1); + expect(onEventsColumnPrefixChange).toHaveBeenCalledWith('changed'); }); - it('should call onStatusCodeColumnChange when changed', () => { - const onStatusCodeColumnChange = jest.fn(); + it('should call onLinksColumnPrefixChange when changed', () => { + const onLinksColumnPrefixChange = jest.fn(); const result = render( { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={onLinksColumnPrefixChange} onKindColumnChange={() => {}} - onStatusCodeColumnChange={onStatusCodeColumnChange} + onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); - const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.statusCode.label)); + const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.linksPrefix.label)); expect(input).toBeInTheDocument(); fireEvent.change(input, { target: { value: 'changed' } }); fireEvent.blur(input); - expect(onStatusCodeColumnChange).toHaveBeenCalledTimes(1); - expect(onStatusCodeColumnChange).toHaveBeenCalledWith('changed'); + expect(onLinksColumnPrefixChange).toHaveBeenCalledTimes(1); + expect(onLinksColumnPrefixChange).toHaveBeenCalledWith('changed'); }); - it('should call onStatusMessageColumnChange when changed', () => { - const onStatusMessageColumnChange = jest.fn(); + it('should call onKindColumnChange when changed', () => { + const onKindColumnChange = jest.fn(); const result = render( { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} - onKindColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} + onKindColumnChange={onKindColumnChange} onStatusCodeColumnChange={() => {}} - onStatusMessageColumnChange={onStatusMessageColumnChange} + onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); - const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.statusMessage.label)); + const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.kind.label)); expect(input).toBeInTheDocument(); fireEvent.change(input, { target: { value: 'changed' } }); fireEvent.blur(input); - expect(onStatusMessageColumnChange).toHaveBeenCalledTimes(1); - expect(onStatusMessageColumnChange).toHaveBeenCalledWith('changed'); + expect(onKindColumnChange).toHaveBeenCalledTimes(1); + expect(onKindColumnChange).toHaveBeenCalledWith('changed'); }); - it('should call onInstrumentationLibraryNameColumnChange when changed', () => { - const onInstrumentationLibraryNameColumnChange = jest.fn(); + it('should call onStatusCodeColumnChange when changed', () => { + const onStatusCodeColumnChange = jest.fn(); const result = render( { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} - onStatusCodeColumnChange={() => {}} + onStatusCodeColumnChange={onStatusCodeColumnChange} onStatusMessageColumnChange={() => {}} - onInstrumentationLibraryNameColumnChange={onInstrumentationLibraryNameColumnChange} + onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); - const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.instrumentationLibraryName.label)); + const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.statusCode.label)); expect(input).toBeInTheDocument(); fireEvent.change(input, { target: { value: 'changed' } }); fireEvent.blur(input); - expect(onInstrumentationLibraryNameColumnChange).toHaveBeenCalledTimes(1); - expect(onInstrumentationLibraryNameColumnChange).toHaveBeenCalledWith('changed'); + expect(onStatusCodeColumnChange).toHaveBeenCalledTimes(1); + expect(onStatusCodeColumnChange).toHaveBeenCalledWith('changed'); }); - it('should call onInstrumentationLibraryVersionColumnChange when changed', () => { - const onInstrumentationLibraryVersionColumnChange = jest.fn(); + it('should call onStatusMessageColumnChange when changed', () => { + const onStatusMessageColumnChange = jest.fn(); const result = render( { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} - onStatusMessageColumnChange={() => {}} + onStatusMessageColumnChange={onStatusMessageColumnChange} onInstrumentationLibraryNameColumnChange={() => {}} - onInstrumentationLibraryVersionColumnChange={onInstrumentationLibraryVersionColumnChange} + onInstrumentationLibraryVersionColumnChange={() => {}} onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); - const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.instrumentationLibraryVersion.label)); + const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.statusMessage.label)); expect(input).toBeInTheDocument(); fireEvent.change(input, { target: { value: 'changed' } }); fireEvent.blur(input); - expect(onInstrumentationLibraryVersionColumnChange).toHaveBeenCalledTimes(1); - expect(onInstrumentationLibraryVersionColumnChange).toHaveBeenCalledWith('changed'); + expect(onStatusMessageColumnChange).toHaveBeenCalledTimes(1); + expect(onStatusMessageColumnChange).toHaveBeenCalledWith('changed'); }); - it('should call onStateColumnChange when changed', () => { - const onStateColumnChange = jest.fn(); + it('should call onInstrumentationLibraryNameColumnChange when changed', () => { + const onInstrumentationLibraryNameColumnChange = jest.fn(); const result = render( { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} - onInstrumentationLibraryNameColumnChange={() => {}} + onInstrumentationLibraryNameColumnChange={onInstrumentationLibraryNameColumnChange} onInstrumentationLibraryVersionColumnChange={() => {}} - onStateColumnChange={onStateColumnChange} - onEventsColumnChange={() => {}} - onLinksColumnChange={() => {}} + onStateColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); - const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.state.label)); + const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.instrumentationLibraryName.label)); expect(input).toBeInTheDocument(); fireEvent.change(input, { target: { value: 'changed' } }); fireEvent.blur(input); - expect(onStateColumnChange).toHaveBeenCalledTimes(1); - expect(onStateColumnChange).toHaveBeenCalledWith('changed'); + expect(onInstrumentationLibraryNameColumnChange).toHaveBeenCalledTimes(1); + expect(onInstrumentationLibraryNameColumnChange).toHaveBeenCalledWith('changed'); }); - it('should call onEventsColumnChange when changed', () => { - const onEventsColumnChange = jest.fn(); + it('should call onInstrumentationLibraryVersionColumnChange when changed', () => { + const onInstrumentationLibraryVersionColumnChange = jest.fn(); const result = render( { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} - onInstrumentationLibraryVersionColumnChange={() => {}} + onInstrumentationLibraryVersionColumnChange={onInstrumentationLibraryVersionColumnChange} onStateColumnChange={() => {}} - onEventsColumnChange={onEventsColumnChange} - onLinksColumnChange={() => {}} /> ); expect(result.container.firstChild).not.toBeNull(); - const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.events.label)); + const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.instrumentationLibraryVersion.label)); expect(input).toBeInTheDocument(); fireEvent.change(input, { target: { value: 'changed' } }); fireEvent.blur(input); - expect(onEventsColumnChange).toHaveBeenCalledTimes(1); - expect(onEventsColumnChange).toHaveBeenCalledWith('changed'); + expect(onInstrumentationLibraryVersionColumnChange).toHaveBeenCalledTimes(1); + expect(onInstrumentationLibraryVersionColumnChange).toHaveBeenCalledWith('changed'); }); - it('should call onLinksColumnChange when changed', () => { - const onLinksColumnChange = jest.fn(); + it('should call onStateColumnChange when changed', () => { + const onStateColumnChange = jest.fn(); const result = render( { onStartTimeColumnChange={() => {}} onTagsColumnChange={() => {}} onServiceTagsColumnChange={() => {}} + onEventsColumnPrefixChange={() => {}} + onLinksColumnPrefixChange={() => {}} onKindColumnChange={() => {}} onStatusCodeColumnChange={() => {}} onStatusMessageColumnChange={() => {}} onInstrumentationLibraryNameColumnChange={() => {}} onInstrumentationLibraryVersionColumnChange={() => {}} - onStateColumnChange={() => {}} - onEventsColumnChange={() => {}} - onLinksColumnChange={onLinksColumnChange} + onStateColumnChange={onStateColumnChange} /> ); expect(result.container.firstChild).not.toBeNull(); - const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.links.label)); + const input = result.getByPlaceholderText(columnLabelToPlaceholder(allLabels.components.Config.TracesConfig.columns.state.label)); expect(input).toBeInTheDocument(); fireEvent.change(input, { target: { value: 'changed' } }); fireEvent.blur(input); - expect(onLinksColumnChange).toHaveBeenCalledTimes(1); - expect(onLinksColumnChange).toHaveBeenCalledWith('changed'); + expect(onStateColumnChange).toHaveBeenCalledTimes(1); + expect(onStateColumnChange).toHaveBeenCalledWith('changed'); }); }); diff --git a/src/components/configEditor/TracesConfig.tsx b/src/components/configEditor/TracesConfig.tsx index 8cf563a1..404d0b36 100644 --- a/src/components/configEditor/TracesConfig.tsx +++ b/src/components/configEditor/TracesConfig.tsx @@ -27,14 +27,14 @@ interface TraceConfigProps { onStartTimeColumnChange: (v: string) => void; onTagsColumnChange: (v: string) => void; onServiceTagsColumnChange: (v: string) => void; + onEventsColumnPrefixChange: (v: string) => void; + onLinksColumnPrefixChange: (v: string) => void; onKindColumnChange: (v: string) => void; onStatusCodeColumnChange: (v: string) => void; onStatusMessageColumnChange: (v: string) => void; onInstrumentationLibraryNameColumnChange: (v: string) => void; onInstrumentationLibraryVersionColumnChange: (v: string) => void; onStateColumnChange: (v: string) => void; - onEventsColumnChange: (v: string) => void; - onLinksColumnChange: (v: string) => void; } export const TracesConfig = (props: TraceConfigProps) => { @@ -43,17 +43,17 @@ export const TracesConfig = (props: TraceConfigProps) => { onOtelEnabledChange, onOtelVersionChange, onTraceIdColumnChange, onSpanIdColumnChange, onOperationNameColumnChange, onParentSpanIdColumnChange, onServiceNameColumnChange, onDurationColumnChange, onDurationUnitChange, onStartTimeColumnChange, - onTagsColumnChange, onServiceTagsColumnChange, onKindColumnChange, onStatusCodeColumnChange, - onStatusMessageColumnChange, onInstrumentationLibraryNameColumnChange, onInstrumentationLibraryVersionColumnChange, - onStateColumnChange, onEventsColumnChange, onLinksColumnChange + onTagsColumnChange, onServiceTagsColumnChange, onEventsColumnPrefixChange, onLinksColumnPrefixChange, + onKindColumnChange, onStatusCodeColumnChange, onStatusMessageColumnChange, onInstrumentationLibraryNameColumnChange, + onInstrumentationLibraryVersionColumnChange, onStateColumnChange } = props; let { defaultDatabase, defaultTable, otelEnabled, otelVersion, traceIdColumn, spanIdColumn, operationNameColumn, parentSpanIdColumn, serviceNameColumn, - durationColumn, durationUnit, startTimeColumn, tagsColumn, serviceTagsColumn, kindColumn, - statusCodeColumn, statusMessageColumn, instrumentationLibraryNameColumn, instrumentationLibraryVersionColumn, - stateColumn, eventsColumn, linksColumn + durationColumn, durationUnit, startTimeColumn, tagsColumn, serviceTagsColumn, eventsColumnPrefix, + linksColumnPrefix, kindColumn, statusCodeColumn, statusMessageColumn, instrumentationLibraryNameColumn, + instrumentationLibraryVersionColumn, stateColumn } = (props.tracesConfig || {}) as CHTracesConfig; const labels = allLabels.components.Config.TracesConfig; @@ -68,14 +68,14 @@ export const TracesConfig = (props: TraceConfigProps) => { durationColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceDurationTime); tagsColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceTags); serviceTagsColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceServiceTags); + eventsColumnPrefix = otelConfig.traceColumnMap.get(ColumnHint.TraceEventsPrefix); + linksColumnPrefix = otelConfig.traceColumnMap.get(ColumnHint.TraceLinksPrefix); kindColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceKind); statusCodeColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceStatusCode); statusMessageColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceStatusMessage); instrumentationLibraryNameColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceInstrumentationLibraryName); instrumentationLibraryVersionColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceInstrumentationLibraryVersion); stateColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceState); - eventsColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceEvents); - linksColumn = otelConfig.traceColumnMap.get(ColumnHint.TraceLinks); durationUnit = otelConfig.traceDurationUnit.toString(); } @@ -201,6 +201,22 @@ export const TracesConfig = (props: TraceConfigProps) => { value={serviceTagsColumn || ''} onChange={onServiceTagsColumnChange} /> + + { value={stateColumn || ''} onChange={onStateColumnChange} /> - - ); diff --git a/src/components/queryBuilder/views/TraceQueryBuilder.tsx b/src/components/queryBuilder/views/TraceQueryBuilder.tsx index 1097db45..5b2e4115 100644 --- a/src/components/queryBuilder/views/TraceQueryBuilder.tsx +++ b/src/components/queryBuilder/views/TraceQueryBuilder.tsx @@ -17,6 +17,7 @@ import { useDefaultFilters, useOtelColumns, useTraceDefaultsOnMount } from './tr import TraceIdInput from '../TraceIdInput'; import { OrderByEditor, getOrderByOptions } from '../OrderByEditor'; import { LimitEditor } from '../LimitEditor'; +import { LabeledInput } from 'components/configEditor/LabeledInput'; interface TraceQueryBuilderProps { datasource: Datasource; @@ -38,14 +39,14 @@ interface TraceQueryBuilderState { durationUnit: TimeUnit; tagsColumn?: SelectedColumn; serviceTagsColumn?: SelectedColumn; + eventsColumnPrefix?: SelectedColumn; + linksColumnPrefix?: SelectedColumn; kindColumn?: SelectedColumn; statusCodeColumn?: SelectedColumn; statusMessageColumn?: SelectedColumn; instrumentationLibraryNameColumn?: SelectedColumn; instrumentationLibraryVersionColumn?: SelectedColumn; stateColumn?: SelectedColumn; - eventsColumn?: SelectedColumn; - linksColumn?: SelectedColumn; traceId: string; orderBy: OrderBy[]; limit: number; @@ -74,14 +75,14 @@ export const TraceQueryBuilder = (props: TraceQueryBuilderProps) => { durationUnit: builderOptions.meta?.traceDurationUnit || TimeUnit.Nanoseconds, tagsColumn: getColumnByHint(builderOptions, ColumnHint.TraceTags), serviceTagsColumn: getColumnByHint(builderOptions, ColumnHint.TraceServiceTags), + eventsColumnPrefix: getColumnByHint(builderOptions, ColumnHint.TraceEventsPrefix), + linksColumnPrefix: getColumnByHint(builderOptions, ColumnHint.TraceLinksPrefix), kindColumn: getColumnByHint(builderOptions, ColumnHint.TraceKind), statusCodeColumn: getColumnByHint(builderOptions, ColumnHint.TraceStatusCode), statusMessageColumn: getColumnByHint(builderOptions, ColumnHint.TraceStatusMessage), instrumentationLibraryNameColumn: getColumnByHint(builderOptions, ColumnHint.TraceInstrumentationLibraryName), instrumentationLibraryVersionColumn: getColumnByHint(builderOptions, ColumnHint.TraceInstrumentationLibraryVersion), stateColumn: getColumnByHint(builderOptions, ColumnHint.TraceState), - eventsColumn: getColumnByHint(builderOptions, ColumnHint.TraceEvents), - linksColumn: getColumnByHint(builderOptions, ColumnHint.TraceLinks), traceId: builderOptions.meta?.traceId || '', orderBy: builderOptions.orderBy || [], limit: builderOptions.limit || 0, @@ -99,14 +100,15 @@ export const TraceQueryBuilder = (props: TraceQueryBuilderProps) => { next.durationTimeColumn, next.tagsColumn, next.serviceTagsColumn, + next.eventsColumnPrefix, + next.linksColumnPrefix, + next.serviceTagsColumn, next.kindColumn, next.statusCodeColumn, next.statusMessageColumn, next.instrumentationLibraryNameColumn, next.instrumentationLibraryVersionColumn, - next.stateColumn, - next.eventsColumn, - next.linksColumn, + next.stateColumn ].filter(c => c !== undefined) as SelectedColumn[]; builderOptionsDispatch(setOptions({ @@ -153,7 +155,7 @@ export const TraceQueryBuilder = (props: TraceQueryBuilderProps) => { isOpen={isColumnsOpen} onToggle={setColumnsOpen} > - { configWarning } + {configWarning} builderOptionsDispatch(setOtelEnabled(e))} @@ -280,6 +282,22 @@ export const TraceQueryBuilder = (props: TraceQueryBuilderProps) => { inline /> +
+ + +
{ inline />
-
- - -
{ table={builderOptions.table} /> - { builderState.isTraceIdMode && } + {builderState.isTraceIdMode && } ); } diff --git a/src/dashboards/opentelemetry-clickhouse.json b/src/dashboards/opentelemetry-clickhouse.json index 42292cf5..4970c7ee 100644 --- a/src/dashboards/opentelemetry-clickhouse.json +++ b/src/dashboards/opentelemetry-clickhouse.json @@ -806,7 +806,7 @@ }, "pluginVersion": "4.0.6", "queryType": "traces", - "rawSql": "WITH '${trace_id}' as trace_id, (SELECT min(Start) FROM \"default\".\"otel_traces_trace_id_ts\" WHERE TraceId = trace_id) as trace_start, (SELECT max(End) + 1 FROM \"default\".\"otel_traces_trace_id_ts\" WHERE TraceId = trace_id) as trace_end SELECT \"TraceId\" as traceID, \"SpanId\" as spanID, \"ParentSpanId\" as parentSpanID, \"ServiceName\" as serviceName, \"SpanName\" as operationName, \"Timestamp\" as startTime, multiply(\"Duration\", 0.000001) as duration, arrayMap(key -> map('key', key, 'value',\"SpanAttributes\"[key]), mapKeys(\"SpanAttributes\")) as tags, arrayMap(key -> map('key', key, 'value',\"ResourceAttributes\"[key]), mapKeys(\"ResourceAttributes\")) as serviceTags FROM \"default\".\"otel_traces\" WHERE traceID = trace_id AND startTime >= trace_start AND startTime <= trace_end AND ( Timestamp >= $__fromTime AND Timestamp <= $__toTime ) AND ( Duration > 0 ) ORDER BY Timestamp DESC, Duration DESC LIMIT 1000", + "rawSql": "WITH '${trace_id}' as trace_id, (SELECT min(Start) FROM \"otel_traces_trace_id_ts\" WHERE TraceId = trace_id) as trace_start, (SELECT max(End) + 1 FROM \"otel_traces_trace_id_ts\" WHERE TraceId = trace_id) as trace_end SELECT \"TraceId\" as traceID, \"SpanId\" as spanID, \"ParentSpanId\" as parentSpanID, \"ServiceName\" as serviceName, \"SpanName\" as operationName, \"Timestamp\" as startTime, multiply(\"Duration\", 0.000001) as duration, arrayMap(key -> map('key', key, 'value',\"SpanAttributes\"[key]), mapKeys(\"SpanAttributes\")) as tags, arrayMap(key -> map('key', key, 'value',\"ResourceAttributes\"[key]), mapKeys(\"ResourceAttributes\")) as serviceTags FROM \"otel_traces\" WHERE traceID = trace_id AND startTime >= trace_start AND startTime <= trace_end AND ( Timestamp >= $__fromTime AND Timestamp <= $__toTime ) AND ( Duration > 0 ) ORDER BY Timestamp DESC, Duration DESC LIMIT 1000", "refId": "A" } ], @@ -887,7 +887,7 @@ "editorType": "builder", "format": 2, "pluginVersion": "4.0.6", - "rawSql": "SELECT Timestamp as timestamp, Body as body, SeverityText as level FROM \"default\".\"otel_logs\" LIMIT 1000", + "rawSql": "SELECT Timestamp as timestamp, Body as body, SeverityText as level FROM \"otel_logs\" LIMIT 1000", "refId": "A" } ], diff --git a/src/data/CHDatasource.test.ts b/src/data/CHDatasource.test.ts index 15996fc4..171bfaf4 100644 --- a/src/data/CHDatasource.test.ts +++ b/src/data/CHDatasource.test.ts @@ -1,5 +1,5 @@ import { - ArrayDataFrame, + arrayToDataFrame, CoreApp, DataQueryRequest, DataQueryResponse, @@ -106,7 +106,7 @@ describe('ClickHouseDatasource', () => { it('should Fetch Default Tags When No Second AdHoc Variable', async () => { const spyOnReplace = jest.spyOn(templateSrvMock, 'replace').mockImplementation(() => '$clickhouse_adhoc_query'); const ds = cloneDeep(mockDatasource); - const frame = new ArrayDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); + const frame = arrayToDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); jest.spyOn(ds, 'getDefaultDatabase').mockImplementation(() => undefined!); // Disable default DB const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); @@ -123,7 +123,7 @@ describe('ClickHouseDatasource', () => { it('should Fetch Tags With Default Database', async () => { const spyOnReplace = jest.spyOn(templateSrvMock, 'replace').mockImplementation(() => '$clickhouse_adhoc_query'); - const frame = new ArrayDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); + const frame = arrayToDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); const ds = cloneDeep(mockDatasource); const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); @@ -140,7 +140,7 @@ describe('ClickHouseDatasource', () => { it('should Fetch Tags From Query', async () => { const spyOnReplace = jest.spyOn(templateSrvMock, 'replace').mockImplementation(() => 'select name from foo'); - const frame = new ArrayDataFrame([{ name: 'foo' }]); + const frame = arrayToDataFrame([{ name: 'foo' }]); const ds = cloneDeep(mockDatasource); const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); @@ -156,7 +156,7 @@ describe('ClickHouseDatasource', () => { }); it('returns no tags when CH version is less than 22.7 ', async () => { const spyOnReplace = jest.spyOn(templateSrvMock, 'replace').mockImplementation(() => 'select name from foo'); - const frame = new ArrayDataFrame([{ version: '21.9.342' }]); + const frame = arrayToDataFrame([{ version: '21.9.342' }]); const ds = cloneDeep(mockDatasource); ds.adHocFiltersStatus = 2; const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); @@ -171,8 +171,8 @@ describe('ClickHouseDatasource', () => { it('returns tags when CH version is greater than 22.7 ', async () => { const spyOnReplace = jest.spyOn(templateSrvMock, 'replace').mockImplementation(() => 'select name from foo'); - const frameVer = new ArrayDataFrame([{ version: '23.2.212' }]); - const frameData = new ArrayDataFrame([{ name: 'foo' }]); + const frameVer = arrayToDataFrame([{ version: '23.2.212' }]); + const frameData = arrayToDataFrame([{ name: 'foo' }]); const ds = cloneDeep(mockDatasource); ds.adHocFiltersStatus = 2; const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((request) => { @@ -193,7 +193,7 @@ describe('ClickHouseDatasource', () => { const spyOnReplace = jest.spyOn(templateSrvMock, 'replace').mockImplementation(() => '$clickhouse_adhoc_query'); const ds = cloneDeep(mockDatasource); ds.settings.jsonData.defaultDatabase = undefined; - const frame = new ArrayDataFrame([{ bar: 'foo' }]); + const frame = arrayToDataFrame([{ bar: 'foo' }]); const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); const values = await ds.getTagValues({ key: 'foo.bar' }); expect(spyOnReplace).toHaveBeenCalled(); @@ -209,7 +209,7 @@ describe('ClickHouseDatasource', () => { it('should Fetch Tag Values from Query', async () => { const spyOnReplace = jest.spyOn(templateSrvMock, 'replace').mockImplementation(() => 'select name from bar'); const ds = cloneDeep(mockDatasource); - const frame = new ArrayDataFrame([{ name: 'foo' }]); + const frame = arrayToDataFrame([{ name: 'foo' }]); const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); const values = await ds.getTagValues({ key: 'name' }); expect(spyOnReplace).toHaveBeenCalled(); @@ -249,10 +249,77 @@ describe('ClickHouseDatasource', () => { }); }); + describe('fetchPathsForJSONColumns', () => { + it('sends a correct query when database and table names are provided', async () => { + const ds = cloneDeep(mockDatasource); + const frame = arrayToDataFrame([ + JSON.stringify({ keys: 'a.b.c', values: ['Int64'] }), + JSON.stringify({ keys: 'a.b.d', values: ['String'] }), + JSON.stringify({ keys: 'a.b.e', values: ['Bool'] }) + ]); + const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); + await ds.fetchPathsForJSONColumns('db_name', 'table_name', 'jsonCol'); + const expected = { rawSql: 'SELECT arrayJoin(distinctJSONPathsAndTypes(jsonCol)) FROM "db_name"."table_name"' }; + + expect(spyOnQuery).toHaveBeenCalledWith( + expect.objectContaining({ targets: expect.arrayContaining([expect.objectContaining(expected)]) }) + ); + }); + + it('sends a correct query when only table name is provided', async () => { + const ds = cloneDeep(mockDatasource); + const frame = arrayToDataFrame([ + JSON.stringify({ keys: 'a.b.c', values: ['Int64'] }), + JSON.stringify({ keys: 'a.b.d', values: ['String'] }), + JSON.stringify({ keys: 'a.b.e', values: ['Bool'] }) + ]); + const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); + await ds.fetchPathsForJSONColumns('', 'table_name', 'jsonCol'); + const expected = { rawSql: 'SELECT arrayJoin(distinctJSONPathsAndTypes(jsonCol)) FROM "table_name"' }; + + expect(spyOnQuery).toHaveBeenCalledWith( + expect.objectContaining({ targets: expect.arrayContaining([expect.objectContaining(expected)]) }) + ); + }); + + it('sends a correct query when table name contains a dot', async () => { + const ds = cloneDeep(mockDatasource); + const frame = arrayToDataFrame([ + JSON.stringify({ keys: 'a.b.c', values: ['Int64'] }), + JSON.stringify({ keys: 'a.b.d', values: ['String'] }), + JSON.stringify({ keys: 'a.b.e', values: ['Bool'] }) + ]); + const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); + await ds.fetchPathsForJSONColumns('', 'table.name', 'jsonCol'); + const expected = { rawSql: 'SELECT arrayJoin(distinctJSONPathsAndTypes(jsonCol)) FROM "table.name"' }; + + expect(spyOnQuery).toHaveBeenCalledWith( + expect.objectContaining({ targets: expect.arrayContaining([expect.objectContaining(expected)]) }) + ); + }); + + it('returns correct json columns', async () => { + const ds = cloneDeep(mockDatasource); + const frame = arrayToDataFrame([ + JSON.stringify({ keys: 'a.b.c', values: ['Int64'] }), + JSON.stringify({ keys: 'a.b.d', values: ['String'] }), + JSON.stringify({ keys: 'a.b.e', values: ['Bool'] }) + ]); + jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); + + const jsonColumns = await ds.fetchPathsForJSONColumns('db_name', 'table_name', 'jsonCol'); + expect(jsonColumns).toMatchObject([ + { name: 'jsonCol.a.b.c', label: 'jsonCol.a.b.c', type: 'Int64', picklistValues: [] }, + { name: 'jsonCol.a.b.d', label: 'jsonCol.a.b.d', type: 'String', picklistValues: [] }, + { name: 'jsonCol.a.b.e', label: 'jsonCol.a.b.e', type: 'Bool', picklistValues: [] }, + ]) + }); + }); + describe('fetchColumnsFromTable', () => { it('sends a correct query when database and table names are provided', async () => { const ds = cloneDeep(mockDatasource); - const frame = new ArrayDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); + const frame = arrayToDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); await ds.fetchColumnsFromTable('db_name', 'table_name'); const expected = { rawSql: 'DESC TABLE "db_name"."table_name"' }; @@ -264,7 +331,7 @@ describe('ClickHouseDatasource', () => { it('sends a correct query when only table name is provided', async () => { const ds = cloneDeep(mockDatasource); - const frame = new ArrayDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); + const frame = arrayToDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); await ds.fetchColumnsFromTable('', 'table_name'); const expected = { rawSql: 'DESC TABLE "table_name"' }; @@ -276,7 +343,7 @@ describe('ClickHouseDatasource', () => { it('sends a correct query when table name contains a dot', async () => { const ds = cloneDeep(mockDatasource); - const frame = new ArrayDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); + const frame = arrayToDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_) => of({ data: [frame] })); await ds.fetchColumnsFromTable('', 'table.name'); @@ -291,7 +358,7 @@ describe('ClickHouseDatasource', () => { describe('fetchColumnsFromAliasTable', () => { it('sends a correct query when full table name is provided', async () => { const ds = cloneDeep(mockDatasource); - const frame = new ArrayDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); + const frame = arrayToDataFrame([{ name: 'foo', type: 'string', table: 'table' }]); const spyOnQuery = jest.spyOn(ds, 'query').mockImplementation((_request) => of({ data: [frame] })); await ds.fetchColumnsFromAliasTable('"db_name"."table_name"'); const expected = { rawSql: 'SELECT alias, select, "type" FROM "db_name"."table_name"' }; @@ -477,13 +544,13 @@ describe('ClickHouseDatasource', () => { const result = datasource.getSupplementaryLogsVolumeQuery(request, query); expect(result?.rawSql).toEqual( `SELECT toStartOfInterval("created_at", INTERVAL 1 DAY) as "time", ` + - `sum(toString("level") IN ('critical','fatal','crit','alert','emerg','CRITICAL','FATAL','CRIT','ALERT','EMERG','Critical','Fatal','Crit','Alert','Emerg')) as critical, ` + - `sum(toString("level") IN ('error','err','eror','ERROR','ERR','EROR','Error','Err','Eror')) as error, ` + - `sum(toString("level") IN ('warn','warning','WARN','WARNING','Warn','Warning')) as warn, ` + - `sum(toString("level") IN ('info','information','informational','INFO','INFORMATION','INFORMATIONAL','Info','Information','Informational')) as info, ` + - `sum(toString("level") IN ('debug','dbug','DEBUG','DBUG','Debug','Dbug')) as debug, ` + - `sum(toString("level") IN ('trace','TRACE','Trace')) as trace, ` + - `sum(toString("level") IN ('unknown','UNKNOWN','Unknown')) as unknown ` + + `sum(multiSearchAny(toString("level"), ['critical','fatal','crit','alert','emerg','CRITICAL','FATAL','CRIT','ALERT','EMERG','Critical','Fatal','Crit','Alert','Emerg'])) as critical, ` + + `sum(multiSearchAny(toString("level"), ['error','err','eror','ERROR','ERR','EROR','Error','Err','Eror'])) as error, ` + + `sum(multiSearchAny(toString("level"), ['warn','warning','WARN','WARNING','Warn','Warning'])) as warn, ` + + `sum(multiSearchAny(toString("level"), ['info','information','informational','INFO','INFORMATION','INFORMATIONAL','Info','Information','Informational'])) as info, ` + + `sum(multiSearchAny(toString("level"), ['debug','dbug','DEBUG','DBUG','Debug','Dbug'])) as debug, ` + + `sum(multiSearchAny(toString("level"), ['trace','TRACE','Trace'])) as trace, ` + + `sum(multiSearchAny(toString("level"), ['unknown','UNKNOWN','Unknown'])) as unknown ` + `FROM "default"."logs" ` + `GROUP BY time ` + `ORDER BY time ASC` diff --git a/src/data/CHDatasource.ts b/src/data/CHDatasource.ts index 396ad240..a628ef33 100644 --- a/src/data/CHDatasource.ts +++ b/src/data/CHDatasource.ts @@ -157,7 +157,7 @@ export class Datasource const llf = `toString("${logLevelColumn.name}")`; let level: keyof typeof LOG_LEVEL_TO_IN_CLAUSE; for (level in LOG_LEVEL_TO_IN_CLAUSE) { - aggregates.push({ aggregateType: AggregateType.Sum, column: `${llf} ${LOG_LEVEL_TO_IN_CLAUSE[level]}`, alias: level }); + aggregates.push({ aggregateType: AggregateType.Sum, column: `multiSearchAny(${llf}, [${LOG_LEVEL_TO_IN_CLAUSE[level]}])`, alias: level }); } } else { // Count all logs if level column isn't selected @@ -493,14 +493,14 @@ export class Datasource traceConfig.startTimeColumn && result.set(ColumnHint.Time, traceConfig.startTimeColumn); traceConfig.tagsColumn && result.set(ColumnHint.TraceTags, traceConfig.tagsColumn); traceConfig.serviceTagsColumn && result.set(ColumnHint.TraceServiceTags, traceConfig.serviceTagsColumn); + traceConfig.eventsColumnPrefix && result.set(ColumnHint.TraceEventsPrefix, traceConfig.eventsColumnPrefix); + traceConfig.linksColumnPrefix && result.set(ColumnHint.TraceLinksPrefix, traceConfig.linksColumnPrefix); traceConfig.kindColumn && result.set(ColumnHint.TraceKind, traceConfig.kindColumn); traceConfig.statusCodeColumn && result.set(ColumnHint.TraceStatusCode, traceConfig.statusCodeColumn); traceConfig.statusMessageColumn && result.set(ColumnHint.TraceStatusMessage, traceConfig.statusMessageColumn); traceConfig.instrumentationLibraryNameColumn && result.set(ColumnHint.TraceInstrumentationLibraryName, traceConfig.instrumentationLibraryNameColumn); traceConfig.instrumentationLibraryVersionColumn && result.set(ColumnHint.TraceInstrumentationLibraryVersion, traceConfig.instrumentationLibraryVersionColumn); traceConfig.stateColumn && result.set(ColumnHint.TraceState, traceConfig.stateColumn); - traceConfig.eventsColumn && result.set(ColumnHint.TraceEvents, traceConfig.eventsColumn); - traceConfig.linksColumn && result.set(ColumnHint.TraceLinks, traceConfig.linksColumn); return result; } @@ -547,6 +547,51 @@ export class Datasource return this.fetchData(`DESC TABLE "${database}"."${table}"`); } + /** + * Fetches JSON column suggestions for each specified JSON column. + */ + async fetchPathsForJSONColumns(database: string | undefined, table: string, jsonColumnName: string): Promise { + const prefix = Boolean(database) ? `"${database}".` : ''; + const rawSql = `SELECT arrayJoin(distinctJSONPathsAndTypes(${jsonColumnName})) FROM ${prefix}"${table}"`; + const frame = await this.runQuery({ rawSql }); + if (frame.fields?.length === 0) { + return []; + } + + const view = new DataFrameView(frame); + const jsonPathsAndTypes: Array<[string, string]> = []; + for (let x of view) { + if (!x || !x[0]) { + continue; + } + + const kv = JSON.parse(x[0]); + if (!kv.keys || !kv.values) { + continue; + } + + jsonPathsAndTypes.push([kv.keys, kv.values]); + } + + const columns: TableColumn[] = []; + for (let pathAndTypes of jsonPathsAndTypes) { + const path = pathAndTypes[0]; + const types = pathAndTypes[1]; + if (!path || !types || types.length === 0) { + continue; + } + + columns.push({ + name: `${jsonColumnName}.${path}`, + label: `${jsonColumnName}.${path}`, + type: types[0], + picklistValues: [], + }) + } + + return columns; + } + /** * Fetches column suggestions from the table schema. */ @@ -558,12 +603,20 @@ export class Datasource return []; } const view = new DataFrameView(frame); - return view.map(item => ({ + const columns: TableColumn[] = view.map(item => ({ name: item[0], type: item[1], label: item[0], picklistValues: [], })); + + const results = await Promise.all( + columns + .filter(c => c.type.startsWith("JSON")) + .map(c => this.fetchPathsForJSONColumns(database, table, c.name)) + ); + + return [...columns, ...results.flat()]; } /** diff --git a/src/data/logs.test.ts b/src/data/logs.test.ts index bb65483a..2766c99e 100644 --- a/src/data/logs.test.ts +++ b/src/data/logs.test.ts @@ -226,13 +226,13 @@ describe('logs', () => { it('should generate correct IN clauses', async () => { expect(LOG_LEVEL_TO_IN_CLAUSE).toEqual({ critical: - "IN ('critical','fatal','crit','alert','emerg','CRITICAL','FATAL','CRIT','ALERT','EMERG','Critical','Fatal','Crit','Alert','Emerg')", - debug: "IN ('debug','dbug','DEBUG','DBUG','Debug','Dbug')", - error: "IN ('error','err','eror','ERROR','ERR','EROR','Error','Err','Eror')", - info: "IN ('info','information','informational','INFO','INFORMATION','INFORMATIONAL','Info','Information','Informational')", - trace: "IN ('trace','TRACE','Trace')", - unknown: "IN ('unknown','UNKNOWN','Unknown')", - warn: "IN ('warn','warning','WARN','WARNING','Warn','Warning')", + "'critical','fatal','crit','alert','emerg','CRITICAL','FATAL','CRIT','ALERT','EMERG','Critical','Fatal','Crit','Alert','Emerg'", + debug: "'debug','dbug','DEBUG','DBUG','Debug','Dbug'", + error: "'error','err','eror','ERROR','ERR','EROR','Error','Err','Eror'", + info: "'info','information','informational','INFO','INFORMATION','INFORMATIONAL','Info','Information','Informational'", + trace: "'trace','TRACE','Trace'", + unknown: "'unknown','UNKNOWN','Unknown'", + warn: "'warn','warning','WARN','WARNING','Warn','Warning'", }); }); }); diff --git a/src/data/logs.ts b/src/data/logs.ts index 81f051eb..b0766d88 100644 --- a/src/data/logs.ts +++ b/src/data/logs.ts @@ -245,11 +245,11 @@ export const LOG_LEVEL_TO_IN_CLAUSE: LogLevelToInClause = (() => { unknown: ['unknown'], }; return (Object.keys(levels) as Array).reduce((allLevels, level) => { - allLevels[level] = `IN (${[ + allLevels[level] = `${[ ...levels[level].map((l) => `'${l}'`), ...levels[level].map((l) => `'${l.toUpperCase()}'`), ...levels[level].map((l) => `'${l.charAt(0).toUpperCase() + l.slice(1)}'`), - ].join(',')})`; + ].join(',')}`; return allLevels; }, {} as LogLevelToInClause); })(); diff --git a/src/data/sqlGenerator.test.ts b/src/data/sqlGenerator.test.ts index e673ab5c..01057070 100644 --- a/src/data/sqlGenerator.test.ts +++ b/src/data/sqlGenerator.test.ts @@ -242,13 +242,13 @@ describe('SQL Generator', () => { { name: 'SpanAttributes', type: 'Map(LowCardinality(String), String)', hint: ColumnHint.TraceTags }, { name: 'ResourceAttributes', type: 'Map(LowCardinality(String), String)', hint: ColumnHint.TraceServiceTags }, { name: 'StatusCode', type: 'LowCardinality(String)', hint: ColumnHint.TraceStatusCode }, + { name: 'Events', type: 'Nested(Timestamp DateTime64(9), Name LowCardinality(String), Attributes Map(LowCardinality(String), String))', hint: ColumnHint.TraceEventsPrefix }, + { name: 'Links', type: 'Nested(TraceId String, SpanId String, TraceState String, Attributes Map(LowCardinality(String), String))', hint: ColumnHint.TraceLinksPrefix }, { name: 'Kind', type: 'String', hint: ColumnHint.TraceKind }, { name: 'StatusMessage', type: 'String', hint: ColumnHint.TraceStatusMessage }, { name: 'InstrumentationLibraryName', type: 'String', hint: ColumnHint.TraceInstrumentationLibraryName }, { name: 'InstrumentationLibraryVersion', type: 'String', hint: ColumnHint.TraceInstrumentationLibraryVersion }, { name: 'TraceState', type: 'String', hint: ColumnHint.TraceState }, - { name: 'Events', type: 'Array(Tuple(name String, timestamp UInt64, attributes Map(String, String)))', hint: ColumnHint.TraceEvents }, - { name: 'Links', type: 'Array(Tuple(traceID String, spanID String, traceState String, attributes Map(String, String)))', hint: ColumnHint.TraceLinks }, ], filters: [], meta: { @@ -273,13 +273,13 @@ describe('SQL Generator', () => { `mapKeys("SpanAttributes")) as tags,`, `arrayMap(key -> map('key', key, 'value',"ResourceAttributes"[key]), mapKeys("ResourceAttributes")) as serviceTags,`, `if("StatusCode" IN ('Error', 'STATUS_CODE_ERROR'), 2, 0) as statusCode,`, + `arrayMap((name, timestamp, attributes) -> tuple(name, toString(toUnixTimestamp64Milli(timestamp)), arrayMap( key -> map('key', key, 'value', attributes[key]), mapKeys(attributes)))::Tuple(name String, timestamp String, fields Array(Map(String, String))),"Events".Name, "Events".Timestamp, "Events".Attributes) AS logs,`, + `arrayMap((traceID, spanID, attributes) -> tuple(traceID, spanID, arrayMap(key -> map('key', key, 'value', attributes[key]), mapKeys(attributes)))::Tuple(traceID String, spanID String, tags Array(Map(String, String))), "Links".TraceId, "Links".SpanId, "Links".Attributes) AS references,`, '"Kind" as kind,', '"StatusMessage" as statusMessage,', '"InstrumentationLibraryName" as instrumentationLibraryName,', '"InstrumentationLibraryVersion" as instrumentationLibraryVersion,', - '"TraceState" as traceState,', - `arrayMap(event -> tuple(multiply(toFloat64(event.Timestamp), 1000), arrayConcat(arrayMap(key -> map('key', key, 'value', event.Attributes[key]), mapKeys(event.Attributes)), [map('key', 'message', 'value', event.Name)]))::Tuple(timestamp Float64, fields Array(Map(String, String))), "Events") as logs,`, - `arrayMap(link -> tuple(link.TraceId, link.SpanId, arrayMap(key -> map('key', key, 'value', link.Attributes[key]), mapKeys(link.Attributes)))::Tuple(traceID String, spanID String, tags Array(Map(String, String))), "Links") AS references`, + '"TraceState" as traceState', `FROM "default"."otel_traces" WHERE traceID = trace_id AND "Timestamp" >= trace_start AND "Timestamp" <= trace_end`, 'LIMIT 1000' ]; diff --git a/src/data/sqlGenerator.ts b/src/data/sqlGenerator.ts index e360aebb..9c45aab1 100644 --- a/src/data/sqlGenerator.ts +++ b/src/data/sqlGenerator.ts @@ -150,6 +150,16 @@ const generateTraceIdQuery = (options: QueryBuilderOptions): string => { selectParts.push(`if(${escapeIdentifier(traceStatusCode.name)} IN ('Error', 'STATUS_CODE_ERROR'), 2, 0) as statusCode`); } + const traceEventsPrefix = getColumnByHint(options, ColumnHint.TraceEventsPrefix); + if (traceEventsPrefix !== undefined) { + selectParts.push(`arrayMap((name, timestamp, attributes) -> tuple(name, toString(toUnixTimestamp64Milli(timestamp)), arrayMap( key -> map('key', key, 'value', attributes[key]), mapKeys(attributes)))::Tuple(name String, timestamp String, fields Array(Map(String, String))),${escapeIdentifier(traceEventsPrefix.name)}.Name, ${escapeIdentifier(traceEventsPrefix.name)}.Timestamp, ${escapeIdentifier(traceEventsPrefix.name)}.Attributes) AS logs`); + } + + const traceLinksPrefix = getColumnByHint(options, ColumnHint.TraceLinksPrefix); + if (traceLinksPrefix !== undefined) { + selectParts.push(`arrayMap((traceID, spanID, attributes) -> tuple(traceID, spanID, arrayMap(key -> map('key', key, 'value', attributes[key]), mapKeys(attributes)))::Tuple(traceID String, spanID String, tags Array(Map(String, String))), ${escapeIdentifier(traceLinksPrefix.name)}.TraceId, ${escapeIdentifier(traceLinksPrefix.name)}.SpanId, ${escapeIdentifier(traceLinksPrefix.name)}.Attributes) AS references`); + } + const traceKind = getColumnByHint(options, ColumnHint.TraceKind); if (traceKind !== undefined) { selectParts.push(`${escapeIdentifier(traceKind.name)} as kind`); @@ -175,18 +185,6 @@ const generateTraceIdQuery = (options: QueryBuilderOptions): string => { selectParts.push(`${escapeIdentifier(traceState.name)} as traceState`); } - const traceEvents = getColumnByHint(options, ColumnHint.TraceEvents); - if (traceEvents !== undefined) { - // Assumes `events` is of type Nested(Timestamp DateTime64(9), Name LowCardinality(String), Attributes Map(LowCardinality(String), String)) - selectParts.push(`arrayMap(event -> tuple(multiply(toFloat64(event.Timestamp), 1000), arrayConcat(arrayMap(key -> map('key', key, 'value', event.Attributes[key]), mapKeys(event.Attributes)), [map('key', 'message', 'value', event.Name)]))::Tuple(timestamp Float64, fields Array(Map(String, String))), ${escapeIdentifier(traceEvents.name)}) as logs`); - } - - const traceLinks = getColumnByHint(options, ColumnHint.TraceLinks); - if (traceLinks !== undefined) { - // Assumes `links` is of type Nested(TraceId String, SpanId String, TraceState String, Attributes Map(LowCardinality(String), String)) - selectParts.push(`arrayMap(link -> tuple(link.TraceId, link.SpanId, arrayMap(key -> map('key', key, 'value', link.Attributes[key]), mapKeys(link.Attributes)))::Tuple(traceID String, spanID String, tags Array(Map(String, String))), ${escapeIdentifier(traceLinks.name)}) AS references`); - } - const selectPartsSql = selectParts.join(', '); // Optimize trace ID filtering for OTel enabled trace lookups diff --git a/src/data/utils.ts b/src/data/utils.ts index bd8f68ca..9d4f96c3 100644 --- a/src/data/utils.ts +++ b/src/data/utils.ts @@ -132,6 +132,7 @@ export const transformQueryResponseWithTraceAndLogLinks = (datasource: Datasourc } const traceIdQuery: CHBuilderQuery = { + datasource: datasource, editorType: EditorType.Builder, /** * Evil bug: @@ -189,6 +190,7 @@ export const transformQueryResponseWithTraceAndLogLinks = (datasource: Datasourc } const traceLogsQuery: CHBuilderQuery = { + datasource: datasource, editorType: EditorType.Builder, rawSql: '', builderOptions: {} as QueryBuilderOptions, diff --git a/src/labels.ts b/src/labels.ts index 9b6a7447..6c57ab61 100644 --- a/src/labels.ts +++ b/src/labels.ts @@ -186,6 +186,14 @@ export default { label: 'Service Tags column', tooltip: 'Column for the service tags' }, + eventsPrefix: { + label: 'Events column', + tooltip: 'Prefix for the events column' + }, + linksPrefix: { + label: 'Links column', + tooltip: 'Prefix for the trace references column' + }, kind: { label: 'Kind column', tooltip: 'Column for the trace kind' @@ -209,15 +217,7 @@ export default { state: { label: 'State column', tooltip: 'Column for the trace state' - }, - events: { - label: 'Events column', - tooltip: 'Column for the trace events' - }, - links: { - label: 'Links column', - tooltip: 'Column for the trace references' - }, + } } }, LogsConfig: { @@ -435,6 +435,14 @@ export default { label: 'Service Tags Column', tooltip: 'Column that contains the service tags' }, + eventsPrefix: { + label: 'Events Prefix Column', + tooltip: 'Prefix for the events column' + }, + linksPrefix: { + label: 'Links Column', + tooltip: 'Prefix for the trace references column' + }, kind: { label: 'Kind Column', tooltip: 'Column that contains the trace kind' @@ -459,18 +467,10 @@ export default { label: 'State Column', tooltip: 'Column that contains the trace state' }, - events: { - label: 'Events Column', - tooltip: 'Column that contains the trace events' - }, - links: { - label: 'Links Column', - tooltip: 'Column that contains the trace references' - }, traceIdFilter: { label: 'Trace ID', tooltip: 'filter by a specific trace ID' - } + }, }, } }, @@ -501,13 +501,13 @@ export default { [ColumnHint.TraceTags]: 'Tags', [ColumnHint.TraceServiceTags]: 'Service Tags', [ColumnHint.TraceStatusCode]: 'Status Code', + [ColumnHint.TraceEventsPrefix]: 'Events Prefix', + [ColumnHint.TraceLinksPrefix]: 'Links Prefix', [ColumnHint.TraceKind]: 'Kind', [ColumnHint.TraceStatusMessage]: 'Status Message', [ColumnHint.TraceInstrumentationLibraryName]: 'Instrumentation Library Name', [ColumnHint.TraceInstrumentationLibraryVersion]: 'Instrumentation Library Version', [ColumnHint.TraceState]: 'State', - [ColumnHint.TraceEvents]: 'Events', - [ColumnHint.TraceLinks]: 'Links', } } } diff --git a/src/otel.ts b/src/otel.ts index 57f6d825..24171ef0 100644 --- a/src/otel.ts +++ b/src/otel.ts @@ -49,13 +49,13 @@ const otel129: OtelVersion = { [ColumnHint.TraceTags, 'SpanAttributes'], [ColumnHint.TraceServiceTags, 'ResourceAttributes'], [ColumnHint.TraceStatusCode, 'StatusCode'], + [ColumnHint.TraceEventsPrefix, 'Events'], + [ColumnHint.TraceLinksPrefix, 'Links'], [ColumnHint.TraceKind, 'SpanKind'], [ColumnHint.TraceStatusMessage, 'StatusMessage'], [ColumnHint.TraceInstrumentationLibraryName, 'InstrumentationLibraryName'], [ColumnHint.TraceInstrumentationLibraryVersion, 'InstrumentationLibraryVersion'], [ColumnHint.TraceState, 'State'], - [ColumnHint.TraceEvents, 'Events'], - [ColumnHint.TraceLinks, 'Links'], ]), traceDurationUnit: TimeUnit.Nanoseconds, }; diff --git a/src/types/config.ts b/src/types/config.ts index 034e254e..283062f5 100644 --- a/src/types/config.ts +++ b/src/types/config.ts @@ -90,14 +90,14 @@ export interface CHTracesConfig { startTimeColumn?: string; tagsColumn?: string; serviceTagsColumn?: string; + eventsColumnPrefix?: string; + linksColumnPrefix?: string; kindColumn?: string; statusCodeColumn?: string; statusMessageColumn?: string; instrumentationLibraryNameColumn?: string; instrumentationLibraryVersionColumn?: string; stateColumn?: string; - eventsColumn?: string; - linksColumn?: string; } export interface AliasTableEntry { diff --git a/src/types/queryBuilder.ts b/src/types/queryBuilder.ts index 756723a5..f307446f 100644 --- a/src/types/queryBuilder.ts +++ b/src/types/queryBuilder.ts @@ -133,13 +133,13 @@ export enum ColumnHint { TraceTags = 'trace_tags', TraceServiceTags = 'trace_service_tags', TraceStatusCode = 'trace_status_code', + TraceEventsPrefix = 'trace_events_prefix', + TraceLinksPrefix = 'trace_links_prefix', TraceKind = 'trace_kind', TraceStatusMessage = 'trace_status_message', TraceInstrumentationLibraryName = 'instrumentation_library_name', TraceInstrumentationLibraryVersion = 'instrumentation_library_version', TraceState = 'trace_state', - TraceEvents = 'trace_events', - TraceLinks = 'trace_links', } /** diff --git a/src/views/CHConfigEditor.tsx b/src/views/CHConfigEditor.tsx index d76dceff..6c5b74b8 100644 --- a/src/views/CHConfigEditor.tsx +++ b/src/views/CHConfigEditor.tsx @@ -444,14 +444,14 @@ export const ConfigEditor: React.FC = (props) => { onStartTimeColumnChange={c => onTracesConfigChange('startTimeColumn', c)} onTagsColumnChange={c => onTracesConfigChange('tagsColumn', c)} onServiceTagsColumnChange={c => onTracesConfigChange('serviceTagsColumn', c)} + onEventsColumnPrefixChange={c => onTracesConfigChange('eventsColumnPrefix', c)} + onLinksPrefixColumnChange={c => onTracesConfigChange('linksColumnPrefix', c)} onKindColumnChange={c => onTracesConfigChange('kindColumn', c)} onStatusCodeColumnChange={c => onTracesConfigChange('statusCodeColumn', c)} onStatusMessageColumnChange={c => onTracesConfigChange('statusMessageColumn', c)} onInstrumentationLibraryNameColumnChange={c => onTracesConfigChange('instrumentationLibraryNameColumn', c)} onInstrumentationLibraryVersionColumnChange={c => onTracesConfigChange('instrumentationLibraryVersionColumn', c)} onStateColumnChange={c => onTracesConfigChange('stateColumn', c)} - onEventsColumnChange={c => onTracesConfigChange('eventsColumn', c)} - onLinksColumnChange={c => onTracesConfigChange('linksColumn', c)} /> diff --git a/yarn.lock b/yarn.lock index 936863db..57013c72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -315,399 +315,415 @@ resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-7.0.1.tgz#457233b0a18741b7711855044102b82bae7a070b" integrity sha512-URg8UM6lfC9ZYqFipItRSxYJdgpU5d2Z4KnjsJ+rj6tgAmGme7E+PQNCiud8g0HDaZKMovu2qjfa0f5Ge0Vlsg== -"@cspell/cspell-bundled-dicts@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.15.5.tgz#0115b8d4331413f1192f7ba75a44726de597c360" - integrity sha512-Su1gnTBbE7ouMQvM4DISUmP6sZiFyQRE+ODvjBzW+c/x9ZLbVp+2hBEEmxFSn5fdZCJzPOMwzwsjlLYykb9iUg== - dependencies: - "@cspell/dict-ada" "^4.0.5" - "@cspell/dict-al" "^1.0.3" - "@cspell/dict-aws" "^4.0.7" - "@cspell/dict-bash" "^4.1.8" - "@cspell/dict-companies" "^3.1.7" - "@cspell/dict-cpp" "^5.1.23" - "@cspell/dict-cryptocurrencies" "^5.0.3" - "@cspell/dict-csharp" "^4.0.5" - "@cspell/dict-css" "^4.0.16" - "@cspell/dict-dart" "^2.2.4" - "@cspell/dict-django" "^4.1.3" - "@cspell/dict-docker" "^1.1.11" - "@cspell/dict-dotnet" "^5.0.8" - "@cspell/dict-elixir" "^4.0.6" - "@cspell/dict-en-common-misspellings" "^2.0.7" +"@cspell/cspell-bundled-dicts@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.17.3.tgz#c43297e6a16752b2d8b3856d751721befd1b58e3" + integrity sha512-6uOF726o3JnExAUKM20OJJXZo+Qf9Jt64nkVwnVXx7Upqr5I9Pb1npYPEAIpUA03SnWYmKwUIqhAmkwrN+bLPA== + dependencies: + "@cspell/dict-ada" "^4.1.0" + "@cspell/dict-al" "^1.1.0" + "@cspell/dict-aws" "^4.0.9" + "@cspell/dict-bash" "^4.2.0" + "@cspell/dict-companies" "^3.1.13" + "@cspell/dict-cpp" "^6.0.3" + "@cspell/dict-cryptocurrencies" "^5.0.4" + "@cspell/dict-csharp" "^4.0.6" + "@cspell/dict-css" "^4.0.17" + "@cspell/dict-dart" "^2.3.0" + "@cspell/dict-data-science" "^2.0.7" + "@cspell/dict-django" "^4.1.4" + "@cspell/dict-docker" "^1.1.12" + "@cspell/dict-dotnet" "^5.0.9" + "@cspell/dict-elixir" "^4.0.7" + "@cspell/dict-en-common-misspellings" "^2.0.9" "@cspell/dict-en-gb" "1.1.33" - "@cspell/dict-en_us" "^4.3.26" - "@cspell/dict-filetypes" "^3.0.8" - "@cspell/dict-flutter" "^1.0.3" - "@cspell/dict-fonts" "^4.0.3" - "@cspell/dict-fsharp" "^1.0.4" + "@cspell/dict-en_us" "^4.3.30" + "@cspell/dict-filetypes" "^3.0.10" + "@cspell/dict-flutter" "^1.1.0" + "@cspell/dict-fonts" "^4.0.4" + "@cspell/dict-fsharp" "^1.1.0" "@cspell/dict-fullstack" "^3.2.3" - "@cspell/dict-gaming-terms" "^1.0.8" - "@cspell/dict-git" "^3.0.3" - "@cspell/dict-golang" "^6.0.16" - "@cspell/dict-google" "^1.0.4" - "@cspell/dict-haskell" "^4.0.4" - "@cspell/dict-html" "^4.0.10" + "@cspell/dict-gaming-terms" "^1.1.0" + "@cspell/dict-git" "^3.0.4" + "@cspell/dict-golang" "^6.0.18" + "@cspell/dict-google" "^1.0.8" + "@cspell/dict-haskell" "^4.0.5" + "@cspell/dict-html" "^4.0.11" "@cspell/dict-html-symbol-entities" "^4.0.3" - "@cspell/dict-java" "^5.0.10" - "@cspell/dict-julia" "^1.0.4" - "@cspell/dict-k8s" "^1.0.9" + "@cspell/dict-java" "^5.0.11" + "@cspell/dict-julia" "^1.1.0" + "@cspell/dict-k8s" "^1.0.10" + "@cspell/dict-kotlin" "^1.1.0" "@cspell/dict-latex" "^4.0.3" - "@cspell/dict-lorem-ipsum" "^4.0.3" - "@cspell/dict-lua" "^4.0.6" - "@cspell/dict-makefile" "^1.0.3" - "@cspell/dict-markdown" "^2.0.7" - "@cspell/dict-monkeyc" "^1.0.9" - "@cspell/dict-node" "^5.0.4" - "@cspell/dict-npm" "^5.1.8" - "@cspell/dict-php" "^4.0.13" - "@cspell/dict-powershell" "^5.0.13" - "@cspell/dict-public-licenses" "^2.0.11" - "@cspell/dict-python" "^4.2.12" - "@cspell/dict-r" "^2.0.4" + "@cspell/dict-lorem-ipsum" "^4.0.4" + "@cspell/dict-lua" "^4.0.7" + "@cspell/dict-makefile" "^1.0.4" + "@cspell/dict-markdown" "^2.0.9" + "@cspell/dict-monkeyc" "^1.0.10" + "@cspell/dict-node" "^5.0.6" + "@cspell/dict-npm" "^5.1.24" + "@cspell/dict-php" "^4.0.14" + "@cspell/dict-powershell" "^5.0.14" + "@cspell/dict-public-licenses" "^2.0.13" + "@cspell/dict-python" "^4.2.15" + "@cspell/dict-r" "^2.1.0" "@cspell/dict-ruby" "^5.0.7" - "@cspell/dict-rust" "^4.0.9" - "@cspell/dict-scala" "^5.0.6" - "@cspell/dict-software-terms" "^4.1.12" - "@cspell/dict-sql" "^2.1.8" - "@cspell/dict-svelte" "^1.0.5" - "@cspell/dict-swift" "^2.0.4" - "@cspell/dict-terraform" "^1.0.5" - "@cspell/dict-typescript" "^3.1.11" - "@cspell/dict-vue" "^3.0.3" - -"@cspell/cspell-json-reporter@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.15.5.tgz#f6761f0c8a2c29e96e267303147dd8d8e58da3ac" - integrity sha512-yXd7KDBfUkA6y+MrOqK3q/UWorZgLIgyCZoFb0Pj67OU2ZMtgJ1VGFXAdzpKAEgEmdcblyoFzHkleYbg08qS6g== - dependencies: - "@cspell/cspell-types" "8.15.5" - -"@cspell/cspell-pipe@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-8.15.5.tgz#023c5c1287ea39c8ababbc8bae17b00a956c466d" - integrity sha512-X8QY73060hkR8040jabNJsvydeTG0owpqr9S0QJDdhG1z8uzenNcwR3hfwaIwQq5d6sIKcDFZY5qrO4x6eEAMw== - -"@cspell/cspell-resolver@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/cspell-resolver/-/cspell-resolver-8.15.5.tgz#7777b8664a8fbc82a1ba7e31b87741f78f96b502" - integrity sha512-ejzUGLEwI8TQWXovQzzvAgSNToRrQe3h97YrH2XaB9rZDKkeA7dIBZDQ/OgOfidO+ZAsPIOxdHai3CBzEHYX3A== + "@cspell/dict-rust" "^4.0.11" + "@cspell/dict-scala" "^5.0.7" + "@cspell/dict-shell" "^1.1.0" + "@cspell/dict-software-terms" "^4.2.4" + "@cspell/dict-sql" "^2.2.0" + "@cspell/dict-svelte" "^1.0.6" + "@cspell/dict-swift" "^2.0.5" + "@cspell/dict-terraform" "^1.1.0" + "@cspell/dict-typescript" "^3.2.0" + "@cspell/dict-vue" "^3.0.4" + +"@cspell/cspell-json-reporter@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.17.3.tgz#7c071ac2425f3ebee78d8efd270760c6b85d28b4" + integrity sha512-RWSfyHOin/d9CqLjz00JMvPkag3yUSsQZr6G9BnCT5cMEO/ws8wQZzA54CNj/LAOccbknTX65SSroPPAtxs56w== + dependencies: + "@cspell/cspell-types" "8.17.3" + +"@cspell/cspell-pipe@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-8.17.3.tgz#93b79cb4b38dd89147bda6ad3f1fedb3ec488ffe" + integrity sha512-DqqSWKt9NLWPGloYxZTpzUhgdW8ObMkZmOOF6TyqpJ4IbckEct8ULgskNorTNRlmmjLniaNgvg6JSHuYO3Urxw== + +"@cspell/cspell-resolver@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/cspell-resolver/-/cspell-resolver-8.17.3.tgz#9c1265a22d6917ac63d4da98c7341f04319119ce" + integrity sha512-yQlVaIsWiax6RRuuacZs++kl6Y9rwH9ZkVlsG9fhdeCJ5Xf3WCW+vmX1chzhhKDzRr8CF9fsvb1uagd/5/bBYA== dependencies: global-directory "^4.0.1" -"@cspell/cspell-service-bus@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/cspell-service-bus/-/cspell-service-bus-8.15.5.tgz#ed71e9abaff717e3929718dca6fe095621ab8bf6" - integrity sha512-zZJRRvNhvUJntnw8sX4J5gE4uIHpX2oe+Tqs3lu2vRwogadNEXE4QNJbEQyQqgMePgmqULtRdxSBzG4wy4HoQg== +"@cspell/cspell-service-bus@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/cspell-service-bus/-/cspell-service-bus-8.17.3.tgz#c600e30926735aff9cd7c6c6b8de2689ff9414c7" + integrity sha512-CC3nob/Kbuesz5WTW+LjAHnDFXJrA49pW5ckmbufJxNnoAk7EJez/qr7/ELMTf6Fl3A5xZ776Lhq7738Hy/fmQ== -"@cspell/cspell-types@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-8.15.5.tgz#5611751446ca4a2fd8f93e5709c8518de369d1b2" - integrity sha512-bMRq9slD/D0vXckxe9vubG02HXrV4cASo6Ytkaw8rTfxMKpkBgxJWjFWphCFLOCICD71q45fUSg+W5vCp83f/Q== +"@cspell/cspell-types@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-8.17.3.tgz#326e92889344599422cd0cada6c79b7acc7c91fb" + integrity sha512-ozgeuSioX9z2wtlargfgdw3LKwDFAfm8gxu+xwNREvXiLsevb+lb7ZlY5/ay+MahqR5Hfs7XzYzBLTKL/ldn9g== -"@cspell/dict-ada@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-ada/-/dict-ada-4.0.5.tgz#c14aae2faaecbad2d99f0d701e4700a48c68ef60" - integrity sha512-6/RtZ/a+lhFVmrx/B7bfP7rzC4yjEYe8o74EybXcvu4Oue6J4Ey2WSYj96iuodloj1LWrkNCQyX5h4Pmcj0Iag== +"@cspell/dict-ada@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-ada/-/dict-ada-4.1.0.tgz#60d4ca3c47262d91ecb008330f31a3066f3161f9" + integrity sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg== -"@cspell/dict-al@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-al/-/dict-al-1.0.3.tgz#09e288b5ab56b126dce895d3301faf7c0dd732d6" - integrity sha512-V1HClwlfU/qwSq2Kt+MkqRAsonNu3mxjSCDyGRecdLGIHmh7yeEeaxqRiO/VZ4KP+eVSiSIlbwrb5YNFfxYZbw== +"@cspell/dict-al@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-al/-/dict-al-1.1.0.tgz#8091d046b6fe74004f3f1df8d1403a280818537f" + integrity sha512-PtNI1KLmYkELYltbzuoztBxfi11jcE9HXBHCpID2lou/J4VMYKJPNqe4ZjVzSI9NYbMnMnyG3gkbhIdx66VSXg== -"@cspell/dict-aws@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-aws/-/dict-aws-4.0.7.tgz#f96f3b70cd52a25b895eb08e297de5a5cc3fc5b6" - integrity sha512-PoaPpa2NXtSkhGIMIKhsJUXB6UbtTt6Ao3x9JdU9kn7fRZkwD4RjHDGqulucIOz7KeEX/dNRafap6oK9xHe4RA== +"@cspell/dict-aws@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@cspell/dict-aws/-/dict-aws-4.0.9.tgz#10c1dc6431e05f02809367b70942189acb35d720" + integrity sha512-bDYdnnJGwSkIZ4gzrauu7qzOs/ZAY/FnU4k11LgdMI8BhwMfsbsy2EI1iS+sD/BI5ZnNT9kU5YR3WADeNOmhRg== -"@cspell/dict-bash@^4.1.8": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-4.1.8.tgz#26dc898e06eddea069cf1ad475ee0e867c89e632" - integrity sha512-I2CM2pTNthQwW069lKcrVxchJGMVQBzru2ygsHCwgidXRnJL/NTjAPOFTxN58Jc1bf7THWghfEDyKX/oyfc0yg== +"@cspell/dict-bash@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-4.2.0.tgz#d1f7c6d2afdf849a3d418de6c2e9b776e7bd532a" + integrity sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg== + dependencies: + "@cspell/dict-shell" "1.1.0" -"@cspell/dict-companies@^3.1.7": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-3.1.7.tgz#c9abd6f5293f103062f54dde01f2bee939189f79" - integrity sha512-ncVs/efuAkP1/tLDhWbXukBjgZ5xOUfe03neHMWsE8zvXXc5+Lw6TX5jaJXZLOoES/f4j4AhRE20jsPCF5pm+A== +"@cspell/dict-companies@^3.1.13": + version "3.1.13" + resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-3.1.13.tgz#dd99c462076cdad9a62918a9c4a53865a32f2c6f" + integrity sha512-EAaFMxnSG4eQKup9D81EnWAYIzorLWG7b7Zzf+Suu0bVeFBpCYESss/EWtnmb5ZZNfKAGxtoMqfL3vRfyJERIQ== -"@cspell/dict-cpp@^5.1.23": - version "5.1.23" - resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-5.1.23.tgz#80d0103bc55105c0e4de8e54fc17397634c3a905" - integrity sha512-59VUam6bYWzn50j8FASWWLww0rBPA0PZfjMZBvvt0aqMpkvXzoJPnAAI4eDDSibPWVHKutjpqLmast+uMLHVsQ== +"@cspell/dict-cpp@^6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-6.0.3.tgz#e1c8d699fa0b28abd23ad5c1e1082070c918d746" + integrity sha512-OFrVXdxCeGKnon36Pe3yFjBuY4kzzEwWFf3vDz+cJTodZDkjFkBifQeTtt5YfimgF8cfAJZXkBCsxjipAgmAiw== -"@cspell/dict-cryptocurrencies@^5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.3.tgz#502f9fffcb2835a3379668ddebdc487678ce6207" - integrity sha512-bl5q+Mk+T3xOZ12+FG37dB30GDxStza49Rmoax95n37MTLksk9wBo1ICOlPJ6PnDUSyeuv4SIVKgRKMKkJJglA== +"@cspell/dict-cryptocurrencies@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.4.tgz#f0008e7aec9856373d03d728dd5990a94ff76c31" + integrity sha512-6iFu7Abu+4Mgqq08YhTKHfH59mpMpGTwdzDB2Y8bbgiwnGFCeoiSkVkgLn1Kel2++hYcZ8vsAW/MJS9oXxuMag== -"@cspell/dict-csharp@^4.0.5": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-csharp/-/dict-csharp-4.0.5.tgz#c677c50be09ca5bb3a2cc0be15f3cd05141fd2f7" - integrity sha512-c/sFnNgtRwRJxtC3JHKkyOm+U3/sUrltFeNwml9VsxKBHVmvlg4tk4ar58PdpW9/zTlGUkWi2i85//DN1EsUCA== +"@cspell/dict-csharp@^4.0.6": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@cspell/dict-csharp/-/dict-csharp-4.0.6.tgz#a40dc2cc12689356f986fda83c8d72cc3443d588" + integrity sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw== -"@cspell/dict-css@^4.0.16": - version "4.0.16" - resolved "https://registry.yarnpkg.com/@cspell/dict-css/-/dict-css-4.0.16.tgz#b7b87b5ea0f1157b023205bdb00070a7d231e367" - integrity sha512-70qu7L9z/JR6QLyJPk38fNTKitlIHnfunx0wjpWQUQ8/jGADIhMCrz6hInBjqPNdtGpYm8d1dNFyF8taEkOgrQ== +"@cspell/dict-css@^4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@cspell/dict-css/-/dict-css-4.0.17.tgz#e84d568d19abbcbf9d9abe6936dc2fd225a0b6d6" + integrity sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w== -"@cspell/dict-dart@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-dart/-/dict-dart-2.2.4.tgz#8b877161ccdc65cead912b742b71aa55099c1706" - integrity sha512-of/cVuUIZZK/+iqefGln8G3bVpfyN6ZtH+LyLkHMoR5tEj+2vtilGNk9ngwyR8L4lEqbKuzSkOxgfVjsXf5PsQ== +"@cspell/dict-dart@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-dart/-/dict-dart-2.3.0.tgz#2bc39f965712c798dce143cafa656125ea30c0d8" + integrity sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg== -"@cspell/dict-data-science@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-data-science/-/dict-data-science-2.0.5.tgz#816e9b394c2a423d14cdc9a5de5d6fc6141d3900" - integrity sha512-nNSILXmhSJox9/QoXICPQgm8q5PbiSQP4afpbkBqPi/u/b3K9MbNH5HvOOa6230gxcGdbZ9Argl2hY/U8siBlg== +"@cspell/dict-data-science@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-data-science/-/dict-data-science-2.0.7.tgz#3939bd105ef9ee487272e8b25e3433e7f03a6b91" + integrity sha512-XhAkK+nSW6zmrnWzusmZ1BpYLc62AWYHZc2p17u4nE2Z9XG5DleG55PCZxXQTKz90pmwlhFM9AfpkJsYaBWATA== -"@cspell/dict-django@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-django/-/dict-django-4.1.3.tgz#a02a4a9ef8c9f47344f2d4a0c3964bcb62069ef5" - integrity sha512-yBspeL3roJlO0a1vKKNaWABURuHdHZ9b1L8d3AukX0AsBy9snSggc8xCavPmSzNfeMDXbH+1lgQiYBd3IW03fg== +"@cspell/dict-django@^4.1.4": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-django/-/dict-django-4.1.4.tgz#69298021c60b9b39d491c1a9caa2b33346311a2f" + integrity sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg== -"@cspell/dict-docker@^1.1.11": - version "1.1.11" - resolved "https://registry.yarnpkg.com/@cspell/dict-docker/-/dict-docker-1.1.11.tgz#6fce86eb6d86d73f77e18d3e7b9747bad3ca98de" - integrity sha512-s0Yhb16/R+UT1y727ekbR/itWQF3Qz275DR1ahOa66wYtPjHUXmhM3B/LT3aPaX+hD6AWmK23v57SuyfYHUjsw== +"@cspell/dict-docker@^1.1.12": + version "1.1.12" + resolved "https://registry.yarnpkg.com/@cspell/dict-docker/-/dict-docker-1.1.12.tgz#aa18dbfe8d5b0df7118cdee9f2f7f44ea4b45621" + integrity sha512-6d25ZPBnYZaT9D9An/x6g/4mk542R8bR3ipnby3QFCxnfdd6xaWiTcwDPsCgwN2aQZIQ1jX/fil9KmBEqIK/qA== -"@cspell/dict-dotnet@^5.0.8": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-dotnet/-/dict-dotnet-5.0.8.tgz#8a110ca302946025e0273a9940079483ec33a88a" - integrity sha512-MD8CmMgMEdJAIPl2Py3iqrx3B708MbCIXAuOeZ0Mzzb8YmLmiisY7QEYSZPg08D7xuwARycP0Ki+bb0GAkFSqg== +"@cspell/dict-dotnet@^5.0.9": + version "5.0.9" + resolved "https://registry.yarnpkg.com/@cspell/dict-dotnet/-/dict-dotnet-5.0.9.tgz#c615eb213d5ff3015aa43a1f2e67b2393346e774" + integrity sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ== -"@cspell/dict-elixir@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-elixir/-/dict-elixir-4.0.6.tgz#3d8965c558d8afd190356e9a900b02c546741feb" - integrity sha512-TfqSTxMHZ2jhiqnXlVKM0bUADtCvwKQv2XZL/DI0rx3doG8mEMS8SGPOmiyyGkHpR/pGOq18AFH3BEm4lViHIw== +"@cspell/dict-elixir@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-elixir/-/dict-elixir-4.0.7.tgz#fd6136db9acb7912e495e02777e2141ef16822f4" + integrity sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA== -"@cspell/dict-en-common-misspellings@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.7.tgz#62861cc9e813c947ebd71c7a50fc720767b4b543" - integrity sha512-qNFo3G4wyabcwnM+hDrMYKN9vNVg/k9QkhqSlSst6pULjdvPyPs1mqz1689xO/v9t8e6sR4IKc3CgUXDMTYOpA== +"@cspell/dict-en-common-misspellings@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.9.tgz#0b123d2e46a16ef4cd3838c2ef3e9a50d8d6433e" + integrity sha512-O/jAr1VNtuyCFckbTmpeEf43ZFWVD9cJFvWaA6rO2IVmLirJViHWJUyBZOuQcesSplzEIw80MAYmnK06/MDWXQ== "@cspell/dict-en-gb@1.1.33": version "1.1.33" resolved "https://registry.yarnpkg.com/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz#7f1fd90fc364a5cb77111b5438fc9fcf9cc6da0e" integrity sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g== -"@cspell/dict-en_us@^4.3.26": - version "4.3.26" - resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-4.3.26.tgz#f0d2c9492715e85b60a78f62f03918525639aa48" - integrity sha512-hDbHYJsi3UgU1J++B0WLiYhWQdsmve3CH53FIaMRAdhrWOHcuw7h1dYkQXHFEP5lOjaq53KUHp/oh5su6VkIZg== +"@cspell/dict-en_us@^4.3.30": + version "4.3.30" + resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-4.3.30.tgz#6256eb7835369a295d2f7ac96867a18db5c17d72" + integrity sha512-p0G5fByj5fUnMyFUlkN3kaqE3nuQkqpYV47Gn9n8k2TszsdLY55xj9UoFE4YIcjOiyU1bR/YDJ5daiPMYXTJ/A== -"@cspell/dict-filetypes@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-filetypes/-/dict-filetypes-3.0.8.tgz#016d523ca2c34dea972ea0ca931255868348d81a" - integrity sha512-D3N8sm/iptzfVwsib/jvpX+K/++rM8SRpLDFUaM4jxm8EyGmSIYRbKZvdIv5BkAWmMlTWoRqlLn7Yb1b11jKJg== +"@cspell/dict-filetypes@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@cspell/dict-filetypes/-/dict-filetypes-3.0.10.tgz#1d8a22da3320e507d2c33496e5194b090320f89b" + integrity sha512-JEN3627joBVtpa1yfkdN9vz1Z129PoKGHBKjXCEziJvf2Zt1LeULWYYYg/O6pzRR4yzRa5YbXDTuyrN7vX7DFg== -"@cspell/dict-flutter@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-flutter/-/dict-flutter-1.0.3.tgz#23e552209ab2238733d30ca3f2a141359756af51" - integrity sha512-52C9aUEU22ptpgYh6gQyIdA4MP6NPwzbEqndfgPh3Sra191/kgs7CVqXiO1qbtZa9gnYHUoVApkoxRE7mrXHfg== +"@cspell/dict-flutter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-flutter/-/dict-flutter-1.1.0.tgz#66ecc468024aa9b1c7fa57698801642b979cf05e" + integrity sha512-3zDeS7zc2p8tr9YH9tfbOEYfopKY/srNsAa+kE3rfBTtQERAZeOhe5yxrnTPoufctXLyuUtcGMUTpxr3dO0iaA== -"@cspell/dict-fonts@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-fonts/-/dict-fonts-4.0.3.tgz#abf578c10a2e7b2bd8f4374002677625288560d9" - integrity sha512-sPd17kV5qgYXLteuHFPn5mbp/oCHKgitNfsZLFC3W2fWEgZlhg4hK+UGig3KzrYhhvQ8wBnmZrAQm0TFKCKzsA== +"@cspell/dict-fonts@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-fonts/-/dict-fonts-4.0.4.tgz#4d853cb147363d8a0d8ad8d8d212b950a58eb6f4" + integrity sha512-cHFho4hjojBcHl6qxidl9CvUb492IuSk7xIf2G2wJzcHwGaCFa2o3gRcxmIg1j62guetAeDDFELizDaJlVRIOg== -"@cspell/dict-fsharp@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-fsharp/-/dict-fsharp-1.0.4.tgz#19a7263a61ca89cd3ec9c17537e424907b81ef38" - integrity sha512-G5wk0o1qyHUNi9nVgdE1h5wl5ylq7pcBjX8vhjHcO4XBq20D5eMoXjwqMo/+szKAqzJ+WV3BgAL50akLKrT9Rw== +"@cspell/dict-fsharp@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-fsharp/-/dict-fsharp-1.1.0.tgz#b14f6fff20486c45651303323e467534afdc6727" + integrity sha512-oguWmHhGzgbgbEIBKtgKPrFSVAFtvGHaQS0oj+vacZqMObwkapcTGu7iwf4V3Bc2T3caf0QE6f6rQfIJFIAVsw== "@cspell/dict-fullstack@^3.2.3": version "3.2.3" resolved "https://registry.yarnpkg.com/@cspell/dict-fullstack/-/dict-fullstack-3.2.3.tgz#f6fff74eff00c6759cba510168acada0619004cc" integrity sha512-62PbndIyQPH11mAv0PyiyT0vbwD0AXEocPpHlCHzfb5v9SspzCCbzQ/LIBiFmyRa+q5LMW35CnSVu6OXdT+LKg== -"@cspell/dict-gaming-terms@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.8.tgz#fb8a737f61e7cf560b4de7b2aaeae952f2550398" - integrity sha512-7OL0zTl93WFWhhtpXFrtm9uZXItC3ncAs8d0iQDMMFVNU1rBr6raBNxJskxE5wx2Ant12fgI66ZGVagXfN+yfA== +"@cspell/dict-gaming-terms@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.0.tgz#89b8b73796368a03ea6e0e4f04c6105110c66df9" + integrity sha512-46AnDs9XkgJ2f1Sqol1WgfJ8gOqp60fojpc9Wxch7x+BA63g4JfMV5/M5x0sI0TLlLY8EBSglcr8wQF/7C80AQ== -"@cspell/dict-git@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-git/-/dict-git-3.0.3.tgz#3a3805ab9902bffc9255ec48f648145b957eb30b" - integrity sha512-LSxB+psZ0qoj83GkyjeEH/ZViyVsGEF/A6BAo8Nqc0w0HjD2qX/QR4sfA6JHUgQ3Yi/ccxdK7xNIo67L2ScW5A== +"@cspell/dict-git@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-git/-/dict-git-3.0.4.tgz#3753f17a2a122f4dc734a51820fac7b6ffc594f1" + integrity sha512-C44M+m56rYn6QCsLbiKiedyPTMZxlDdEYAsPwwlL5bhMDDzXZ3Ic8OCQIhMbiunhCOJJT+er4URmOmM+sllnjg== -"@cspell/dict-golang@^6.0.16": - version "6.0.16" - resolved "https://registry.yarnpkg.com/@cspell/dict-golang/-/dict-golang-6.0.16.tgz#b247a801404f9a65e7c8674893bdb5aad42353a2" - integrity sha512-hZOBlgcguv2Hdc93n2zjdAQm1j3grsN9T9WhPnQ1wh2vUDoCLEujg+6gWhjcLb8ECOcwZTWgNyQLWeOxEsAj/w== +"@cspell/dict-golang@^6.0.18": + version "6.0.18" + resolved "https://registry.yarnpkg.com/@cspell/dict-golang/-/dict-golang-6.0.18.tgz#44e144409c3141ee58d854e49e118f7d264c9d43" + integrity sha512-Mt+7NwfodDwUk7423DdaQa0YaA+4UoV3XSxQwZioqjpFBCuxfvvv4l80MxCTAAbK6duGj0uHbGTwpv8fyKYPKg== -"@cspell/dict-google@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-google/-/dict-google-1.0.4.tgz#e15a7ea2dee73800231a81840a59d3b50d49346f" - integrity sha512-JThUT9eiguCja1mHHLwYESgxkhk17Gv7P3b1S7ZJzXw86QyVHPrbpVoMpozHk0C9o+Ym764B7gZGKmw9uMGduQ== +"@cspell/dict-google@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@cspell/dict-google/-/dict-google-1.0.8.tgz#dee71c800211adc73d2f538e4fd75cc6fb1bc4b3" + integrity sha512-BnMHgcEeaLyloPmBs8phCqprI+4r2Jb8rni011A8hE+7FNk7FmLE3kiwxLFrcZnnb7eqM0agW4zUaNoB0P+z8A== -"@cspell/dict-haskell@^4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-haskell/-/dict-haskell-4.0.4.tgz#37e9cb9a7f5be337a697bcffd0a0d25e80aab50d" - integrity sha512-EwQsedEEnND/vY6tqRfg9y7tsnZdxNqOxLXSXTsFA6JRhUlr8Qs88iUUAfsUzWc4nNmmzQH2UbtT25ooG9x4nA== +"@cspell/dict-haskell@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@cspell/dict-haskell/-/dict-haskell-4.0.5.tgz#260f5412cfe5ef3ca7cd3604ecd93142e63c2a3a" + integrity sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ== "@cspell/dict-html-symbol-entities@^4.0.3": version "4.0.3" resolved "https://registry.yarnpkg.com/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.3.tgz#bf2887020ca4774413d8b1f27c9b6824ba89e9ef" integrity sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A== -"@cspell/dict-html@^4.0.10": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-4.0.10.tgz#7b536b2adca4b58ed92752c9d3c7ffc724dd5991" - integrity sha512-I9uRAcdtHbh0wEtYZlgF0TTcgH0xaw1B54G2CW+tx4vHUwlde/+JBOfIzird4+WcMv4smZOfw+qHf7puFUbI5g== +"@cspell/dict-html@^4.0.11": + version "4.0.11" + resolved "https://registry.yarnpkg.com/@cspell/dict-html/-/dict-html-4.0.11.tgz#410db0e062620841342f596b9187776091f81d44" + integrity sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw== -"@cspell/dict-java@^5.0.10": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@cspell/dict-java/-/dict-java-5.0.10.tgz#e6383ca645046b9f05a04a2c2e858fcc80c6fc63" - integrity sha512-pVNcOnmoGiNL8GSVq4WbX/Vs2FGS0Nej+1aEeGuUY9CU14X8yAVCG+oih5ZoLt1jaR8YfR8byUF8wdp4qG4XIw== +"@cspell/dict-java@^5.0.11": + version "5.0.11" + resolved "https://registry.yarnpkg.com/@cspell/dict-java/-/dict-java-5.0.11.tgz#3cb0c7e8cf18d1da206fab3b5dbb64bd693a51f5" + integrity sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w== -"@cspell/dict-julia@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-julia/-/dict-julia-1.0.4.tgz#e478c20d742cd6857b6de41dc61a92036dafb4bc" - integrity sha512-bFVgNX35MD3kZRbXbJVzdnN7OuEqmQXGpdOi9jzB40TSgBTlJWA4nxeAKV4CPCZxNRUGnLH0p05T/AD7Aom9/w== +"@cspell/dict-julia@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-julia/-/dict-julia-1.1.0.tgz#06302765dbdb13023be506c27c26b2f3e475d1cc" + integrity sha512-CPUiesiXwy3HRoBR3joUseTZ9giFPCydSKu2rkh6I2nVjXnl5vFHzOMLXpbF4HQ1tH2CNfnDbUndxD+I+7eL9w== -"@cspell/dict-k8s@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@cspell/dict-k8s/-/dict-k8s-1.0.9.tgz#e9392a002797c67ffc3e96893156cc15af3774d1" - integrity sha512-Q7GELSQIzo+BERl2ya/nBEnZeQC+zJP19SN1pI6gqDYraM51uYJacbbcWLYYO2Y+5joDjNt/sd/lJtLaQwoSlA== +"@cspell/dict-k8s@^1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@cspell/dict-k8s/-/dict-k8s-1.0.10.tgz#3f4f77a47d6062d66e85651a05482ad62dd65180" + integrity sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw== + +"@cspell/dict-kotlin@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-kotlin/-/dict-kotlin-1.1.0.tgz#67daf596e14b03a88152b2d124bc2bfa05c49717" + integrity sha512-vySaVw6atY7LdwvstQowSbdxjXG6jDhjkWVWSjg1XsUckyzH1JRHXe9VahZz1i7dpoFEUOWQrhIe5B9482UyJQ== "@cspell/dict-latex@^4.0.3": version "4.0.3" resolved "https://registry.yarnpkg.com/@cspell/dict-latex/-/dict-latex-4.0.3.tgz#a1254c7d9c3a2d70cd6391a9f2f7694431b1b2cb" integrity sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw== -"@cspell/dict-lorem-ipsum@^4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.3.tgz#c5fc631d934f1daf8b10c88b795278701a2469ec" - integrity sha512-WFpDi/PDYHXft6p0eCXuYnn7mzMEQLVeqpO+wHSUd+kz5ADusZ4cpslAA4wUZJstF1/1kMCQCZM6HLZic9bT8A== +"@cspell/dict-lorem-ipsum@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.4.tgz#8f83771617109b060c7d7713cb090ca43f64c97c" + integrity sha512-+4f7vtY4dp2b9N5fn0za/UR0kwFq2zDtA62JCbWHbpjvO9wukkbl4rZg4YudHbBgkl73HRnXFgCiwNhdIA1JPw== -"@cspell/dict-lua@^4.0.6": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-lua/-/dict-lua-4.0.6.tgz#7de412bfaead794445e26d566aec222e20ad69ba" - integrity sha512-Jwvh1jmAd9b+SP9e1GkS2ACbqKKRo9E1f9GdjF/ijmooZuHU0hPyqvnhZzUAxO1egbnNjxS/J2T6iUtjAUK2KQ== +"@cspell/dict-lua@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-lua/-/dict-lua-4.0.7.tgz#36559f77d8e036d058a29ab69da839bcb00d5918" + integrity sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q== -"@cspell/dict-makefile@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-makefile/-/dict-makefile-1.0.3.tgz#08d3349bf7cbd8f5dacf8641f3d35092ca0b8b38" - integrity sha512-R3U0DSpvTs6qdqfyBATnePj9Q/pypkje0Nj26mQJ8TOBQutCRAJbr2ZFAeDjgRx5EAJU/+8txiyVF97fbVRViw== +"@cspell/dict-makefile@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-makefile/-/dict-makefile-1.0.4.tgz#52ea60fbf30a9814229c222788813bf93cbf1f3e" + integrity sha512-E4hG/c0ekPqUBvlkrVvzSoAA+SsDA9bLi4xSV3AXHTVru7Y2bVVGMPtpfF+fI3zTkww/jwinprcU1LSohI3ylw== -"@cspell/dict-markdown@^2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@cspell/dict-markdown/-/dict-markdown-2.0.7.tgz#15d6f9eed6bd1b33921b4332426ff387961163f1" - integrity sha512-F9SGsSOokFn976DV4u/1eL4FtKQDSgJHSZ3+haPRU5ki6OEqojxKa8hhj4AUrtNFpmBaJx/WJ4YaEzWqG7hgqg== +"@cspell/dict-markdown@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@cspell/dict-markdown/-/dict-markdown-2.0.9.tgz#0ecf2703fb69b47494bac81557d539cb4a541939" + integrity sha512-j2e6Eg18BlTb1mMP1DkyRFMM/FLS7qiZjltpURzDckB57zDZbUyskOFdl4VX7jItZZEeY0fe22bSPOycgS1Z5A== -"@cspell/dict-monkeyc@^1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.9.tgz#58b5f6f15fc7c11ce0eeffd0742fba4b39fc0b8b" - integrity sha512-Jvf6g5xlB4+za3ThvenYKREXTEgzx5gMUSzrAxIiPleVG4hmRb/GBSoSjtkGaibN3XxGx5x809gSTYCA/IHCpA== +"@cspell/dict-monkeyc@^1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.10.tgz#21955a891b27270424c6e1edaaa4b444fb077c4f" + integrity sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw== -"@cspell/dict-node@^5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-5.0.4.tgz#dfe1f159a1ffb1c4f389ec43b15f705123113658" - integrity sha512-Hz5hiuOvZTd7Cp1IBqUZ7/ChwJeQpD5BJuwCaDn4mPNq4iMcQ1iWBYMThvNVqCEDgKv63X52nT8RAWacss98qg== +"@cspell/dict-node@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-5.0.6.tgz#80f156f79f15d58c5d4df89358314e128070ad98" + integrity sha512-CEbhPCpxGvRNByGolSBTrXXW2rJA4bGqZuTx1KKO85mwR6aadeOmUE7xf/8jiCkXSy+qvr9aJeh+jlfXcsrziQ== -"@cspell/dict-npm@^5.1.8": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-5.1.8.tgz#d179e555d351aecd4c7e5a87756f3b1192701ee8" - integrity sha512-AJELYXeB4fQdIoNfmuaQxB1Hli3cX6XPsQCjfBxlu0QYXhrjB/IrCLLQAjWIywDqJiWyGUFTz4DqaANm8C/r9Q== +"@cspell/dict-npm@^5.1.24": + version "5.1.24" + resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-5.1.24.tgz#a34f292472980eab9af4e93dcdd6791d8632eab2" + integrity sha512-yAyyHetElLR236sqWQkBtiLbzCGexV5zzLMHyQPptKQQK88BTQR5f9wXW2EtSgJw/4gUchpSWQWxMlkIfK/iQQ== -"@cspell/dict-php@^4.0.13": - version "4.0.13" - resolved "https://registry.yarnpkg.com/@cspell/dict-php/-/dict-php-4.0.13.tgz#86f1e6fb2174b2b0fa012baf86c448b2730f04f9" - integrity sha512-P6sREMZkhElzz/HhXAjahnICYIqB/HSGp1EhZh+Y6IhvC15AzgtDP8B8VYCIsQof6rPF1SQrFwunxOv8H1e2eg== +"@cspell/dict-php@^4.0.14": + version "4.0.14" + resolved "https://registry.yarnpkg.com/@cspell/dict-php/-/dict-php-4.0.14.tgz#96d2b99816312bf6f52bc099af9dfea7994ff15e" + integrity sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g== -"@cspell/dict-powershell@^5.0.13": - version "5.0.13" - resolved "https://registry.yarnpkg.com/@cspell/dict-powershell/-/dict-powershell-5.0.13.tgz#f557aa04ee9bda4fe091308a0bcaea09ed12fa76" - integrity sha512-0qdj0XZIPmb77nRTynKidRJKTU0Fl+10jyLbAhFTuBWKMypVY06EaYFnwhsgsws/7nNX8MTEQuewbl9bWFAbsg== +"@cspell/dict-powershell@^5.0.14": + version "5.0.14" + resolved "https://registry.yarnpkg.com/@cspell/dict-powershell/-/dict-powershell-5.0.14.tgz#c8d676e1548c45069dc211e8427335e421ab1cd7" + integrity sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA== -"@cspell/dict-public-licenses@^2.0.11": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.11.tgz#37550c4e0cd445991caba528bf4ba58ce7a935c3" - integrity sha512-rR5KjRUSnVKdfs5G+gJ4oIvQvm8+NJ6cHWY2N+GE69/FSGWDOPHxulCzeGnQU/c6WWZMSimG9o49i9r//lUQyA== +"@cspell/dict-public-licenses@^2.0.13": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.13.tgz#904c8b97ffb60691d28cce0fb5186a8dd473587d" + integrity sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ== -"@cspell/dict-python@^4.2.12": - version "4.2.12" - resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-4.2.12.tgz#ea6298bb72a6bcf2c188d5c55142e0afab8a6c1c" - integrity sha512-U25eOFu+RE0aEcF2AsxZmq3Lic7y9zspJ9SzjrC0mfJz+yr3YmSCw4E0blMD3mZoNcf7H/vMshuKIY5AY36U+Q== +"@cspell/dict-python@^4.2.15": + version "4.2.15" + resolved "https://registry.yarnpkg.com/@cspell/dict-python/-/dict-python-4.2.15.tgz#97c2d3ce3becc4dcb061f444232e903f9723cd16" + integrity sha512-VNXhj0Eh+hdHN89MgyaoSAexBQKmYtJaMhucbMI7XmBs4pf8fuFFN3xugk51/A4TZJr8+RImdFFsGMOw+I4bDA== dependencies: - "@cspell/dict-data-science" "^2.0.5" + "@cspell/dict-data-science" "^2.0.7" -"@cspell/dict-r@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-r/-/dict-r-2.0.4.tgz#31b5abd91cc12aebfffdde4be4d2902668789311" - integrity sha512-cBpRsE/U0d9BRhiNRMLMH1PpWgw+N+1A2jumgt1if9nBGmQw4MUpg2u9I0xlFVhstTIdzXiLXMxP45cABuiUeQ== +"@cspell/dict-r@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-r/-/dict-r-2.1.0.tgz#147a01b36fc4ae2381c88a00b1f8ba7fad77a4f1" + integrity sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA== "@cspell/dict-ruby@^5.0.7": version "5.0.7" resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-5.0.7.tgz#3593a955baaffe3c5d28fb178b72fdf93c7eec71" integrity sha512-4/d0hcoPzi5Alk0FmcyqlzFW9lQnZh9j07MJzPcyVO62nYJJAGKaPZL2o4qHeCS/od/ctJC5AHRdoUm0ktsw6Q== -"@cspell/dict-rust@^4.0.9": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@cspell/dict-rust/-/dict-rust-4.0.9.tgz#8af5e405f3280afffe41f212da3ae0e777243842" - integrity sha512-Dhr6TIZsMV92xcikKIWei6p/qswS4M+gTkivpWwz4/1oaVk2nRrxJmCdRoVkJlZkkAc17rjxrS12mpnJZI0iWw== +"@cspell/dict-rust@^4.0.11": + version "4.0.11" + resolved "https://registry.yarnpkg.com/@cspell/dict-rust/-/dict-rust-4.0.11.tgz#4b6d1839dbcca7e50e2e4e2b1c45d785d2634b14" + integrity sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw== -"@cspell/dict-scala@^5.0.6": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-5.0.6.tgz#5e925def2fe6dc27ee2ad1c452941c3d6790fb6d" - integrity sha512-tl0YWAfjUVb4LyyE4JIMVE8DlLzb1ecHRmIWc4eT6nkyDqQgHKzdHsnusxFEFMVLIQomgSg0Zz6hJ5S1E4W4ww== +"@cspell/dict-scala@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-5.0.7.tgz#831516fb1434b0fc867254cfb4a343eb0aaadeab" + integrity sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA== -"@cspell/dict-software-terms@^4.1.12": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-4.1.12.tgz#ea6e6afde34e73fd233aecfe450f4081345e0d10" - integrity sha512-MHDAK/WlEdMJiDQ6lJ3SF7VogdfJcRXGYWfO4v90rxW8HDVfKDXVk3zpJhjoZGq56ujR1qmeYkQsM6MlB69uJA== +"@cspell/dict-shell@1.1.0", "@cspell/dict-shell@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-shell/-/dict-shell-1.1.0.tgz#3110d5c81cb5bd7f6c0cc88e6e8ac7ccf6fa65b5" + integrity sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ== -"@cspell/dict-sql@^2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@cspell/dict-sql/-/dict-sql-2.1.8.tgz#45ea53b3e57fd2cc5f839f49b644aa743dac4990" - integrity sha512-dJRE4JV1qmXTbbGm6WIcg1knmR6K5RXnQxF4XHs5HA3LAjc/zf77F95i5LC+guOGppVF6Hdl66S2UyxT+SAF3A== +"@cspell/dict-software-terms@^4.2.4": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-4.2.4.tgz#3bc651f2fc49bb2d2ffe5b2ec762d67d3565e342" + integrity sha512-GRkuaFfjFHPYynyRMuisKyE3gRiVK0REClRWfnH9+5iCs5TKDURsMpWJGNsgQ6N5jAKKrtWXVKjepkDHjMldjQ== -"@cspell/dict-svelte@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-svelte/-/dict-svelte-1.0.5.tgz#09752e01ff6667e737566d9dfc704c8dcc9a6492" - integrity sha512-sseHlcXOqWE4Ner9sg8KsjxwSJ2yssoJNqFHR9liWVbDV+m7kBiUtn2EB690TihzVsEmDr/0Yxrbb5Bniz70mA== +"@cspell/dict-sql@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-sql/-/dict-sql-2.2.0.tgz#850fc6eaa38e11e413712f332ab03bee4bd652ce" + integrity sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ== -"@cspell/dict-swift@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@cspell/dict-swift/-/dict-swift-2.0.4.tgz#bc19522418ed68cf914736b612c4e4febbf07e8d" - integrity sha512-CsFF0IFAbRtYNg0yZcdaYbADF5F3DsM8C4wHnZefQy8YcHP/qjAF/GdGfBFBLx+XSthYuBlo2b2XQVdz3cJZBw== +"@cspell/dict-svelte@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@cspell/dict-svelte/-/dict-svelte-1.0.6.tgz#367b3e743475e7641caa8b750b222374be2c4d38" + integrity sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q== -"@cspell/dict-terraform@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@cspell/dict-terraform/-/dict-terraform-1.0.5.tgz#14c427ae47d2f78b4acd6fe9ed12bcae53aec441" - integrity sha512-qH3epPB2d6d5w1l4hR2OsnN8qDQ4P0z6oDB7+YiNH+BoECXv4Z38MIV1H8cxIzD2wkzkt2JTcFYaVW72MDZAlg== +"@cspell/dict-swift@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@cspell/dict-swift/-/dict-swift-2.0.5.tgz#72d37a3ea53d6a9ec1f4b553959268ce58acff28" + integrity sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA== -"@cspell/dict-typescript@^3.1.11": - version "3.1.11" - resolved "https://registry.yarnpkg.com/@cspell/dict-typescript/-/dict-typescript-3.1.11.tgz#40586f13b0337bd9cba958e0661b35888580b249" - integrity sha512-FwvK5sKbwrVpdw0e9+1lVTl8FPoHYvfHRuQRQz2Ql5XkC0gwPPkpoyD1zYImjIyZRoYXk3yp9j8ss4iz7A7zoQ== +"@cspell/dict-terraform@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-terraform/-/dict-terraform-1.1.0.tgz#2775b588607ec879fdbad91bef6f0994d7b4653d" + integrity sha512-G55pcUUxeXAhejstmD35B47SkFd4uqCQimc+CMgq8Nx0dr03guL2iMsz8faRWQGkCnGimX8S91rbOhDv9p/heg== -"@cspell/dict-vue@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@cspell/dict-vue/-/dict-vue-3.0.3.tgz#295c288f6fd363879898223202ec3be048663b98" - integrity sha512-akmYbrgAGumqk1xXALtDJcEcOMYBYMnkjpmGzH13Ozhq1mkPF4VgllFQlm1xYde+BUKNnzMgPEzxrL2qZllgYA== +"@cspell/dict-typescript@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@cspell/dict-typescript/-/dict-typescript-3.2.0.tgz#6133c086cf11c3823450860e6221fe256c48434d" + integrity sha512-Pk3zNePLT8qg51l0M4g1ISowYAEGxTuNfZlgkU5SvHa9Cu7x/BWoyYq9Fvc3kAyoisCjRPyvWF4uRYrPitPDFw== -"@cspell/dynamic-import@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/dynamic-import/-/dynamic-import-8.15.5.tgz#9ae4bd6528e5f0137b9267f7000ac220a071b304" - integrity sha512-xfLRVi8zHKCGK1fg1ixXQ0bAlIU9sGm7xfbTmGG8TQt+iaKHVMIlt+XeCAo0eE7aKjIaIfqcC/PCIdUJiODuGA== +"@cspell/dict-vue@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@cspell/dict-vue/-/dict-vue-3.0.4.tgz#0f1cb65e2f640925de72acbc1cae9e87f7727c05" + integrity sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w== + +"@cspell/dynamic-import@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/dynamic-import/-/dynamic-import-8.17.3.tgz#031090bf4959b19d91614a16567fdcfc4027e3ba" + integrity sha512-Kg6IJhGHPv+9OxpxaXUpcqgnHEOhMLRWHLyx7FADZ+CJyO4AVeWQfhpTRM6KXhzIl7dPlLG1g8JAQxaoy88KTw== dependencies: + "@cspell/url" "8.17.3" import-meta-resolve "^4.1.0" -"@cspell/filetypes@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/filetypes/-/filetypes-8.15.5.tgz#39e869d8f11493aaf97c5a876fb5a9ba28082670" - integrity sha512-ljEFUp61mw5RWZ3S6ke6rvGKy8m4lZZjRd5KO07RYyGwSeLa4PX9AyTgSzuqXiN9y1BwogD3xolCMfPsMrtZIQ== +"@cspell/filetypes@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/filetypes/-/filetypes-8.17.3.tgz#490d150807566227e12eb28c4dc43b45ebb5e7c2" + integrity sha512-UFqRmJPccOSo+RYP/jZ4cr0s7ni37GrvnNAg1H/qIIxfmBYsexTAmsNzMqxp1M31NeI1Cx3LL7PspPMT0ms+7w== -"@cspell/strong-weak-map@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/strong-weak-map/-/strong-weak-map-8.15.5.tgz#6e3d312fa31c0382a62a1c690dd1006e7728eef3" - integrity sha512-7VzDAXsJPDXllTIi9mvQwd7PR43TPk1Ix3ocLTZDVNssf1cQbmLiQX6YWk0k8FWGfIPoIMlByw4tTSizRJcTcw== +"@cspell/strong-weak-map@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/strong-weak-map/-/strong-weak-map-8.17.3.tgz#208cb32812a58f8190109d139090f1123e1f5545" + integrity sha512-l/CaFc3CITI/dC+whEBZ05Om0KXR3V2whhVOWOBPIqA5lCjWAyvWWvmFD+CxWd0Hs6Qcb/YDnMyJW14aioXN4g== -"@cspell/url@8.15.5": - version "8.15.5" - resolved "https://registry.yarnpkg.com/@cspell/url/-/url-8.15.5.tgz#96006d80df0cb7de753a81f907df1d442e1882d5" - integrity sha512-z8q7LUppFiNvytX2qrKDkXcsmOrwjqFf/5RkcpNppDezLrFejaMZu4BEVNcPrFCeS2J04K+uksNL1LYSob8jCg== +"@cspell/url@8.17.3": + version "8.17.3" + resolved "https://registry.yarnpkg.com/@cspell/url/-/url-8.17.3.tgz#36ad2c72fcbdeb4a2d1d5a16505919861e67be27" + integrity sha512-gcsCz8g0qY94C8RXiAlUH/89n84Q9RSptP91XrvnLOT+Xva9Aibd7ywd5k9ameuf8Nagyl0ezB1MInZ30S9SRw== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -936,13 +952,13 @@ dependencies: tslib "^2.4.0" -"@grafana/data@11.3.0", "@grafana/data@^11.3.0": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@grafana/data/-/data-11.3.0.tgz#18a75244aa4e22a23ac6f43f6ecc405fd0e18da8" - integrity sha512-AH7kJQRk1G0ccfAnCPfeQ/zJJ0kdkvpfjgTe40EJbj4S3m2mJ1lawYxd0VUsPgrh0DVezBZZkybInn+PT9jv4A== +"@grafana/data@11.4.0", "@grafana/data@^11.4.0": + version "11.4.0" + resolved "https://registry.yarnpkg.com/@grafana/data/-/data-11.4.0.tgz#d30fb918aac1e21120bac27b54f59a4ad42fc999" + integrity sha512-/Og3njCvDRR+jYWAYlEjNZfyO0KaYiH/3Hvz5lXYd/B29sN8ZOfyvdB3lp+727y4sHIG+Jb1NiX0L3qHD7dLgQ== dependencies: "@braintree/sanitize-url" "7.0.1" - "@grafana/schema" "11.3.0" + "@grafana/schema" "11.4.0" "@types/d3-interpolate" "^3.0.0" "@types/string-hash" "1.1.3" d3-interpolate "3.0.1" @@ -966,24 +982,24 @@ uplot "1.6.31" xss "^1.0.14" -"@grafana/e2e-selectors@11.3.0": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@grafana/e2e-selectors/-/e2e-selectors-11.3.0.tgz#c70f465550b3b681474addd72a2486a5653a1be0" - integrity sha512-M1Ay/qxen7PyqS0YpwIpXRRlp563l22KOzxRAY+oGqjvVQvEIoq5ET10Y7rX5DgHpqdcuH1OyhrijYKV1x5fuA== +"@grafana/e2e-selectors@11.4.0": + version "11.4.0" + resolved "https://registry.yarnpkg.com/@grafana/e2e-selectors/-/e2e-selectors-11.4.0.tgz#ea9460cfc4112406ea954204d3296f9a4a652118" + integrity sha512-6VRsmTpqtmNuXJvuUNJudHFdZJR7oc1DtZMDoaOY+3Y3yPU+4oEdM2MtsyYHPkMbfTONlJ4fdIC0WFnWhDIhLA== dependencies: "@grafana/tsconfig" "^2.0.0" tslib "2.7.0" typescript "5.5.4" -"@grafana/e2e-selectors@^11.4.0-204289": - version "11.4.0-205067" - resolved "https://registry.yarnpkg.com/@grafana/e2e-selectors/-/e2e-selectors-11.4.0-205067.tgz#c5896f502584d47e01d5bf4f39016914971a0d37" - integrity sha512-AAhVSg6GfCru3r9lrRB4vYjcuwn0KZZLCsm5QonQDga97B0oedvjuRh+HTAUrHBNlsOAir36acZ9jBr/nKhWAg== +"@grafana/e2e-selectors@^11.5.0-216908": + version "11.5.0-217903" + resolved "https://registry.yarnpkg.com/@grafana/e2e-selectors/-/e2e-selectors-11.5.0-217903.tgz#14a4942150b1ef0ce78dd8f8302e67ca02a2bfbb" + integrity sha512-94F3m0Ec7a6ghtDLvcdhMXv7/2NXJc/cgdyFLtHF2DjgHklXw8ncUNCx6qgrrLyTUnaVEKpetJfXP+rNyUoJnA== dependencies: "@grafana/tsconfig" "^2.0.0" semver "7.6.3" - tslib "2.7.0" - typescript "5.5.4" + tslib "2.8.1" + typescript "5.7.3" "@grafana/eslint-config@^7.0.0": version "7.0.0" @@ -1016,35 +1032,35 @@ ua-parser-js "^1.0.32" web-vitals "^4.0.1" -"@grafana/plugin-e2e@^1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@grafana/plugin-e2e/-/plugin-e2e-1.11.0.tgz#f429c3ca89ae127b13ca314a9f5f9d2606e86779" - integrity sha512-pjmDIcVshHD8P/9brho10zb4XleO+6/DL2YWLA1QqC7ppelyHXCx2CdShVQvzjicRgiIgSeQ9UDvVOQzZfCNBQ== +"@grafana/plugin-e2e@^1.15.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@grafana/plugin-e2e/-/plugin-e2e-1.15.0.tgz#5d2082acf5400d5b1752f9abb0c8881b171ccc38" + integrity sha512-cP3uekIPVlBNtyBynNIJl3y225MJWHYxlLIhkE74WIsLNH8gC8QtTTLO4w/Quiiz/xL171IgSE+t0EHtkesx/Q== dependencies: - "@grafana/e2e-selectors" "^11.4.0-204289" + "@grafana/e2e-selectors" "^11.5.0-216908" semver "^7.5.4" - uuid "^10.0.0" + uuid "^11.0.2" yaml "^2.3.4" -"@grafana/runtime@^11.3.0": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@grafana/runtime/-/runtime-11.3.0.tgz#040237539da708189548320793179ccdf4e514bf" - integrity sha512-wSa8CVK/C4N68DeEii2i2JXR8CuoXYXufLQwRG6wbpv2lcpAV2guyMSb3hmBX3DSg12SVn1ixVZRAkm5sYUqNg== +"@grafana/runtime@^11.4.0": + version "11.4.0" + resolved "https://registry.yarnpkg.com/@grafana/runtime/-/runtime-11.4.0.tgz#32812909c824026bd7d84c6427b49da54921460b" + integrity sha512-yZIaNqHKncf97/6QjjHvI+v02+PvGpG6wWNDN+/H1R8vzrMe21asBNDm0EEW/mPUlRLtmAAGcUAt6jL6vRe+6g== dependencies: - "@grafana/data" "11.3.0" - "@grafana/e2e-selectors" "11.3.0" + "@grafana/data" "11.4.0" + "@grafana/e2e-selectors" "11.4.0" "@grafana/faro-web-sdk" "^1.3.6" - "@grafana/schema" "11.3.0" - "@grafana/ui" "11.3.0" + "@grafana/schema" "11.4.0" + "@grafana/ui" "11.4.0" history "4.10.1" lodash "4.17.21" rxjs "7.8.1" tslib "2.7.0" -"@grafana/schema@11.3.0", "@grafana/schema@^11.2.2": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@grafana/schema/-/schema-11.3.0.tgz#30d57d3d696b5926f173048949bb994d72056329" - integrity sha512-KOgk0omDs8URuhL++ksgMDPMB49di8oCKqMNI10z3zSQniECUow+3Ggz1WeenReL7ajyJVG/O3rGVEaqteDMzg== +"@grafana/schema@11.4.0", "@grafana/schema@^11.2.2": + version "11.4.0" + resolved "https://registry.yarnpkg.com/@grafana/schema/-/schema-11.4.0.tgz#5733ae4fb362be4858702ab1042c3c92e42856a0" + integrity sha512-ZcUZtVdNSuBmTjwPAgWwQ/9/ilozAXggfXye797Odp3mXU9erQX7CqV9JV3y5pyj1+KMd+khzfjxEZotsjHWIA== dependencies: tslib "2.7.0" @@ -1053,19 +1069,19 @@ resolved "https://registry.yarnpkg.com/@grafana/tsconfig/-/tsconfig-2.0.0.tgz#277aba907ddbe0301dc37248923e6bd2b68f5151" integrity sha512-cxC3Htv/GidI5FeVGAzj/lYZTMMz/Cfsc8VOQFO3Ichjx3hUjyjeoBUIpVSVMnIjKUdA5ycdxtMYPHIuIrk8+A== -"@grafana/ui@11.3.0", "@grafana/ui@^11.2.2": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@grafana/ui/-/ui-11.3.0.tgz#398cba6f20b015ae0ebcc19a9eab55ad730a4714" - integrity sha512-uTr1TCmLwmrEPS7FHqjM7nx/6KXrQkIAWwvzW/u5KrYiGVjmFCK5IRe586Y61SQ+uAZ98ZjqvIXzVgorzFGZ+w== +"@grafana/ui@11.4.0", "@grafana/ui@^11.2.2": + version "11.4.0" + resolved "https://registry.yarnpkg.com/@grafana/ui/-/ui-11.4.0.tgz#bb451e236f379a917afe19a65de061ca3bd44b15" + integrity sha512-Z2J+b6RCizecdn7gbribmzkJIZxANXFp6wvt0pZa4toZ/BTe9CK30Y2/x1KiGa9VAzIhS1pqihc+PrcJU9I5LA== dependencies: "@emotion/css" "11.13.4" "@emotion/react" "11.13.3" "@emotion/serialize" "1.3.2" "@floating-ui/react" "0.26.24" - "@grafana/data" "11.3.0" - "@grafana/e2e-selectors" "11.3.0" + "@grafana/data" "11.4.0" + "@grafana/e2e-selectors" "11.4.0" "@grafana/faro-web-sdk" "^1.3.6" - "@grafana/schema" "11.3.0" + "@grafana/schema" "11.4.0" "@hello-pangea/dnd" "16.6.0" "@leeoniya/ufuzzy" "1.0.14" "@monaco-editor/react" "4.6.0" @@ -1453,7 +1469,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1606,12 +1622,12 @@ resolved "https://registry.yarnpkg.com/@petamoriken/float16/-/float16-3.8.7.tgz#16073fb1b9867eaa5b254573484d09100700aaa4" integrity sha512-/Ri4xDDpe12NT6Ex/DRgHzLlobiQXEW/hmG08w1wj/YU7hLemk97c+zHQFp0iZQ9r7YqgLEXZR2sls4HxBf9NA== -"@playwright/test@^1.48.2": - version "1.48.2" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.48.2.tgz#87dd40633f980872283404c8142a65744d3f13d6" - integrity sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw== +"@playwright/test@^1.50.0": + version "1.50.0" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.50.0.tgz#25c63a09f833f89da4d54ad67db7900359e2d11d" + integrity sha512-ZGNXbt+d65EGjBORQHuYKj+XhCewlwpnSd/EDuLPZGSiEWmgOJB5RmMCCYGy5aMfTs9wx61RivfDKi8H/hcMvw== dependencies: - playwright "1.48.2" + playwright "1.50.0" "@popperjs/core@2.11.8": version "2.11.8" @@ -2047,10 +2063,10 @@ dependencies: "@babel/runtime" "^7.12.5" -"@testing-library/user-event@^14.5.2": - version "14.5.2" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" - integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== +"@testing-library/user-event@^14.6.1": + version "14.6.1" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.6.1.tgz#13e09a32d7a8b7060fe38304788ebf4197cd2149" + integrity sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw== "@tootallnate/once@2": version "2.0.0" @@ -3173,10 +3189,10 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.2.0, chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== +chalk@^5.2.0, chalk@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== char-regex@^1.0.2: version "1.0.2" @@ -3312,10 +3328,10 @@ commander@^10.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== -commander@^12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== +commander@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46" + integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw== commander@^2.19.0, commander@^2.20.0, commander@^2.20.3: version "2.20.3" @@ -3444,90 +3460,90 @@ create-require@^1.1.0: integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -cspell-config-lib@8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell-config-lib/-/cspell-config-lib-8.15.5.tgz#e46744344a9252090eb02f8fe095d9ee3c66ad73" - integrity sha512-16XBjAlUWO46uEuUKHQvSeiU7hQzG9Pqg6lwKQOyZ/rVLZyihk7JGtnWuG83BbW0RFokB/BcgT1q6OegWJiEZw== +cspell-config-lib@8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell-config-lib/-/cspell-config-lib-8.17.3.tgz#de2fdeda9c6fe444919dd28d5f2c572e2e731109" + integrity sha512-+N32Q6xck3D2RqZIFwq8s0TnzHYMpyh4bgNtYqW5DIP3TLDiA4/MJGjwmLKAg/s9dkre6n8/++vVli3MZAOhIg== dependencies: - "@cspell/cspell-types" "8.15.5" + "@cspell/cspell-types" "8.17.3" comment-json "^4.2.5" - yaml "^2.6.0" - -cspell-dictionary@8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell-dictionary/-/cspell-dictionary-8.15.5.tgz#3d1370c241bb0cd724b57f7b3bde059671bedc03" - integrity sha512-L+4MD3KItFGsxR8eY2ed6InsD7hZU1TIAeV2V4sG0wIbUXJXbPFxBTNZJrPLxTzAeCutHmkZwAl4ZCGu18bgtw== - dependencies: - "@cspell/cspell-pipe" "8.15.5" - "@cspell/cspell-types" "8.15.5" - cspell-trie-lib "8.15.5" - fast-equals "^5.0.1" - -cspell-gitignore@8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-8.15.5.tgz#b9f2b8db4692190df691947f7dec7e3509d1d6a1" - integrity sha512-z5T0Xswfiu2NbkoVdf6uwEWzOgxCBb3L8kwB6lxzK5iyQDW2Bqlk+5b6KQaY38OtjTjJ9zzIJfFN3MfFlMFd3A== - dependencies: - "@cspell/url" "8.15.5" - cspell-glob "8.15.5" - cspell-io "8.15.5" + yaml "^2.7.0" + +cspell-dictionary@8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell-dictionary/-/cspell-dictionary-8.17.3.tgz#c6fc72187095121855c5fd426604db3d08a8f180" + integrity sha512-89I/lpQKdkX17RCFrUIJnc70Rjfpup/o+ynHZen0hUxGTfLsEJPrK6H2oGvic3Yrv5q8IOtwM1p8vqPqBkBheA== + dependencies: + "@cspell/cspell-pipe" "8.17.3" + "@cspell/cspell-types" "8.17.3" + cspell-trie-lib "8.17.3" + fast-equals "^5.2.2" + +cspell-gitignore@8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-8.17.3.tgz#ca78dc6d6242a612d6ad596e50ea8973e2da7142" + integrity sha512-rQamjb8R+Nwib/Bpcgf+xv5IdsOHgbP+fe4hCgv0jjgUPkeOR2c4dGwc0WS+2UkJbc+wQohpzBGDLRYGSB/hQw== + dependencies: + "@cspell/url" "8.17.3" + cspell-glob "8.17.3" + cspell-io "8.17.3" find-up-simple "^1.0.0" -cspell-glob@8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-8.15.5.tgz#d4cf705ee28f98ec00509873a6364d75b5a1138b" - integrity sha512-VpfP16bRbkHEyGGjf6/EifFxETfS7lpcHbYt1tRi6VhCv1FTMqbB7H7Aw+DQkDezOUN8xdw0gYe/fk5AJGOBDg== +cspell-glob@8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-8.17.3.tgz#7a7d7211dc06fec10741100b653d489afee0eea5" + integrity sha512-0ov9A0E6OuOO7KOxlGCxJ09LR/ubZ6xcGwWc5bu+jp/8onUowQfe+9vZdznj/o8/vcf5JkDzyhRSBsdhWKqoAg== dependencies: - "@cspell/url" "8.15.5" + "@cspell/url" "8.17.3" micromatch "^4.0.8" -cspell-grammar@8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell-grammar/-/cspell-grammar-8.15.5.tgz#7239cf59273af8387622384a3029a2f43cf9cb23" - integrity sha512-2YnlSATtWHNL6cgx1qmTsY5ZO0zu8VdEmfcLQKgHr67T7atLRUnWAlmh06WMLd5qqp8PpWNPaOJF2prEYAXsUA== - dependencies: - "@cspell/cspell-pipe" "8.15.5" - "@cspell/cspell-types" "8.15.5" - -cspell-io@8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-8.15.5.tgz#7d51491395b118053ac782e8f1d6785c192c864f" - integrity sha512-6kBK+EGTG9hiUDfB55r3xbhc7YUA5vJTXoc65pe9PXd4vgXXfrPRuy+5VRtvgSMoQj59oWOQw3ZqTAR95gbGnw== - dependencies: - "@cspell/cspell-service-bus" "8.15.5" - "@cspell/url" "8.15.5" - -cspell-lib@8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-8.15.5.tgz#c149796f75eddc40141d543ede69b8626bd3a960" - integrity sha512-DGieMWc82ouHb6Rq2LRKAlG4ExeQL1D5uvemgaouVHMZq4GvPtVaTwA6qHhw772/5z665oOVsRCicYbDtP4V3w== - dependencies: - "@cspell/cspell-bundled-dicts" "8.15.5" - "@cspell/cspell-pipe" "8.15.5" - "@cspell/cspell-resolver" "8.15.5" - "@cspell/cspell-types" "8.15.5" - "@cspell/dynamic-import" "8.15.5" - "@cspell/filetypes" "8.15.5" - "@cspell/strong-weak-map" "8.15.5" - "@cspell/url" "8.15.5" +cspell-grammar@8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell-grammar/-/cspell-grammar-8.17.3.tgz#fea0aaa8958193b15523f1d4a36d185a50e380a3" + integrity sha512-wfjkkvHthnKJtEaTgx3cPUPquGRXfgXSCwvMJaDyUi36KBlopXX38PejBTdmuqrvp7bINLSuHErml9wAfL5Fxw== + dependencies: + "@cspell/cspell-pipe" "8.17.3" + "@cspell/cspell-types" "8.17.3" + +cspell-io@8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-8.17.3.tgz#710df7a5912abbdae0b5d34f4c95c293722d381e" + integrity sha512-NwEVb3Kr8loV1C8Stz9QSMgUrBkxqf2s7A9H2/RBnfvQBt9CWZS6NgoNxTPwHj3h1sUNl9reDkMQQzkKtgWGBQ== + dependencies: + "@cspell/cspell-service-bus" "8.17.3" + "@cspell/url" "8.17.3" + +cspell-lib@8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-8.17.3.tgz#58e89f66f55ecbf518fc8a6a3aba008f6c6803b2" + integrity sha512-KpwYIj8HwFyTzCCQcyezlmomvyNfPwZQmqTh4V126sFvf9HLoMdfyq8KYDZmZ//4HzwrF/ufJOF3CpuVUiJHfA== + dependencies: + "@cspell/cspell-bundled-dicts" "8.17.3" + "@cspell/cspell-pipe" "8.17.3" + "@cspell/cspell-resolver" "8.17.3" + "@cspell/cspell-types" "8.17.3" + "@cspell/dynamic-import" "8.17.3" + "@cspell/filetypes" "8.17.3" + "@cspell/strong-weak-map" "8.17.3" + "@cspell/url" "8.17.3" clear-module "^4.1.2" comment-json "^4.2.5" - cspell-config-lib "8.15.5" - cspell-dictionary "8.15.5" - cspell-glob "8.15.5" - cspell-grammar "8.15.5" - cspell-io "8.15.5" - cspell-trie-lib "8.15.5" + cspell-config-lib "8.17.3" + cspell-dictionary "8.17.3" + cspell-glob "8.17.3" + cspell-grammar "8.17.3" + cspell-io "8.17.3" + cspell-trie-lib "8.17.3" env-paths "^3.0.0" - fast-equals "^5.0.1" + fast-equals "^5.2.2" gensequence "^7.0.0" import-fresh "^3.3.0" resolve-from "^5.0.0" @@ -3535,33 +3551,33 @@ cspell-lib@8.15.5: vscode-uri "^3.0.8" xdg-basedir "^5.1.0" -cspell-trie-lib@8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-8.15.5.tgz#745bead7ab26fd5fab95a5374e8dae5e96c4bb0d" - integrity sha512-DAEkp51aFgpp9DFuJkNki0kVm2SVR1Hp0hD3Pnta7S4X2h5424TpTVVPltAIWtcdxRLGbX6N2x26lTI4K/YfpQ== +cspell-trie-lib@8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-8.17.3.tgz#02e9b86cf9e32fbdf8b0ada114cf6d57bab9501f" + integrity sha512-6LE5BeT2Rwv0bkQckpxX0K1fnFCWfeJ8zVPFtYOaix0trtqj0VNuwWzYDnxyW+OwMioCH29yRAMODa+JDFfUrA== dependencies: - "@cspell/cspell-pipe" "8.15.5" - "@cspell/cspell-types" "8.15.5" + "@cspell/cspell-pipe" "8.17.3" + "@cspell/cspell-types" "8.17.3" gensequence "^7.0.0" -cspell@^8.15.5: - version "8.15.5" - resolved "https://registry.yarnpkg.com/cspell/-/cspell-8.15.5.tgz#378d0f3f8c28901c2255482a2a51cdad8f680c0a" - integrity sha512-Vp1WI6axghVvenZS7GUlsZf6JFF7jDXdV5f4nXWjrZLbTrH+wbnFEO2mg+QJWa4IN35igjNYeu9TbA9/EGJzog== - dependencies: - "@cspell/cspell-json-reporter" "8.15.5" - "@cspell/cspell-pipe" "8.15.5" - "@cspell/cspell-types" "8.15.5" - "@cspell/dynamic-import" "8.15.5" - "@cspell/url" "8.15.5" - chalk "^5.3.0" +cspell@^8.17.3: + version "8.17.3" + resolved "https://registry.yarnpkg.com/cspell/-/cspell-8.17.3.tgz#5b593e237fed7700d7299bc321601909b58d7fa6" + integrity sha512-fBZg674Dir9y/FWMwm2JyixM/1eB2vnqHJjRxOgGS/ZiZ3QdQ3LkK02Aqvlni8ffWYDZnYnYY9rfWmql9bb42w== + dependencies: + "@cspell/cspell-json-reporter" "8.17.3" + "@cspell/cspell-pipe" "8.17.3" + "@cspell/cspell-types" "8.17.3" + "@cspell/dynamic-import" "8.17.3" + "@cspell/url" "8.17.3" + chalk "^5.4.1" chalk-template "^1.1.0" - commander "^12.1.0" - cspell-dictionary "8.15.5" - cspell-gitignore "8.15.5" - cspell-glob "8.15.5" - cspell-io "8.15.5" - cspell-lib "8.15.5" + commander "^13.1.0" + cspell-dictionary "8.17.3" + cspell-gitignore "8.17.3" + cspell-glob "8.17.3" + cspell-io "8.17.3" + cspell-lib "8.17.3" fast-json-stable-stringify "^2.1.0" file-entry-cache "^9.1.0" get-stdin "^9.0.0" @@ -4566,10 +4582,10 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-equals@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d" - integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== +fast-equals@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.2.2.tgz#885d7bfb079fac0ce0e8450374bce29e9b742484" + integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" @@ -6460,9 +6476,9 @@ nano-css@^5.6.2: stylis "^4.3.0" nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== natural-compare@^1.4.0: version "1.4.0" @@ -6817,17 +6833,17 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -playwright-core@1.48.2: - version "1.48.2" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.48.2.tgz#cd76ed8af61690edef5c05c64721c26a8db2f3d7" - integrity sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA== +playwright-core@1.50.0: + version "1.50.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.50.0.tgz#28dd6a1488211c193933695ed337a5b44d46867c" + integrity sha512-CXkSSlr4JaZs2tZHI40DsZUN/NIwgaUPsyLuOAaIZp2CyF2sN5MM5NJsyB188lFSSozFxQ5fPT4qM+f0tH/6wQ== -playwright@1.48.2: - version "1.48.2" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.48.2.tgz#fca45ae8abdc34835c715718072aaff7e305167e" - integrity sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ== +playwright@1.50.0: + version "1.50.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.50.0.tgz#ccaf334f948d78139922844de55a18f8ae785410" + integrity sha512-+GinGfGTrd2IfX1TA4N2gNmeIksSb+IAe589ZH+FlmpV3MYTx6+buChGIuDLQwrGNCw2lWibqV50fU510N7S+w== dependencies: - playwright-core "1.48.2" + playwright-core "1.50.0" optionalDependencies: fsevents "2.3.2" @@ -7733,10 +7749,10 @@ scheduler@^0.23.2: dependencies: loose-envify "^1.1.0" -schema-utils@>1.0.0, schema-utils@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== +schema-utils@>1.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.0.tgz#3b669f04f71ff2dfb5aba7ce2d5a9d79b35622c0" + integrity sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -7762,17 +7778,22 @@ selection-is-backward@^1.0.0: resolved "https://registry.yarnpkg.com/selection-is-backward/-/selection-is-backward-1.0.0.tgz#97a54633188a511aba6419fc5c1fa91b467e6be1" integrity sha512-C+6PCOO55NLCfS8uQjUKV/6E5XMuUcfOVsix5m0QqCCCKi495NgeQVNfWtAaD71NKHsdmFCJoXUGfir3qWdr9A== -semver@7.6.3, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: +semver@7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@7.7.0, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: + version "7.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.0.tgz#9c6fe61d0c6f9fa9e26575162ee5a9180361b09c" + integrity sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ== + semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -serialize-javascript@^6.0.1, serialize-javascript@^6.0.2: +serialize-javascript@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== @@ -8273,21 +8294,21 @@ tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.3.10: - version "5.3.10" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== +terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.11: + version "5.3.11" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz#93c21f44ca86634257cac176f884f942b7ba3832" + integrity sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ== dependencies: - "@jridgewell/trace-mapping" "^0.3.20" + "@jridgewell/trace-mapping" "^0.3.25" jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" -terser@^5.26.0: - version "5.34.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.34.1.tgz#af40386bdbe54af0d063e0670afd55c3105abeb6" - integrity sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA== +terser@^5.31.1: + version "5.37.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3" + integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -8454,6 +8475,11 @@ tslib@2.7.0, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -8545,6 +8571,11 @@ typescript@5.6.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== +typescript@5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw== + ua-parser-js@^1.0.32: version "1.0.39" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.39.tgz#bfc07f361549bf249bd8f4589a4cccec18fd2018" @@ -8633,10 +8664,10 @@ uuid@9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -uuid@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== +uuid@^11.0.2: + version "11.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.0.3.tgz#248451cac9d1a4a4128033e765d137e2b2c49a3d" + integrity sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg== v8-compile-cache-lib@^3.0.1: version "3.0.1" @@ -8989,10 +9020,10 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.3.4, yaml@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.0.tgz#14059ad9d0b1680d0f04d3a60fe00f3a857303c3" - integrity sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ== +yaml@^2.3.4, yaml@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" + integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== yargs-parser@^21.1.1: version "21.1.1"