diff --git a/.github/workflows/reuse-build.yml b/.github/workflows/reuse-build.yml index 8f67f70f..62dbe08f 100644 --- a/.github/workflows/reuse-build.yml +++ b/.github/workflows/reuse-build.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout git repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/.github/workflows/reuse-quality.yml b/.github/workflows/reuse-quality.yml index 05f4c385..f4e7eda4 100644 --- a/.github/workflows/reuse-quality.yml +++ b/.github/workflows/reuse-quality.yml @@ -9,9 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout git repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v5 with: node-version: 24 cache: 'npm' diff --git a/.zellij.kdl b/.zellij.kdl index 3934c0d4..f896b970 100644 --- a/.zellij.kdl +++ b/.zellij.kdl @@ -3,7 +3,7 @@ layout { split_direction "vertical" pane name="portals" borderless=true { command "bash" - args "-ic" "nvm use && bash" + args "-ic" "nvm use > /dev/null 2>&1 && bash" } pane name="deps" { command "bash" @@ -11,22 +11,22 @@ layout { } pane name="mock ingress manager" { command "bash" - args "-ic" "nvm use && npm run dev-ingress-manager" + args "-ic" "nvm use > /dev/null 2>&1 && npm run dev-ingress-manager" } } pane { split_direction "vertical" pane name="manager ui" { command "bash" - args "-ic" "nvm use && npm -w ui run dev" + args "-ic" "nvm use > /dev/null 2>&1 && npm run dev-ui" } pane name="manager api" { command "bash" - args "-ic" "nvm use && npm -w api run dev" + args "-ic" "nvm use > /dev/null 2>&1 && npm run dev-api" } pane name="portal" { command "bash" - args "-ic" "nvm use && npm -w portal run dev" + args "-ic" "nvm use > /dev/null 2>&1 && npm run dev-portal" } } pane size=1 borderless=true { diff --git a/AGENTS.md b/AGENTS.md index b0d89a6d..2ff2add5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,7 +11,7 @@ The dev environment is managed by zellij (terminal multiplexer) and docker compo ### Checking status ```bash -bash dev/status.sh +bash dev/scripts/status.sh ``` This shows the health of all services (nginx, API, UI, portal, docker services, databases) and lists log files with sizes and timestamps. @@ -19,6 +19,7 @@ This shows the health of all services (nginx, API, UI, portal, docker services, ### Log files All dev processes write to `dev/logs/`: + - `dev-api.log` — API server - `dev-ui.log` — UI dev server (Vite) - `dev-portal.log` — Portal (Nuxt) @@ -27,7 +28,7 @@ All dev processes write to `dev/logs/`: ### Troubleshooting -1. Run `bash dev/status.sh` to identify which services are down +1. Run `bash dev/scripts/status.sh` to identify which services are down 2. Read the relevant log file in `dev/logs/` for error details 3. Report findings to the user — do not attempt to fix infrastructure issues yourself @@ -35,6 +36,24 @@ All dev processes write to `dev/logs/`: Port numbers are defined in `.env`. Do not modify port assignments. +### Git worktrees + +To work on a separate branch in an isolated environment (own `.env`, own +docker compose project, randomized ports so it doesn't clash with the main +checkout), **always use the project scripts** — never `git worktree add` by +hand: + +```bash +bash dev/worktree.sh # create worktree + .env + npm ci + build-types + ui build +bash dev/delete-worktree.sh # stops/removes containers + volumes + images, then removes the worktree +``` + +`dev/worktree.sh` does the full setup the manual `git worktree add` skips +(env file, dependencies, type and UI builds). `dev/delete-worktree.sh` runs +`docker compose --profile dev --profile test down -v --remove-orphans +--rmi local` so a deleted worktree leaves no leftover containers, named +volumes, or locally-built images. + ### Test and dev environment The environment allows for integration testing thanks to docker containers (see docker-compose.yml). @@ -42,6 +61,8 @@ Random ports are allocated and defined in `.env`. A nginx proxy is part of the containers and exposes all services, including the development API server (configured in dev/resources/nginx.conf.template). Test users are defined in dev/resources/users.json +The test cleanup endpoint (`DELETE /api/test-env`) only removes data whose `owner.id` starts with `test_`. Use the dev-only superadmin `superadmin@dev.com` (id `dev_superadmin`, password `passwd`, member of org `dev_org`) to play around manually without seeing your data wiped by tests. + ### Testing ```bash diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e344821d..b8398053 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,22 +4,36 @@ - A Javascript/Typescript IDE with [Vue.js](https://vuejs.org/) and [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) support. - A recent [Docker](https://docs.docker.com/engine/install/) installation. -- [Node.js v24+](https://nodejs.org/) +- [Node.js v24+](https://nodejs.org/) — the project ships an `.nvmrc`, so if you use [nvm](https://github.com/nvm-sh/nvm) you can simply run `nvm use` from the project root to switch to the right version. ## Install dependencies -1. Install npm dependencies for all workspaces : +1. Generate the `.env` file (random ports, dev host) — only needed once on the main checkout, worktrees created via `./dev/worktree.sh` do this automatically : + +```sh +./dev/init-env.sh +``` + +2. Install npm dependencies for all workspaces : ```sh npm i ``` -2. Build / Update the types based on schemas : +3. Build / Update the types based on schemas : ```sh npm run build-types ``` +4. Build the UI once : + +```sh +npm -w ui run build +``` + +> Known bug: the API currently fails to start without a built UI bundle, so this initial build is required even for pure API/dev work. It only needs to be re-run if you blow away `ui/dist`. + ## Start the development environment ```sh @@ -31,10 +45,11 @@ npm run dev-zellij
Services -- **Dev dependencies** : `npm run dev-deps` -- **Api** : `npm run dev-api` +- **Dev dependencies** (docker compose stack) : `npm run dev-deps` +- **API** : `npm run dev-api` - **UI** : `npm run dev-ui` - **Portal** : `npm run dev-portal` +- **Mock ingress manager** : `npm run dev-ingress-manager`
@@ -57,27 +72,28 @@ docker build --progress=plain --target=portal -t data-fair/portals/portal:dev . ## Running the tests -First, you need to start the development dependencies +First, you need the full dev environment up (the test suite hits the API/UI/portal as well as the docker compose services) : ```sh -npm run dev-deps +npm run dev-zellij ``` -Then, you can run the tests. +Then, you can run the tests : ```sh -npm run test +npm run test # full suite +npm run test-unit # unit tests only +npm run test-api # API tests only +npm run test-e2e # e2e tests only ``` -To run a specific test, you can mark it with `it.only` or `describe.only` in the test file, then run the tests with : +To run a specific test file : ```sh -npm run test-only test-it/file-name.ts +npm run test -- path/to/file.spec.ts ``` -## Setup the development environment - -TODO +You can also mark a test with `.only` (e.g. `it.only`, `test.only`, `describe.only`) and run the project it belongs to. ## Random information diff --git a/api/config/development.js b/api/config/development.js index 6634211d..b09e9632 100644 --- a/api/config/development.js +++ b/api/config/development.js @@ -1,5 +1,5 @@ import dotenv from 'dotenv' -dotenv.config({ path: import.meta.resolve('../../.env').replace('file://', '') }) +dotenv.config({ path: import.meta.resolve('../../.env').replace('file://', ''), quiet: true }) if (!process.env.DEV_API_PORT) throw new Error('missing DEV_API_PORT env variable, use "source dev/init-env.sh" to init .env file') diff --git a/api/config/test.js b/api/config/test.js index 75424817..be78993d 100644 --- a/api/config/test.js +++ b/api/config/test.js @@ -1,5 +1,5 @@ import dotenv from 'dotenv' -dotenv.config({ path: import.meta.resolve('../../.env').replace('file://', '') }) +dotenv.config({ path: import.meta.resolve('../../.env').replace('file://', ''), quiet: true }) if (!process.env.DEV_API_PORT) throw new Error('missing DEV_API_PORT env variable, use "source dev/init-env.sh" to init .env file') diff --git a/api/package.json b/api/package.json index 1f5ddd8b..c69a6d8f 100644 --- a/api/package.json +++ b/api/package.json @@ -2,7 +2,7 @@ "name": "api", "type": "module", "scripts": { - "dev": "mkdir -p ../dev/logs && NODE_ENV=development DEBUG=upgrade* node --watch index.ts 2>&1 | tee ../dev/logs/dev-api.log" + "dev": "bash ../dev/scripts/log-tee.sh ../dev/logs/dev-api.log -- env NODE_ENV=development DEBUG=upgrade* node --watch index.ts" }, "imports": { "#config": "./src/config.ts", diff --git a/dev/delete-worktree.sh b/dev/delete-worktree.sh index 33218f3b..3390c3d0 100755 --- a/dev/delete-worktree.sh +++ b/dev/delete-worktree.sh @@ -1,10 +1,42 @@ #!/bin/bash +# Delete a worktree (and its docker containers/volumes/local images). +# +# Refuses to proceed if the worktree has uncommitted changes or commits not +# pushed to any origin ref. Pass -f / --force to bypass these checks. -BRANCH_NAME=$1 +set -e + +FORCE=false +BRANCH_NAME="" + +while [ $# -gt 0 ]; do + case "$1" in + -f|--force) FORCE=true ;; + -h|--help) + echo "Usage: $0 [-f|--force]" + echo " --force / -f skip uncommitted/unpushed safety checks" + exit 0 + ;; + -*) + echo "Error: unknown flag '$1'" + echo "Usage: $0 [-f|--force]" + exit 1 + ;; + *) + if [ -z "$BRANCH_NAME" ]; then + BRANCH_NAME="$1" + else + echo "Error: too many positional arguments" + exit 1 + fi + ;; + esac + shift +done if [ -z "$BRANCH_NAME" ]; then echo "Error: Please provide a branch name." - echo "Usage: ./dev/delete-worktree.sh feat-xyz" + echo "Usage: $0 [-f|--force]" exit 1 fi @@ -16,12 +48,51 @@ if [ ! -d "$TARGET_DIR" ]; then exit 1 fi -echo "Stopping docker compose services in $TARGET_DIR" +ORIGIN_DIR="$PWD" + +if [ "$FORCE" != true ]; then + echo "Checking $TARGET_DIR for uncommitted / unpushed work…" + cd "$TARGET_DIR" + + # Refresh remote refs so the "unpushed" check is accurate + git fetch origin --quiet 2>/dev/null || true + + DIRTY=$(git status --porcelain) + if [ -n "$DIRTY" ]; then + echo + echo "❌ Refusing to delete: $TARGET_DIR has uncommitted changes:" + echo "$DIRTY" | sed 's/^/ /' + echo + echo "Commit / push / stash them, or pass -f / --force to bypass." + exit 1 + fi + + # Commits reachable from HEAD but NOT reachable from any origin/* ref. + # Catches: never-pushed branches, branches ahead of upstream, detached HEAD with unique commits. + UNPUSHED_COUNT=$(git rev-list --count HEAD --not --remotes=origin 2>/dev/null || echo 0) + if [ "$UNPUSHED_COUNT" -gt 0 ]; then + echo + echo "❌ Refusing to delete: $TARGET_DIR has $UNPUSHED_COUNT commit(s) not present on any origin ref:" + git --no-pager log --oneline HEAD --not --remotes=origin | sed 's/^/ /' + echo + echo "Push them (e.g. 'git push -u origin $BRANCH_NAME'), or pass -f / --force to bypass." + exit 1 + fi + + cd "$ORIGIN_DIR" + echo "✓ working tree clean and all commits present on origin" +fi + +echo "Stopping & removing docker compose services in $TARGET_DIR (with volumes and orphans)" cd "$TARGET_DIR" -docker compose --profile dev down +# --profile dev --profile test : catch every container the worktree may have started +# -v : drop named volumes (mongo, elasticsearch, s3mock, clamav…) — data is worktree-scoped +# --remove-orphans : sweep any container left over from a previous compose file +# --rmi local : remove images built locally for this worktree (keeps remote-pulled images) +docker compose --profile dev --profile test down -v --remove-orphans --rmi local echo "Removing git worktree at $TARGET_DIR" -cd "$PWD" +cd "$ORIGIN_DIR" git worktree remove "$TARGET_DIR" echo "-----------------------------------------------" diff --git a/dev/resources/organizations.json b/dev/resources/organizations.json index 1c20f1ff..3d9639ce 100644 --- a/dev/resources/organizations.json +++ b/dev/resources/organizations.json @@ -97,6 +97,10 @@ "id": "albanm", "role": "admin" }, + { + "id": "dev_superadmin", + "role": "admin" + }, { "id": "dev_admin_dep", "role": "admin", diff --git a/dev/resources/users.json b/dev/resources/users.json index a23984e5..ef22ecbf 100644 --- a/dev/resources/users.json +++ b/dev/resources/users.json @@ -5,7 +5,7 @@ "lastName": "Superadmin", "email": "test_superadmin@test.com", "password": { - "clear": "superpasswd" + "clear": "passwd" } }, { @@ -79,5 +79,14 @@ "password": { "clear": "passwd" } + }, + { + "id": "dev_superadmin", + "firstName": "Dev", + "lastName": "Superadmin", + "email": "superadmin@dev.com", + "password": { + "clear": "passwd" + } } ] diff --git a/dev/scripts/dev-deps.sh b/dev/scripts/dev-deps.sh new file mode 100755 index 00000000..3608900d --- /dev/null +++ b/dev/scripts/dev-deps.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Bring up dev docker containers, stream their logs to a file in the background, +# and watch a status table refreshed every 4 seconds. +# +# Containers are NOT stopped when this script exits (Ctrl+C in the pane just +# stops the watch + log streamer). They are stopped via "npm run stop-dev-deps", +# which is chained after zellij in the "dev-zellij" script so the cleanup only +# happens when the whole zellij session is closed. + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")" +cd "$PROJECT_DIR" + +mkdir -p dev/logs + +docker compose --profile dev up -d --wait + +docker compose --profile dev logs -f --no-color > dev/logs/docker-compose.log 2>&1 & +LOG_PID=$! + +trap 'kill "$LOG_PID" 2>/dev/null || true' EXIT INT TERM + +watch -c -n 4 -t "docker compose ps --all --format 'table {{.Name}}\t{{.Status}}'" diff --git a/dev/scripts/log-tee.sh b/dev/scripts/log-tee.sh new file mode 100755 index 00000000..9e986961 --- /dev/null +++ b/dev/scripts/log-tee.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +# Run a command with FORCE_COLOR=1 so the terminal gets ANSI colors, +# while writing a stripped (plain text) copy of stdout/stderr to a log file. +# +# Usage: log-tee.sh -- +# The "--" is optional. + +set -e + +LOG_FILE="$1" +shift +[ "${1:-}" = "--" ] && shift + +mkdir -p "$(dirname "$LOG_FILE")" + +FORCE_COLOR=1 "$@" 2>&1 | tee >(sed -u $'s/\x1b\\[[0-9;]*[a-zA-Z]//g' > "$LOG_FILE") diff --git a/dev/status.sh b/dev/scripts/status.sh similarity index 98% rename from dev/status.sh rename to dev/scripts/status.sh index 7c9161d0..e8ac518d 100755 --- a/dev/status.sh +++ b/dev/scripts/status.sh @@ -6,7 +6,7 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PROJECT_DIR="$(dirname "$SCRIPT_DIR")" +PROJECT_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")" # Load port configuration if [ -f "$PROJECT_DIR/.env" ]; then diff --git a/dev/worktree.sh b/dev/worktree.sh index f4a41b6a..3d993a5c 100755 --- a/dev/worktree.sh +++ b/dev/worktree.sh @@ -1,4 +1,20 @@ #!/bin/bash +# Create a git worktree for the given branch with full dev setup. +# +# Handles four cases: +# 1. Branch is currently checked out HERE (with or without local changes): +# stash the changes, switch this checkout back to the main branch, move +# the requested branch into the worktree, then re-apply the stash inside +# the worktree. +# 2. Branch exists locally but is not active here: just check it out in the +# worktree (e.g. coming back to a branch after a previous worktree was +# deleted). +# 3. Branch exists only on origin: create a tracking local branch in the +# worktree. +# 4. Brand new branch name: create from the current branch (or main if +# current is detached). + +set -e BRANCH_NAME=$1 @@ -8,14 +24,68 @@ if [ -z "$BRANCH_NAME" ]; then exit 1 fi -SOURCE_BRANCH=$(git branch --show-current) REPO_NAME=$(basename "$PWD") TARGET_DIR="../${REPO_NAME}_${BRANCH_NAME}" -echo "Creating worktree at $TARGET_DIR from branch $SOURCE_BRANCH" -git worktree add -b "$BRANCH_NAME" "$TARGET_DIR" $SOURCE_BRANCH +if [ -e "$TARGET_DIR" ]; then + echo "Error: $TARGET_DIR already exists." + echo "Run ./dev/delete-worktree.sh $BRANCH_NAME first if you want to recreate it." + exit 1 +fi + +# Detect main branch (main vs master) — prefer origin/HEAD, fall back to local refs +MAIN_BRANCH=$(git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null | sed 's|^origin/||' || true) +if [ -z "$MAIN_BRANCH" ]; then + if git show-ref --verify --quiet refs/heads/main; then + MAIN_BRANCH=main + elif git show-ref --verify --quiet refs/heads/master; then + MAIN_BRANCH=master + else + echo "Error: could not detect main branch (neither 'main' nor 'master' found)." + exit 1 + fi +fi + +echo "Fetching from origin" +git fetch origin --prune + +CURRENT_BRANCH=$(git branch --show-current || true) +LOCAL_EXISTS=no +REMOTE_EXISTS=no +git show-ref --verify --quiet "refs/heads/$BRANCH_NAME" && LOCAL_EXISTS=yes +git show-ref --verify --quiet "refs/remotes/origin/$BRANCH_NAME" && REMOTE_EXISTS=yes -cd $TARGET_DIR +STASH_REF="" +if [ "$LOCAL_EXISTS" = "yes" ] && [ "$CURRENT_BRANCH" = "$BRANCH_NAME" ]; then + echo "Branch '$BRANCH_NAME' is currently checked out in $PWD — migrating it to the worktree." + if [ -n "$(git status --porcelain)" ]; then + STASH_LABEL="worktree-migration-${BRANCH_NAME}-$(date +%s)" + echo "Stashing local changes (incl. untracked) as '$STASH_LABEL'" + git stash push --include-untracked --message "$STASH_LABEL" + STASH_REF=$(git stash list --format='%gd %gs' | grep -F "$STASH_LABEL" | head -1 | awk '{print $1}') + fi + echo "Switching this checkout to $MAIN_BRANCH" + git checkout "$MAIN_BRANCH" +fi + +if [ "$LOCAL_EXISTS" = "yes" ]; then + echo "Reusing existing local branch '$BRANCH_NAME' in $TARGET_DIR" + git worktree add "$TARGET_DIR" "$BRANCH_NAME" +elif [ "$REMOTE_EXISTS" = "yes" ]; then + echo "Creating local branch '$BRANCH_NAME' tracking origin/$BRANCH_NAME in $TARGET_DIR" + git worktree add -b "$BRANCH_NAME" --track "$TARGET_DIR" "origin/$BRANCH_NAME" +else + SOURCE_BRANCH="${CURRENT_BRANCH:-$MAIN_BRANCH}" + echo "Creating new branch '$BRANCH_NAME' from '$SOURCE_BRANCH' in $TARGET_DIR" + git worktree add -b "$BRANCH_NAME" "$TARGET_DIR" "$SOURCE_BRANCH" +fi + +if [ -n "$STASH_REF" ]; then + echo "Re-applying stashed changes inside the worktree" + ( cd "$TARGET_DIR" && git stash pop "$STASH_REF" ) +fi + +cd "$TARGET_DIR" if [ -d "$OLDPWD/.claude" ]; then echo "Copy local Claude settings" @@ -41,6 +111,9 @@ echo "-----------------------------------------------" echo "✅ Setup Complete!" echo "Location: $TARGET_DIR" echo "Branch: $BRANCH_NAME" +if [ -n "$STASH_REF" ]; then + echo "(Local changes from your previous checkout were migrated.)" +fi echo "-----------------------------------------------" echo "Next step:" echo " cd $TARGET_DIR" diff --git a/docker-compose.yml b/docker-compose.yml index 8ad67618..0ce0a4a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -39,7 +39,7 @@ services: environment: PORT: ${SD_PORT} ADMINS: | - ["test_superadmin@test.com", "alban.mouton@koumoul.com"] + ["test_superadmin@test.com", "superadmin@dev.com", "alban.mouton@koumoul.com"] CIPHER_PASSWORD: dev CONTACT: contact@test.com MANAGE_SITES: true diff --git a/package-lock.json b/package-lock.json index 50f020bc..ed732e48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3387,6 +3387,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/@json-layout/core/-/core-2.7.1.tgz", "integrity": "sha512-3of4uGvhIMDVV6LSYiiUVkmBhzzLZHaKw9Qppw78YV4iqJlnDsGnFhiZ3y6k4Ww0ZbePElqZcbmhbBnjZzO3+w==", + "devOptional": true, "license": "MIT", "dependencies": { "ajv": "^8.17.1", @@ -3416,12 +3417,12 @@ } }, "node_modules/@koumoul/vjsf": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@koumoul/vjsf/-/vjsf-4.3.0.tgz", - "integrity": "sha512-o5CqkaF7RL4Jm3RqX+5J29c9UY03LpQLckECR3nMxB58xkWNtEm2Ay97iv876EbnDLXvOOBw+qm4w99QOML2hg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@koumoul/vjsf/-/vjsf-4.4.0.tgz", + "integrity": "sha512-9rGDKvgHI3HkJobyINsbMbF99i1YqESGuJbbMzCl4nOjrAZGFsQtA21m2Jlh6rsQH0J87V9rSSOFPGI5oPC+ww==", "license": "MIT", "dependencies": { - "@json-layout/core": "~2.7.0", + "@json-layout/core": "~2.8.0", "@json-layout/vocabulary": "~2.13.0", "@vueuse/core": "^12.5.0", "debug": "^4.3.4" @@ -3458,6 +3459,26 @@ "vuetify": "^4.0.0" } }, + "node_modules/@koumoul/vjsf/node_modules/@json-layout/core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@json-layout/core/-/core-2.8.0.tgz", + "integrity": "sha512-2hayh6qQ4H52Or+hhev7J1fPcbDNVt4fXy3Cco003vJMlXvlspNiHt5gLlix8VQw6DgtfgxWqJRQLhiqIKUdwA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.17.1", + "ajv-errors": "^3.0.0", + "ajv-formats": "^3.0.1", + "ajv-i18n": "^4.2.0", + "debug": "^4.3.4", + "fast-deep-equal": "^3.1.3", + "immer": "^10.0.3", + "magicast": "^0.3.3", + "marked": "^15.0.7" + }, + "peerDependencies": { + "@json-layout/vocabulary": "^2.13.0" + } + }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", @@ -13163,9 +13184,9 @@ } }, "node_modules/httpxy": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.5.0.tgz", - "integrity": "sha512-qwX7QX/rK2visT10/b7bSeZWQOMlSm3svTD0pZpU+vJjNUP0YHtNv4c3z+MO+MSnGuRFWJFdCZiV+7F7dXIOzg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.5.1.tgz", + "integrity": "sha512-JPhqYiixe1A1I+MXDewWDZqeudBGU8Q9jCHYN8ML+779RQzLjTi78HBvWz4jMxUD6h2/vUL12g4q/mFM0OUw1A==", "license": "MIT" }, "node_modules/human-signals": { @@ -15564,9 +15585,9 @@ "license": "ISC" }, "node_modules/nitropack": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.13.3.tgz", - "integrity": "sha512-C8vO7RxkU0AQ3HbYUumuG6MVM5JjRaBchke/rYFOp3EvrLtTBHZYhDVGECdpa27vNuOYRzm3GtQMn2YDOjDJLA==", + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.13.4.tgz", + "integrity": "sha512-tX7bT6zxNeMwkc6hxHiZeUoTOjVrcjoh1Z3cmxOlodIqjl4HISgqfGOmkWSayky3Nv9Z5+KQH52F8nmXJY5AAA==", "license": "MIT", "dependencies": { "@cloudflare/kv-asset-handler": "^0.4.2", @@ -15589,18 +15610,18 @@ "croner": "^10.0.1", "crossws": "^0.3.5", "db0": "^0.3.4", - "defu": "^6.1.6", + "defu": "^6.1.7", "destr": "^2.0.5", "dot-prop": "^10.1.0", - "esbuild": "^0.27.5", + "esbuild": "^0.28.0", "escape-string-regexp": "^5.0.0", "etag": "^1.8.1", "exsolve": "^1.0.8", "globby": "^16.2.0", "gzip-size": "^7.0.0", - "h3": "^1.15.10", + "h3": "^1.15.11", "hookable": "^5.5.3", - "httpxy": "^0.5.0", + "httpxy": "^0.5.1", "ioredis": "^5.10.1", "jiti": "^2.6.1", "klona": "^2.0.6", @@ -15616,23 +15637,23 @@ "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", - "pkg-types": "^2.3.0", + "pkg-types": "^2.3.1", "pretty-bytes": "^7.1.0", "radix3": "^1.1.2", - "rollup": "^4.60.1", + "rollup": "^4.60.2", "rollup-plugin-visualizer": "^7.0.1", "scule": "^1.3.0", "semver": "^7.7.4", "serve-placeholder": "^2.0.2", "serve-static": "^2.2.1", "source-map": "^0.7.6", - "std-env": "^4.0.0", - "ufo": "^1.6.3", + "std-env": "^4.1.0", + "ufo": "^1.6.4", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.5.0", "unenv": "2.0.0-rc.24", - "unimport": "^6.0.2", + "unimport": "^6.2.0", "unplugin-utils": "^0.3.1", "unstorage": "^1.17.5", "untyped": "^2.0.0", @@ -15657,9 +15678,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", "cpu": [ "ppc64" ], @@ -15673,9 +15694,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", "cpu": [ "arm" ], @@ -15689,9 +15710,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", "cpu": [ "arm64" ], @@ -15705,9 +15726,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", "cpu": [ "x64" ], @@ -15721,9 +15742,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", "cpu": [ "arm64" ], @@ -15737,9 +15758,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", "cpu": [ "x64" ], @@ -15753,9 +15774,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", "cpu": [ "arm64" ], @@ -15769,9 +15790,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", "cpu": [ "x64" ], @@ -15785,9 +15806,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", "cpu": [ "arm" ], @@ -15801,9 +15822,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", "cpu": [ "arm64" ], @@ -15817,9 +15838,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", "cpu": [ "ia32" ], @@ -15833,9 +15854,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", "cpu": [ "loong64" ], @@ -15849,9 +15870,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", "cpu": [ "mips64el" ], @@ -15865,9 +15886,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", "cpu": [ "ppc64" ], @@ -15881,9 +15902,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", "cpu": [ "riscv64" ], @@ -15897,9 +15918,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", "cpu": [ "s390x" ], @@ -15913,9 +15934,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", "cpu": [ "x64" ], @@ -15929,9 +15950,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", "cpu": [ "arm64" ], @@ -15945,9 +15966,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", "cpu": [ "x64" ], @@ -15961,9 +15982,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", "cpu": [ "arm64" ], @@ -15977,9 +15998,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", "cpu": [ "x64" ], @@ -15993,9 +16014,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", "cpu": [ "arm64" ], @@ -16009,9 +16030,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", "cpu": [ "x64" ], @@ -16025,9 +16046,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", "cpu": [ "arm64" ], @@ -16041,9 +16062,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", "cpu": [ "ia32" ], @@ -16057,9 +16078,9 @@ } }, "node_modules/nitropack/node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", "cpu": [ "x64" ], @@ -16072,6 +16093,331 @@ "node": ">=18" } }, + "node_modules/nitropack/node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.3.tgz", + "integrity": "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.3.tgz", + "integrity": "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.3.tgz", + "integrity": "sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.3.tgz", + "integrity": "sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.3.tgz", + "integrity": "sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.3.tgz", + "integrity": "sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.3.tgz", + "integrity": "sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.3.tgz", + "integrity": "sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.3.tgz", + "integrity": "sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.3.tgz", + "integrity": "sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.3.tgz", + "integrity": "sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.3.tgz", + "integrity": "sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.3.tgz", + "integrity": "sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.3.tgz", + "integrity": "sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.3.tgz", + "integrity": "sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.3.tgz", + "integrity": "sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.3.tgz", + "integrity": "sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.3.tgz", + "integrity": "sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.3.tgz", + "integrity": "sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.3.tgz", + "integrity": "sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.3.tgz", + "integrity": "sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.3.tgz", + "integrity": "sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.3.tgz", + "integrity": "sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.3.tgz", + "integrity": "sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/nitropack/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.3.tgz", + "integrity": "sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/nitropack/node_modules/cookie-es": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.1.tgz", @@ -16094,9 +16440,9 @@ } }, "node_modules/nitropack/node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -16106,32 +16452,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" } }, "node_modules/nitropack/node_modules/escape-string-regexp": { @@ -16172,6 +16518,50 @@ "source-map-js": "^1.2.1" } }, + "node_modules/nitropack/node_modules/rollup": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.3.tgz", + "integrity": "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==", + "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.60.3", + "@rollup/rollup-android-arm64": "4.60.3", + "@rollup/rollup-darwin-arm64": "4.60.3", + "@rollup/rollup-darwin-x64": "4.60.3", + "@rollup/rollup-freebsd-arm64": "4.60.3", + "@rollup/rollup-freebsd-x64": "4.60.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", + "@rollup/rollup-linux-arm-musleabihf": "4.60.3", + "@rollup/rollup-linux-arm64-gnu": "4.60.3", + "@rollup/rollup-linux-arm64-musl": "4.60.3", + "@rollup/rollup-linux-loong64-gnu": "4.60.3", + "@rollup/rollup-linux-loong64-musl": "4.60.3", + "@rollup/rollup-linux-ppc64-gnu": "4.60.3", + "@rollup/rollup-linux-ppc64-musl": "4.60.3", + "@rollup/rollup-linux-riscv64-gnu": "4.60.3", + "@rollup/rollup-linux-riscv64-musl": "4.60.3", + "@rollup/rollup-linux-s390x-gnu": "4.60.3", + "@rollup/rollup-linux-x64-gnu": "4.60.3", + "@rollup/rollup-linux-x64-musl": "4.60.3", + "@rollup/rollup-openbsd-x64": "4.60.3", + "@rollup/rollup-openharmony-arm64": "4.60.3", + "@rollup/rollup-win32-arm64-msvc": "4.60.3", + "@rollup/rollup-win32-ia32-msvc": "4.60.3", + "@rollup/rollup-win32-x64-gnu": "4.60.3", + "@rollup/rollup-win32-x64-msvc": "4.60.3", + "fsevents": "~2.3.2" + } + }, "node_modules/nitropack/node_modules/source-map": { "version": "0.7.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", @@ -16197,9 +16587,9 @@ } }, "node_modules/nitropack/node_modules/unimport": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-6.1.0.tgz", - "integrity": "sha512-ocgNKyiqj7Hw7oHt7A7D3za3fq28eShe1EloL6hsoQgn7CF51Y4CqFT9ISG3rEy0JpA8CCz/sY5h5OovOn62VQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-6.2.0.tgz", + "integrity": "sha512-4NcqaphAHQff4eBWQ3pjVOCYNLlmVGGMoLDmboobh8+OQe9yP7UyeoMP043M1bG0YNc3CqtukD2VuINxOqm4rQ==", "license": "MIT", "dependencies": { "acorn": "^8.16.0", @@ -16210,7 +16600,7 @@ "mlly": "^1.8.2", "pathe": "^2.0.3", "picomatch": "^4.0.4", - "pkg-types": "^2.3.0", + "pkg-types": "^2.3.1", "scule": "^1.3.0", "strip-literal": "^3.1.0", "tinyglobby": "^0.2.16", @@ -16219,6 +16609,14 @@ }, "engines": { "node": ">=18.12.0" + }, + "peerDependencies": { + "oxc-parser": "*" + }, + "peerDependenciesMeta": { + "oxc-parser": { + "optional": true + } } }, "node_modules/nitropack/node_modules/unplugin": { @@ -18124,13 +18522,13 @@ } }, "node_modules/pkg-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz", + "integrity": "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==", "license": "MIT", "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", + "confbox": "^0.2.4", + "exsolve": "^1.0.8", "pathe": "^2.0.3" } }, @@ -21453,9 +21851,9 @@ "license": "BSD-3-Clause" }, "node_modules/ufo": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", - "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", "license": "MIT" }, "node_modules/ui": { @@ -23746,6 +24144,7 @@ }, "portal": { "name": "nuxt-app", + "hasInstallScript": true, "dependencies": { "@analytics/google-analytics": "^1.1.0", "@analytics/google-tag-manager": "^0.6.0", diff --git a/package.json b/package.json index 9759f756..1638b3bd 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,12 @@ "build-types": "mkdir -p ui/src/components/vjsf && df-build-types . --vjsf-dir ui/src/components/vjsf", "check-types": "tsc && npm -w portal run check-types && npm -w ui run check-types", "dev-api": "npm -w api run dev", - "dev-deps": "mkdir -p dev/logs && docker compose --profile dev up -d --wait && docker compose --profile dev logs -f 2>&1 | tee dev/logs/docker-compose.log", + "dev-portal": "npm -w portal run dev", + "dev-deps": "bash dev/scripts/dev-deps.sh", + "stop-dev-deps": "docker compose --profile dev --profile test stop", "test-deps": "docker compose --profile test up -d --wait", - "dev-ui": "mkdir -p dev/logs && npm -w ui run dev 2>&1 | tee dev/logs/dev-ui.log", - "dev-ingress-manager": "mkdir -p dev/logs && NODE_ENV=development node --disable-warning=ExperimentalWarning --watch dev/ingress-manager.ts 2>&1 | tee dev/logs/dev-ingress-manager.log", + "dev-ui": "npm -w ui run dev", + "dev-ingress-manager": "bash dev/scripts/log-tee.sh dev/logs/dev-ingress-manager.log -- env NODE_ENV=development node --disable-warning=ExperimentalWarning --watch dev/ingress-manager.ts", "dev-zellij": "dotenv -v DEV_SHELL=$(basename \"$SHELL\") -- zellij --layout .zellij.kdl", "lint": "eslint . && npm -w ui run lint", "lint-fix": "eslint --fix . && npm -w ui run lint-fix", diff --git a/portal/app/components/agent-chat.vue b/portal/app/components/agent-chat.vue index c2f45aed..fcfdb07c 100644 --- a/portal/app/components/agent-chat.vue +++ b/portal/app/components/agent-chat.vue @@ -54,9 +54,8 @@