From 63f850d705ca7e6274e68e72aeed7856ff34a2bb Mon Sep 17 00:00:00 2001 From: Leandro Afonso Date: Sun, 19 Oct 2025 20:47:58 +0100 Subject: [PATCH] first commit --- .devcontainer/devcontainer.json | 22 + .dockerignore | 4 + .gitignore | 54 + Dockerfile | 26 + LICENSE | 21 + Makefile | 10 + README.md | 139 + apps/server/.air.toml | 52 + apps/server/.gitignore | 5 + apps/server/go.mod | 75 + apps/server/go.sum | 356 ++ apps/server/main.go | 85 + .../1734897061_create_hosts_collection.go | 906 ++++ .../migrations/1734898795_init_superuser.go | 39 + apps/server/package.json | 7 + apps/web/.gitignore | 24 + apps/web/.npmrc | 1 + apps/web/.prettierignore | 4 + apps/web/.prettierrc | 15 + apps/web/README.md | 38 + apps/web/components.json | 17 + apps/web/e2e/demo.test.ts | 6 + apps/web/package.json | 51 + apps/web/playwright.config.ts | 10 + apps/web/postbuild.ts | 6 + apps/web/postcss.config.js | 6 + apps/web/src/app.css | 89 + apps/web/src/app.d.ts | 13 + apps/web/src/app.html | 12 + apps/web/src/demo.spec.ts | 7 + .../src/lib/components/CreateHostForm.svelte | 155 + apps/web/src/lib/components/HostCard.svelte | 85 + apps/web/src/lib/components/navbar.svelte | 84 + .../lib/components/ui/button/button.svelte | 74 + .../web/src/lib/components/ui/button/index.ts | 17 + .../components/ui/card/card-content.svelte | 16 + .../ui/card/card-description.svelte | 16 + .../lib/components/ui/card/card-footer.svelte | 16 + .../lib/components/ui/card/card-header.svelte | 16 + .../lib/components/ui/card/card-title.svelte | 25 + .../src/lib/components/ui/card/card.svelte | 20 + apps/web/src/lib/components/ui/card/index.ts | 22 + .../lib/components/ui/form/form-button.svelte | 7 + .../ui/form/form-description.svelte | 17 + .../ui/form/form-element-field.svelte | 30 + .../ui/form/form-field-errors.svelte | 31 + .../lib/components/ui/form/form-field.svelte | 30 + .../components/ui/form/form-fieldset.svelte | 21 + .../lib/components/ui/form/form-label.svelte | 21 + .../lib/components/ui/form/form-legend.svelte | 17 + apps/web/src/lib/components/ui/form/index.ts | 33 + apps/web/src/lib/components/ui/input/index.ts | 7 + .../src/lib/components/ui/input/input.svelte | 22 + apps/web/src/lib/components/ui/label/index.ts | 7 + .../src/lib/components/ui/label/label.svelte | 19 + .../src/lib/components/ui/popover/index.ts | 17 + .../ui/popover/popover-content.svelte | 28 + .../src/lib/components/ui/separator/index.ts | 7 + .../components/ui/separator/separator.svelte | 22 + .../web/src/lib/components/ui/sonner/index.ts | 1 + .../lib/components/ui/sonner/sonner.svelte | 20 + apps/web/src/lib/index.ts | 1 + apps/web/src/lib/pb.ts | 5 + apps/web/src/lib/pocketbase-types.ts | 155 + apps/web/src/lib/stores/hosts.ts | 64 + apps/web/src/lib/utils.ts | 6 + apps/web/src/routes/+layout.svelte | 28 + apps/web/src/routes/+layout.ts | 2 + apps/web/src/routes/+page.svelte | 61 + apps/web/src/routes/auth/+page.svelte | 130 + apps/web/static/favicon.png | Bin 0 -> 1571 bytes apps/web/svelte.config.js | 18 + apps/web/tailwind.config.ts | 96 + apps/web/tsconfig.json | 19 + apps/web/vite.config.ts | 10 + bun.lockb | Bin 0 -> 125816 bytes compose.yml | 13 + package-lock.json | 4703 +++++++++++++++++ package.json | 23 + turbo.json | 21 + 80 files changed, 8358 insertions(+) create mode 100644 .devcontainer/devcontainer.json create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 apps/server/.air.toml create mode 100644 apps/server/.gitignore create mode 100644 apps/server/go.mod create mode 100644 apps/server/go.sum create mode 100644 apps/server/main.go create mode 100644 apps/server/migrations/1734897061_create_hosts_collection.go create mode 100644 apps/server/migrations/1734898795_init_superuser.go create mode 100644 apps/server/package.json create mode 100644 apps/web/.gitignore create mode 100644 apps/web/.npmrc create mode 100644 apps/web/.prettierignore create mode 100644 apps/web/.prettierrc create mode 100644 apps/web/README.md create mode 100644 apps/web/components.json create mode 100644 apps/web/e2e/demo.test.ts create mode 100644 apps/web/package.json create mode 100644 apps/web/playwright.config.ts create mode 100644 apps/web/postbuild.ts create mode 100644 apps/web/postcss.config.js create mode 100644 apps/web/src/app.css create mode 100644 apps/web/src/app.d.ts create mode 100644 apps/web/src/app.html create mode 100644 apps/web/src/demo.spec.ts create mode 100644 apps/web/src/lib/components/CreateHostForm.svelte create mode 100644 apps/web/src/lib/components/HostCard.svelte create mode 100644 apps/web/src/lib/components/navbar.svelte create mode 100644 apps/web/src/lib/components/ui/button/button.svelte create mode 100644 apps/web/src/lib/components/ui/button/index.ts create mode 100644 apps/web/src/lib/components/ui/card/card-content.svelte create mode 100644 apps/web/src/lib/components/ui/card/card-description.svelte create mode 100644 apps/web/src/lib/components/ui/card/card-footer.svelte create mode 100644 apps/web/src/lib/components/ui/card/card-header.svelte create mode 100644 apps/web/src/lib/components/ui/card/card-title.svelte create mode 100644 apps/web/src/lib/components/ui/card/card.svelte create mode 100644 apps/web/src/lib/components/ui/card/index.ts create mode 100644 apps/web/src/lib/components/ui/form/form-button.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-description.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-element-field.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-field-errors.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-field.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-fieldset.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-label.svelte create mode 100644 apps/web/src/lib/components/ui/form/form-legend.svelte create mode 100644 apps/web/src/lib/components/ui/form/index.ts create mode 100644 apps/web/src/lib/components/ui/input/index.ts create mode 100644 apps/web/src/lib/components/ui/input/input.svelte create mode 100644 apps/web/src/lib/components/ui/label/index.ts create mode 100644 apps/web/src/lib/components/ui/label/label.svelte create mode 100644 apps/web/src/lib/components/ui/popover/index.ts create mode 100644 apps/web/src/lib/components/ui/popover/popover-content.svelte create mode 100644 apps/web/src/lib/components/ui/separator/index.ts create mode 100644 apps/web/src/lib/components/ui/separator/separator.svelte create mode 100644 apps/web/src/lib/components/ui/sonner/index.ts create mode 100644 apps/web/src/lib/components/ui/sonner/sonner.svelte create mode 100644 apps/web/src/lib/index.ts create mode 100644 apps/web/src/lib/pb.ts create mode 100644 apps/web/src/lib/pocketbase-types.ts create mode 100644 apps/web/src/lib/stores/hosts.ts create mode 100644 apps/web/src/lib/utils.ts create mode 100644 apps/web/src/routes/+layout.svelte create mode 100644 apps/web/src/routes/+layout.ts create mode 100644 apps/web/src/routes/+page.svelte create mode 100644 apps/web/src/routes/auth/+page.svelte create mode 100644 apps/web/static/favicon.png create mode 100644 apps/web/svelte.config.js create mode 100644 apps/web/tailwind.config.ts create mode 100644 apps/web/tsconfig.json create mode 100644 apps/web/vite.config.ts create mode 100755 bun.lockb create mode 100644 compose.yml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 turbo.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..84b2e3a --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,22 @@ +{ + "name": "Bun + Go Development", + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "ghcr.io/devcontainers/features/go:1": { + "version": "latest" + }, + "ghcr.io/devcontainers/features/node:1": { + "version": "lts" + } + }, + "postCreateCommand": "curl -fsSL https://bun.sh/install | bash && go install github.com/air-verse/air@latest", + "customizations": { + "vscode": { + "extensions": [ + "golang.go", + "oven.bun-vscode" + ] + } + }, + "remoteUser": "root" +} \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..9a7e6dc --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +Makefile +Dockerfile +.dockerignore + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0b4a4d1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,54 @@ +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ + +node_modules/ + +# Dependencies +node_modules +.pnp +.pnp.js + +# Local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Turbo +.turbo + +# Vercel +.vercel + +# Build Outputs +.next/ +out/ +build +dist + + +# Debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Misc +.DS_Store +*.pem \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1d1640c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM docker.io/library/golang:1.23 AS server_builder +WORKDIR /app +COPY ./apps/server /app +RUN CGO_ENABLED=0 GOOS=linux go build -o server main.go + + +FROM docker.io/oven/bun:1 AS web_builder +WORKDIR /app +COPY . . +RUN bun install +RUN bun run build + + +FROM docker.io/library/alpine:latest +# FROM ubuntu:latest +WORKDIR /app +COPY --from=server_builder /app/server ./server +COPY --from=web_builder /app/apps/web/build ./pb_public + +# Add environment variable with default value +ENV PORT=8090 +EXPOSE $PORT + +CMD ["/bin/sh", "-c", "/app/server serve --http=0.0.0.0:${PORT}"] +# docker build . -t huakunshen/wol:latest +# docker run -p 8090:8090 --rm huakunshen/wol:latest diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6439b3a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Huakun Shen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2ac2ca7 --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +IMAGE_NAME ?= huakunshen/wol:latest +.phony: buildx buildx-podman +buildx: + docker buildx build --push \ + --platform linux/arm64,linux/amd64 \ + -t $(IMAGE_NAME) . + +buildx-podman: + podman buildx build --jobs=2 --platform=linux/arm64,linux/amd64 --manifest=$(IMAGE_NAME) .; \ + podman manifest push $(IMAGE_NAME) diff --git a/README.md b/README.md new file mode 100644 index 0000000..711aefe --- /dev/null +++ b/README.md @@ -0,0 +1,139 @@ +# wol-web + +> A web app hosted locally for wakeonlan +> +> This is a rewrite with sveltekit + PocketBase to replace the old version I wrote a few years ago +> +> In the new rewrite, instead of writing an entire rest API server and manage database with gorm, I use PocketBase as backend and database. Its golang extension feature allows me to add the wakeonlan feature easily. The most complicated part, Auth, is also fully handled by PocketBase, saving lots of time. PocketBase also has a built-in database management UI, making user creation/management much easier. + +![](https://i.imgur.com/2pGGr1Z.png) + +## Deployment (Docker) + +Deployment with docker is super simple. + +Docker image [`huakunshen/wol`](https://hub.docker.com/repository/docker/huakunshen/wol/) is available on docker hub. + +Both `linux/amd64` and `linux/arm64` are supported. + +> [!IMPORTANT] +> 1. The container must be in the same network as the target hosts +> 2. The container must be started with `--network=host` +> 3. Mac doesn't support `--network=host` with docker. On Mac you have to run server with go directly. It's recommended to use linux. + +### Step 1: Start Server + +Here is a full command to start the server with a superuser initialized + +```bash +docker run --rm \ + --network=host \ + -e PORT=8090 \ + -e SUPERUSER_EMAIL= \ + -e SUPERUSER_PASSWORD= \ + -v ./pb_data:/app/pb_data \ + huakunshen/wol:latest +``` + +- In this example I used `--rm` to clean up the container after it's closed for demo purpose +- In production, you should replace `--rm` with `-d` to run it in detach mode + +The 2 environment variables and volume are optional but recommended. + +- The volume is for data persistence, so you don't lose your data after container is destroyed. + - Instead of using a local directory, it's better to create a volume and bind to it. +- `PORT` environment variable is used to specify the port the server listens on + - Default is 8090 + - Since this app has to be run in host network, you can't set port mapping with `-p` option; thus the `PORT` environment variable can be used to change the port. +- The 2 environment variables are used to create an initial superuser in database + - This project uses pocketbase as its backend and database, there is no user register feature as we shouldn't allow random person to register and send magic packets in your network. The only way to create user is log into pocketbase admin console with a superuser account and manually create user in the `users` collection/table. + - When both `SUPERUSER_EMAIL` and `SUPERUSER_PASSWORD` are set, the server will create this superuser the first time it starts and you could login directly. + - If you didn't set initial superuser credentials, you could also create a superuser + - A long URL should be printed to console, open it in browser. The token in the URL allows you to create a superuser + ``` + (!) Launch the URL below in the browser if it hasn't been open already to create your first superuser account: + http://0.0.0.0:8090/_/#/pbinstal/eyJhbGciOiJIUzI1NiIs... + ``` + - If you ran `docker run -d` in detach mode, run `docker logs ` to find the long URL for superuser creation. + +### Step 2: Create a Regular User + +The superuser we discussed previously is like a database admin, you need to create a regular user to login to the website. + +1. Go to [`http://localhost:8090/_/`](http://localhost:8090/_/) (or the url of your environment), login with superuser credentials +2. Go to `users` collection, create a user, remember your email and password + +### Step 3: Login to WOL Web + +You can go to `http://localhost:8090/auth` and login with your regular user credentials. + +Create a host then you can wake up your computer from browser. + +## Deployment (docker compose) + +Docker compose makes creating and destroying wol container easier. + +A [compose.yml](./compose.yml) is provided in this repo. + +```yaml +services: + wol: + image: "huakunshen/wol" + container_name: wol-web + network_mode: host + volumes: + - wol_data:/app/pb_data + environment: + - SUPERUSER_EMAIL=root@example.com + - SUPERUSER_PASSWORD=changeme + - PORT=8090 +volumes: + wol_data: +``` + +```bash +docker compose up +docker compose down +``` + +## Develop + +**Prerequisite:** +1. Bun +2. Golang + +bun workspace is used to manage this monorepo, `dev` script will start frontend and backend together. + +```bash +bun install +bun run dev # start both sveltekit dev server and golang pocketbase server +``` + +### Server + +The golang server is in `apps/server`. It's a golang pocketbase extension with some custom routes. + +```bash +air # start development +go run main.go serve # start the server without hot reload +``` + +#### Migrations + +When table is modified, run `go run . migrate collections` to generate a migration `.go` file that will be auto loaded. + + +### Frontend + +The frontend is in `apps/web`, written with sveltekit + `@sveltejs/adapter-static`. + +In development, use `http://localhost:5173`. + +Running `bun run build` will generate a `apps/web/build` directory, +and will be automatically copied to `apps/server/pb_public` ready to be served directly by the golang server as static assets. + +In production the website is accesssible at `http://localhost:8090/`. + +### Docker + +`make buildx` automatically builds docker image for `linux/amd64` and `linux/arm64` and push to dockerhub. diff --git a/apps/server/.air.toml b/apps/server/.air.toml new file mode 100644 index 0000000..649a464 --- /dev/null +++ b/apps/server/.air.toml @@ -0,0 +1,52 @@ +root = "." +testdata_dir = "testdata" +tmp_dir = "tmp" + +[build] + args_bin = ["serve"] + bin = "./tmp/main" + cmd = "go build -o ./tmp/main ." + delay = 1000 + exclude_dir = ["assets", "tmp", "vendor", "testdata"] + exclude_file = [] + exclude_regex = ["_test.go"] + exclude_unchanged = false + follow_symlink = false + full_bin = "" + include_dir = [] + include_ext = ["go", "tpl", "tmpl", "html"] + include_file = [] + kill_delay = "0s" + log = "build-errors.log" + poll = false + poll_interval = 0 + post_cmd = [] + pre_cmd = [] + rerun = false + rerun_delay = 500 + send_interrupt = false + stop_on_error = false + +[color] + app = "" + build = "yellow" + main = "magenta" + runner = "green" + watcher = "cyan" + +[log] + main_only = false + silent = false + time = false + +[misc] + clean_on_exit = false + +[proxy] + app_port = 0 + enabled = false + proxy_port = 0 + +[screen] + clear_on_rebuild = false + keep_scroll = true diff --git a/apps/server/.gitignore b/apps/server/.gitignore new file mode 100644 index 0000000..c167cf9 --- /dev/null +++ b/apps/server/.gitignore @@ -0,0 +1,5 @@ +pb_data +tmp +pb_public +server +pocketbase diff --git a/apps/server/go.mod b/apps/server/go.mod new file mode 100644 index 0000000..a53a3d8 --- /dev/null +++ b/apps/server/go.mod @@ -0,0 +1,75 @@ +module server + +go 1.23.3 + +require github.com/pocketbase/pocketbase v0.23.12 + +require ( + github.com/AlecAivazis/survey/v2 v2.3.7 // indirect + github.com/HuakunShen/wol v0.0.0-20231015233406-a706425cd3de // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/aws/aws-sdk-go-v2 v1.32.7 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect + github.com/aws/aws-sdk-go-v2/config v1.28.7 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.48 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 // indirect + github.com/aws/smithy-go v1.22.1 // indirect + github.com/disintegration/imaging v1.6.2 // indirect + github.com/domodwyer/mailyak/v3 v3.6.2 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.7 // indirect + github.com/ganigeorgiev/fexpr v0.4.1 // indirect + github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/gax-go/v2 v2.14.1 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/pocketbase/dbx v1.11.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/spf13/cast v1.7.1 // indirect + github.com/spf13/cobra v1.8.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + go.opencensus.io v0.24.0 // indirect + gocloud.dev v0.40.0 // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/image v0.23.0 // indirect + golang.org/x/net v0.33.0 // indirect + golang.org/x/oauth2 v0.24.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/term v0.27.0 // indirect + golang.org/x/text v0.21.0 // indirect + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect + google.golang.org/api v0.214.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb // indirect + google.golang.org/grpc v1.69.2 // indirect + google.golang.org/protobuf v1.36.0 // indirect + modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9 // indirect + modernc.org/libc v1.55.3 // indirect + modernc.org/mathutil v1.6.0 // indirect + modernc.org/memory v1.8.0 // indirect + modernc.org/sqlite v1.34.4 // indirect + modernc.org/strutil v1.2.0 // indirect + modernc.org/token v1.1.0 // indirect +) diff --git a/apps/server/go.sum b/apps/server/go.sum new file mode 100644 index 0000000..62799dd --- /dev/null +++ b/apps/server/go.sum @@ -0,0 +1,356 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= +cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= +cloud.google.com/go/auth v0.13.0 h1:8Fu8TZy167JkW8Tj3q7dIkr2v4cndv41ouecJx0PAHs= +cloud.google.com/go/auth v0.13.0/go.mod h1:COOjD9gwfKNKz+IIduatIhYJQIc0mG3H102r/EMxX6Q= +cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU= +cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8= +cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= +cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +cloud.google.com/go/iam v1.1.13 h1:7zWBXG9ERbMLrzQBRhFliAV+kjcRToDTgQT3CTwYyv4= +cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zFMNbus= +cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= +cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= +github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/HuakunShen/wol v0.0.0-20231015233406-a706425cd3de h1:7521X73ZWhQOLmZQZtfvent7FhocY5SYwabOSb6WdIs= +github.com/HuakunShen/wol v0.0.0-20231015233406-a706425cd3de/go.mod h1:PpP164XQ5A++nOi2QirGXbYPpRW5rft3qyPwONof1iI= +github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= +github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= +github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.32.7 h1:ky5o35oENWi0JYWUZkB7WYvVPP+bcRF5/Iq7JWSb5Rw= +github.com/aws/aws-sdk-go-v2 v1.32.7/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc= +github.com/aws/aws-sdk-go-v2/config v1.28.7 h1:GduUnoTXlhkgnxTD93g1nv4tVPILbdNQOzav+Wpg7AE= +github.com/aws/aws-sdk-go-v2/config v1.28.7/go.mod h1:vZGX6GVkIE8uECSUHB6MWAUsd4ZcG2Yq/dMa4refR3M= +github.com/aws/aws-sdk-go-v2/credentials v1.17.48 h1:IYdLD1qTJ0zanRavulofmqut4afs45mOWEI+MzZtTfQ= +github.com/aws/aws-sdk-go-v2/credentials v1.17.48/go.mod h1:tOscxHN3CGmuX9idQ3+qbkzrjVIx32lqDSU1/0d/qXs= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 h1:kqOrpojG71DxJm/KDPO+Z/y1phm1JlC8/iT+5XRmAn8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22/go.mod h1:NtSFajXVVL8TA2QNngagVZmUtXciyrHOt7xgz4faS/M= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44 h1:2zxMLXLedpB4K1ilbJFxtMKsVKaexOqDttOhc0QGm3Q= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44/go.mod h1:VuLHdqwjSvgftNC7yqPWyGVhEwPmJpeRi07gOgOfHF8= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 h1:I/5wmGMffY4happ8NOCuIUEWGUvvFp5NSeQcXl9RHcI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26/go.mod h1:FR8f4turZtNy6baO0KJ5FJUmXH/cSkI9fOngs0yl6mA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 h1:zXFLuEuMMUOvEARXFUVJdfqZ4bvvSgdGRq/ATcrQxzM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26/go.mod h1:3o2Wpy0bogG1kyOPrgkXA8pgIfEEv0+m19O9D5+W8y8= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26 h1:GeNJsIFHB+WW5ap2Tec4K6dzcVTsRbsT1Lra46Hv9ME= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26/go.mod h1:zfgMpwHDXX2WGoG84xG2H+ZlPTkJUU4YUvx2svLQYWo= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7 h1:tB4tNw83KcajNAzaIMhkhVI2Nt8fAZd5A5ro113FEMY= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7/go.mod h1:lvpyBGkZ3tZ9iSsUIcC2EWp+0ywa7aK3BLT+FwZi+mQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 h1:8eUsivBQzZHqe/3FE+cqwfH+0p5Jo8PFM/QYQSmeZ+M= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7/go.mod h1:kLPQvGUmxn/fqiCrDeohwG33bq2pQpGeY62yRO6Nrh0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7 h1:Hi0KGbrnr57bEHWM0bJ1QcBzxLrL/k2DHvGYhb8+W1w= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7/go.mod h1:wKNgWgExdjjrm4qvfbTorkvocEstaoDl4WCvGfeCy9c= +github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1 h1:aOVVZJgWbaH+EJYPvEgkNhCEbXXvH7+oML36oaPK3zE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1/go.mod h1:r+xl5yzMk9083rMR+sJ5TYj9Tihvf/l1oxzZXDgGj2Q= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 h1:CvuUmnXI7ebaUAhbJcDy9YQx8wHR69eZ9I7q5hszt/g= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.8/go.mod h1:XDeGv1opzwm8ubxddF0cgqkZWsyOtw4lr6dxwmb6YQg= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 h1:F2rBfNAL5UyswqoeWv9zs74N/NanhK16ydHW1pahX6E= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7/go.mod h1:JfyQ0g2JG8+Krq0EuZNnRwX0mU0HrwY/tG6JNfcqh4k= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 h1:Xgv/hyNgvLda/M9l9qxXc4UFSgppnRczLxlMs5Ae/QY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.3/go.mod h1:5Gn+d+VaaRgsjewpMvGazt0WfcFO+Md4wLOuBfGR9Bc= +github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= +github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI= +github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= +github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= +github.com/domodwyer/mailyak/v3 v3.6.2 h1:x3tGMsyFhTCaxp6ycgR0FE/bu5QiNp+hetUuCOBXMn8= +github.com/domodwyer/mailyak/v3 v3.6.2/go.mod h1:lOm/u9CyCVWHeaAmHIdF4RiKVxKUT/H5XX10lIKAL6c= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA= +github.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU= +github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k= +github.com/ganigeorgiev/fexpr v0.4.1/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +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-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= +github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +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/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 h1:FKHo8hFI3A+7w0aUQuYXQ+6EN5stWmeY/AZqtM8xk9k= +github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.6.0 h1:HBkoIh4BdSxoyo9PveV8giw7ZsaBOvzWKfcg/6MrVwI= +github.com/google/wire v0.6.0/go.mod h1:F4QhpQ9EDIdJ1Mbop/NZBRB+5yrR6qg3BnctaoUk6NA= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= +github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= +github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= +github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pocketbase/dbx v1.11.0 h1:LpZezioMfT3K4tLrqA55wWFw1EtH1pM4tzSVa7kgszU= +github.com/pocketbase/dbx v1.11.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs= +github.com/pocketbase/pocketbase v0.23.12 h1:HB4THFbzaliF0C3wvpx+kNOZxIwCEMDqN3/17gn5N7E= +github.com/pocketbase/pocketbase v0.23.12/go.mod h1:OcFJNMO0Vzt3f9+lweMbup6iL7V13ckxu1pdEY6FeM0= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +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/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +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/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.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= +gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng= +gocloud.dev v0.40.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68= +golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +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-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= +golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.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.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +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.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= +golang.org/x/time v0.8.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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +google.golang.org/api v0.214.0 h1:h2Gkq07OYi6kusGOaT/9rnNljuXmqPnaig7WGPmKbwA= +google.golang.org/api v0.214.0/go.mod h1:bYPpLG8AyeMWwDU6NXoB00xC0DFkikVvd5MfwoxjLqE= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988 h1:CT2Thj5AuPV9phrYMtzX11k+XkzMGfRAet42PmoTATM= +google.golang.org/genproto v0.0.0-20240812133136-8ffd90a71988/go.mod h1:7uvplUBj4RjHAxIZ//98LzOvrQ04JBkaixRmCMI29hc= +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-20241219192143-6b3ec007d9bb h1:3oy2tynMOP1QbTC0MsNNAV+Se8M2Bd0A5+x1QHyw+pI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +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 v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= +google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= +modernc.org/cc/v4 v4.21.4/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ= +modernc.org/ccgo/v4 v4.19.2 h1:lwQZgvboKD0jBwdaeVCTouxhxAyN6iawF3STraAal8Y= +modernc.org/ccgo/v4 v4.19.2/go.mod h1:ysS3mxiMV38XGRTTcgo0DQTeTmAO4oCmJl1nX9VFI3s= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= +modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= +modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9 h1:ovz6yUKX71igz2yvk4NpiCL5fvdjZAI+DhuDEGx1xyU= +modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U= +modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w= +modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= +modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= +modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= +modernc.org/sqlite v1.34.4 h1:sjdARozcL5KJBvYQvLlZEmctRgW9xqIZc2ncN7PU0P8= +modernc.org/sqlite v1.34.4/go.mod h1:3QQFCG2SEMtc2nv+Wq4cQCH7Hjcg+p/RMlS1XK+zwbk= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/apps/server/main.go b/apps/server/main.go new file mode 100644 index 0000000..7fe2253 --- /dev/null +++ b/apps/server/main.go @@ -0,0 +1,85 @@ +package main + +import ( + "log" + "os" + "strconv" + "strings" + + _ "server/migrations" + + wol "github.com/HuakunShen/wol/wol-go" + "github.com/pocketbase/pocketbase" + "github.com/pocketbase/pocketbase/apis" + "github.com/pocketbase/pocketbase/core" + "github.com/pocketbase/pocketbase/plugins/migratecmd" +) + +func main() { + app := pocketbase.New() + + // loosely check if it was executed using "go run" + isGoRun := strings.HasPrefix(os.Args[0], os.TempDir()) + + migratecmd.MustRegister(app, app.RootCmd, migratecmd.Config{ + // enable auto creation of migration files when making collection changes in the Dashboard + // (the isGoRun check is to enable it only during development) + Automigrate: isGoRun, + }) + + app.OnServe().BindFunc(func(se *core.ServeEvent) error { + // serves static files from the provided public dir (if exists) + se.Router.GET("/{path...}", apis.Static(os.DirFS("./pb_public"), true)) + se.Router.GET("/api/hosts", func(e *core.RequestEvent) error { + return e.JSON(200, map[string]string{"message": "Host waked"}) + }) + se.Router.POST("/api/wake", func(e *core.RequestEvent) error { + data := struct { + // unexported to prevent binding + Id string `json:"id" form:"id"` + }{} + if err := e.BindBody(&data); err != nil { + return e.BadRequestError("Failed to read request data", err) + } + info, err := e.RequestInfo() + if err != nil { + return e.BadRequestError("Failed to read request info", err) + } + id, ok := info.Body["id"].(string) + if !ok { + return e.BadRequestError("Failed to read id from body", err) + } + + isAuthenticated := e.Auth != nil + if !isAuthenticated { + return e.JSON(401, map[string]string{"message": "Unauthorized"}) + } + userId := e.Auth.Id + requestedHost, err := app.FindRecordById("hosts", id) + if err != nil { + return e.BadRequestError("Failed to find host", err) + } + // Get the user field - it will return an interface{} that you can type assert + recordOwnerId := requestedHost.GetString("user") + if recordOwnerId != userId { + return e.JSON(401, map[string]string{"message": "Unauthorized"}) + } + mac := requestedHost.GetString("mac") + port := requestedHost.GetInt("port") + if !ok { + return e.JSON(400, map[string]string{"message": "Failed to parse port"}) + } + targetIp := requestedHost.GetString("ip") + err = wol.WakeOnLan(mac, targetIp, strconv.Itoa(port)) + if err != nil { + return e.JSON(400, map[string]string{"message": "Failed to wake host", "error": err.Error()}) + } + return e.JSON(200, map[string]string{"message": "WakeOnLan Magic Packet Sent"}) + }) + return se.Next() + }) + + if err := app.Start(); err != nil { + log.Fatal(err) + } +} diff --git a/apps/server/migrations/1734897061_create_hosts_collection.go b/apps/server/migrations/1734897061_create_hosts_collection.go new file mode 100644 index 0000000..840cd96 --- /dev/null +++ b/apps/server/migrations/1734897061_create_hosts_collection.go @@ -0,0 +1,906 @@ +package migrations + +import ( + "github.com/pocketbase/pocketbase/core" + m "github.com/pocketbase/pocketbase/migrations" +) + +func init() { + m.Register(func(app core.App) error { + jsonData := `[ + { + "createRule": null, + "deleteRule": null, + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text455797646", + "max": 0, + "min": 0, + "name": "collectionRef", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text127846527", + "max": 0, + "min": 0, + "name": "recordRef", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text1582905952", + "max": 0, + "min": 0, + "name": "method", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "hidden": false, + "id": "autodate2990389176", + "name": "created", + "onCreate": true, + "onUpdate": false, + "presentable": false, + "system": true, + "type": "autodate" + }, + { + "hidden": false, + "id": "autodate3332085495", + "name": "updated", + "onCreate": true, + "onUpdate": true, + "presentable": false, + "system": true, + "type": "autodate" + } + ], + "id": "pbc_2279338944", + "indexes": [ + "CREATE INDEX ` + "`" + `idx_mfas_collectionRef_recordRef` + "`" + ` ON ` + "`" + `_mfas` + "`" + ` (collectionRef,recordRef)" + ], + "listRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId", + "name": "_mfas", + "system": true, + "type": "base", + "updateRule": null, + "viewRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId" + }, + { + "createRule": null, + "deleteRule": null, + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text455797646", + "max": 0, + "min": 0, + "name": "collectionRef", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text127846527", + "max": 0, + "min": 0, + "name": "recordRef", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "cost": 8, + "hidden": true, + "id": "password901924565", + "max": 0, + "min": 0, + "name": "password", + "pattern": "", + "presentable": false, + "required": true, + "system": true, + "type": "password" + }, + { + "autogeneratePattern": "", + "hidden": true, + "id": "text3866985172", + "max": 0, + "min": 0, + "name": "sentTo", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": false, + "system": true, + "type": "text" + }, + { + "hidden": false, + "id": "autodate2990389176", + "name": "created", + "onCreate": true, + "onUpdate": false, + "presentable": false, + "system": true, + "type": "autodate" + }, + { + "hidden": false, + "id": "autodate3332085495", + "name": "updated", + "onCreate": true, + "onUpdate": true, + "presentable": false, + "system": true, + "type": "autodate" + } + ], + "id": "pbc_1638494021", + "indexes": [ + "CREATE INDEX ` + "`" + `idx_otps_collectionRef_recordRef` + "`" + ` ON ` + "`" + `_otps` + "`" + ` (collectionRef, recordRef)" + ], + "listRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId", + "name": "_otps", + "system": true, + "type": "base", + "updateRule": null, + "viewRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId" + }, + { + "createRule": null, + "deleteRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId", + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text455797646", + "max": 0, + "min": 0, + "name": "collectionRef", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text127846527", + "max": 0, + "min": 0, + "name": "recordRef", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text2462348188", + "max": 0, + "min": 0, + "name": "provider", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text1044722854", + "max": 0, + "min": 0, + "name": "providerId", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "hidden": false, + "id": "autodate2990389176", + "name": "created", + "onCreate": true, + "onUpdate": false, + "presentable": false, + "system": true, + "type": "autodate" + }, + { + "hidden": false, + "id": "autodate3332085495", + "name": "updated", + "onCreate": true, + "onUpdate": true, + "presentable": false, + "system": true, + "type": "autodate" + } + ], + "id": "pbc_2281828961", + "indexes": [ + "CREATE UNIQUE INDEX ` + "`" + `idx_externalAuths_record_provider` + "`" + ` ON ` + "`" + `_externalAuths` + "`" + ` (collectionRef, recordRef, provider)", + "CREATE UNIQUE INDEX ` + "`" + `idx_externalAuths_collection_provider` + "`" + ` ON ` + "`" + `_externalAuths` + "`" + ` (collectionRef, provider, providerId)" + ], + "listRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId", + "name": "_externalAuths", + "system": true, + "type": "base", + "updateRule": null, + "viewRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId" + }, + { + "createRule": null, + "deleteRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId", + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text455797646", + "max": 0, + "min": 0, + "name": "collectionRef", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text127846527", + "max": 0, + "min": 0, + "name": "recordRef", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text4228609354", + "max": 0, + "min": 0, + "name": "fingerprint", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "hidden": false, + "id": "autodate2990389176", + "name": "created", + "onCreate": true, + "onUpdate": false, + "presentable": false, + "system": true, + "type": "autodate" + }, + { + "hidden": false, + "id": "autodate3332085495", + "name": "updated", + "onCreate": true, + "onUpdate": true, + "presentable": false, + "system": true, + "type": "autodate" + } + ], + "id": "pbc_4275539003", + "indexes": [ + "CREATE UNIQUE INDEX ` + "`" + `idx_authOrigins_unique_pairs` + "`" + ` ON ` + "`" + `_authOrigins` + "`" + ` (collectionRef, recordRef, fingerprint)" + ], + "listRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId", + "name": "_authOrigins", + "system": true, + "type": "base", + "updateRule": null, + "viewRule": "@request.auth.id != '' && recordRef = @request.auth.id && collectionRef = @request.auth.collectionId" + }, + { + "authAlert": { + "emailTemplate": { + "body": "

Hello,

\n

We noticed a login to your {APP_NAME} account from a new location.

\n

If this was you, you may disregard this email.

\n

If this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "Login from a new location" + }, + "enabled": true + }, + "authRule": "", + "authToken": { + "duration": 86400 + }, + "confirmEmailChangeTemplate": { + "body": "

Hello,

\n

Click on the button below to confirm your new email address.

\n

\n Confirm new email\n

\n

If you didn't ask to change your email address, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "Confirm your {APP_NAME} new email address" + }, + "createRule": null, + "deleteRule": null, + "emailChangeToken": { + "duration": 1800 + }, + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "cost": 0, + "hidden": true, + "id": "password901924565", + "max": 0, + "min": 8, + "name": "password", + "pattern": "", + "presentable": false, + "required": true, + "system": true, + "type": "password" + }, + { + "autogeneratePattern": "[a-zA-Z0-9]{50}", + "hidden": true, + "id": "text2504183744", + "max": 60, + "min": 30, + "name": "tokenKey", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "exceptDomains": null, + "hidden": false, + "id": "email3885137012", + "name": "email", + "onlyDomains": null, + "presentable": false, + "required": true, + "system": true, + "type": "email" + }, + { + "hidden": false, + "id": "bool1547992806", + "name": "emailVisibility", + "presentable": false, + "required": false, + "system": true, + "type": "bool" + }, + { + "hidden": false, + "id": "bool256245529", + "name": "verified", + "presentable": false, + "required": false, + "system": true, + "type": "bool" + }, + { + "hidden": false, + "id": "autodate2990389176", + "name": "created", + "onCreate": true, + "onUpdate": false, + "presentable": false, + "system": true, + "type": "autodate" + }, + { + "hidden": false, + "id": "autodate3332085495", + "name": "updated", + "onCreate": true, + "onUpdate": true, + "presentable": false, + "system": true, + "type": "autodate" + } + ], + "fileToken": { + "duration": 180 + }, + "id": "pbc_3142635823", + "indexes": [ + "CREATE UNIQUE INDEX ` + "`" + `idx_tokenKey_pbc_3142635823` + "`" + ` ON ` + "`" + `_superusers` + "`" + ` (` + "`" + `tokenKey` + "`" + `)", + "CREATE UNIQUE INDEX ` + "`" + `idx_email_pbc_3142635823` + "`" + ` ON ` + "`" + `_superusers` + "`" + ` (` + "`" + `email` + "`" + `) WHERE ` + "`" + `email` + "`" + ` != ''" + ], + "listRule": null, + "manageRule": null, + "mfa": { + "duration": 1800, + "enabled": false, + "rule": "" + }, + "name": "_superusers", + "oauth2": { + "enabled": false, + "mappedFields": { + "avatarURL": "", + "id": "", + "name": "", + "username": "" + } + }, + "otp": { + "duration": 180, + "emailTemplate": { + "body": "

Hello,

\n

Your one-time password is: {OTP}

\n

If you didn't ask for the one-time password, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "OTP for {APP_NAME}" + }, + "enabled": false, + "length": 8 + }, + "passwordAuth": { + "enabled": true, + "identityFields": [ + "email" + ] + }, + "passwordResetToken": { + "duration": 1800 + }, + "resetPasswordTemplate": { + "body": "

Hello,

\n

Click on the button below to reset your password.

\n

\n Reset password\n

\n

If you didn't ask to reset your password, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "Reset your {APP_NAME} password" + }, + "system": true, + "type": "auth", + "updateRule": null, + "verificationTemplate": { + "body": "

Hello,

\n

Thank you for joining us at {APP_NAME}.

\n

Click on the button below to verify your email address.

\n

\n Verify\n

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "Verify your {APP_NAME} email" + }, + "verificationToken": { + "duration": 259200 + }, + "viewRule": null + }, + { + "authAlert": { + "emailTemplate": { + "body": "

Hello,

\n

We noticed a login to your {APP_NAME} account from a new location.

\n

If this was you, you may disregard this email.

\n

If this wasn't you, you should immediately change your {APP_NAME} account password to revoke access from all other locations.

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "Login from a new location" + }, + "enabled": true + }, + "authRule": "", + "authToken": { + "duration": 604800 + }, + "confirmEmailChangeTemplate": { + "body": "

Hello,

\n

Click on the button below to confirm your new email address.

\n

\n Confirm new email\n

\n

If you didn't ask to change your email address, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "Confirm your {APP_NAME} new email address" + }, + "createRule": "", + "deleteRule": "id = @request.auth.id", + "emailChangeToken": { + "duration": 1800 + }, + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "cost": 0, + "hidden": true, + "id": "password901924565", + "max": 0, + "min": 8, + "name": "password", + "pattern": "", + "presentable": false, + "required": true, + "system": true, + "type": "password" + }, + { + "autogeneratePattern": "[a-zA-Z0-9]{50}", + "hidden": true, + "id": "text2504183744", + "max": 60, + "min": 30, + "name": "tokenKey", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": true, + "type": "text" + }, + { + "exceptDomains": null, + "hidden": false, + "id": "email3885137012", + "name": "email", + "onlyDomains": null, + "presentable": false, + "required": true, + "system": true, + "type": "email" + }, + { + "hidden": false, + "id": "bool1547992806", + "name": "emailVisibility", + "presentable": false, + "required": false, + "system": true, + "type": "bool" + }, + { + "hidden": false, + "id": "bool256245529", + "name": "verified", + "presentable": false, + "required": false, + "system": true, + "type": "bool" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text1579384326", + "max": 255, + "min": 0, + "name": "name", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": false, + "system": false, + "type": "text" + }, + { + "hidden": false, + "id": "file376926767", + "maxSelect": 1, + "maxSize": 0, + "mimeTypes": [ + "image/jpeg", + "image/png", + "image/svg+xml", + "image/gif", + "image/webp" + ], + "name": "avatar", + "presentable": false, + "protected": false, + "required": false, + "system": false, + "thumbs": null, + "type": "file" + }, + { + "hidden": false, + "id": "autodate2990389176", + "name": "created", + "onCreate": true, + "onUpdate": false, + "presentable": false, + "system": false, + "type": "autodate" + }, + { + "hidden": false, + "id": "autodate3332085495", + "name": "updated", + "onCreate": true, + "onUpdate": true, + "presentable": false, + "system": false, + "type": "autodate" + } + ], + "fileToken": { + "duration": 180 + }, + "id": "_pb_users_auth_", + "indexes": [ + "CREATE UNIQUE INDEX ` + "`" + `idx_tokenKey__pb_users_auth_` + "`" + ` ON ` + "`" + `users` + "`" + ` (` + "`" + `tokenKey` + "`" + `)", + "CREATE UNIQUE INDEX ` + "`" + `idx_email__pb_users_auth_` + "`" + ` ON ` + "`" + `users` + "`" + ` (` + "`" + `email` + "`" + `) WHERE ` + "`" + `email` + "`" + ` != ''" + ], + "listRule": "id = @request.auth.id", + "manageRule": null, + "mfa": { + "duration": 1800, + "enabled": false, + "rule": "" + }, + "name": "users", + "oauth2": { + "enabled": false, + "mappedFields": { + "avatarURL": "avatar", + "id": "", + "name": "name", + "username": "" + } + }, + "otp": { + "duration": 180, + "emailTemplate": { + "body": "

Hello,

\n

Your one-time password is: {OTP}

\n

If you didn't ask for the one-time password, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "OTP for {APP_NAME}" + }, + "enabled": false, + "length": 8 + }, + "passwordAuth": { + "enabled": true, + "identityFields": [ + "email" + ] + }, + "passwordResetToken": { + "duration": 1800 + }, + "resetPasswordTemplate": { + "body": "

Hello,

\n

Click on the button below to reset your password.

\n

\n Reset password\n

\n

If you didn't ask to reset your password, you can ignore this email.

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "Reset your {APP_NAME} password" + }, + "system": false, + "type": "auth", + "updateRule": "id = @request.auth.id", + "verificationTemplate": { + "body": "

Hello,

\n

Thank you for joining us at {APP_NAME}.

\n

Click on the button below to verify your email address.

\n

\n Verify\n

\n

\n Thanks,
\n {APP_NAME} team\n

", + "subject": "Verify your {APP_NAME} email" + }, + "verificationToken": { + "duration": 259200 + }, + "viewRule": "id = @request.auth.id" + }, + { + "createRule": "@request.auth.id != \"\" && @request.body.user = @request.auth.id", + "deleteRule": "@request.auth.id = user.id", + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text1579384326", + "max": 0, + "min": 0, + "name": "name", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": false, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text387181413", + "max": 0, + "min": 0, + "name": "mac", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": false, + "type": "text" + }, + { + "autogeneratePattern": "", + "hidden": false, + "id": "text2783163181", + "max": 0, + "min": 0, + "name": "ip", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": false, + "type": "text" + }, + { + "hidden": false, + "id": "number1133600204", + "max": null, + "min": null, + "name": "port", + "onlyInt": false, + "presentable": false, + "required": true, + "system": false, + "type": "number" + }, + { + "cascadeDelete": true, + "collectionId": "_pb_users_auth_", + "hidden": false, + "id": "relation2375276105", + "maxSelect": 1, + "minSelect": 0, + "name": "user", + "presentable": false, + "required": true, + "system": false, + "type": "relation" + }, + { + "hidden": false, + "id": "autodate2990389176", + "name": "created", + "onCreate": true, + "onUpdate": false, + "presentable": false, + "system": false, + "type": "autodate" + }, + { + "hidden": false, + "id": "autodate3332085495", + "name": "updated", + "onCreate": true, + "onUpdate": true, + "presentable": false, + "system": false, + "type": "autodate" + } + ], + "id": "pbc_327931986", + "indexes": [], + "listRule": "@request.auth.id = user.id", + "name": "hosts", + "system": false, + "type": "base", + "updateRule": "@request.auth.id = user.id", + "viewRule": "@request.auth.id = user.id" + } + ]` + + return app.ImportCollectionsByMarshaledJSON([]byte(jsonData), false) + }, func(app core.App) error { + return nil + }) +} diff --git a/apps/server/migrations/1734898795_init_superuser.go b/apps/server/migrations/1734898795_init_superuser.go new file mode 100644 index 0000000..ced67c3 --- /dev/null +++ b/apps/server/migrations/1734898795_init_superuser.go @@ -0,0 +1,39 @@ +package migrations + +import ( + "os" + + "github.com/pocketbase/pocketbase/core" + m "github.com/pocketbase/pocketbase/migrations" +) + +func init() { + m.Register(func(app core.App) error { + // add up queries... + + // get environment variable + email := os.Getenv("SUPERUSER_EMAIL") + password := os.Getenv("SUPERUSER_PASSWORD") + if email == "" || password == "" { + return nil + } + + superusers, err := app.FindCollectionByNameOrId(core.CollectionNameSuperusers) + if err != nil { + return err + } + + record := core.NewRecord(superusers) + + // note: the values can be eventually loaded via os.Getenv(key) + // or from a special local config file + record.Set("email", email) + record.Set("password", password) + + return app.Save(record) + }, func(app core.App) error { + // add down queries... + + return nil + }) +} diff --git a/apps/server/package.json b/apps/server/package.json new file mode 100644 index 0000000..50642ac --- /dev/null +++ b/apps/server/package.json @@ -0,0 +1,7 @@ +{ + "name": "server", + "type": "module", + "scripts": { + "dev": "air" + } +} diff --git a/apps/web/.gitignore b/apps/web/.gitignore new file mode 100644 index 0000000..bff793d --- /dev/null +++ b/apps/web/.gitignore @@ -0,0 +1,24 @@ +test-results +node_modules + +# Output +.output +.vercel +.netlify +.wrangler +/.svelte-kit +/build + +# OS +.DS_Store +Thumbs.db + +# Env +.env +.env.* +!.env.example +!.env.test + +# Vite +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/apps/web/.npmrc b/apps/web/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/apps/web/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/apps/web/.prettierignore b/apps/web/.prettierignore new file mode 100644 index 0000000..ab78a95 --- /dev/null +++ b/apps/web/.prettierignore @@ -0,0 +1,4 @@ +# Package Managers +package-lock.json +pnpm-lock.yaml +yarn.lock diff --git a/apps/web/.prettierrc b/apps/web/.prettierrc new file mode 100644 index 0000000..7ebb855 --- /dev/null +++ b/apps/web/.prettierrc @@ -0,0 +1,15 @@ +{ + "useTabs": true, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ] +} diff --git a/apps/web/README.md b/apps/web/README.md new file mode 100644 index 0000000..b5b2950 --- /dev/null +++ b/apps/web/README.md @@ -0,0 +1,38 @@ +# sv + +Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npx sv create + +# create a new project in my-app +npx sv create my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/apps/web/components.json b/apps/web/components.json new file mode 100644 index 0000000..dc58f0a --- /dev/null +++ b/apps/web/components.json @@ -0,0 +1,17 @@ +{ + "$schema": "https://next.shadcn-svelte.com/schema.json", + "style": "default", + "tailwind": { + "config": "tailwind.config.ts", + "css": "src/app.css", + "baseColor": "neutral" + }, + "aliases": { + "components": "$lib/components", + "utils": "$lib/utils", + "ui": "$lib/components/ui", + "hooks": "$lib/hooks" + }, + "typescript": true, + "registry": "https://next.shadcn-svelte.com/registry" +} diff --git a/apps/web/e2e/demo.test.ts b/apps/web/e2e/demo.test.ts new file mode 100644 index 0000000..9985ce1 --- /dev/null +++ b/apps/web/e2e/demo.test.ts @@ -0,0 +1,6 @@ +import { expect, test } from '@playwright/test'; + +test('home page has expected h1', async ({ page }) => { + await page.goto('/'); + await expect(page.locator('h1')).toBeVisible(); +}); diff --git a/apps/web/package.json b/apps/web/package.json new file mode 100644 index 0000000..9e1247a --- /dev/null +++ b/apps/web/package.json @@ -0,0 +1,51 @@ +{ + "name": "web", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "postbuild": "bun postbuild.ts", + "preview": "vite preview", + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", + "format": "prettier --write .", + "lint": "prettier --check .", + "test:unit": "vitest", + "test": "npm run test:unit -- --run && npm run test:e2e", + "test:e2e": "playwright test" + }, + "devDependencies": { + "@playwright/test": "^1.45.3", + "@sveltejs/adapter-static": "^3.0.6", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "@types/bun": "^1.1.14", + "autoprefixer": "^10.4.20", + "bits-ui": "^1.0.0-next.78", + "clsx": "^2.1.1", + "formsnap": "^2.0.0", + "lucide-svelte": "^0.469.0", + "prettier": "^3.3.2", + "prettier-plugin-svelte": "^3.2.6", + "prettier-plugin-tailwindcss": "^0.6.5", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "svelte-sonner": "^0.3.28", + "sveltekit-superforms": "^2.22.1", + "tailwind-merge": "^2.5.5", + "tailwind-variants": "^0.3.0", + "tailwindcss": "^3.4.9", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.0.0", + "vite": "^5.4.11", + "vitest": "^2.0.4", + "zod": "^3.24.1" + }, + "dependencies": { + "@formkit/auto-animate": "^0.8.2", + "mode-watcher": "^0.5.0", + "pocketbase": "^0.24.0" + } +} diff --git a/apps/web/playwright.config.ts b/apps/web/playwright.config.ts new file mode 100644 index 0000000..d76ea26 --- /dev/null +++ b/apps/web/playwright.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from '@playwright/test'; + +export default defineConfig({ + webServer: { + command: 'npm run build && npm run preview', + port: 4173 + }, + + testDir: 'e2e' +}); diff --git a/apps/web/postbuild.ts b/apps/web/postbuild.ts new file mode 100644 index 0000000..2a319b3 --- /dev/null +++ b/apps/web/postbuild.ts @@ -0,0 +1,6 @@ +import { $ } from 'bun'; +import fs from 'fs'; + +// copy build folder to ../server/pb_public +await $`rm -rf ../server/pb_public`; +fs.cpSync('build', '../server/pb_public', { recursive: true }); diff --git a/apps/web/postcss.config.js b/apps/web/postcss.config.js new file mode 100644 index 0000000..0f77216 --- /dev/null +++ b/apps/web/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +}; diff --git a/apps/web/src/app.css b/apps/web/src/app.css new file mode 100644 index 0000000..dbca653 --- /dev/null +++ b/apps/web/src/app.css @@ -0,0 +1,89 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 72.2% 50.6%; + --destructive-foreground: 0 0% 98%; + --ring: 0 0% 3.9%; + --radius: 0.75rem; + --sidebar-background: 0 0% 98%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; + } + + .dark { + --background: 222 47% 4%; + --foreground: 210 40% 98%; + --muted: 217 33% 12%; + --muted-foreground: 215 20% 65%; + --popover: 222 47% 6%; + --popover-foreground: 210 40% 98%; + --card: 222 47% 6%; + --card-foreground: 210 40% 98%; + --border: 217 33% 15%; + --input: 217 33% 15%; + --primary: 210 100% 60%; + --primary-foreground: 222 47% 4%; + --secondary: 217 33% 12%; + --secondary-foreground: 210 40% 98%; + --accent: 217 33% 17%; + --accent-foreground: 210 40% 98%; + --destructive: 0 63% 31%; + --destructive-foreground: 210 40% 98%; + --ring: 210 100% 60%; + --sidebar-background: 222 47% 5%; + --sidebar-foreground: 210 40% 98%; + --sidebar-primary: 210 100% 60%; + --sidebar-primary-foreground: 222 47% 4%; + --sidebar-accent: 217 33% 12%; + --sidebar-accent-foreground: 210 40% 98%; + --sidebar-border: 217 33% 12%; + --sidebar-ring: 210 100% 60%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground antialiased; + } +} + +@layer utilities { + .glass-effect { + @apply backdrop-blur-xl bg-card/50 border-border/50; + } + + .glow-primary { + box-shadow: 0 0 20px -5px hsl(var(--primary) / 0.3); + } + + .glow-success { + box-shadow: 0 0 20px -5px hsl(142 76% 36% / 0.3); + } +} \ No newline at end of file diff --git a/apps/web/src/app.d.ts b/apps/web/src/app.d.ts new file mode 100644 index 0000000..da08e6d --- /dev/null +++ b/apps/web/src/app.d.ts @@ -0,0 +1,13 @@ +// See https://svelte.dev/docs/kit/types#app.d.ts +// for information about these interfaces +declare global { + namespace App { + // interface Error {} + // interface Locals {} + // interface PageData {} + // interface PageState {} + // interface Platform {} + } +} + +export {}; diff --git a/apps/web/src/app.html b/apps/web/src/app.html new file mode 100644 index 0000000..77a5ff5 --- /dev/null +++ b/apps/web/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/apps/web/src/demo.spec.ts b/apps/web/src/demo.spec.ts new file mode 100644 index 0000000..e07cbbd --- /dev/null +++ b/apps/web/src/demo.spec.ts @@ -0,0 +1,7 @@ +import { describe, it, expect } from 'vitest'; + +describe('sum test', () => { + it('adds 1 + 2 to equal 3', () => { + expect(1 + 2).toBe(3); + }); +}); diff --git a/apps/web/src/lib/components/CreateHostForm.svelte b/apps/web/src/lib/components/CreateHostForm.svelte new file mode 100644 index 0000000..1bf9ada --- /dev/null +++ b/apps/web/src/lib/components/CreateHostForm.svelte @@ -0,0 +1,155 @@ + + +
+ + + {#snippet children({ props })} +
+ Device Name + +
+ {/snippet} +
+ +
+ + + + {#snippet children({ props })} +
+ MAC Address + +
+ {/snippet} +
+ +
+ + + + {#snippet children({ props })} +
+ Broadcast IP +
+ + + + + + +
+

Broadcast IP Guide

+

+ Use a broadcast IP address. Default is 255.255.255.255 +

+

+ For multiple networks, use a subnet-specific broadcast IP. +

+

+ Example: If host IP is 192.168.1.123, use 192.168.1.255 +

+
+
+
+
+
+ {/snippet} +
+ +
+ + + + {#snippet children({ props })} +
+ Port + +
+ {/snippet} +
+ +
+ +
+ + Add Device + +
+ + {#if dev} + + {/if} +
diff --git a/apps/web/src/lib/components/HostCard.svelte b/apps/web/src/lib/components/HostCard.svelte new file mode 100644 index 0000000..5f801a0 --- /dev/null +++ b/apps/web/src/lib/components/HostCard.svelte @@ -0,0 +1,85 @@ + + + + +
+ + +
+
+
+ +
+
+

{host.name}

+

Network Device

+
+
+ +
+
+ + +
+
+ +
+

MAC Address

+

{host.mac}

+
+
+ +
+ +
+

Broadcast IP

+

{host.ip}

+
+
+ +
+ +
+

Port

+

{host.port}

+
+
+
+
+ + + + +
diff --git a/apps/web/src/lib/components/navbar.svelte b/apps/web/src/lib/components/navbar.svelte new file mode 100644 index 0000000..05eb8f7 --- /dev/null +++ b/apps/web/src/lib/components/navbar.svelte @@ -0,0 +1,84 @@ + + + diff --git a/apps/web/src/lib/components/ui/button/button.svelte b/apps/web/src/lib/components/ui/button/button.svelte new file mode 100644 index 0000000..8f44d5c --- /dev/null +++ b/apps/web/src/lib/components/ui/button/button.svelte @@ -0,0 +1,74 @@ + + + + +{#if href} + + {@render children?.()} + +{:else} + +{/if} diff --git a/apps/web/src/lib/components/ui/button/index.ts b/apps/web/src/lib/components/ui/button/index.ts new file mode 100644 index 0000000..fb585d7 --- /dev/null +++ b/apps/web/src/lib/components/ui/button/index.ts @@ -0,0 +1,17 @@ +import Root, { + type ButtonProps, + type ButtonSize, + type ButtonVariant, + buttonVariants, +} from "./button.svelte"; + +export { + Root, + type ButtonProps as Props, + // + Root as Button, + buttonVariants, + type ButtonProps, + type ButtonSize, + type ButtonVariant, +}; diff --git a/apps/web/src/lib/components/ui/card/card-content.svelte b/apps/web/src/lib/components/ui/card/card-content.svelte new file mode 100644 index 0000000..1f52856 --- /dev/null +++ b/apps/web/src/lib/components/ui/card/card-content.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/apps/web/src/lib/components/ui/card/card-description.svelte b/apps/web/src/lib/components/ui/card/card-description.svelte new file mode 100644 index 0000000..da02664 --- /dev/null +++ b/apps/web/src/lib/components/ui/card/card-description.svelte @@ -0,0 +1,16 @@ + + +

+ {@render children?.()} +

diff --git a/apps/web/src/lib/components/ui/card/card-footer.svelte b/apps/web/src/lib/components/ui/card/card-footer.svelte new file mode 100644 index 0000000..6894149 --- /dev/null +++ b/apps/web/src/lib/components/ui/card/card-footer.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/apps/web/src/lib/components/ui/card/card-header.svelte b/apps/web/src/lib/components/ui/card/card-header.svelte new file mode 100644 index 0000000..1baa92c --- /dev/null +++ b/apps/web/src/lib/components/ui/card/card-header.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/apps/web/src/lib/components/ui/card/card-title.svelte b/apps/web/src/lib/components/ui/card/card-title.svelte new file mode 100644 index 0000000..f7d59c1 --- /dev/null +++ b/apps/web/src/lib/components/ui/card/card-title.svelte @@ -0,0 +1,25 @@ + + +
+ {@render children?.()} +
diff --git a/apps/web/src/lib/components/ui/card/card.svelte b/apps/web/src/lib/components/ui/card/card.svelte new file mode 100644 index 0000000..3e3a4ed --- /dev/null +++ b/apps/web/src/lib/components/ui/card/card.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children?.()} +
diff --git a/apps/web/src/lib/components/ui/card/index.ts b/apps/web/src/lib/components/ui/card/index.ts new file mode 100644 index 0000000..0f9084d --- /dev/null +++ b/apps/web/src/lib/components/ui/card/index.ts @@ -0,0 +1,22 @@ +import Root from "./card.svelte"; +import Content from "./card-content.svelte"; +import Description from "./card-description.svelte"; +import Footer from "./card-footer.svelte"; +import Header from "./card-header.svelte"; +import Title from "./card-title.svelte"; + +export { + Root, + Content, + Description, + Footer, + Header, + Title, + // + Root as Card, + Content as CardContent, + Description as CardDescription, + Footer as CardFooter, + Header as CardHeader, + Title as CardTitle, +}; diff --git a/apps/web/src/lib/components/ui/form/form-button.svelte b/apps/web/src/lib/components/ui/form/form-button.svelte new file mode 100644 index 0000000..cc0c590 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-button.svelte @@ -0,0 +1,7 @@ + + + diff --git a/apps/web/src/lib/components/ui/form/form-description.svelte b/apps/web/src/lib/components/ui/form/form-description.svelte new file mode 100644 index 0000000..6c70187 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-description.svelte @@ -0,0 +1,17 @@ + + + diff --git a/apps/web/src/lib/components/ui/form/form-element-field.svelte b/apps/web/src/lib/components/ui/form/form-element-field.svelte new file mode 100644 index 0000000..278395c --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-element-field.svelte @@ -0,0 +1,30 @@ + + + + + + {#snippet children({ constraints, errors, tainted, value })} +
+ {@render childrenProp?.({ constraints, errors, tainted, value: value as T[U] })} +
+ {/snippet} +
diff --git a/apps/web/src/lib/components/ui/form/form-field-errors.svelte b/apps/web/src/lib/components/ui/form/form-field-errors.svelte new file mode 100644 index 0000000..c866b83 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-field-errors.svelte @@ -0,0 +1,31 @@ + + + + {#snippet children({ errors, errorProps })} + {#if childrenProp} + {@render childrenProp({ errors, errorProps })} + {:else} + {#each errors as error} +
{error}
+ {/each} + {/if} + {/snippet} +
diff --git a/apps/web/src/lib/components/ui/form/form-field.svelte b/apps/web/src/lib/components/ui/form/form-field.svelte new file mode 100644 index 0000000..6f7a766 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-field.svelte @@ -0,0 +1,30 @@ + + + + + + {#snippet children({ constraints, errors, tainted, value })} +
+ {@render childrenProp?.({ constraints, errors, tainted, value: value as T[U] })} +
+ {/snippet} +
diff --git a/apps/web/src/lib/components/ui/form/form-fieldset.svelte b/apps/web/src/lib/components/ui/form/form-fieldset.svelte new file mode 100644 index 0000000..bc40a2a --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-fieldset.svelte @@ -0,0 +1,21 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/form/form-label.svelte b/apps/web/src/lib/components/ui/form/form-label.svelte new file mode 100644 index 0000000..dd252f4 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-label.svelte @@ -0,0 +1,21 @@ + + + + {#snippet child({ props })} + + {/snippet} + diff --git a/apps/web/src/lib/components/ui/form/form-legend.svelte b/apps/web/src/lib/components/ui/form/form-legend.svelte new file mode 100644 index 0000000..b493821 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/form-legend.svelte @@ -0,0 +1,17 @@ + + + diff --git a/apps/web/src/lib/components/ui/form/index.ts b/apps/web/src/lib/components/ui/form/index.ts new file mode 100644 index 0000000..0713927 --- /dev/null +++ b/apps/web/src/lib/components/ui/form/index.ts @@ -0,0 +1,33 @@ +import * as FormPrimitive from "formsnap"; +import Description from "./form-description.svelte"; +import Label from "./form-label.svelte"; +import FieldErrors from "./form-field-errors.svelte"; +import Field from "./form-field.svelte"; +import Fieldset from "./form-fieldset.svelte"; +import Legend from "./form-legend.svelte"; +import ElementField from "./form-element-field.svelte"; +import Button from "./form-button.svelte"; + +const Control = FormPrimitive.Control; + +export { + Field, + Control, + Label, + Button, + FieldErrors, + Description, + Fieldset, + Legend, + ElementField, + // + Field as FormField, + Control as FormControl, + Description as FormDescription, + Label as FormLabel, + FieldErrors as FormFieldErrors, + Fieldset as FormFieldset, + Legend as FormLegend, + ElementField as FormElementField, + Button as FormButton, +}; diff --git a/apps/web/src/lib/components/ui/input/index.ts b/apps/web/src/lib/components/ui/input/index.ts new file mode 100644 index 0000000..f47b6d3 --- /dev/null +++ b/apps/web/src/lib/components/ui/input/index.ts @@ -0,0 +1,7 @@ +import Root from "./input.svelte"; + +export { + Root, + // + Root as Input, +}; diff --git a/apps/web/src/lib/components/ui/input/input.svelte b/apps/web/src/lib/components/ui/input/input.svelte new file mode 100644 index 0000000..328634f --- /dev/null +++ b/apps/web/src/lib/components/ui/input/input.svelte @@ -0,0 +1,22 @@ + + + diff --git a/apps/web/src/lib/components/ui/label/index.ts b/apps/web/src/lib/components/ui/label/index.ts new file mode 100644 index 0000000..8bfca0b --- /dev/null +++ b/apps/web/src/lib/components/ui/label/index.ts @@ -0,0 +1,7 @@ +import Root from "./label.svelte"; + +export { + Root, + // + Root as Label, +}; diff --git a/apps/web/src/lib/components/ui/label/label.svelte b/apps/web/src/lib/components/ui/label/label.svelte new file mode 100644 index 0000000..247d23c --- /dev/null +++ b/apps/web/src/lib/components/ui/label/label.svelte @@ -0,0 +1,19 @@ + + + diff --git a/apps/web/src/lib/components/ui/popover/index.ts b/apps/web/src/lib/components/ui/popover/index.ts new file mode 100644 index 0000000..63aecf9 --- /dev/null +++ b/apps/web/src/lib/components/ui/popover/index.ts @@ -0,0 +1,17 @@ +import { Popover as PopoverPrimitive } from "bits-ui"; +import Content from "./popover-content.svelte"; +const Root = PopoverPrimitive.Root; +const Trigger = PopoverPrimitive.Trigger; +const Close = PopoverPrimitive.Close; + +export { + Root, + Content, + Trigger, + Close, + // + Root as Popover, + Content as PopoverContent, + Trigger as PopoverTrigger, + Close as PopoverClose, +}; diff --git a/apps/web/src/lib/components/ui/popover/popover-content.svelte b/apps/web/src/lib/components/ui/popover/popover-content.svelte new file mode 100644 index 0000000..d2fbace --- /dev/null +++ b/apps/web/src/lib/components/ui/popover/popover-content.svelte @@ -0,0 +1,28 @@ + + + + + diff --git a/apps/web/src/lib/components/ui/separator/index.ts b/apps/web/src/lib/components/ui/separator/index.ts new file mode 100644 index 0000000..82442d2 --- /dev/null +++ b/apps/web/src/lib/components/ui/separator/index.ts @@ -0,0 +1,7 @@ +import Root from "./separator.svelte"; + +export { + Root, + // + Root as Separator, +}; diff --git a/apps/web/src/lib/components/ui/separator/separator.svelte b/apps/web/src/lib/components/ui/separator/separator.svelte new file mode 100644 index 0000000..839494d --- /dev/null +++ b/apps/web/src/lib/components/ui/separator/separator.svelte @@ -0,0 +1,22 @@ + + + diff --git a/apps/web/src/lib/components/ui/sonner/index.ts b/apps/web/src/lib/components/ui/sonner/index.ts new file mode 100644 index 0000000..1ad9f4a --- /dev/null +++ b/apps/web/src/lib/components/ui/sonner/index.ts @@ -0,0 +1 @@ +export { default as Toaster } from "./sonner.svelte"; diff --git a/apps/web/src/lib/components/ui/sonner/sonner.svelte b/apps/web/src/lib/components/ui/sonner/sonner.svelte new file mode 100644 index 0000000..8050e04 --- /dev/null +++ b/apps/web/src/lib/components/ui/sonner/sonner.svelte @@ -0,0 +1,20 @@ + + + diff --git a/apps/web/src/lib/index.ts b/apps/web/src/lib/index.ts new file mode 100644 index 0000000..856f2b6 --- /dev/null +++ b/apps/web/src/lib/index.ts @@ -0,0 +1 @@ +// place files you want to import through the `$lib` alias in this folder. diff --git a/apps/web/src/lib/pb.ts b/apps/web/src/lib/pb.ts new file mode 100644 index 0000000..db9dbc4 --- /dev/null +++ b/apps/web/src/lib/pb.ts @@ -0,0 +1,5 @@ +import PocketBase from 'pocketbase'; +import type { TypedPocketBase } from './pocketbase-types'; +import { dev } from '$app/environment'; + +export const pb = new PocketBase(dev ? 'http://localhost:8090' : undefined) as TypedPocketBase; diff --git a/apps/web/src/lib/pocketbase-types.ts b/apps/web/src/lib/pocketbase-types.ts new file mode 100644 index 0000000..9b4f1d6 --- /dev/null +++ b/apps/web/src/lib/pocketbase-types.ts @@ -0,0 +1,155 @@ +/** +* This file was @generated using pocketbase-typegen +*/ + +import type PocketBase from 'pocketbase' +import type { RecordService } from 'pocketbase' + +export enum Collections { + Authorigins = "_authOrigins", + Externalauths = "_externalAuths", + Mfas = "_mfas", + Otps = "_otps", + Superusers = "_superusers", + Hosts = "hosts", + Users = "users", +} + +// Alias types for improved usability +export type IsoDateString = string +export type RecordIdString = string +export type HTMLString = string + +// System fields +export type BaseSystemFields = { + id: RecordIdString + collectionId: string + collectionName: Collections + expand?: T +} + +export type AuthSystemFields = { + email: string + emailVisibility: boolean + username: string + verified: boolean +} & BaseSystemFields + +// Record types for each collection + +export type AuthoriginsRecord = { + collectionRef: string + created?: IsoDateString + fingerprint: string + id: string + recordRef: string + updated?: IsoDateString +} + +export type ExternalauthsRecord = { + collectionRef: string + created?: IsoDateString + id: string + provider: string + providerId: string + recordRef: string + updated?: IsoDateString +} + +export type MfasRecord = { + collectionRef: string + created?: IsoDateString + id: string + method: string + recordRef: string + updated?: IsoDateString +} + +export type OtpsRecord = { + collectionRef: string + created?: IsoDateString + id: string + password: string + recordRef: string + sentTo?: string + updated?: IsoDateString +} + +export type SuperusersRecord = { + created?: IsoDateString + email: string + emailVisibility?: boolean + id: string + password: string + tokenKey: string + updated?: IsoDateString + verified?: boolean +} + +export type HostsRecord = { + created?: IsoDateString + id: string + ip: string + mac: string + name: string + port: number + updated?: IsoDateString + user: RecordIdString +} + +export type UsersRecord = { + avatar?: string + created?: IsoDateString + email: string + emailVisibility?: boolean + id: string + name?: string + password: string + tokenKey: string + updated?: IsoDateString + verified?: boolean +} + +// Response types include system fields and match responses from the PocketBase API +export type AuthoriginsResponse = Required & BaseSystemFields +export type ExternalauthsResponse = Required & BaseSystemFields +export type MfasResponse = Required & BaseSystemFields +export type OtpsResponse = Required & BaseSystemFields +export type SuperusersResponse = Required & AuthSystemFields +export type HostsResponse = Required & BaseSystemFields +export type UsersResponse = Required & AuthSystemFields + +// Types containing all Records and Responses, useful for creating typing helper functions + +export type CollectionRecords = { + _authOrigins: AuthoriginsRecord + _externalAuths: ExternalauthsRecord + _mfas: MfasRecord + _otps: OtpsRecord + _superusers: SuperusersRecord + hosts: HostsRecord + users: UsersRecord +} + +export type CollectionResponses = { + _authOrigins: AuthoriginsResponse + _externalAuths: ExternalauthsResponse + _mfas: MfasResponse + _otps: OtpsResponse + _superusers: SuperusersResponse + hosts: HostsResponse + users: UsersResponse +} + +// Type for usage with type asserted PocketBase instance +// https://github.com/pocketbase/js-sdk#specify-typescript-definitions + +export type TypedPocketBase = PocketBase & { + collection(idOrName: '_authOrigins'): RecordService + collection(idOrName: '_externalAuths'): RecordService + collection(idOrName: '_mfas'): RecordService + collection(idOrName: '_otps'): RecordService + collection(idOrName: '_superusers'): RecordService + collection(idOrName: 'hosts'): RecordService + collection(idOrName: 'users'): RecordService +} diff --git a/apps/web/src/lib/stores/hosts.ts b/apps/web/src/lib/stores/hosts.ts new file mode 100644 index 0000000..7cfad93 --- /dev/null +++ b/apps/web/src/lib/stores/hosts.ts @@ -0,0 +1,64 @@ +import { pb } from '$lib/pb'; +import type { HostsRecord, RecordIdString } from '$lib/pocketbase-types'; +import { toast } from 'svelte-sonner'; +import { writable } from 'svelte/store'; + +export function createHostsStore() { + const hosts = writable([]); + + async function fetchHosts() { + const records = await pb.collection('hosts').getFullList(); + hosts.set(records); + } + + async function createHost(host: { + ip: string; + mac: string; + name: string; + port: number; + user: RecordIdString; + }) { + await pb.collection('hosts').create(host); + fetchHosts(); + } + + async function updateHost(host: HostsRecord) { + await pb.collection('hosts').update(host.id, host); + fetchHosts(); + } + + async function deleteHost(host: HostsRecord) { + await pb.collection('hosts').delete(host.id); + fetchHosts(); + } + + async function wakeHost(host: HostsRecord) { + pb.send('/api/wake', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ id: host.id }) + }) + .then((res) => { + toast.success('WakeOnLan Magic Packet Sent'); + }) + .catch((err) => { + toast.error('Failed to wake host', { + description: err.message + }); + }); + } + + return { + ...hosts, + fetchHosts, + createHost, + updateHost, + deleteHost, + wakeHost + }; +} + +export const hostsStore = createHostsStore(); diff --git a/apps/web/src/lib/utils.ts b/apps/web/src/lib/utils.ts new file mode 100644 index 0000000..ac680b3 --- /dev/null +++ b/apps/web/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/apps/web/src/routes/+layout.svelte b/apps/web/src/routes/+layout.svelte new file mode 100644 index 0000000..db301ca --- /dev/null +++ b/apps/web/src/routes/+layout.svelte @@ -0,0 +1,28 @@ + + + + + +
+ +
+ + + +
+ {@render children?.()} +
+ +
+
+ Wake-on-LAN Manager + Made with ❤️ by Leandro +
+
+
diff --git a/apps/web/src/routes/+layout.ts b/apps/web/src/routes/+layout.ts new file mode 100644 index 0000000..ba49405 --- /dev/null +++ b/apps/web/src/routes/+layout.ts @@ -0,0 +1,2 @@ +export let prerender = true; +export let ssr = false; diff --git a/apps/web/src/routes/+page.svelte b/apps/web/src/routes/+page.svelte new file mode 100644 index 0000000..2591889 --- /dev/null +++ b/apps/web/src/routes/+page.svelte @@ -0,0 +1,61 @@ + + +
+
+ +
+

+ Your Devices +

+

Manage and wake your network devices remotely

+
+ + +
+
+
+ +
+

Add New Device

+
+ +
+ + + {#if $hostsStore.length > 0} +
+

+ Devices + ({$hostsStore.length}) +

+
    + {#each $hostsStore as host (host.id)} + + {/each} +
+
+ {:else} +
+ +

No devices yet

+

Add your first device above to get started

+
+ {/if} +
+
diff --git a/apps/web/src/routes/auth/+page.svelte b/apps/web/src/routes/auth/+page.svelte new file mode 100644 index 0000000..5fcbe12 --- /dev/null +++ b/apps/web/src/routes/auth/+page.svelte @@ -0,0 +1,130 @@ + + +
+
+ +
+
+
+ +
+
+

Welcome Back

+

Sign in to manage your Wake-on-LAN devices

+
+ + + +
+ + Sign In + + Enter your credentials to continue + + + + + + {@const pbAdminUrl = dev + ? 'http://localhost:8090' + : page.url.protocol + '//' + page.url.host + '/_/'} +
+

+ + Account Information +

+

+ Accounts can only be created by an administrator from the admin panel. +

+ + Open Admin Panel → + +
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ + + + +
+
+
+
diff --git a/apps/web/static/favicon.png b/apps/web/static/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..825b9e65af7c104cfb07089bb28659393b4f2097 GIT binary patch literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH)", + input: "hsl(var(--input) / )", + ring: "hsl(var(--ring) / )", + background: "hsl(var(--background) / )", + foreground: "hsl(var(--foreground) / )", + primary: { + DEFAULT: "hsl(var(--primary) / )", + foreground: "hsl(var(--primary-foreground) / )" + }, + secondary: { + DEFAULT: "hsl(var(--secondary) / )", + foreground: "hsl(var(--secondary-foreground) / )" + }, + destructive: { + DEFAULT: "hsl(var(--destructive) / )", + foreground: "hsl(var(--destructive-foreground) / )" + }, + muted: { + DEFAULT: "hsl(var(--muted) / )", + foreground: "hsl(var(--muted-foreground) / )" + }, + accent: { + DEFAULT: "hsl(var(--accent) / )", + foreground: "hsl(var(--accent-foreground) / )" + }, + popover: { + DEFAULT: "hsl(var(--popover) / )", + foreground: "hsl(var(--popover-foreground) / )" + }, + card: { + DEFAULT: "hsl(var(--card) / )", + foreground: "hsl(var(--card-foreground) / )" + }, + sidebar: { + DEFAULT: "hsl(var(--sidebar-background))", + foreground: "hsl(var(--sidebar-foreground))", + primary: "hsl(var(--sidebar-primary))", + "primary-foreground": "hsl(var(--sidebar-primary-foreground))", + accent: "hsl(var(--sidebar-accent))", + "accent-foreground": "hsl(var(--sidebar-accent-foreground))", + border: "hsl(var(--sidebar-border))", + ring: "hsl(var(--sidebar-ring))", + }, + }, + borderRadius: { + xl: "calc(var(--radius) + 4px)", + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)" + }, + fontFamily: { + sans: [...fontFamily.sans] + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--bits-accordion-content-height)" }, + }, + "accordion-up": { + from: { height: "var(--bits-accordion-content-height)" }, + to: { height: "0" }, + }, + "caret-blink": { + "0%,70%,100%": { opacity: "1" }, + "20%,50%": { opacity: "0" }, + }, + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + "caret-blink": "caret-blink 1.25s ease-out infinite", + }, + }, + }, + plugins: [tailwindcssAnimate], +}; + +export default config; diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json new file mode 100644 index 0000000..0b2d886 --- /dev/null +++ b/apps/web/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts new file mode 100644 index 0000000..d76fc8a --- /dev/null +++ b/apps/web/vite.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vitest/config'; +import { sveltekit } from '@sveltejs/kit/vite'; + +export default defineConfig({ + plugins: [sveltekit()], + + test: { + include: ['src/**/*.{test,spec}.{js,ts}'] + } +}); diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..a1c88a8f4ebc777003e3b8cb25ca797cd0f56dfe GIT binary patch literal 125816 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 R^WpFA^jP>>)Bmr3{|7E>)Q127 literal 0 HcmV?d00001 diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..1440df3 --- /dev/null +++ b/compose.yml @@ -0,0 +1,13 @@ +services: + wol: + image: "huakunshen/wol" + container_name: wol-web + network_mode: host + volumes: + - wol_data:/app/pb_data + environment: + - SUPERUSER_EMAIL=root@example.com + - SUPERUSER_PASSWORD=changeme + - PORT=8090 +volumes: + wol_data: diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5736088 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4703 @@ +{ + "name": "wol-web", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "wol-web", + "workspaces": [ + "apps/*", + "packages/*" + ], + "devDependencies": { + "prettier": "^3.2.5", + "turbo": "^2.3.3", + "typescript": "5.5.4" + }, + "engines": { + "node": ">=18" + } + }, + "apps/server": {}, + "apps/web": { + "version": "0.0.1", + "dependencies": { + "@formkit/auto-animate": "^0.8.2", + "mode-watcher": "^0.5.0", + "pocketbase": "^0.24.0" + }, + "devDependencies": { + "@playwright/test": "^1.45.3", + "@sveltejs/adapter-static": "^3.0.6", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0", + "@types/bun": "^1.1.14", + "autoprefixer": "^10.4.20", + "bits-ui": "^1.0.0-next.78", + "clsx": "^2.1.1", + "formsnap": "^2.0.0", + "lucide-svelte": "^0.469.0", + "prettier": "^3.3.2", + "prettier-plugin-svelte": "^3.2.6", + "prettier-plugin-tailwindcss": "^0.6.5", + "svelte": "^5.0.0", + "svelte-check": "^4.0.0", + "svelte-sonner": "^0.3.28", + "sveltekit-superforms": "^2.22.1", + "tailwind-merge": "^2.5.5", + "tailwind-variants": "^0.3.0", + "tailwindcss": "^3.4.9", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.0.0", + "vite": "^5.4.11", + "vitest": "^2.0.4", + "zod": "^3.24.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ark/regex": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@ark/regex/-/regex-0.0.0.tgz", + "integrity": "sha512-p4vsWnd/LRGOdGQglbwOguIVhPmCAf5UzquvnDoxqhhPWTP84wWgi1INea8MgJ4SnI2gp37f13oA4Waz9vwNYg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@ark/util": "0.50.0" + } + }, + "node_modules/@ark/schema": { + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@ark/schema/-/schema-0.50.0.tgz", + "integrity": "sha512-hfmP82GltBZDadIOeR3argKNlYYyB2wyzHp0eeAqAOFBQguglMV/S7Ip2q007bRtKxIMLDqFY6tfPie1dtssaQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@ark/util": "0.50.0" + } + }, + "node_modules/@ark/util": { + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@ark/util/-/util-0.50.0.tgz", + "integrity": "sha512-tIkgIMVRpkfXRQIEf0G2CJryZVtHVrqcWHMDa5QKo0OEEBu0tHkRSIMm4Ln8cd8Bn9TPZtvc/kE2Gma8RESPSg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@exodus/schemasafe": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", + "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@formkit/auto-animate": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@formkit/auto-animate/-/auto-animate-0.8.4.tgz", + "integrity": "sha512-DHHC01EJ1p70Q0z/ZFRBIY8NDnmfKccQoyoM84Tgb6omLMat6jivCdf272Y8k3nf4Lzdin/Y4R9q8uFtU0GbnA==", + "license": "MIT" + }, + "node_modules/@gcornut/valibot-json-schema": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@gcornut/valibot-json-schema/-/valibot-json-schema-0.42.0.tgz", + "integrity": "sha512-4Et4AN6wmqeA0PfU5Clkv/IS27wiefsWf6TemAZrb75uzkClYEFavim7SboeKwbll9Nbsn2Iv0LT/HS5H7orZg==", + "dev": true, + "optional": true, + "dependencies": { + "valibot": "~0.42.0" + }, + "bin": { + "valibot-json-schema": "bin/index.js" + }, + "optionalDependencies": { + "@types/json-schema": ">= 7.0.14", + "esbuild-runner": ">= 2.2.2" + } + }, + "node_modules/@gcornut/valibot-json-schema/node_modules/valibot": { + "version": "0.42.1", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-0.42.1.tgz", + "integrity": "sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw==", + "dev": true, + "license": "MIT", + "optional": true, + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@internationalized/date": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.10.0.tgz", + "integrity": "sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@playwright/test": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.0.tgz", + "integrity": "sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.56.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, + "license": "MIT" + }, + "node_modules/@poppinss/macroable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@poppinss/macroable/-/macroable-1.1.0.tgz", + "integrity": "sha512-y/YKzZDuG8XrpXpM7Z1RdQpiIc0MAKyva24Ux1PB4aI7RiSI/79K8JVDcdyubriTm7vJ1LhFs8CrZpmPnx/8Pw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", + "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", + "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", + "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", + "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", + "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", + "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", + "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", + "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", + "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", + "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", + "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", + "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", + "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", + "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", + "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", + "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", + "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", + "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", + "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", + "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", + "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@sinclair/typebox": { + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sveltejs/acorn-typescript": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.6.tgz", + "integrity": "sha512-4awhxtMh4cx9blePWl10HRHj8Iivtqj+2QdDCSMDzxG+XKa9+VCNupQuCuvzEhYPzZSrX+0gC+0lHA/0fFKKQQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8.9.0" + } + }, + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.10.tgz", + "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.47.0.tgz", + "integrity": "sha512-mznN01MBXtr4T7X/E3ENkhF6GzqxTxL6/whG3OzCzUu8G8KYRNiCdoxLMVWAHJx/mDMPP3XAeKCMZHF/Xd/CDw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/cookie": "^0.6.0", + "acorn": "^8.14.1", + "cookie": "^0.6.0", + "devalue": "^5.3.2", + "esm-env": "^1.2.2", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^3.0.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + } + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.4.tgz", + "integrity": "sha512-0ba1RQ/PHen5FGpdSrW7Y3fAMQjrXantECALeOiOdBdzR5+5vPP6HVZRLmZaQL+W8m++o+haIAKq5qT+MiZ7VA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0", + "debug": "^4.3.7", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.12", + "vitefu": "^1.0.3" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "svelte": "^5.0.0-next.96 || ^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.1.tgz", + "integrity": "sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.7" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.0||^4.0.0", + "svelte": "^5.0.0-next.96 || ^5.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@types/bun": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.3.0.tgz", + "integrity": "sha512-+lAGCYjXjip2qY375xX/scJeVRmZ5cY0wyHYyCYxNcdEXrQ4AOe3gACgd4iQ8ksOslJtW4VNxBJ8llUwc3a6AA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bun-types": "1.3.0" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/node": { + "version": "24.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", + "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.14.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz", + "integrity": "sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/validator": { + "version": "13.15.3", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.3.tgz", + "integrity": "sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@typeschema/class-validator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@typeschema/class-validator/-/class-validator-0.3.0.tgz", + "integrity": "sha512-OJSFeZDIQ8EK1HTljKLT5CItM2wsbgczLN8tMEfz3I1Lmhc5TBfkZ0eikFzUC16tI3d1Nag7um6TfCgp2I2Bww==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@typeschema/core": "0.14.0" + }, + "peerDependencies": { + "class-validator": "^0.14.1" + }, + "peerDependenciesMeta": { + "class-validator": { + "optional": true + } + } + }, + "node_modules/@typeschema/core": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@typeschema/core/-/core-0.14.0.tgz", + "integrity": "sha512-Ia6PtZHcL3KqsAWXjMi5xIyZ7XMH4aSnOQes8mfMLx+wGFGtGRNlwe6Y7cYvX+WfNK67OL0/HSe9t8QDygV0/w==", + "dev": true, + "license": "MIT", + "optional": true, + "peerDependencies": { + "@types/json-schema": "^7.0.15" + }, + "peerDependenciesMeta": { + "@types/json-schema": { + "optional": true + } + } + }, + "node_modules/@vinejs/compiler": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@vinejs/compiler/-/compiler-3.0.0.tgz", + "integrity": "sha512-v9Lsv59nR56+bmy2p0+czjZxsLHwaibJ+SV5iK9JJfehlJMa501jUJQqqz4X/OqKXrxtE3uTQmSqjUqzF3B2mw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@vinejs/vine": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vinejs/vine/-/vine-3.0.1.tgz", + "integrity": "sha512-ZtvYkYpZOYdvbws3uaOAvTFuvFXoQGAtmzeiXu+XSMGxi5GVsODpoI9Xu9TplEMuD/5fmAtBbKb9cQHkWkLXDQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@poppinss/macroable": "^1.0.4", + "@types/validator": "^13.12.2", + "@vinejs/compiler": "^3.0.0", + "camelcase": "^8.0.0", + "dayjs": "^1.11.13", + "dlv": "^1.1.3", + "normalize-url": "^8.0.1", + "validator": "^13.12.0" + }, + "engines": { + "node": ">=18.16.0" + } + }, + "node_modules/@vitest/expect": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", + "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", + "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", + "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.9", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", + "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arktype": { + "version": "2.1.23", + "resolved": "https://registry.npmjs.org/arktype/-/arktype-2.1.23.tgz", + "integrity": "sha512-tyxNWX6xJVMb2EPJJ3OjgQS1G/vIeQRrZuY4DeBNQmh8n7geS+czgbauQWB6Pr+RXiOO8ChEey44XdmxsqGmfQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@ark/regex": "0.0.0", + "@ark/schema": "0.50.0", + "@ark/util": "0.50.0" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz", + "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bits-ui": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-1.8.0.tgz", + "integrity": "sha512-CXD6Orp7l8QevNDcRPLXc/b8iMVgxDWT2LyTwsdLzJKh9CxesOmPuNePSPqAxKoT59FIdU4aFPS1k7eBdbaCxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.4", + "@floating-ui/dom": "^1.6.7", + "@internationalized/date": "^3.5.6", + "css.escape": "^1.5.1", + "esm-env": "^1.1.2", + "runed": "^0.23.2", + "svelte-toolbelt": "^0.7.1", + "tabbable": "^6.2.0" + }, + "engines": { + "node": ">=18", + "pnpm": ">=8.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/huntabyte" + }, + "peerDependencies": { + "svelte": "^5.11.0" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.26.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/bun-types": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.3.0.tgz", + "integrity": "sha512-u8X0thhx+yJ0KmkxuEo9HAtdfgCBaM/aI9K90VQcQioAmkVp3SG3FkwWGibUFz3WdXAdcsqOcbU40lK7tbHdkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + }, + "peerDependencies": { + "@types/react": "^19" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001750", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz", + "integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dayjs": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", + "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/devalue": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.4.1.tgz", + "integrity": "sha512-YtoaOfsqjbZQKGIMRYDWKjUmSB4VJ/RElB+bXZawQAQYAo4xu08GKTMVlsZDTF6R2MbAgjcAQRPI5eIyRAT2OQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/effect": { + "version": "3.18.4", + "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", + "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "fast-check": "^3.23.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.237", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.237.tgz", + "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild-runner": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/esbuild-runner/-/esbuild-runner-2.2.2.tgz", + "integrity": "sha512-fRFVXcmYVmSmtYm2mL8RlUASt2TDkGh3uRcvHFOKNr/T58VrfVeKD9uT9nlgxk96u0LS0ehS/GY7Da/bXWKkhw==", + "dev": true, + "license": "Apache License 2.0", + "optional": true, + "dependencies": { + "source-map-support": "0.5.21", + "tslib": "2.4.0" + }, + "bin": { + "esr": "bin/esr.js" + }, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/esbuild-runner/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/esm-env": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "license": "MIT" + }, + "node_modules/esrap": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz", + "integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-check": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", + "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "pure-rand": "^6.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/formsnap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formsnap/-/formsnap-2.0.1.tgz", + "integrity": "sha512-iJSe4YKd/W6WhLwKDVJU9FQeaJRpEFuolhju7ZXlRpUVyDdqFdMP8AUBICgnVvQPyP41IPAlBa/v0Eo35iE6wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "svelte-toolbelt": "^0.5.0" + }, + "engines": { + "node": ">=18", + "pnpm": ">=8.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/huntabyte" + }, + "peerDependencies": { + "svelte": "^5.0.0", + "sveltekit-superforms": "^2.19.0" + } + }, + "node_modules/formsnap/node_modules/svelte-toolbelt": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.5.0.tgz", + "integrity": "sha512-t3tenZcnfQoIeRuQf/jBU7bvTeT3TGkcEE+1EUr5orp0lR7NEpprflpuie3x9Dn0W9nOKqs3HwKGJeeN5Ok1sQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte" + ], + "dependencies": { + "clsx": "^2.1.1", + "style-to-object": "^1.0.8" + }, + "engines": { + "node": ">=18", + "pnpm": ">=8.7.0" + }, + "peerDependencies": { + "svelte": "^5.0.0-next.126" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT" + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/lucide-svelte": { + "version": "0.469.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.469.0.tgz", + "integrity": "sha512-PMIJ8jrFqVUsXJz4d1yfAQplaGhNOahwwkzbunha8DhpiD73xqX24n8dE1dPpUk3vcrdWVsHc1y/liHHotOnGQ==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "svelte": "^3 || ^4 || ^5.0.0-next.42" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/memoize-weak": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/memoize-weak/-/memoize-weak-1.0.2.tgz", + "integrity": "sha512-gj39xkrjEw7nCn4nJ1M5ms6+MyMlyiGmttzsqAUsAKn6bYKwuTHh/AO3cKPF8IBrTIYTxb0wWXFs3E//Y8VoWQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mode-watcher": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mode-watcher/-/mode-watcher-0.5.1.tgz", + "integrity": "sha512-adEC6T7TMX/kzQlaO/MtiQOSFekZfQu4MC+lXyoceQG+U5sKpJWZ4yKXqw846ExIuWJgedkOIPqAYYRk/xHm+w==", + "license": "MIT", + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.1" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz", + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/playwright": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.0.tgz", + "integrity": "sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.56.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.0.tgz", + "integrity": "sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/pocketbase": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.24.0.tgz", + "integrity": "sha512-zcmEUsXGRT+AqRHzEMlheglOiQnhYKRxT0ew164kx38/IGsE7MLmlmEaMSkm3tUwiZe5qC3RcA5+SX0lkDUSHA==", + "license": "MIT" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-svelte": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.4.0.tgz", + "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", + "dev": true, + "license": "MIT", + "peer": true, + "peerDependencies": { + "prettier": "^3.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.6.14", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz", + "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-hermes": "*", + "@prettier/plugin-oxc": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-multiline-arrays": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-hermes": { + "optional": true + }, + "@prettier/plugin-oxc": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "@zackad/prettier-plugin-twig": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-multiline-arrays": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } + } + }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT", + "optional": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", + "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.4", + "@rollup/rollup-android-arm64": "4.52.4", + "@rollup/rollup-darwin-arm64": "4.52.4", + "@rollup/rollup-darwin-x64": "4.52.4", + "@rollup/rollup-freebsd-arm64": "4.52.4", + "@rollup/rollup-freebsd-x64": "4.52.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", + "@rollup/rollup-linux-arm-musleabihf": "4.52.4", + "@rollup/rollup-linux-arm64-gnu": "4.52.4", + "@rollup/rollup-linux-arm64-musl": "4.52.4", + "@rollup/rollup-linux-loong64-gnu": "4.52.4", + "@rollup/rollup-linux-ppc64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-musl": "4.52.4", + "@rollup/rollup-linux-s390x-gnu": "4.52.4", + "@rollup/rollup-linux-x64-gnu": "4.52.4", + "@rollup/rollup-linux-x64-musl": "4.52.4", + "@rollup/rollup-openharmony-arm64": "4.52.4", + "@rollup/rollup-win32-arm64-msvc": "4.52.4", + "@rollup/rollup-win32-ia32-msvc": "4.52.4", + "@rollup/rollup-win32-x64-gnu": "4.52.4", + "@rollup/rollup-win32-x64-msvc": "4.52.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/runed": { + "version": "0.23.4", + "resolved": "https://registry.npmjs.org/runed/-/runed-0.23.4.tgz", + "integrity": "sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte", + "https://github.com/sponsors/tglide" + ], + "dependencies": { + "esm-env": "^1.0.0" + }, + "peerDependencies": { + "svelte": "^5.7.0" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/server": { + "resolved": "apps/server", + "link": true + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/style-to-object": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.11.tgz", + "integrity": "sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==", + "dev": true, + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.40.1.tgz", + "integrity": "sha512-0R3t2oiLxJNJb2buz61MNfPdkjeyj2qTCM7TtIv/4ZfF12zD7Ig8iIo+C8febroy+9S4QJ7qfijtearSdO/1ww==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "esm-env": "^1.2.1", + "esrap": "^2.1.0", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/svelte-check": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.3.tgz", + "integrity": "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", + "picocolors": "^1.0.0", + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" + } + }, + "node_modules/svelte-sonner": { + "version": "0.3.28", + "resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-0.3.28.tgz", + "integrity": "sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0-next.1" + } + }, + "node_modules/svelte-toolbelt": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz", + "integrity": "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte" + ], + "dependencies": { + "clsx": "^2.1.1", + "runed": "^0.23.2", + "style-to-object": "^1.0.8" + }, + "engines": { + "node": ">=18", + "pnpm": ">=8.7.0" + }, + "peerDependencies": { + "svelte": "^5.0.0" + } + }, + "node_modules/sveltekit-superforms": { + "version": "2.27.4", + "resolved": "https://registry.npmjs.org/sveltekit-superforms/-/sveltekit-superforms-2.27.4.tgz", + "integrity": "sha512-8iw2nSKUVaBimOw0XGGdI39AihY1r/Plh9LTmxQGYopQaom5PPbDJyU79dUy3bd4K7vlqTdjvMz5FO8IFFzoPQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ciscoheat" + }, + { + "type": "ko-fi", + "url": "https://ko-fi.com/ciscoheat" + }, + { + "type": "paypal", + "url": "https://www.paypal.com/donate/?hosted_button_id=NY7F5ALHHSVQS" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "devalue": "^5.3.2", + "memoize-weak": "^1.0.2", + "ts-deepmerge": "^7.0.3" + }, + "optionalDependencies": { + "@exodus/schemasafe": "^1.3.0", + "@finom/zod-to-json-schema": "^3.24.11", + "@gcornut/valibot-json-schema": "^0.42.0", + "@sinclair/typebox": "^0.34.41", + "@typeschema/class-validator": "^0.3.0", + "@vinejs/vine": "^3.0.1", + "arktype": "^2.1.22", + "class-validator": "^0.14.2", + "effect": "^3.18.1", + "joi": "^17.13.3", + "json-schema-to-ts": "^3.1.1", + "superstruct": "^2.0.2", + "valibot": "^1.1.0", + "yup": "^1.7.1", + "zod": "^4.1.11" + }, + "peerDependencies": { + "@exodus/schemasafe": "^1.3.0", + "@sinclair/typebox": "^0.34.28", + "@sveltejs/kit": "1.x || 2.x", + "@typeschema/class-validator": "^0.3.0", + "@vinejs/vine": "^1.8.0 || ^2.0.0 || ^3.0.0", + "arktype": ">=2.0.0-rc.23", + "class-validator": "^0.14.1", + "effect": "^3.13.7", + "joi": "^17.13.1", + "superstruct": "^2.0.2", + "svelte": "3.x || 4.x || >=5.0.0-next.51", + "valibot": "^1.0.0", + "yup": "^1.4.0", + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "@exodus/schemasafe": { + "optional": true + }, + "@sinclair/typebox": { + "optional": true + }, + "@typeschema/class-validator": { + "optional": true + }, + "@vinejs/vine": { + "optional": true + }, + "arktype": { + "optional": true + }, + "class-validator": { + "optional": true + }, + "effect": { + "optional": true + }, + "joi": { + "optional": true + }, + "superstruct": { + "optional": true + }, + "valibot": { + "optional": true + }, + "yup": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/sveltekit-superforms/node_modules/@finom/zod-to-json-schema": { + "version": "3.24.11", + "resolved": "https://registry.npmjs.org/@finom/zod-to-json-schema/-/zod-to-json-schema-3.24.11.tgz", + "integrity": "sha512-fL656yBPiWebtfGItvtXLWrFNGlF1NcDFS0WdMQXMs9LluVg0CfT5E2oXYp0pidl0vVG53XkW55ysijNkU5/hA==", + "dev": true, + "license": "ISC", + "optional": true, + "peerDependencies": { + "zod": "^4.0.14" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true, + "license": "MIT" + }, + "node_modules/tailwind-merge": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-variants": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.3.1.tgz", + "integrity": "sha512-krn67M3FpPwElg4FsZrOQd0U26o7UDH/QOkK8RNaiCCrr052f6YJPBUfNKnPo/s/xRzNPtv1Mldlxsg8Tb46BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tailwind-merge": "2.5.4" + }, + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwindcss": "*" + } + }, + "node_modules/tailwind-variants/node_modules/tailwind-merge": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", + "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.18.tgz", + "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/ts-deepmerge": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-deepmerge/-/ts-deepmerge-7.0.3.tgz", + "integrity": "sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14.13.1" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/turbo": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.5.8.tgz", + "integrity": "sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==", + "dev": true, + "license": "MIT", + "bin": { + "turbo": "bin/turbo" + }, + "optionalDependencies": { + "turbo-darwin-64": "2.5.8", + "turbo-darwin-arm64": "2.5.8", + "turbo-linux-64": "2.5.8", + "turbo-linux-arm64": "2.5.8", + "turbo-windows-64": "2.5.8", + "turbo-windows-arm64": "2.5.8" + } + }, + "node_modules/turbo-darwin-64": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.5.8.tgz", + "integrity": "sha512-Dh5bCACiHO8rUXZLpKw+m3FiHtAp2CkanSyJre+SInEvEr5kIxjGvCK/8MFX8SFRjQuhjtvpIvYYZJB4AGCxNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-darwin-arm64": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.5.8.tgz", + "integrity": "sha512-f1H/tQC9px7+hmXn6Kx/w8Jd/FneIUnvLlcI/7RGHunxfOkKJKvsoiNzySkoHQ8uq1pJnhJ0xNGTlYM48ZaJOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-linux-64": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.5.8.tgz", + "integrity": "sha512-hMyvc7w7yadBlZBGl/bnR6O+dJTx3XkTeyTTH4zEjERO6ChEs0SrN8jTFj1lueNXKIHh1SnALmy6VctKMGnWfw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-linux-arm64": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.5.8.tgz", + "integrity": "sha512-LQELGa7bAqV2f+3rTMRPnj5G/OHAe2U+0N9BwsZvfMvHSUbsQ3bBMWdSQaYNicok7wOZcHjz2TkESn1hYK6xIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-windows-64": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.5.8.tgz", + "integrity": "sha512-3YdcaW34TrN1AWwqgYL9gUqmZsMT4T7g8Y5Azz+uwwEJW+4sgcJkIi9pYFyU4ZBSjBvkfuPZkGgfStir5BBDJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/turbo-windows-arm64": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.5.8.tgz", + "integrity": "sha512-eFC5XzLmgXJfnAK3UMTmVECCwuBcORrWdewoiXBnUm934DY6QN8YowC/srhNnROMpaKaqNeRpoB5FxCww3eteQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/valibot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/valibot/-/valibot-1.1.0.tgz", + "integrity": "sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==", + "dev": true, + "license": "MIT", + "optional": true, + "peerDependencies": { + "typescript": ">=5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/validator": { + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vite": { + "version": "5.4.20", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", + "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitefu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", + "dev": true, + "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", + "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.9", + "@vitest/mocker": "2.1.9", + "@vitest/pretty-format": "^2.1.9", + "@vitest/runner": "2.1.9", + "@vitest/snapshot": "2.1.9", + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.9", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.9", + "@vitest/ui": "2.1.9", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/web": { + "resolved": "apps/web", + "link": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yup": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.7.1.tgz", + "integrity": "sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "license": "MIT" + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..2816c8f --- /dev/null +++ b/package.json @@ -0,0 +1,23 @@ +{ + "name": "wol-web", + "private": true, + "scripts": { + "build": "turbo build", + "dev": "turbo dev", + "lint": "turbo lint", + "format": "prettier --write \"**/*.{ts,tsx,md}\"" + }, + "devDependencies": { + "prettier": "^3.2.5", + "turbo": "^2.3.3", + "typescript": "5.5.4" + }, + "engines": { + "node": ">=18" + }, + "packageManager": "bun@1.1.42", + "workspaces": [ + "apps/*", + "packages/*" + ] +} diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..d6a7fe0 --- /dev/null +++ b/turbo.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://turbo.build/schema.json", + "ui": "tui", + "tasks": { + "build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "outputs": [".next/**", "!.next/cache/**"] + }, + "lint": { + "dependsOn": ["^lint"] + }, + "check-types": { + "dependsOn": ["^check-types"] + }, + "dev": { + "cache": false, + "persistent": true + } + } +}