From a0b06a1b3c4c775273552f1d2f56679c310fbc21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDygimantas=20Ar=C5=ABna?= Date: Wed, 18 Dec 2024 13:50:55 +0200 Subject: [PATCH 1/4] Fix some of TS typing issues --- package-lock.json | 191 +++++++++++++++++- package.json | 6 +- .../interaction/OlInteractionLink.vue | 2 +- src/components/layers/OlLayerGroup.vue | 2 +- src/components/map/OlFeature.vue | 6 +- src/components/map/OlGeoLocation.vue | 2 +- src/components/map/OlGeolocation.vue | 2 +- src/components/map/OlMap.vue | 4 +- .../mapControls/OlFullScreenControl.vue | 3 +- .../mapControls/OlFullscreenControl.vue | 3 +- .../mapControls/OlPrintDialogControl.vue | 5 +- .../mapControls/OlPrintdialogControl.vue | 5 +- src/components/sources/OlSourceCluster.vue | 4 +- src/components/sources/OlSourceVector.vue | 13 +- src/components/styles/OlStyleIcon.vue | 7 +- src/composables/useOpenLayersEvents.ts | 7 +- src/composables/usePropsAsObjectProperties.ts | 2 +- src/composables/useSource.ts | 3 +- 18 files changed, 225 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index cec42d87..014b2344 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,8 @@ "vite": "^5.3.5", "vite-plugin-dts": "^3.9.1", "vitepress": "1.3.1", - "vitest": "2.0.5" + "vitest": "2.0.5", + "vue-tsc": "^2.1.10" }, "engines": { "node": ">=18.0.0" @@ -2839,15 +2840,34 @@ } }, "node_modules/@volar/typescript": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", - "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz", + "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==", "dev": true, + "license": "MIT", "dependencies": { - "@volar/language-core": "1.11.1", - "path-browserify": "^1.0.1" + "@volar/language-core": "2.4.11", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" } }, + "node_modules/@volar/typescript/node_modules/@volar/language-core": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz", + "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.11" + } + }, + "node_modules/@volar/typescript/node_modules/@volar/source-map": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz", + "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@vue/compiler-core": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.35.tgz", @@ -2894,6 +2914,17 @@ "@vue/shared": "3.4.35" } }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, "node_modules/@vue/devtools-api": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.3.7.tgz", @@ -3317,6 +3348,13 @@ "@algolia/transporter": "4.22.1" } }, + "node_modules/alien-signals": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.2.2.tgz", + "integrity": "sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==", + "dev": true, + "license": "MIT" + }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -10781,6 +10819,48 @@ } } }, + "node_modules/vite-plugin-dts/node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/vite-plugin-dts/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vite-plugin-dts/node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, "node_modules/vite/node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -10898,6 +10978,13 @@ } } }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true, + "license": "MIT" + }, "node_modules/vue": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.35.tgz", @@ -11023,22 +11110,97 @@ } }, "node_modules/vue-tsc": { - "version": "1.8.27", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", - "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.1.10.tgz", + "integrity": "sha512-RBNSfaaRHcN5uqVqJSZh++Gy/YUzryuv9u1aFWhsammDJXNtUiJMNoJ747lZcQ68wUQFx6E73y4FY3D8E7FGMA==", "dev": true, + "license": "MIT", "dependencies": { - "@volar/typescript": "~1.11.1", - "@vue/language-core": "1.8.27", + "@volar/typescript": "~2.4.8", + "@vue/language-core": "2.1.10", "semver": "^7.5.4" }, "bin": { "vue-tsc": "bin/vue-tsc.js" }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/vue-tsc/node_modules/@volar/language-core": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz", + "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.11" + } + }, + "node_modules/vue-tsc/node_modules/@volar/source-map": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz", + "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-tsc/node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/vue-tsc/node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/vue-tsc/node_modules/@vue/language-core": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.10.tgz", + "integrity": "sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~2.4.8", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^0.2.0", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, "peerDependencies": { "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, + "node_modules/vue-tsc/node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "dev": true, + "license": "MIT" + }, "node_modules/vue-tsc/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -11051,6 +11213,13 @@ "node": ">=10" } }, + "node_modules/vue-tsc/node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, "node_modules/vue-tsc/node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", diff --git a/package.json b/package.json index f5649df1..dc562e3f 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,8 @@ "test:e2e:debug": "npm run test:e2e -- --debug --workers=1", "test:e2e:trace": "npm run test:e2e -- --trace on", "test:e2e:report": "playwright show-report", - "coverage": "vitest run --coverage" + "coverage": "vitest run --coverage", + "type-check": "vue-tsc --noEmit" }, "dependencies": { "@turf/buffer": "^7.0.0", @@ -130,6 +131,7 @@ "vite": "^5.3.5", "vite-plugin-dts": "^3.9.1", "vitepress": "1.3.1", - "vitest": "2.0.5" + "vitest": "2.0.5", + "vue-tsc": "^2.1.10" } } diff --git a/src/components/interaction/OlInteractionLink.vue b/src/components/interaction/OlInteractionLink.vue index aea4e1e0..e2d3f58b 100644 --- a/src/components/interaction/OlInteractionLink.vue +++ b/src/components/interaction/OlInteractionLink.vue @@ -23,7 +23,7 @@ defineOptions({ const props = withDefaults(defineProps(), { animate: true, - params: ["x", "y", "z", "r", "l"], + params: () => ["x", "y", "z", "r", "l"], replace: false, prefix: "", }); diff --git a/src/components/layers/OlLayerGroup.vue b/src/components/layers/OlLayerGroup.vue index 5567f70c..f6c1204f 100644 --- a/src/components/layers/OlLayerGroup.vue +++ b/src/components/layers/OlLayerGroup.vue @@ -38,7 +38,7 @@ const props = withDefaults( const map = inject("map"); const properties = usePropsAsObjectProperties(props); -const layerGroup = shallowRef(new LayerGroup(properties)); +const layerGroup = shallowRef(new LayerGroup(properties as Options)); useOpenLayersEvents(layerGroup, [ "change:extend", "change:layers", diff --git a/src/components/map/OlFeature.vue b/src/components/map/OlFeature.vue index 346d932a..da1c58d4 100644 --- a/src/components/map/OlFeature.vue +++ b/src/components/map/OlFeature.vue @@ -30,7 +30,7 @@ const props = withDefaults( ); const vectorSource = inject | null>("vectorSource"); -const vectorLayer = inject>> | null>( +const vectorLayer = inject>> | null>( "vectorLayer", null, ); @@ -41,7 +41,9 @@ const animation = inject | null>( null, ); -const feature = ref>(new Feature({ ...props.properties })); +const feature = ref>( + new Feature({ ...props.properties }), +) as Ref>; watch( () => props.properties, // Needed as props.properties is optional diff --git a/src/components/map/OlGeoLocation.vue b/src/components/map/OlGeoLocation.vue index 9c4d6be7..fb722182 100644 --- a/src/components/map/OlGeoLocation.vue +++ b/src/components/map/OlGeoLocation.vue @@ -33,7 +33,7 @@ const props = withDefaults(defineProps(), { const properties = usePropsAsObjectProperties(props); -const geoLoc = computed(() => new Geolocation(properties)); +const geoLoc = computed(() => new Geolocation(properties as Options)); useOpenLayersEvents(geoLoc, [ "change:accuracy", diff --git a/src/components/map/OlGeolocation.vue b/src/components/map/OlGeolocation.vue index 9c4d6be7..fb722182 100644 --- a/src/components/map/OlGeolocation.vue +++ b/src/components/map/OlGeolocation.vue @@ -33,7 +33,7 @@ const props = withDefaults(defineProps(), { const properties = usePropsAsObjectProperties(props); -const geoLoc = computed(() => new Geolocation(properties)); +const geoLoc = computed(() => new Geolocation(properties as Options)); useOpenLayersEvents(geoLoc, [ "change:accuracy", diff --git a/src/components/map/OlMap.vue b/src/components/map/OlMap.vue index a5ecaea5..e4d8e7fb 100644 --- a/src/components/map/OlMap.vue +++ b/src/components/map/OlMap.vue @@ -43,8 +43,8 @@ const properties = usePropsAsObjectProperties({ }); const mapRef = ref(undefined); -let map: Map = - props.instance || new Map({ ...properties, instance: undefined }); +let map: Map | undefined = + props.instance || new Map({ ...(properties as MapOptions) }); watch( properties, diff --git a/src/components/mapControls/OlFullScreenControl.vue b/src/components/mapControls/OlFullScreenControl.vue index 38a95d8a..7ad7d3d4 100644 --- a/src/components/mapControls/OlFullScreenControl.vue +++ b/src/components/mapControls/OlFullScreenControl.vue @@ -4,6 +4,7 @@ diff --git a/src/components/styles/OlStyleStroke.vue b/src/components/styles/OlStyleStroke.vue index e8b03862..20dbc15a 100644 --- a/src/components/styles/OlStyleStroke.vue +++ b/src/components/styles/OlStyleStroke.vue @@ -2,36 +2,19 @@