diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index abe469371f..2b10b2cce6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,6 +15,19 @@ on: - 'main' jobs: + typecheck-siteplan: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Install dependencies + run: npm ci + working-directory: web/siteplan + + - name: Run typecheck + run: npm run typecheck + working-directory: web/siteplan + test-siteplan: runs-on: ubuntu-latest steps: diff --git a/web/siteplan/package-lock.json b/web/siteplan/package-lock.json index 0ccb184718..b06e4cb4b1 100644 --- a/web/siteplan/package-lock.json +++ b/web/siteplan/package-lock.json @@ -38,7 +38,8 @@ "eslint-plugin-vue": "^10.8.0", "tslib": "^2.8.1", "typescript": "^6.0.3", - "vite": "^8.0.8" + "vite": "^8.0.8", + "vue-tsc": "^3.3.4" } }, "node_modules/@babel/generator": { @@ -1367,6 +1368,35 @@ "vue": "^3.2.25" } }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, "node_modules/@vue-macros/common": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.2.tgz", @@ -1467,6 +1497,22 @@ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.1.1.tgz", "integrity": "sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==" }, + "node_modules/@vue/language-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.4.tgz", + "integrity": "sha512-IuHqQ5zGGOE7CXP72VX6A42IVeIzYv4WAhO6arej11TRNqtdZfGyH8Yr2FOCaDX0dSQG+JwULLoFHGY1igYVjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.2.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + } + }, "node_modules/@vue/reactivity": { "version": "3.5.32", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.32.tgz", @@ -1563,6 +1609,13 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/alien-signals": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.2.1.tgz", + "integrity": "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==", + "dev": true, + "license": "MIT" + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -4429,6 +4482,13 @@ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.6.tgz", "integrity": "sha512-Tz11t3uKztEW5FEVZnj1ox8GKblWn+PvHY9TmJV5Mll2uHEwRdR/5Li1OlXoECjLYkApdhWy44ocONwXLiKO5A==" }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5500,6 +5560,13 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, "node_modules/vue": { "version": "3.5.32", "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz", @@ -5608,6 +5675,23 @@ "node": ">=6" } }, + "node_modules/vue-tsc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.3.4.tgz", + "integrity": "sha512-XA/JqmQwS2GZmfgpjOEGdrKwaTSEuPwxpHa7/t6f4yiGrJb3gVHTPb9wBfByMNZwQ+xDXs41b8gaS2DKsOozUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.3.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, "node_modules/vuex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", diff --git a/web/siteplan/package.json b/web/siteplan/package.json index 0993d52fc6..901b8a2e86 100644 --- a/web/siteplan/package.json +++ b/web/siteplan/package.json @@ -9,7 +9,8 @@ "build": "vite build --mode development", "build-prod": "vite build --mode production", "lint": "eslint src", - "test:e2e": "playwright test" + "test:e2e": "playwright test", + "typecheck": "vue-tsc --noEmit" }, "dependencies": { "@turf/boolean-disjoint": "^7.3.5", @@ -42,6 +43,7 @@ "eslint-plugin-vue": "^10.8.0", "tslib": "^2.8.1", "typescript": "^6.0.3", - "vite": "^8.0.8" + "vite": "^8.0.8", + "vue-tsc": "^3.3.4" } } diff --git a/web/siteplan/src/App.vue b/web/siteplan/src/App.vue index 76e0367e60..c04d14a57f 100644 --- a/web/siteplan/src/App.vue +++ b/web/siteplan/src/App.vue @@ -13,73 +13,67 @@ - diff --git a/web/siteplan/src/components/popup/PZBPopup.vue b/web/siteplan/src/components/popup/PZBPopup.vue index 6f2e664dc5..00a1baf918 100644 --- a/web/siteplan/src/components/popup/PZBPopup.vue +++ b/web/siteplan/src/components/popup/PZBPopup.vue @@ -19,13 +19,13 @@ - diff --git a/web/siteplan/src/components/popup/RouteInfo.vue b/web/siteplan/src/components/popup/RouteInfo.vue index cae88cc0ca..66f1b44b5d 100644 --- a/web/siteplan/src/components/popup/RouteInfo.vue +++ b/web/siteplan/src/components/popup/RouteInfo.vue @@ -22,26 +22,19 @@ - diff --git a/web/siteplan/src/components/popup/SignalPopup.vue b/web/siteplan/src/components/popup/SignalPopup.vue index b276b812a2..eec63151ba 100644 --- a/web/siteplan/src/components/popup/SignalPopup.vue +++ b/web/siteplan/src/components/popup/SignalPopup.vue @@ -16,49 +16,29 @@ - diff --git a/web/siteplan/src/components/popup/TrackLockPopup.vue b/web/siteplan/src/components/popup/TrackLockPopup.vue index bd9615acc9..afb23de76c 100644 --- a/web/siteplan/src/components/popup/TrackLockPopup.vue +++ b/web/siteplan/src/components/popup/TrackLockPopup.vue @@ -11,7 +11,7 @@