From a11fa47540b472bef07fa9ad07400f9450025dcf Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Thu, 6 Aug 2026 11:57:53 -0300 Subject: [PATCH 01/23] core: frontend: Add a vue-tsc type-check script and bump TypeScript to 5.4.5 tsconfig.json already sets "moduleResolution": "bundler", which only exists in TypeScript 5.0+, so the pinned ~4.9.5 could not even parse its own config from the CLI. Editors were papering over this with their own bundled TS 5.x. Adds vue-tsc so .vue single-file components can be type-checked, exposed as a non-gating `type-check` script. CI is deliberately left alone; the script is for local use until the existing errors are fixed. Also drops the vestigial "webpack-env" type, left over from the vue-cli days and no longer installed or used anywhere in src. Co-authored-by: Cursor --- core/frontend/bun.lockb | Bin 464362 -> 474431 bytes core/frontend/package.json | 4 +- core/frontend/tsconfig.json | 1 - core/frontend/yarn.lock | 149 +++++++++++++++++++++++++++++++++++- 4 files changed, 148 insertions(+), 6 deletions(-) diff --git a/core/frontend/bun.lockb b/core/frontend/bun.lockb index b74d69f312da3c35c04a8f5cf524139245ed2b65..4aabf49f45eb46e0fab5cd24fad7a5acd04b78c4 100755 GIT binary patch delta 76484 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 diff --git a/core/frontend/package.json b/core/frontend/package.json index 00b12e0440..b5b63cf892 100644 --- a/core/frontend/package.json +++ b/core/frontend/package.json @@ -12,6 +12,7 @@ "build": "NODE_ENV=production vite build", "serve": "echo 'This is a preview server for testing the built website. Please use `dev` command over `serve`.\nStarting preview server in 5 seconds..\n';sleep 5; vite preview", "lint": "eslint --max-warnings=0 --ext .js,.vue --ignore-path .gitignore --ignore-pattern src/components/vue-tour src && stylelint 'src/**/*.{vue,css,scss}'", + "type-check": "vue-tsc --noEmit", "lint:css": "stylelint 'src/**/*.{vue,css,scss}'", "lint:css:fix": "stylelint 'src/**/*.{vue,css,scss}' --fix" }, @@ -96,7 +97,7 @@ "stylelint-config-recommended-vue": "^1.6.1", "stylelint-config-standard": "^40.0.0", "stylelint-config-standard-scss": "^17.0.0", - "typescript": "~4.9.5", + "typescript": "5.4.5", "unplugin-vue-components": "^0.25.2", "vite": "3", "vite-plugin-compression": "^0.5.1", @@ -104,6 +105,7 @@ "vite-plugin-wasm": "^3.4.1", "vue-cli-plugin-vuetify": "~2.4.1", "vue-template-babel-compiler": "^2.0.0", + "vue-tsc": "2.0.29", "vuetify-loader": "^1.7.0", "workbox-build": "7.0.0" } diff --git a/core/frontend/tsconfig.json b/core/frontend/tsconfig.json index 2d1ac1dabe..10cf69c0c4 100644 --- a/core/frontend/tsconfig.json +++ b/core/frontend/tsconfig.json @@ -15,7 +15,6 @@ "baseUrl": ".", "experimentalDecorators": true, "types": [ - "webpack-env", "vite/client" ], "paths": { diff --git a/core/frontend/yarn.lock b/core/frontend/yarn.lock index e6424fcd9d..d0b5f3ee8c 100644 --- a/core/frontend/yarn.lock +++ b/core/frontend/yarn.lock @@ -330,6 +330,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== + "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" @@ -345,6 +350,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== +"@babel/helper-validator-identifier@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" + integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== + "@babel/helper-validator-option@^7.21.0": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" @@ -403,6 +413,13 @@ dependencies: "@babel/types" "^7.27.3" +"@babel/parser@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.8.tgz#9653716a2f10c677b98fbc63d4bfb000c302cf17" + integrity sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA== + dependencies: + "@babel/types" "^7.29.8" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -1079,6 +1096,14 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" +"@babel/types@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.8.tgz#1229eef31d85156d70fa3f4cd859376d0eaf6863" + integrity sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg== + dependencies: + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@cacheable/memory@^2.0.7": version "2.0.7" resolved "https://registry.yarnpkg.com/@cacheable/memory/-/memory-2.0.7.tgz#1e066dc543b7c6797d0d230ce23d90898aca14c7" @@ -2051,6 +2076,46 @@ resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.10.2.tgz#d718479e2789d8a94b63e00f23f1898ba239253a" integrity sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw== +"@volar/language-core@2.4.28", "@volar/language-core@~2.4.0-alpha.18": + version "2.4.28" + resolved "https://registry.yarnpkg.com/@volar/language-core/-/language-core-2.4.28.tgz#c21f365a91c1dffe8bd7264fd491770c8d74fef3" + integrity sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ== + dependencies: + "@volar/source-map" "2.4.28" + +"@volar/source-map@2.4.28": + version "2.4.28" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-2.4.28.tgz#b40254e8c96199e5f1e0796777c593c617ad270e" + integrity sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ== + +"@volar/typescript@~2.4.0-alpha.18": + version "2.4.28" + resolved "https://registry.yarnpkg.com/@volar/typescript/-/typescript-2.4.28.tgz#83f86356e84eb101b8081a44c104f2f2ced8411f" + integrity sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw== + dependencies: + "@volar/language-core" "2.4.28" + path-browserify "^1.0.1" + vscode-uri "^3.0.8" + +"@vue/compiler-core@3.5.41": + version "3.5.41" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.41.tgz#82a4012d8b420f5a62c1658a72d16f7d1edf11aa" + integrity sha512-q0Xtv/F9w2YO/7htQhtiL+Ev2WCJbe5N2hc+XfgyKkEKqWpSxknmT8QOuGdEKNdjPq0c3F7rNpFkTo3Kfrm7pg== + dependencies: + "@babel/parser" "^7.29.8" + "@vue/shared" "3.5.41" + entities "^7.0.1" + estree-walker "^2.0.2" + source-map-js "^1.2.1" + +"@vue/compiler-dom@^3.4.0": + version "3.5.41" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.41.tgz#1029f75de09c665a0a92c6156463754192acb361" + integrity sha512-oKacVfNglLvGjnS6BXOlGL7EyG2h8X03pqXCjzotRZUaXGjbrTJUnVAQjrCqUnS+lyu31nwQjZY/d817GmCnfw== + dependencies: + "@vue/compiler-core" "3.5.41" + "@vue/shared" "3.5.41" + "@vue/compiler-sfc@2.7.14": version "2.7.14" resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd" @@ -2060,6 +2125,14 @@ postcss "^8.4.14" source-map "^0.6.1" +"@vue/compiler-vue2@^2.7.16": + version "2.7.16" + resolved "https://registry.yarnpkg.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz#2ba837cbd3f1b33c2bc865fbe1a3b53fb611e249" + integrity sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A== + dependencies: + de-indent "^1.0.2" + he "^1.2.0" + "@vue/eslint-config-airbnb@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@vue/eslint-config-airbnb/-/eslint-config-airbnb-7.0.0.tgz#eb61c44f96ce17b57dd866a4086bdf757c869e40" @@ -2095,6 +2168,25 @@ "@typescript-eslint/parser" "^5.59.1" vue-eslint-parser "^9.1.1" +"@vue/language-core@2.0.29": + version "2.0.29" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-2.0.29.tgz#19462d786cd7a1c21dbe575b46970a57094e0357" + integrity sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ== + dependencies: + "@volar/language-core" "~2.4.0-alpha.18" + "@vue/compiler-dom" "^3.4.0" + "@vue/compiler-vue2" "^2.7.16" + "@vue/shared" "^3.4.0" + computeds "^0.0.1" + minimatch "^9.0.3" + muggle-string "^0.4.1" + path-browserify "^1.0.1" + +"@vue/shared@3.5.41", "@vue/shared@^3.4.0": + version "3.5.41" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.41.tgz#ac476497f74495f7525087270849841756555cf2" + integrity sha512-IOnwSCma8j+9xJT6b8H0dEYidC80NsYmNMlZxRsukYcSoGaDBohog5hDxzeUXdFeGWFA++vWvxqOmrr96VlqMA== + "@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5": version "1.11.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.5.tgz#6e818036b94548c1fb53b754b5cae3c9b208281c" @@ -2842,6 +2934,11 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== +computeds@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e" + integrity sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2983,6 +3080,11 @@ date-fns@^2.23.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + debug@4, debug@^4.3.1: version "4.4.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" @@ -3212,6 +3314,11 @@ entities@^4.2.0, entities@^4.4.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +entities@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.1.tgz#26e8a88889db63417dcb9a1e79a3f1bc92b5976b" + integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA== + env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -4570,6 +4677,11 @@ hasown@^2.0.0, hasown@^2.0.2: dependencies: function-bind "^1.1.2" +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + hookified@^1.14.0, hookified@^1.15.0: version "1.15.1" resolved "https://registry.yarnpkg.com/hookified/-/hookified-1.15.1.tgz#b1fafeaa5489cdc29cb85546a8f837ed4ffbbcb6" @@ -5750,6 +5862,11 @@ ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +muggle-string@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/muggle-string/-/muggle-string-0.4.1.tgz#3b366bd43b32f809dc20659534dd30e7c8a0d328" + integrity sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ== + nanoid@^3.3.11: version "3.3.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" @@ -6038,6 +6155,11 @@ parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -6589,6 +6711,11 @@ semver@^7.1.2, semver@^7.3.5, semver@^7.3.6, semver@^7.3.7, semver@^7.3.8: dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -7277,10 +7404,10 @@ typed-duration@^2.0.0: resolved "https://registry.yarnpkg.com/typed-duration/-/typed-duration-2.0.0.tgz#dd51de7adddbd0023c3ac7ca15226fa54007b5a5" integrity sha512-XTOtfRR/l2hkCjFANwqu/IdLq17jBPts49tnxXc+Oc2ewngECupdu4FEH2H9hQHginRfOXCZ39tb9+pVcBlTcQ== -typescript@~4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== unbox-primitive@^1.0.2: version "1.0.2" @@ -7490,6 +7617,11 @@ vite@3: optionalDependencies: fsevents "~2.3.2" +vscode-uri@^3.0.8: + version "3.1.0" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.1.0.tgz#dd09ec5a66a38b5c3fffc774015713496d14e09c" + integrity sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ== + vue-apexcharts@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/vue-apexcharts/-/vue-apexcharts-1.6.2.tgz#0547826067f97e8ea67ca9423e524eb6669746ad" @@ -7564,6 +7696,15 @@ vue-tour@^2.0.0: jump.js "^1.0.2" vue "^2.6.12" +vue-tsc@2.0.29: + version "2.0.29" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-2.0.29.tgz#bf7e9605af9fadec7fd6037d242217f5c6ad2c3b" + integrity sha512-MHhsfyxO3mYShZCGYNziSbc63x7cQ5g9kvijV7dRe1TTXBRLxXyL0FnXWpUF1xII2mJ86mwYpYsUmMwkmerq7Q== + dependencies: + "@volar/typescript" "~2.4.0-alpha.18" + "@vue/language-core" "2.0.29" + semver "^7.5.4" + vue@^2.6.11, vue@^2.6.12: version "2.7.14" resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17" From 397d6434e1d2f17a61909c360e7025e73e50083a Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Wed, 8 Jul 2026 16:44:26 -0300 Subject: [PATCH 02/23] core: frontend: fix vuex-module-decorators typing under TypeScript 5 Under TS5's stricter decorator resolution, `@Module({...})` binds to the void-returning overload, producing TS1238 on every Vuex store. Introduce a small DynamicModule helper that wraps Module and casts the result to a ClassDecorator, and use it (aliased as Module) across all stores. Also removes a stray bare `@Module` decorator that was duplicated on top of the `@Module({...})` factory in the notifications and video stores. Co-authored-by: Cursor --- core/frontend/src/store/ardupilot_sensors.ts | 5 +++-- core/frontend/src/store/autopilot.ts | 4 +++- core/frontend/src/store/autopilot_manager.ts | 3 ++- core/frontend/src/store/beacon.ts | 4 +++- core/frontend/src/store/bridget.ts | 4 +++- core/frontend/src/store/commander.ts | 4 +++- core/frontend/src/store/customization.ts | 4 +++- core/frontend/src/store/disk.ts | 4 +++- core/frontend/src/store/ethernet.ts | 4 +++- core/frontend/src/store/frontend.ts | 4 +++- core/frontend/src/store/helper.ts | 4 +++- core/frontend/src/store/mavlink.ts | 4 +++- core/frontend/src/store/nmea-injector.ts | 4 +++- core/frontend/src/store/notifications.ts | 6 +++--- core/frontend/src/store/pardal.ts | 3 ++- core/frontend/src/store/ping.ts | 4 +++- core/frontend/src/store/records.ts | 4 +++- core/frontend/src/store/settings.ts | 4 +++- core/frontend/src/store/system-information.ts | 3 ++- core/frontend/src/store/video.ts | 5 +++-- core/frontend/src/store/wifi.ts | 4 +++- core/frontend/src/utils/vuex.ts | 8 ++++++++ 22 files changed, 68 insertions(+), 25 deletions(-) create mode 100644 core/frontend/src/utils/vuex.ts diff --git a/core/frontend/src/store/ardupilot_sensors.ts b/core/frontend/src/store/ardupilot_sensors.ts index 8aed47f329..8f0fe23571 100644 --- a/core/frontend/src/store/ardupilot_sensors.ts +++ b/core/frontend/src/store/ardupilot_sensors.ts @@ -1,8 +1,9 @@ import { - getModule, - Module, VuexModule, + getModule, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import store from '@/store' import autopilot_data from "./autopilot" import { Dictionary } from "@/types/common" diff --git a/core/frontend/src/store/autopilot.ts b/core/frontend/src/store/autopilot.ts index 11930e836f..e6dba4d4b9 100644 --- a/core/frontend/src/store/autopilot.ts +++ b/core/frontend/src/store/autopilot.ts @@ -1,7 +1,9 @@ import { - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import { MavAutopilot, MavType } from '@/libs/MAVLink2Rest/mavlink2rest-ts/messages/mavlink2rest-enum' import { Message as M2R } from '@/libs/MAVLink2Rest/mavlink2rest-ts/messages/mavlink2rest-message' import store from '@/store' diff --git a/core/frontend/src/store/autopilot_manager.ts b/core/frontend/src/store/autopilot_manager.ts index dce925857b..8ea3a8abee 100644 --- a/core/frontend/src/store/autopilot_manager.ts +++ b/core/frontend/src/store/autopilot_manager.ts @@ -1,9 +1,10 @@ import { lte as sem_ver_lte } from 'semver' import { - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' import store from '@/store' +import { DynamicModule as Module } from '@/utils/vuex' import { AutopilotEndpoint, FirmwareInfo, FirmwareVehicleType, FlightController, SerialEndpoint, SITLFrame, diff --git a/core/frontend/src/store/beacon.ts b/core/frontend/src/store/beacon.ts index b3639f54cb..ac77eaf615 100644 --- a/core/frontend/src/store/beacon.ts +++ b/core/frontend/src/store/beacon.ts @@ -1,8 +1,10 @@ import { Action, - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import Notifier from '@/libs/notifier' import { OneMoreTime } from '@/one-more-time' import store from '@/store' diff --git a/core/frontend/src/store/bridget.ts b/core/frontend/src/store/bridget.ts index 2d33721df8..daee18867f 100644 --- a/core/frontend/src/store/bridget.ts +++ b/core/frontend/src/store/bridget.ts @@ -1,8 +1,10 @@ import { Action, - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import Notifier from '@/libs/notifier' import { OneMoreTime } from '@/one-more-time' import store from '@/store' diff --git a/core/frontend/src/store/commander.ts b/core/frontend/src/store/commander.ts index ab5c505408..338b4bdbf0 100644 --- a/core/frontend/src/store/commander.ts +++ b/core/frontend/src/store/commander.ts @@ -1,7 +1,9 @@ import { - Action, getModule, Module, Mutation, VuexModule, + Action, getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import Notifier from '@/libs/notifier' import store from '@/store' import { ReturnStruct, ShutdownType } from '@/types/commander' diff --git a/core/frontend/src/store/customization.ts b/core/frontend/src/store/customization.ts index be02a935ec..1a10f5abd4 100644 --- a/core/frontend/src/store/customization.ts +++ b/core/frontend/src/store/customization.ts @@ -1,8 +1,10 @@ import { Action, getModule, - Module, Mutation, VuexModule, + Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import Notifier from '@/libs/notifier' import store from '@/store' import { BrandingAsset, ModelEntry, ThemeStatus } from '@/types/customization' diff --git a/core/frontend/src/store/disk.ts b/core/frontend/src/store/disk.ts index ff06919dcd..7f14412597 100644 --- a/core/frontend/src/store/disk.ts +++ b/core/frontend/src/store/disk.ts @@ -1,7 +1,9 @@ import { - Action, Module, Mutation, VuexModule, getModule, + Action, Mutation, VuexModule, getModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import store from '@/store' import { DiskSpeedResult, DiskSpeedTestPoint, DiskUsageQuery, DiskUsageResponse } from '@/types/disk' import back_axios, { isBackendOffline } from '@/utils/api' diff --git a/core/frontend/src/store/ethernet.ts b/core/frontend/src/store/ethernet.ts index 19a0d09be9..7d515e5636 100644 --- a/core/frontend/src/store/ethernet.ts +++ b/core/frontend/src/store/ethernet.ts @@ -1,8 +1,10 @@ import { Action, - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import store from '@/store' import { DHCPServerDetails, EthernetInterface } from '@/types/ethernet' import { ethernet_service } from '@/types/frontend_services' diff --git a/core/frontend/src/store/frontend.ts b/core/frontend/src/store/frontend.ts index 7d4e365ef6..568d517016 100644 --- a/core/frontend/src/store/frontend.ts +++ b/core/frontend/src/store/frontend.ts @@ -1,9 +1,11 @@ import { AxiosResponse } from 'axios' import { nanoid } from 'nanoid' import { - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import store from '@/store' @Module({ diff --git a/core/frontend/src/store/helper.ts b/core/frontend/src/store/helper.ts index 77ef5adabb..726c38eb44 100644 --- a/core/frontend/src/store/helper.ts +++ b/core/frontend/src/store/helper.ts @@ -1,8 +1,10 @@ import { Action, - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import Notifier from '@/libs/notifier' import { OneMoreTime } from '@/one-more-time' import store from '@/store' diff --git a/core/frontend/src/store/mavlink.ts b/core/frontend/src/store/mavlink.ts index 007d920594..7c82b468d3 100644 --- a/core/frontend/src/store/mavlink.ts +++ b/core/frontend/src/store/mavlink.ts @@ -1,8 +1,10 @@ import Vue from 'vue' import { - Action, getModule, Module, Mutation, VuexModule, + Action, getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import mavlink2rest from '@/libs/MAVLink2Rest' import Listener from '@/libs/MAVLink2Rest/Listener' import store from '@/store' diff --git a/core/frontend/src/store/nmea-injector.ts b/core/frontend/src/store/nmea-injector.ts index 106de037f4..0cea482ab9 100644 --- a/core/frontend/src/store/nmea-injector.ts +++ b/core/frontend/src/store/nmea-injector.ts @@ -1,7 +1,9 @@ import { - Action, getModule, Module, Mutation, VuexModule, + Action, getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import Notifier from '@/libs/notifier' import store from '@/store' import { nmea_injector_service } from '@/types/frontend_services' diff --git a/core/frontend/src/store/notifications.ts b/core/frontend/src/store/notifications.ts index 67da42abf7..baa6034aac 100644 --- a/core/frontend/src/store/notifications.ts +++ b/core/frontend/src/store/notifications.ts @@ -1,7 +1,9 @@ import { - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import store from '@/store' import { CumulatedNotification, Notification, NotificationLevel, @@ -12,8 +14,6 @@ import { store, name: 'notifications', }) - -@Module class NotificationsStore extends VuexModule { notifications: Notification[] = [] diff --git a/core/frontend/src/store/pardal.ts b/core/frontend/src/store/pardal.ts index d4bb5cb324..10b3a984fc 100644 --- a/core/frontend/src/store/pardal.ts +++ b/core/frontend/src/store/pardal.ts @@ -1,10 +1,11 @@ import { Action, getModule, - Module, VuexModule, } from "vuex-module-decorators" +import { DynamicModule as Module } from "@/utils/vuex" + import Notifier from "@/libs/notifier" import store from "@/store" import { pardal_service } from "@/types/frontend_services" diff --git a/core/frontend/src/store/ping.ts b/core/frontend/src/store/ping.ts index 7def6f310a..4a65d50ded 100644 --- a/core/frontend/src/store/ping.ts +++ b/core/frontend/src/store/ping.ts @@ -1,8 +1,10 @@ import { Action, - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import Notifier from '@/libs/notifier' import { OneMoreTime } from '@/one-more-time' import store from '@/store' diff --git a/core/frontend/src/store/records.ts b/core/frontend/src/store/records.ts index 250539c7dc..afc911d3df 100644 --- a/core/frontend/src/store/records.ts +++ b/core/frontend/src/store/records.ts @@ -1,7 +1,9 @@ import { - Action, Module, Mutation, VuexModule, getModule, + Action, Mutation, VuexModule, getModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import store from '@/store' import { ProcessingFile, RecordingFile } from '@/types/records' import back_axios, { isBackendOffline } from '@/utils/api' diff --git a/core/frontend/src/store/settings.ts b/core/frontend/src/store/settings.ts index d5ec8efd2e..fd1ae851e3 100644 --- a/core/frontend/src/store/settings.ts +++ b/core/frontend/src/store/settings.ts @@ -1,8 +1,10 @@ import Vue from 'vue' import { - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import store from '@/store' import beacon from '@/store/beacon' import { castString } from '@/utils/helper_functions' diff --git a/core/frontend/src/store/system-information.ts b/core/frontend/src/store/system-information.ts index f284c4f8c3..e961a41b1e 100644 --- a/core/frontend/src/store/system-information.ts +++ b/core/frontend/src/store/system-information.ts @@ -1,11 +1,12 @@ import { Action, getModule, - Module, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import Notifier from '@/libs/notifier' import { OneMoreTime } from '@/one-more-time' import store from '@/store' diff --git a/core/frontend/src/store/video.ts b/core/frontend/src/store/video.ts index fe6a67b397..afa5ba293a 100644 --- a/core/frontend/src/store/video.ts +++ b/core/frontend/src/store/video.ts @@ -1,8 +1,10 @@ import { StatusCodes } from 'http-status-codes' import { - Action, getModule, Module, Mutation, VuexModule, + Action, getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import message_manager, { MessageLevel } from '@/libs/message-manager' import Notifier from '@/libs/notifier' import { OneMoreTime } from '@/one-more-time' @@ -43,7 +45,6 @@ thumbnailState.task.setDelay(1000) store, name: 'video', }) -@Module class VideoStore extends VuexModule { API_URL = '/mavlink-camera-manager' diff --git a/core/frontend/src/store/wifi.ts b/core/frontend/src/store/wifi.ts index 3dc2220f80..1510768adf 100644 --- a/core/frontend/src/store/wifi.ts +++ b/core/frontend/src/store/wifi.ts @@ -1,7 +1,9 @@ import { - getModule, Module, Mutation, VuexModule, + getModule, Mutation, VuexModule, } from 'vuex-module-decorators' +import { DynamicModule as Module } from '@/utils/vuex' + import store from '@/store' import { Network, NetworkCredentials, SavedNetwork, WifiStatus, HotspotStatus diff --git a/core/frontend/src/utils/vuex.ts b/core/frontend/src/utils/vuex.ts new file mode 100644 index 0000000000..eba4167b2f --- /dev/null +++ b/core/frontend/src/utils/vuex.ts @@ -0,0 +1,8 @@ +import { Module } from 'vuex-module-decorators' +import { ModuleOptions } from 'vuex-module-decorators/dist/types/moduleoptions' + +// vuex-module-decorators@1.2.0 is incompatible with TypeScript 5's stricter decorator resolution: +// `Module({...})` binds to the void-returning overload, so the result must be cast to a ClassDecorator. +export function DynamicModule(options: ModuleOptions): ClassDecorator { + return Module(options) as unknown as ClassDecorator +} From cfca3e6f1d5679ca57a0847c5adebfe0c5be66d4 Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Wed, 8 Jul 2026 16:44:48 -0300 Subject: [PATCH 03/23] core: frontend: fix asset module shim type errors - Drop "moduleDetection": "force", which forced every file to be a module and turned the ambient `declare module '*.ext'` shims into illegal augmentations. - Remove the redundant *.svg/*.jpg/*.png shims that are already provided by vite/client (they conflicted on the default export). - Remove the unused "webpack-env" types entry (leftover from the vue-cli setup; the package isn't installed and nothing in src uses it). Co-authored-by: Cursor --- core/frontend/src/types/shims-general.ts | 15 --------------- core/frontend/tsconfig.json | 1 - 2 files changed, 16 deletions(-) diff --git a/core/frontend/src/types/shims-general.ts b/core/frontend/src/types/shims-general.ts index 984a241bb5..7651acdf90 100644 --- a/core/frontend/src/types/shims-general.ts +++ b/core/frontend/src/types/shims-general.ts @@ -1,18 +1,3 @@ -declare module '*.svg' { - const value: string - export default value -} - -declare module '*.jpg' { - const value: string - export default value -} - -declare module '*.png' { - const value: string - export default value -} - declare module '*.glb' { const value: string export default value diff --git a/core/frontend/tsconfig.json b/core/frontend/tsconfig.json index 10cf69c0c4..99685281df 100644 --- a/core/frontend/tsconfig.json +++ b/core/frontend/tsconfig.json @@ -6,7 +6,6 @@ "jsx": "preserve", "importHelpers": true, "moduleResolution": "bundler", - "moduleDetection": "force", "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, From cdd1519f9fdac26ec239790b3de82fa9273ed5cb Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Wed, 8 Jul 2026 16:44:59 -0300 Subject: [PATCH 04/23] core: frontend: fix calibration preflight lookup object typing The inline lookup objects were inferred with only their two literal enum keys, so indexing them with the full PreflightCalibration union produced TS2339 for every other member. Annotate them as Record. Co-authored-by: Cursor --- .../components/vehiclesetup/calibration.ts | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/frontend/src/components/vehiclesetup/calibration.ts b/core/frontend/src/components/vehiclesetup/calibration.ts index 369b067c4f..d4ec820d93 100644 --- a/core/frontend/src/components/vehiclesetup/calibration.ts +++ b/core/frontend/src/components/vehiclesetup/calibration.ts @@ -65,30 +65,30 @@ class Calibrator { }, message: { type: MAVLinkType.COMMAND_LONG, - param1: { + param1: ({ [PreflightCalibration.GYROSCOPE]: 1, [PreflightCalibration.GYROSCOPE_TEMPERATURE]: 3, - }[type] || 0, + } as Record)[type] || 0, param2: type === PreflightCalibration.MAGNETOMETER ? 1 : 0, param3: type === PreflightCalibration.PRESSURE ? 1 : 0, - param4: { + param4: ({ [PreflightCalibration.RC]: 1, [PreflightCalibration.RC_TRIM]: 2, - }[type] || 0, - param5: { + } as Record)[type] || 0, + param5: ({ [PreflightCalibration.ACCELEROMETER]: 1, [PreflightCalibration.BOARD_LEVEL]: 2, [PreflightCalibration.ACCELEROMETER_TEMPERATURE]: 3, [PreflightCalibration.SIMPLE_ACCELEROMETER]: 4, - }[type] || 0, - param6: { + } as Record)[type] || 0, + param6: ({ [PreflightCalibration.COMPASS_MOTOR_INTERFERENCE]: 1, [PreflightCalibration.AIRPSEED]: 2, - }[type] || 0, - param7: { + } as Record)[type] || 0, + param7: ({ [PreflightCalibration.ESC]: 1, [PreflightCalibration.BAROMETER_TEMPERATURE]: 3, - }[type] || 0, + } as Record)[type] || 0, command: { type: MavCmd.MAV_CMD_PREFLIGHT_CALIBRATION, }, From 70851a0d24c1dcd7565bf1ddb75d76ec5e1fea4a Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Wed, 8 Jul 2026 16:56:42 -0300 Subject: [PATCH 05/23] core: frontend: type VersionCard image prop as Version The image prop was typed as Dictionary (and inferred as {}), so accessing .repository/.tag/.sha/.last_modified failed type-checking. Type it as the existing Version interface, which is what callers pass. Co-authored-by: Cursor --- .../src/components/version-chooser/VersionCard.vue | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/frontend/src/components/version-chooser/VersionCard.vue b/core/frontend/src/components/version-chooser/VersionCard.vue index 4a0ccb7485..21e1c4025a 100644 --- a/core/frontend/src/components/version-chooser/VersionCard.vue +++ b/core/frontend/src/components/version-chooser/VersionCard.vue @@ -138,8 +138,8 @@ import Vue, { PropType } from 'vue' import WarningDialog from '@/components/common/WarningDialog.vue' import settings from '@/libs/settings' import helper from '@/store/helper' -import { Dictionary } from '@/types/common' import { InternetConnectionState } from '@/types/helper' +import { Version } from '@/types/version-chooser' import { DEFAULT_REMOTE_IMAGE, getFactoryVersion } from '@/utils/version_chooser' import SpinningLogo from '../common/SpinningLogo.vue' @@ -180,8 +180,12 @@ export default Vue.extend({ default: false, }, image: { - type: Object as PropType>, - default() { return {} }, + type: Object as PropType, + default(): Version { + return { + repository: '', tag: '', last_modified: '', sha: null, + } + }, }, remote: { type: Boolean, From 2580ffc52b5e69265e058ea710068f71d5833350 Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Wed, 8 Jul 2026 17:00:31 -0300 Subject: [PATCH 06/23] core: frontend: fix QueryTarget.BestMatching typo in zenoh queries QueryTarget has no BestMatching member (it is BEST_MATCHING), so these queries were passing `undefined` as the target. Caught by type-checking. Co-authored-by: Cursor --- core/frontend/src/components/cloud/CloudTrayMenu.vue | 2 +- core/frontend/src/components/kraken/KrakenManager.ts | 2 +- .../src/components/zenoh-inspector/ZenohNetwork.vue | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/frontend/src/components/cloud/CloudTrayMenu.vue b/core/frontend/src/components/cloud/CloudTrayMenu.vue index 97928fbf0b..9ab10ba314 100644 --- a/core/frontend/src/components/cloud/CloudTrayMenu.vue +++ b/core/frontend/src/components/cloud/CloudTrayMenu.vue @@ -448,7 +448,7 @@ export default Vue.extend({ try { const receiver = await this.file_sync_session.get(topic, { - target: QueryTarget.BestMatching, + target: QueryTarget.BEST_MATCHING, }) if (!receiver) { diff --git a/core/frontend/src/components/kraken/KrakenManager.ts b/core/frontend/src/components/kraken/KrakenManager.ts index 0d136115de..77fe01c110 100644 --- a/core/frontend/src/components/kraken/KrakenManager.ts +++ b/core/frontend/src/components/kraken/KrakenManager.ts @@ -396,7 +396,7 @@ export async function finalizeExtension( */ export async function getHistoricalLogsForExtension(identifier: string, timeout: number): Promise { const queryKey = `kraken/extension/logs/request?extension_name=${identifier}` - return await zenoh.query(queryKey, QueryTarget.BestMatching, timeout) + return await zenoh.query(queryKey, QueryTarget.BEST_MATCHING, timeout) } /** diff --git a/core/frontend/src/components/zenoh-inspector/ZenohNetwork.vue b/core/frontend/src/components/zenoh-inspector/ZenohNetwork.vue index 17c4498a63..6e0c41771a 100644 --- a/core/frontend/src/components/zenoh-inspector/ZenohNetwork.vue +++ b/core/frontend/src/components/zenoh-inspector/ZenohNetwork.vue @@ -296,7 +296,7 @@ export default Vue.extend({ async queryRouters() { try { const receiver = await this.session!.get('@/*/router', { - target: QueryTarget.BestMatching, + target: QueryTarget.BEST_MATCHING, }) if (!receiver) { @@ -377,7 +377,7 @@ export default Vue.extend({ async queryPeers() { try { const receiver = await this.session!.get('@/*/peer', { - target: QueryTarget.BestMatching, + target: QueryTarget.BEST_MATCHING, }) if (!receiver) { @@ -423,7 +423,7 @@ export default Vue.extend({ const keyexpr = `@/${zid}/${whatami}` const receiver = await this.session!.get(keyexpr, { - target: QueryTarget.BestMatching, + target: QueryTarget.BEST_MATCHING, }) if (!receiver) { From 9c7c7fabaaec0901c36f57e3154b42cce4da846c Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Wed, 8 Jul 2026 17:01:15 -0300 Subject: [PATCH 07/23] core: frontend: remove broken v-bind="attrs" in Network skeleton loader `attrs` is undefined on this component (a leftover from Vuetify's skeleton-loader slot example), so the binding was a no-op. Caught by type-checking. Co-authored-by: Cursor --- core/frontend/src/components/system-information/Network.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/core/frontend/src/components/system-information/Network.vue b/core/frontend/src/components/system-information/Network.vue index b80322f978..2a347573a3 100644 --- a/core/frontend/src/components/system-information/Network.vue +++ b/core/frontend/src/components/system-information/Network.vue @@ -11,7 +11,6 @@ Date: Wed, 8 Jul 2026 17:12:00 -0300 Subject: [PATCH 08/23] frontend: fix vue type augmentation resolution under bundler moduleResolution Vue 2.7's package `exports` map prevents `moduleResolution: "bundler"` from resolving `vue/types/vue` as a `declare module` augmentation target. This silently dropped the `interface Vue` augmentations from vue-router ($route/$router) and vuetify ($vuetify), producing ~26 spurious TS2339 errors on `this.$route`/`this.$router`/`this.$vuetify`. Add an explicit `paths` mapping for `vue/types/vue` so those ambient augmentations merge into the real `interface Vue` again. Co-authored-by: Cursor --- core/frontend/tsconfig.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/frontend/tsconfig.json b/core/frontend/tsconfig.json index 99685281df..ea6f078d3b 100644 --- a/core/frontend/tsconfig.json +++ b/core/frontend/tsconfig.json @@ -19,6 +19,9 @@ "paths": { "@/*": [ "src/*" + ], + "vue/types/vue": [ + "node_modules/vue/types/vue.d.ts" ] }, "lib": [ From 504d7b35e2252d8c961a691045d297ac9c2fd902 Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Wed, 8 Jul 2026 17:19:04 -0300 Subject: [PATCH 09/23] frontend: add third-party type declarations for type-checking - Add @types/three (matching three@0.156) and map three addon subpaths and vuex to their declaration files (their exports maps hide types from bundler moduleResolution). - Add ambient module shims for colorthief and the local style/colors js. - Type OrientationPicker camera as PerspectiveCamera and widen GLTFLoader onError callbacks to unknown to match the loader signature. Co-authored-by: Cursor --- core/frontend/package.json | 1 + .../vehiclesetup/OrientationPicker.vue | 6 ++-- core/frontend/src/types/shims-general.ts | 6 ++++ core/frontend/tsconfig.json | 6 ++++ core/frontend/yarn.lock | 30 +++++++++++++++++++ 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/core/frontend/package.json b/core/frontend/package.json index b5b63cf892..ede7660ef0 100644 --- a/core/frontend/package.json +++ b/core/frontend/package.json @@ -78,6 +78,7 @@ "wifi-qr-code-generator": "^1.1.1" }, "devDependencies": { + "@types/three": "0.156.0", "@typescript-eslint/eslint-plugin": "^5.51.0", "@typescript-eslint/parser": "^5.51.0", "@vitejs/plugin-vue": "^1.6.1", diff --git a/core/frontend/src/components/vehiclesetup/OrientationPicker.vue b/core/frontend/src/components/vehiclesetup/OrientationPicker.vue index 73724226be..61a884c9a3 100644 --- a/core/frontend/src/components/vehiclesetup/OrientationPicker.vue +++ b/core/frontend/src/components/vehiclesetup/OrientationPicker.vue @@ -133,7 +133,7 @@ export default { ] as Rotation[], unsupportedRotation: new Rotation('UNSUPPORTED', 0, 0, 0, -1), object: undefined as THREE.Object3D | undefined, - camera: undefined as THREE.Camera | undefined, + camera: undefined as THREE.PerspectiveCamera | undefined, scene: undefined as THREE.Scene | undefined, renderer: undefined as THREE.WebGLRenderer | undefined, vehicle_obj: undefined as THREE.Object3D | undefined, @@ -365,7 +365,7 @@ export default { (progressEvent: ProgressEvent) => { console.debug('Loading progress:', progressEvent) }, - (error: ErrorEvent) => { + (error: unknown) => { console.error('An error occurred while loading the GLB model:', error) }, ) @@ -415,7 +415,7 @@ export default { (progressEvent: ProgressEvent) => { console.debug('Loading progress:', progressEvent.loaded, progressEvent.total) }, - (error: ErrorEvent) => { + (error: unknown) => { console.error('An error occurred while loading the GLB model:', error) }, ) diff --git a/core/frontend/src/types/shims-general.ts b/core/frontend/src/types/shims-general.ts index 7651acdf90..f66da7886b 100644 --- a/core/frontend/src/types/shims-general.ts +++ b/core/frontend/src/types/shims-general.ts @@ -8,3 +8,9 @@ declare module 'vue-tooltip-directive' declare module '@/assets/colors/default' declare module '@/assets/colors/blue_robotics' declare module '@/assets/colors/vuetify' + +declare module '@/style/colors/default' +declare module '@/style/colors/blue_robotics' +declare module '@/style/colors/vuetify' + +declare module 'colorthief' diff --git a/core/frontend/tsconfig.json b/core/frontend/tsconfig.json index ea6f078d3b..bc06e32120 100644 --- a/core/frontend/tsconfig.json +++ b/core/frontend/tsconfig.json @@ -22,6 +22,12 @@ ], "vue/types/vue": [ "node_modules/vue/types/vue.d.ts" + ], + "vuex": [ + "node_modules/vuex/types/index.d.ts" + ], + "three/examples/jsm/*": [ + "node_modules/@types/three/examples/jsm/*" ] }, "lib": [ diff --git a/core/frontend/yarn.lock b/core/frontend/yarn.lock index d0b5f3ee8c..1827e07dd7 100644 --- a/core/frontend/yarn.lock +++ b/core/frontend/yarn.lock @@ -1972,6 +1972,21 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/stats.js@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/stats.js/-/stats.js-0.17.4.tgz#1933e5ff153a23c7664487833198d685c22e791e" + integrity sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA== + +"@types/three@0.156.0": + version "0.156.0" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.156.0.tgz#cd49f2a12e858400962ea818d1e1c45e638141a8" + integrity sha512-733bXDSRdlrxqOmQuOmfC1UBRuJ2pREPk8sWnx9MtIJEVDQMx8U0NQO5MVVaOrjzDPyLI+cFPim2X/ss9v0+LQ== + dependencies: + "@types/stats.js" "*" + "@types/webxr" "*" + fflate "~0.6.10" + meshoptimizer "~0.18.1" + "@types/trusted-types@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" @@ -1982,6 +1997,11 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.1.tgz#98586dc36aee8dacc98cc396dbca8d0429647aa6" integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== +"@types/webxr@*": + version "0.5.24" + resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.24.tgz#734d5d90dadc5809a53e422726c60337fa2f4a44" + integrity sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg== + "@typescript-eslint/eslint-plugin@^5.51.0", "@typescript-eslint/eslint-plugin@^5.59.1": version "5.59.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.1.tgz#9b09ee1541bff1d2cebdcb87e7ce4a4003acde08" @@ -4092,6 +4112,11 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fflate@~0.6.10: + version "0.6.10" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.6.10.tgz#5f40f9659205936a2d18abf88b2e7781662b6d43" + integrity sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg== + fft.js@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/fft.js/-/fft.js-4.0.4.tgz#ffed83a397e58039141c804c1dbe1910dced8e6e" @@ -5591,6 +5616,11 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +meshoptimizer@~0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/meshoptimizer/-/meshoptimizer-0.18.1.tgz#cdb90907f30a7b5b1190facd3b7ee6b7087797d8" + integrity sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw== + micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" From 0499bfe2bd0b35d82d8bfce53409c1da00bf3c7c Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Wed, 8 Jul 2026 17:23:58 -0300 Subject: [PATCH 10/23] frontend: fix missing globals, namespaced imports and Dictionary type - Declare ambient require()/process.env globals (provided at build time by vue-template-babel-compiler and Vite's define). - Import GPS message types from the Message namespace in GpsTrayMenu. - Add the JournalResponse interface used by the system-information store. - Import Dictionary from @/types/common instead of the (unexported) vue-router internal type. Co-authored-by: Cursor --- .../frontend/src/components/health/GpsTrayMenu.vue | 14 +++++--------- .../parameter-editor/ParameterLoader.vue | 2 +- .../src/components/wizard/DefaultParamLoader.vue | 2 +- core/frontend/src/types/shims-general.ts | 8 ++++++++ .../src/types/system-information/journal.ts | 4 ++++ 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/core/frontend/src/components/health/GpsTrayMenu.vue b/core/frontend/src/components/health/GpsTrayMenu.vue index 447a289929..ec985322d8 100644 --- a/core/frontend/src/components/health/GpsTrayMenu.vue +++ b/core/frontend/src/components/health/GpsTrayMenu.vue @@ -83,11 +83,7 @@ import Vue, { markRaw } from 'vue' import mavlink2rest from '@/libs/MAVLink2Rest' import Listener from '@/libs/MAVLink2Rest/Listener' import { GpsFixType } from '@/libs/MAVLink2Rest/mavlink2rest-ts/messages/mavlink2rest-enum' -import { - GlobalPositionInt, - Gps2Raw, - GpsRawInt, -} from '@/libs/MAVLink2Rest/mavlink2rest-ts/messages/mavlink2rest-message' +import { Message } from '@/libs/MAVLink2Rest/mavlink2rest-ts/messages/mavlink2rest-message' import autopilot_data from '@/store/autopilot' export default Vue.extend({ @@ -104,8 +100,8 @@ export default Vue.extend({ time_limit_message: 20000, last_message_date: undefined as undefined | Date, gps_detected: false, - global_position_int: undefined as undefined | GlobalPositionInt, - gps_raw_int: undefined as undefined | GpsRawInt, + global_position_int: undefined as undefined | Message.GlobalPositionInt, + gps_raw_int: undefined as undefined | Message.GpsRawInt, listeners: [] as Listener[], } }, @@ -276,7 +272,7 @@ export default Vue.extend({ } this.last_message_date = new Date() - this.global_position_int = message?.message as GlobalPositionInt + this.global_position_int = message?.message as Message.GlobalPositionInt }).setFrequency(0)), ) @@ -288,7 +284,7 @@ export default Vue.extend({ } this.last_message_date = new Date() - this.gps_raw_int = message?.message as GpsRawInt | Gps2Raw + this.gps_raw_int = message?.message as Message.GpsRawInt | Message.Gps2Raw this.gps_detected = this.gps_raw_int?.fix_type?.type !== GpsFixType.GPS_FIX_TYPE_NO_GPS }).setFrequency(0)), ) diff --git a/core/frontend/src/components/parameter-editor/ParameterLoader.vue b/core/frontend/src/components/parameter-editor/ParameterLoader.vue index b62cba6d2a..f2c2bc0e1c 100755 --- a/core/frontend/src/components/parameter-editor/ParameterLoader.vue +++ b/core/frontend/src/components/parameter-editor/ParameterLoader.vue @@ -159,12 +159,12 @@