diff --git a/app/index.html b/app/index.html index 7507292..f1fe239 100644 --- a/app/index.html +++ b/app/index.html @@ -1,9 +1,12 @@ - +
- + diff --git a/app/package.json b/app/package.json index 26da4c2..bc121f9 100644 --- a/app/package.json +++ b/app/package.json @@ -1,51 +1,52 @@ { - "name": "app", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "dev:mock": "vite --mode MOCK", - "build": "cross-env FOR_EMBEDDED=true vite build", - "build:web": "cross-env FOR_EMBEDDED=false vite build --mode WEB", - "preview": "vite preview", - "test": "vitest", - "check": "svelte-check --tsconfig ./tsconfig.json", - "format": "prettier --plugin-search-dir . --write ." - }, - "devDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.2", - "@tsconfig/svelte": "^5.0.2", - "@types/three": "^0.160.0", - "@typescript-eslint/eslint-plugin": "^6.20.0", - "@typescript-eslint/parser": "^6.20.0", - "autoprefixer": "^10.4.17", - "cross-env": "^7.0.3", - "husky": "^9.0.7", - "lint-staged": "^15.2.0", - "postcss": "^8.4.33", - "prettier": "3.2.4", - "svelte": "^4.2.9", - "svelte-check": "^3.6.3", - "svelte-hero-icons": "^5.0.0", - "tailwindcss": "^3.4.1", - "tslib": "^2.6.2", - "typescript": "^5.3.3", - "vite": "^5.0.12", - "vite-plugin-compression": "^0.5.1", - "vite-plugin-singlefile": "^1.0.0", - "vitest": "^1.3.1" - }, - "dependencies": { - "nipplejs": "^0.10.1", - "svelte-routing": "^2.11.0", - "three": "^0.160.1", - "urdf-loader": "^0.12.1", - "uzip": "^0.20201231.0", - "xacro-parser": "^0.3.9" - }, - "lint-staged": { - "*.js": "eslint --cache --fix", - "*.{js,css,md,ts,svelte}": "prettier --write" - } + "name": "app", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "dev:mock": "vite --mode MOCK", + "build": "cross-env FOR_EMBEDDED=true vite build", + "build:web": "cross-env FOR_EMBEDDED=false vite build --mode WEB", + "preview": "vite preview", + "test": "vitest", + "check": "svelte-check --tsconfig ./tsconfig.json", + "format": "prettier --plugin-search-dir . --write ." + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.2", + "@tsconfig/svelte": "^5.0.2", + "@types/three": "^0.160.0", + "@typescript-eslint/eslint-plugin": "^6.20.0", + "@typescript-eslint/parser": "^6.20.0", + "autoprefixer": "^10.4.17", + "cross-env": "^7.0.3", + "husky": "^9.0.7", + "lint-staged": "^15.2.0", + "postcss": "^8.4.33", + "prettier": "3.2.4", + "svelte": "^4.2.9", + "svelte-check": "^3.6.3", + "svelte-hero-icons": "^5.0.0", + "tailwindcss": "^3.4.1", + "tslib": "^2.6.2", + "typescript": "^5.3.3", + "vite": "^5.0.12", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-singlefile": "^1.0.0", + "vitest": "^1.3.1" + }, + "dependencies": { + "nipplejs": "^0.10.1", + "prettier-plugin-svelte": "^3.2.1", + "svelte-routing": "^2.11.0", + "three": "^0.160.1", + "urdf-loader": "^0.12.1", + "uzip": "^0.20201231.0", + "xacro-parser": "^0.3.9" + }, + "lint-staged": { + "*.js": "eslint --cache --fix", + "*.{js,css,md,ts,svelte}": "prettier --write" + } } diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml index e55ac68..9b33dc4 100644 --- a/app/pnpm-lock.yaml +++ b/app/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: nipplejs: specifier: ^0.10.1 version: 0.10.1 + prettier-plugin-svelte: + specifier: ^3.2.1 + version: 3.2.1(prettier@3.2.4)(svelte@4.2.9) svelte-routing: specifier: ^2.11.0 version: 2.11.0 @@ -107,7 +110,6 @@ packages: dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.18 - dev: true /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} @@ -387,32 +389,26 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 - dev: true /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -589,7 +585,6 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true /@types/json-schema@7.0.12: resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} @@ -812,7 +807,6 @@ packages: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -879,7 +873,6 @@ packages: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} dependencies: dequal: 2.0.3 - dev: true /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} @@ -910,7 +903,6 @@ packages: resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} dependencies: dequal: 2.0.3 - dev: true /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1054,7 +1046,6 @@ packages: acorn: 8.11.3 estree-walker: 3.0.3 periscopic: 3.1.0 - dev: true /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} @@ -1106,7 +1097,6 @@ packages: dependencies: mdn-data: 2.0.30 source-map-js: 1.0.2 - dev: true /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -1145,7 +1135,6 @@ packages: /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - dev: true /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} @@ -1327,7 +1316,6 @@ packages: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 - dev: true /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -1644,7 +1632,6 @@ packages: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: '@types/estree': 1.0.5 - dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -1769,7 +1756,6 @@ packages: /locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} @@ -1811,11 +1797,9 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true /mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} - dev: true /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -2051,7 +2035,6 @@ packages: '@types/estree': 1.0.5 estree-walker: 3.0.3 is-reference: 3.0.2 - dev: true /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -2161,11 +2144,20 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prettier-plugin-svelte@3.2.1(prettier@3.2.4)(svelte@4.2.9): + resolution: {integrity: sha512-ENAPbIxASf2R79IZwgkG5sBdeNA9kLRlXVvKKmTXh79zWTy0KKoT86XO2pHrTitUPINd+iXWy12MRmgzKGVckA==} + peerDependencies: + prettier: ^3.0.0 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + dependencies: + prettier: 3.2.4 + svelte: 4.2.9 + dev: false + /prettier@3.2.4: resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} hasBin: true - dev: true /pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} @@ -2364,7 +2356,6 @@ packages: /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2572,7 +2563,6 @@ packages: locate-character: 3.0.0 magic-string: 0.30.5 periscopic: 3.1.0 - dev: true /tailwindcss@3.4.1: resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} diff --git a/app/src/App.svelte b/app/src/App.svelte index 032d8ee..47456fc 100644 --- a/app/src/App.svelte +++ b/app/src/App.svelte @@ -4,39 +4,37 @@ import TopBar from './components/TopBar.svelte'; import socketService from '$lib/services/socket-service'; import Controller from './routes/Controller.svelte'; - import fileService from '$lib/services/file-service'; - import Settings from './routes/Settings.svelte'; + import { fileService } from '$lib/services'; + import Settings from './routes/Settings.svelte'; import { jointNames, model } from '$lib/store'; import { loadModelAsync } from '$lib/utilities'; import { socketLocation } from '$lib/utilities'; import type { Result } from '$lib/utilities/result'; - export let url = window.location.pathname + export let url = window.location.pathname; onMount(async () => { socketService.connect(socketLocation); - registerFetchIntercept() - const modelRes = await loadModelAsync('/spot_micro.urdf.xacro') - - if (modelRes.isOk()) { - const [urdf, JOINT_NAME] = modelRes.inner - jointNames.set(JOINT_NAME) - model.set(urdf) - } else { - console.error(modelRes.inner, {"exception": modelRes.exception}) - } + registerFetchIntercept(); + const modelRes = await loadModelAsync('/spot_micro.urdf.xacro'); + + if (modelRes.isOk()) { + const [urdf, JOINT_NAME] = modelRes.inner; + jointNames.set(JOINT_NAME); + model.set(urdf); + } else { + console.error(modelRes.inner, { exception: modelRes.exception }); + } }); - const registerFetchIntercept = () => { - const { fetch: originalFetch } = window; - window.fetch = async (...args) => { - const [resource, config] = args; - let file: Result