diff --git a/.github/workflows/build-lawndon.yaml b/.github/workflows/build-lawndon.yaml
index c66e320..5cf77df 100644
--- a/.github/workflows/build-lawndon.yaml
+++ b/.github/workflows/build-lawndon.yaml
@@ -93,6 +93,7 @@ jobs:
tags: |
ghcr.io/${{ github.repository_owner }}/lawndon-pi-server:${{ github.ref_name }}
ghcr.io/${{ github.repository_owner }}/lawndon-pi-server:${{ github.sha }}
+ ghcr.io/${{ github.repository_owner }}/lawndon-pi-server:latest
- name: Build and push UI image
uses: docker/build-push-action@v6
@@ -104,3 +105,4 @@ jobs:
tags: |
ghcr.io/${{ github.repository_owner }}/lawndon-pi-ui:${{ github.ref_name }}
ghcr.io/${{ github.repository_owner }}/lawndon-pi-ui:${{ github.sha }}
+ ghcr.io/${{ github.repository_owner }}/lawndon-pi-ui:latest
diff --git a/pi/Dockerfile.ui b/pi/Dockerfile.ui
index 5e9ccbd..2a3d982 100644
--- a/pi/Dockerfile.ui
+++ b/pi/Dockerfile.ui
@@ -15,7 +15,8 @@ RUN pnpm build
# Runtime stage
FROM nginx:alpine
-COPY --from=build /usr/src/app/ui/dist /usr/share/nginx/html
+COPY --from=build /usr/src/app/ui/dist /app
+COPY --from=build /usr/src/app/ui/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
diff --git a/pi/docker-compose.yaml b/pi/docker-compose.yaml
index e92adc4..f9369c5 100644
--- a/pi/docker-compose.yaml
+++ b/pi/docker-compose.yaml
@@ -13,9 +13,7 @@ services:
- app_network
ui:
- image: ghcr.io/jordojordo/uwb-ui:latest
- environment:
- VITE_NODE_ENV: production
+ image: ghcr.io/jordojordo/lawndon-pi-ui:latest
ports:
- "80:80" # Expose UI
depends_on:
diff --git a/pi/package.sh b/pi/package.sh
deleted file mode 100755
index 0f33b8b..0000000
--- a/pi/package.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-set -e
-
-PROJECT_NAME="lawndon-pi"
-TARGET_ARCHIVE="$PROJECT_NAME.tar.gz"
-PI_USER="pi"
-PI_HOST="192.168.12.1"
-PI_PATH="/home/pi"
-
-echo "Starting the build and packaging process"
-
-echo "Cleaning up old builds"
-rm -rf $PROJECT_NAME $TARGET_ARCHIVE
-
-echo "Building UI"
-pnpm install:ui
-pnpm build:ui
-
-echo "Building server"
-pnpm install:server
-pnpm build:server
-
-echo "Preparing the package directory"
-mkdir $PROJECT_NAME
-cp -r server/dist $PROJECT_NAME/server
-cp -r server/node_modules $PROJECT_NAME/server
-cp -r ui/dist $PROJECT_NAME/ui
-cp -r config $PROJECT_NAME/
-cp package.json $PROJECT_NAME/
-
-echo "Creating the tar.gz archive"
-tar -czf $TARGET_ARCHIVE $PROJECT_NAME
-
-echo "Build and transfer complete"
-echo "To run the app on the Raspberry Pi:"
-echo "1. SSH into your Raspberry Pi: ssh $PI_USER@$PI_HOST"
-echo "2. Unpack the archive: tar -xzf $TARGET_ARCHIVE"
-echo "3. Navigate to the project: cd $PROJECT_NAME"
-echo "4. Start the backend server: node server/server.js"
diff --git a/pi/server/package.json b/pi/server/package.json
index 561ecd2..6844c56 100644
--- a/pi/server/package.json
+++ b/pi/server/package.json
@@ -25,7 +25,7 @@
"devDependencies": {
"@types/cors": "^2.8.17",
"@types/express": "^5.0.0",
- "@types/node": "^22.9.3",
+ "@types/node": "^22.10.0",
"eslint": "^9.15.0",
"globals": "^15.12.0",
"http-proxy-middleware": "^3.0.3",
diff --git a/pi/server/pnpm-lock.yaml b/pi/server/pnpm-lock.yaml
index 3ccd431..77f056b 100644
--- a/pi/server/pnpm-lock.yaml
+++ b/pi/server/pnpm-lock.yaml
@@ -31,8 +31,8 @@ importers:
specifier: ^5.0.0
version: 5.0.0
'@types/node':
- specifier: ^22.9.3
- version: 22.9.4
+ specifier: ^22.10.0
+ version: 22.10.0
eslint:
specifier: ^9.15.0
version: 9.15.0
@@ -47,10 +47,10 @@ importers:
version: 3.1.7
ts-node:
specifier: ^10.9.2
- version: 10.9.2(@types/node@22.9.4)(typescript@5.7.2)
+ version: 10.9.2(@types/node@22.10.0)(typescript@5.7.2)
ts-node-dev:
specifier: ^2.0.0
- version: 2.0.0(@types/node@22.9.4)(typescript@5.7.2)
+ version: 2.0.0(@types/node@22.10.0)(typescript@5.7.2)
typescript:
specifier: ^5.7.2
version: 5.7.2
@@ -159,8 +159,8 @@ packages:
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
- '@types/express-serve-static-core@5.0.1':
- resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==}
+ '@types/express-serve-static-core@5.0.2':
+ resolution: {integrity: sha512-vluaspfvWEtE4vcSDlKRNer52DvOGrB2xv6diXy6UKyKW0lqZiWHGNApSyxOv+8DE5Z27IzVvE7hNkxg7EXIcg==}
'@types/express@5.0.0':
resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==}
@@ -177,8 +177,8 @@ packages:
'@types/mime@1.3.5':
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
- '@types/node@22.9.4':
- resolution: {integrity: sha512-d9RWfoR7JC/87vj7n+PVTzGg9hDyuFjir3RxUHbjFSKNd9mpxbxwMEyaCim/ddCmy4IuW7HjTzF3g9p3EtWEOg==}
+ '@types/node@22.10.0':
+ resolution: {integrity: sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==}
'@types/qs@6.9.17':
resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==}
@@ -1007,8 +1007,8 @@ packages:
undefsafe@2.0.5:
resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
- undici-types@6.19.8:
- resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
unpipe@1.0.0:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
@@ -1148,23 +1148,23 @@ snapshots:
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
'@types/connect@3.4.38':
dependencies:
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
'@types/cookie@0.4.1': {}
'@types/cors@2.8.17':
dependencies:
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
'@types/estree@1.0.6': {}
- '@types/express-serve-static-core@5.0.1':
+ '@types/express-serve-static-core@5.0.2':
dependencies:
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
'@types/qs': 6.9.17
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -1172,7 +1172,7 @@ snapshots:
'@types/express@5.0.0':
dependencies:
'@types/body-parser': 1.19.5
- '@types/express-serve-static-core': 5.0.1
+ '@types/express-serve-static-core': 5.0.2
'@types/qs': 6.9.17
'@types/serve-static': 1.15.7
@@ -1180,15 +1180,15 @@ snapshots:
'@types/http-proxy@1.17.15':
dependencies:
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
'@types/json-schema@7.0.15': {}
'@types/mime@1.3.5': {}
- '@types/node@22.9.4':
+ '@types/node@22.10.0':
dependencies:
- undici-types: 6.19.8
+ undici-types: 6.20.0
'@types/qs@6.9.17': {}
@@ -1197,12 +1197,12 @@ snapshots:
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
'@types/send': 0.17.4
'@types/strip-bom@3.0.0': {}
@@ -1388,7 +1388,7 @@ snapshots:
dependencies:
'@types/cookie': 0.4.1
'@types/cors': 2.8.17
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.7.2
@@ -2006,7 +2006,7 @@ snapshots:
tree-kill@1.2.2: {}
- ts-node-dev@2.0.0(@types/node@22.9.4)(typescript@5.7.2):
+ ts-node-dev@2.0.0(@types/node@22.10.0)(typescript@5.7.2):
dependencies:
chokidar: 3.6.0
dynamic-dedupe: 0.3.0
@@ -2016,7 +2016,7 @@ snapshots:
rimraf: 2.7.1
source-map-support: 0.5.21
tree-kill: 1.2.2
- ts-node: 10.9.2(@types/node@22.9.4)(typescript@5.7.2)
+ ts-node: 10.9.2(@types/node@22.10.0)(typescript@5.7.2)
tsconfig: 7.0.0
typescript: 5.7.2
transitivePeerDependencies:
@@ -2024,14 +2024,14 @@ snapshots:
- '@swc/wasm'
- '@types/node'
- ts-node@10.9.2(@types/node@22.9.4)(typescript@5.7.2):
+ ts-node@10.9.2(@types/node@22.10.0)(typescript@5.7.2):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
acorn: 8.14.0
acorn-walk: 8.3.4
arg: 4.1.3
@@ -2064,7 +2064,7 @@ snapshots:
undefsafe@2.0.5: {}
- undici-types@6.19.8: {}
+ undici-types@6.20.0: {}
unpipe@1.0.0: {}
diff --git a/pi/ui/.env b/pi/ui/.env
new file mode 100644
index 0000000..859bf67
--- /dev/null
+++ b/pi/ui/.env
@@ -0,0 +1 @@
+VITE_API_URL="http://localhost:5000"
\ No newline at end of file
diff --git a/pi/ui/env.d.ts b/pi/ui/env.d.ts
index 27abeaf..c3540f9 100644
--- a/pi/ui/env.d.ts
+++ b/pi/ui/env.d.ts
@@ -1,8 +1,7 @@
// /
interface ImportMetaEnv {
- readonly VITE_NODE_ENV: string;
- readonly VITE_BACKEND_URL: string;
+ readonly VITE_API_URL: string;
readonly BASE_URL: string;
readonly PROD: boolean
}
diff --git a/pi/ui/nginx.conf b/pi/ui/nginx.conf
index dbd9288..e17598d 100644
--- a/pi/ui/nginx.conf
+++ b/pi/ui/nginx.conf
@@ -40,10 +40,20 @@ http {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
+
+ add_header Access-Control-Allow-Origin *;
+ add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
+ add_header Access-Control-Allow-Headers "Authorization, Content-Type, X-Requested-With";
+
+ # Handle preflight requests
+ if ($request_method = 'OPTIONS') {
+ return 204;
+ }
+
access_log /var/log/nginx/api_access.log main;
}
- location /ws/ {
+ location /socket.io/ {
proxy_pass http://server:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
@@ -52,6 +62,16 @@ http {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
+
+ add_header Access-Control-Allow-Origin *;
+ add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS";
+ add_header Access-Control-Allow-Headers "Authorization, Content-Type, X-Requested-With";
+
+ # Handle preflight requests
+ if ($request_method = 'OPTIONS') {
+ return 204;
+ }
+
access_log /var/log/nginx/websocket_access.log main;
}
diff --git a/pi/ui/package.json b/pi/ui/package.json
index 6b89254..1328e29 100644
--- a/pi/ui/package.json
+++ b/pi/ui/package.json
@@ -7,28 +7,26 @@
"dev": "NODE_ENV=development vite",
"build": "vue-tsc --build --force && vite build",
"preview": "vite preview",
- "lint": "eslint . --fix",
- "format": "prettier --write src/"
+ "lint": "eslint . --fix"
},
"dependencies": {
"d3": "^7.9.0",
"pinia": "^2.2.6",
"socket.io-client": "^4.8.1",
"vue": "^3.5.13",
- "vue-router": "^4.4.5"
+ "vue-router": "^4.5.0"
},
"devDependencies": {
"@tsconfig/node22": "^22.0.0",
"@types/d3": "^7.4.3",
- "@types/node": "^22.9.3",
+ "@types/node": "^22.10.0",
"@vitejs/plugin-vue": "^5.2.0",
"@vue/eslint-config-prettier": "^10.1.0",
- "@vue/eslint-config-typescript": "^14.1.3",
+ "@vue/eslint-config-typescript": "^14.1.4",
"@vue/tsconfig": "^0.6.0",
"eslint": "^9.15.0",
"eslint-plugin-vue": "^9.31.0",
"npm-run-all2": "^7.0.1",
- "prettier": "^3.3.3",
"typescript": "~5.6.3",
"vite": "^5.4.11",
"vite-plugin-vue-devtools": "^7.6.4",
diff --git a/pi/ui/pnpm-lock.yaml b/pi/ui/pnpm-lock.yaml
index ed26d91..44a422b 100644
--- a/pi/ui/pnpm-lock.yaml
+++ b/pi/ui/pnpm-lock.yaml
@@ -21,7 +21,7 @@ importers:
specifier: ^3.5.13
version: 3.5.13(typescript@5.6.3)
vue-router:
- specifier: ^4.4.5
+ specifier: ^4.5.0
version: 4.5.0(vue@3.5.13(typescript@5.6.3))
devDependencies:
'@tsconfig/node22':
@@ -31,17 +31,17 @@ importers:
specifier: ^7.4.3
version: 7.4.3
'@types/node':
- specifier: ^22.9.3
- version: 22.9.4
+ specifier: ^22.10.0
+ version: 22.10.0
'@vitejs/plugin-vue':
specifier: ^5.2.0
- version: 5.2.0(vite@5.4.11(@types/node@22.9.4))(vue@3.5.13(typescript@5.6.3))
+ version: 5.2.0(vite@5.4.11(@types/node@22.10.0))(vue@3.5.13(typescript@5.6.3))
'@vue/eslint-config-prettier':
specifier: ^10.1.0
version: 10.1.0(eslint@9.15.0)(prettier@3.4.0)
'@vue/eslint-config-typescript':
- specifier: ^14.1.3
- version: 14.1.4(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-vue@9.31.0(eslint@9.15.0))(eslint@9.15.0)(typescript@5.6.3)
+ specifier: ^14.1.4
+ version: 14.1.4(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-vue@9.31.0(eslint@9.15.0))(eslint@9.15.0)(typescript@5.6.3)
'@vue/tsconfig':
specifier: ^0.6.0
version: 0.6.0(typescript@5.6.3)(vue@3.5.13(typescript@5.6.3))
@@ -54,18 +54,15 @@ importers:
npm-run-all2:
specifier: ^7.0.1
version: 7.0.1
- prettier:
- specifier: ^3.3.3
- version: 3.4.0
typescript:
specifier: ~5.6.3
version: 5.6.3
vite:
specifier: ^5.4.11
- version: 5.4.11(@types/node@22.9.4)
+ version: 5.4.11(@types/node@22.10.0)
vite-plugin-vue-devtools:
specifier: ^7.6.4
- version: 7.6.4(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.4))(vue@3.5.13(typescript@5.6.3))
+ version: 7.6.4(rollup@4.27.4)(vite@5.4.11(@types/node@22.10.0))(vue@3.5.13(typescript@5.6.3))
vue-tsc:
specifier: ^2.1.10
version: 2.1.10(typescript@5.6.3)
@@ -627,8 +624,8 @@ packages:
'@types/d3-time-format@4.0.3':
resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
- '@types/d3-time@3.0.3':
- resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==}
+ '@types/d3-time@3.0.4':
+ resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
'@types/d3-timer@3.0.2':
resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
@@ -651,11 +648,11 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@types/node@22.9.4':
- resolution: {integrity: sha512-d9RWfoR7JC/87vj7n+PVTzGg9hDyuFjir3RxUHbjFSKNd9mpxbxwMEyaCim/ddCmy4IuW7HjTzF3g9p3EtWEOg==}
+ '@types/node@22.10.0':
+ resolution: {integrity: sha512-XC70cRZVElFHfIUB40FgZOBbgJYFKKMa5nb9lxcwYstFG/Mi+/Y0bGS+rs6Dmhmkpq4pnNiLiuZAbc02YCOnmA==}
- '@typescript-eslint/eslint-plugin@8.15.0':
- resolution: {integrity: sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==}
+ '@typescript-eslint/eslint-plugin@8.16.0':
+ resolution: {integrity: sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
@@ -665,8 +662,8 @@ packages:
typescript:
optional: true
- '@typescript-eslint/parser@8.15.0':
- resolution: {integrity: sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==}
+ '@typescript-eslint/parser@8.16.0':
+ resolution: {integrity: sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -675,12 +672,12 @@ packages:
typescript:
optional: true
- '@typescript-eslint/scope-manager@8.15.0':
- resolution: {integrity: sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==}
+ '@typescript-eslint/scope-manager@8.16.0':
+ resolution: {integrity: sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/type-utils@8.15.0':
- resolution: {integrity: sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==}
+ '@typescript-eslint/type-utils@8.16.0':
+ resolution: {integrity: sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -689,12 +686,12 @@ packages:
typescript:
optional: true
- '@typescript-eslint/types@8.15.0':
- resolution: {integrity: sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==}
+ '@typescript-eslint/types@8.16.0':
+ resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.15.0':
- resolution: {integrity: sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==}
+ '@typescript-eslint/typescript-estree@8.16.0':
+ resolution: {integrity: sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '*'
@@ -702,8 +699,8 @@ packages:
typescript:
optional: true
- '@typescript-eslint/utils@8.15.0':
- resolution: {integrity: sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==}
+ '@typescript-eslint/utils@8.16.0':
+ resolution: {integrity: sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -712,8 +709,8 @@ packages:
typescript:
optional: true
- '@typescript-eslint/visitor-keys@8.15.0':
- resolution: {integrity: sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==}
+ '@typescript-eslint/visitor-keys@8.16.0':
+ resolution: {integrity: sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@vitejs/plugin-vue@5.2.0':
@@ -889,8 +886,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001683:
- resolution: {integrity: sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==}
+ caniuse-lite@1.0.30001684:
+ resolution: {integrity: sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1086,8 +1083,8 @@ packages:
delaunator@5.0.1:
resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
- electron-to-chromium@1.5.64:
- resolution: {integrity: sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==}
+ electron-to-chromium@1.5.65:
+ resolution: {integrity: sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==}
engine.io-client@6.6.2:
resolution: {integrity: sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==}
@@ -1416,8 +1413,8 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- magic-string@0.30.13:
- resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==}
+ magic-string@0.30.14:
+ resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==}
memorystream@0.3.1:
resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
@@ -1697,8 +1694,8 @@ packages:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
- ts-api-utils@1.4.1:
- resolution: {integrity: sha512-5RU2/lxTA3YUZxju61HO2U6EoZLvBLtmV2mbTvqyu4a/7s7RmJPT+1YekhMVsQhznRWk/czIwDUg+V8Q9ZuG4w==}
+ ts-api-utils@1.4.2:
+ resolution: {integrity: sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==}
engines: {node: '>=16'}
peerDependencies:
typescript: '>=4.2.0'
@@ -1714,8 +1711,8 @@ packages:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
- typescript-eslint@8.15.0:
- resolution: {integrity: sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==}
+ typescript-eslint@8.16.0:
+ resolution: {integrity: sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1729,8 +1726,8 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
- undici-types@6.19.8:
- resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
@@ -1769,8 +1766,8 @@ packages:
peerDependencies:
vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0
- vite-plugin-vue-inspector@5.2.0:
- resolution: {integrity: sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==}
+ vite-plugin-vue-inspector@5.3.0:
+ resolution: {integrity: sha512-F6JNRUOrZl8FaUCTxPhsOLn2ka7N7Sz9ppxmmEwpybVBDYnhelbNnnlZpeFPc4ULnxbitSi8b0V2C0KT3CjReg==}
peerDependencies:
vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0
@@ -2364,7 +2361,7 @@ snapshots:
'@types/d3-scale@4.0.8':
dependencies:
- '@types/d3-time': 3.0.3
+ '@types/d3-time': 3.0.4
'@types/d3-selection@3.0.11': {}
@@ -2374,7 +2371,7 @@ snapshots:
'@types/d3-time-format@4.0.3': {}
- '@types/d3-time@3.0.3': {}
+ '@types/d3-time@3.0.4': {}
'@types/d3-timer@3.0.2': {}
@@ -2414,7 +2411,7 @@ snapshots:
'@types/d3-scale-chromatic': 3.0.3
'@types/d3-selection': 3.0.11
'@types/d3-shape': 3.1.6
- '@types/d3-time': 3.0.3
+ '@types/d3-time': 3.0.4
'@types/d3-time-format': 4.0.3
'@types/d3-timer': 3.0.2
'@types/d3-transition': 3.0.9
@@ -2426,34 +2423,34 @@ snapshots:
'@types/json-schema@7.0.15': {}
- '@types/node@22.9.4':
+ '@types/node@22.10.0':
dependencies:
- undici-types: 6.19.8
+ undici-types: 6.20.0
- '@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)':
+ '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.15.0(eslint@9.15.0)(typescript@5.6.3)
- '@typescript-eslint/scope-manager': 8.15.0
- '@typescript-eslint/type-utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3)
- '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3)
- '@typescript-eslint/visitor-keys': 8.15.0
+ '@typescript-eslint/parser': 8.16.0(eslint@9.15.0)(typescript@5.6.3)
+ '@typescript-eslint/scope-manager': 8.16.0
+ '@typescript-eslint/type-utils': 8.16.0(eslint@9.15.0)(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.16.0(eslint@9.15.0)(typescript@5.6.3)
+ '@typescript-eslint/visitor-keys': 8.16.0
eslint: 9.15.0
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
- ts-api-utils: 1.4.1(typescript@5.6.3)
+ ts-api-utils: 1.4.2(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3)':
+ '@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.15.0
- '@typescript-eslint/types': 8.15.0
- '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3)
- '@typescript-eslint/visitor-keys': 8.15.0
+ '@typescript-eslint/scope-manager': 8.16.0
+ '@typescript-eslint/types': 8.16.0
+ '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3)
+ '@typescript-eslint/visitor-keys': 8.16.0
debug: 4.3.7
eslint: 9.15.0
optionalDependencies:
@@ -2461,60 +2458,60 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.15.0':
+ '@typescript-eslint/scope-manager@8.16.0':
dependencies:
- '@typescript-eslint/types': 8.15.0
- '@typescript-eslint/visitor-keys': 8.15.0
+ '@typescript-eslint/types': 8.16.0
+ '@typescript-eslint/visitor-keys': 8.16.0
- '@typescript-eslint/type-utils@8.15.0(eslint@9.15.0)(typescript@5.6.3)':
+ '@typescript-eslint/type-utils@8.16.0(eslint@9.15.0)(typescript@5.6.3)':
dependencies:
- '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3)
- '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3)
+ '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.16.0(eslint@9.15.0)(typescript@5.6.3)
debug: 4.3.7
eslint: 9.15.0
- ts-api-utils: 1.4.1(typescript@5.6.3)
+ ts-api-utils: 1.4.2(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.15.0': {}
+ '@typescript-eslint/types@8.16.0': {}
- '@typescript-eslint/typescript-estree@8.15.0(typescript@5.6.3)':
+ '@typescript-eslint/typescript-estree@8.16.0(typescript@5.6.3)':
dependencies:
- '@typescript-eslint/types': 8.15.0
- '@typescript-eslint/visitor-keys': 8.15.0
+ '@typescript-eslint/types': 8.16.0
+ '@typescript-eslint/visitor-keys': 8.16.0
debug: 4.3.7
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.6.3
- ts-api-utils: 1.4.1(typescript@5.6.3)
+ ts-api-utils: 1.4.2(typescript@5.6.3)
optionalDependencies:
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.15.0(eslint@9.15.0)(typescript@5.6.3)':
+ '@typescript-eslint/utils@8.16.0(eslint@9.15.0)(typescript@5.6.3)':
dependencies:
'@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0)
- '@typescript-eslint/scope-manager': 8.15.0
- '@typescript-eslint/types': 8.15.0
- '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.6.3)
+ '@typescript-eslint/scope-manager': 8.16.0
+ '@typescript-eslint/types': 8.16.0
+ '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.6.3)
eslint: 9.15.0
optionalDependencies:
typescript: 5.6.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.15.0':
+ '@typescript-eslint/visitor-keys@8.16.0':
dependencies:
- '@typescript-eslint/types': 8.15.0
+ '@typescript-eslint/types': 8.16.0
eslint-visitor-keys: 4.2.0
- '@vitejs/plugin-vue@5.2.0(vite@5.4.11(@types/node@22.9.4))(vue@3.5.13(typescript@5.6.3))':
+ '@vitejs/plugin-vue@5.2.0(vite@5.4.11(@types/node@22.10.0))(vue@3.5.13(typescript@5.6.3))':
dependencies:
- vite: 5.4.11(@types/node@22.9.4)
+ vite: 5.4.11(@types/node@22.10.0)
vue: 3.5.13(typescript@5.6.3)
'@volar/language-core@2.4.10':
@@ -2580,7 +2577,7 @@ snapshots:
'@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13
estree-walker: 2.0.2
- magic-string: 0.30.13
+ magic-string: 0.30.14
postcss: 8.4.49
source-map-js: 1.2.1
@@ -2596,14 +2593,14 @@ snapshots:
'@vue/devtools-api@6.6.4': {}
- '@vue/devtools-core@7.6.4(vite@5.4.11(@types/node@22.9.4))(vue@3.5.13(typescript@5.6.3))':
+ '@vue/devtools-core@7.6.4(vite@5.4.11(@types/node@22.10.0))(vue@3.5.13(typescript@5.6.3))':
dependencies:
'@vue/devtools-kit': 7.6.4
'@vue/devtools-shared': 7.6.4
mitt: 3.0.1
nanoid: 3.3.7
pathe: 1.1.2
- vite-hot-client: 0.2.3(vite@5.4.11(@types/node@22.9.4))
+ vite-hot-client: 0.2.3(vite@5.4.11(@types/node@22.10.0))
vue: 3.5.13(typescript@5.6.3)
transitivePeerDependencies:
- vite
@@ -2631,13 +2628,13 @@ snapshots:
transitivePeerDependencies:
- '@types/eslint'
- '@vue/eslint-config-typescript@14.1.4(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-vue@9.31.0(eslint@9.15.0))(eslint@9.15.0)(typescript@5.6.3)':
+ '@vue/eslint-config-typescript@14.1.4(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3))(eslint-plugin-vue@9.31.0(eslint@9.15.0))(eslint@9.15.0)(typescript@5.6.3)':
dependencies:
- '@typescript-eslint/eslint-plugin': 8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)
+ '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)
eslint: 9.15.0
eslint-plugin-vue: 9.31.0(eslint@9.15.0)
fast-glob: 3.3.2
- typescript-eslint: 8.15.0(eslint@9.15.0)(typescript@5.6.3)
+ typescript-eslint: 8.16.0(eslint@9.15.0)(typescript@5.6.3)
vue-eslint-parser: 9.4.3(eslint@9.15.0)
optionalDependencies:
typescript: 5.6.3
@@ -2731,8 +2728,8 @@ snapshots:
browserslist@4.24.2:
dependencies:
- caniuse-lite: 1.0.30001683
- electron-to-chromium: 1.5.64
+ caniuse-lite: 1.0.30001684
+ electron-to-chromium: 1.5.65
node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.2)
@@ -2742,7 +2739,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001683: {}
+ caniuse-lite@1.0.30001684: {}
chalk@4.1.2:
dependencies:
@@ -2948,7 +2945,7 @@ snapshots:
dependencies:
robust-predicates: 3.0.2
- electron-to-chromium@1.5.64: {}
+ electron-to-chromium@1.5.65: {}
engine.io-client@6.6.2:
dependencies:
@@ -3287,7 +3284,7 @@ snapshots:
dependencies:
yallist: 3.1.1
- magic-string@0.30.13:
+ magic-string@0.30.14:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
@@ -3544,7 +3541,7 @@ snapshots:
totalist@3.0.1: {}
- ts-api-utils@1.4.1(typescript@5.6.3):
+ ts-api-utils@1.4.2(typescript@5.6.3):
dependencies:
typescript: 5.6.3
@@ -3556,11 +3553,11 @@ snapshots:
type-fest@0.20.2: {}
- typescript-eslint@8.15.0(eslint@9.15.0)(typescript@5.6.3):
+ typescript-eslint@8.16.0(eslint@9.15.0)(typescript@5.6.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.15.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)
- '@typescript-eslint/parser': 8.15.0(eslint@9.15.0)(typescript@5.6.3)
- '@typescript-eslint/utils': 8.15.0(eslint@9.15.0)(typescript@5.6.3)
+ '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.16.0(eslint@9.15.0)(typescript@5.6.3))(eslint@9.15.0)(typescript@5.6.3)
+ '@typescript-eslint/parser': 8.16.0(eslint@9.15.0)(typescript@5.6.3)
+ '@typescript-eslint/utils': 8.16.0(eslint@9.15.0)(typescript@5.6.3)
eslint: 9.15.0
optionalDependencies:
typescript: 5.6.3
@@ -3569,7 +3566,7 @@ snapshots:
typescript@5.6.3: {}
- undici-types@6.19.8: {}
+ undici-types@6.20.0: {}
universalify@2.0.1: {}
@@ -3585,11 +3582,11 @@ snapshots:
util-deprecate@1.0.2: {}
- vite-hot-client@0.2.3(vite@5.4.11(@types/node@22.9.4)):
+ vite-hot-client@0.2.3(vite@5.4.11(@types/node@22.10.0)):
dependencies:
- vite: 5.4.11(@types/node@22.9.4)
+ vite: 5.4.11(@types/node@22.10.0)
- vite-plugin-inspect@0.8.8(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.4)):
+ vite-plugin-inspect@0.8.8(rollup@4.27.4)(vite@5.4.11(@types/node@22.10.0)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.3(rollup@4.27.4)
@@ -3600,28 +3597,28 @@ snapshots:
perfect-debounce: 1.0.0
picocolors: 1.1.1
sirv: 3.0.0
- vite: 5.4.11(@types/node@22.9.4)
+ vite: 5.4.11(@types/node@22.10.0)
transitivePeerDependencies:
- rollup
- supports-color
- vite-plugin-vue-devtools@7.6.4(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.4))(vue@3.5.13(typescript@5.6.3)):
+ vite-plugin-vue-devtools@7.6.4(rollup@4.27.4)(vite@5.4.11(@types/node@22.10.0))(vue@3.5.13(typescript@5.6.3)):
dependencies:
- '@vue/devtools-core': 7.6.4(vite@5.4.11(@types/node@22.9.4))(vue@3.5.13(typescript@5.6.3))
+ '@vue/devtools-core': 7.6.4(vite@5.4.11(@types/node@22.10.0))(vue@3.5.13(typescript@5.6.3))
'@vue/devtools-kit': 7.6.4
'@vue/devtools-shared': 7.6.4
execa: 8.0.1
sirv: 3.0.0
- vite: 5.4.11(@types/node@22.9.4)
- vite-plugin-inspect: 0.8.8(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.4))
- vite-plugin-vue-inspector: 5.2.0(vite@5.4.11(@types/node@22.9.4))
+ vite: 5.4.11(@types/node@22.10.0)
+ vite-plugin-inspect: 0.8.8(rollup@4.27.4)(vite@5.4.11(@types/node@22.10.0))
+ vite-plugin-vue-inspector: 5.3.0(vite@5.4.11(@types/node@22.10.0))
transitivePeerDependencies:
- '@nuxt/kit'
- rollup
- supports-color
- vue
- vite-plugin-vue-inspector@5.2.0(vite@5.4.11(@types/node@22.9.4)):
+ vite-plugin-vue-inspector@5.3.0(vite@5.4.11(@types/node@22.10.0)):
dependencies:
'@babel/core': 7.26.0
'@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0)
@@ -3631,18 +3628,18 @@ snapshots:
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0)
'@vue/compiler-dom': 3.5.13
kolorist: 1.8.0
- magic-string: 0.30.13
- vite: 5.4.11(@types/node@22.9.4)
+ magic-string: 0.30.14
+ vite: 5.4.11(@types/node@22.10.0)
transitivePeerDependencies:
- supports-color
- vite@5.4.11(@types/node@22.9.4):
+ vite@5.4.11(@types/node@22.10.0):
dependencies:
esbuild: 0.21.5
postcss: 8.4.49
rollup: 4.27.4
optionalDependencies:
- '@types/node': 22.9.4
+ '@types/node': 22.10.0
fsevents: 2.3.3
vscode-uri@3.0.8: {}
diff --git a/pi/ui/src/components/UWBVisualization.vue b/pi/ui/src/components/UWBVisualization.vue
index 217ec07..f33493d 100644
--- a/pi/ui/src/components/UWBVisualization.vue
+++ b/pi/ui/src/components/UWBVisualization.vue
@@ -16,7 +16,7 @@ interface AnchorConfig {
export default defineComponent({
name: 'UWBVisualization',
setup() {
- const backendUrl = import.meta.env.VITE_BACKEND_URL || 'http://localhost:5000';
+ const backendUrl = import.meta.env.VITE_API_URL || window.location.origin;
const socket = inject('socket') as Socket;
const uwbData = ref([]);
diff --git a/pi/ui/src/main.ts b/pi/ui/src/main.ts
index 57cfd44..6c8739c 100644
--- a/pi/ui/src/main.ts
+++ b/pi/ui/src/main.ts
@@ -9,7 +9,7 @@ import router from './router';
const app = createApp(App);
-const backendUrl = import.meta.env.VITE_BACKEND_URL || 'http://localhost:5000';
+const backendUrl = import.meta.env.VITE_API_URL || window.location.origin;
const socket: Socket = io(backendUrl, { transports: ['websocket'] });
app.provide('socket', socket);
diff --git a/pi/ui/vite.config.ts b/pi/ui/vite.config.ts
index 6c1b071..65a696c 100644
--- a/pi/ui/vite.config.ts
+++ b/pi/ui/vite.config.ts
@@ -1,9 +1,30 @@
import { fileURLToPath, URL } from 'node:url';
+import os from 'os';
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueDevTools from 'vite-plugin-vue-devtools';
+function getLocalIP() {
+ const networkInterfaces = os.networkInterfaces();
+
+ for (const interfaceName in networkInterfaces) {
+ const interfaceInfo = networkInterfaces[interfaceName];
+
+ if (!interfaceInfo) {
+ continue;
+ }
+
+ for (const info of interfaceInfo) {
+ if (info.family === 'IPv4' && !info.internal) {
+ return info.address;
+ }
+ }
+ }
+
+ return 'localhost'; // Fallback to localhost if no external IP is found
+}
+
// https://vite.dev/config/
export default defineConfig({
plugins: [
@@ -11,5 +32,8 @@ export default defineConfig({
vueDevTools(),
],
resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } },
- server: { proxy: { '/api': 'http://localhost:5000' } },
+ server: {
+ proxy: { '/api': 'http://localhost:5000' },
+ host: getLocalIP()
+ },
});