alessandro trinca tornidor commited on
Commit
9fdcfb3
·
1 Parent(s): 2ee94fb

ci: change tsconfig to node24, add vitest coverage support with its pnpm command

Browse files
.gitignore CHANGED
@@ -103,6 +103,7 @@ nosetests.xml
103
  coverage.xml
104
  *.cover
105
  .hypothesis/
 
106
 
107
  # Translations
108
  *.mo
 
103
  coverage.xml
104
  *.cover
105
  .hypothesis/
106
+ static/coverage/
107
 
108
  # Translations
109
  *.mo
static/package.json CHANGED
@@ -7,6 +7,8 @@
7
  "preview": "vite preview --port 5173",
8
  "test": "vitest run",
9
  "test:watch": "vitest",
 
 
10
  "lint:fix": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-pattern .gitignore",
11
  "build:tailwindcss": "pnpm dlx @tailwindcss/cli -i src/input.css -o dist/output.css"
12
  },
@@ -20,10 +22,12 @@
20
  },
21
  "devDependencies": {
22
  "@tailwindcss/cli": "^4.1.18",
23
- "@tsconfig/node20": "^20.1.9",
24
  "@types/leaflet": "^1.9.21",
25
  "@types/node": "^25.2.1",
26
  "@vitejs/plugin-vue": "^6.0.4",
 
 
27
  "@vue/test-utils": "^2.4.6",
28
  "@vue/tsconfig": "^0.8.1",
29
  "eslint": "^10.0.0",
@@ -42,5 +46,6 @@
42
  "onlyBuiltDependencies": [
43
  "snyk"
44
  ]
45
- }
 
46
  }
 
7
  "preview": "vite preview --port 5173",
8
  "test": "vitest run",
9
  "test:watch": "vitest",
10
+ "test:coverage": "vitest run --coverage",
11
+ "test:html_report": "vitest run --coverage && vite preview --outDir coverage",
12
  "lint:fix": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-pattern .gitignore",
13
  "build:tailwindcss": "pnpm dlx @tailwindcss/cli -i src/input.css -o dist/output.css"
14
  },
 
22
  },
23
  "devDependencies": {
24
  "@tailwindcss/cli": "^4.1.18",
25
+ "@tsconfig/node24": "^24.0.4",
26
  "@types/leaflet": "^1.9.21",
27
  "@types/node": "^25.2.1",
28
  "@vitejs/plugin-vue": "^6.0.4",
29
+ "@vitest/coverage-v8": "^4.0.18",
30
+ "@vitest/ui": "^4.0.18",
31
  "@vue/test-utils": "^2.4.6",
32
  "@vue/tsconfig": "^0.8.1",
33
  "eslint": "^10.0.0",
 
46
  "onlyBuiltDependencies": [
47
  "snyk"
48
  ]
49
+ },
50
+ "packageManager": "pnpm@10.29.1+sha512.48dae233635a645768a3028d19545cacc1688639eeb1f3734e42d6d6b971afbf22aa1ac9af52a173d9c3a20c15857cfa400f19994d79a2f626fcc73fccda9bbc"
51
  }
static/pnpm-lock.yaml CHANGED
@@ -27,9 +27,9 @@ importers:
27
  '@tailwindcss/cli':
28
  specifier: ^4.1.18
29
  version: 4.1.18
30
- '@tsconfig/node20':
31
- specifier: ^20.1.9
32
- version: 20.1.9
33
  '@types/leaflet':
34
  specifier: ^1.9.21
35
  version: 1.9.21
@@ -39,6 +39,12 @@ importers:
39
  '@vitejs/plugin-vue':
40
  specifier: ^6.0.4
41
  version: 6.0.4(vite@7.3.1(@types/node@25.2.1)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.27)
 
 
 
 
 
 
42
  '@vue/test-utils':
43
  specifier: ^2.4.6
44
  version: 2.4.6
@@ -65,7 +71,7 @@ importers:
65
  version: 7.3.1(@types/node@25.2.1)(jiti@2.6.1)(lightningcss@1.30.2)
66
  vitest:
67
  specifier: ^4.0.18
68
- version: 4.0.18(@types/node@25.2.1)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)
69
 
70
  packages:
71
 
@@ -98,6 +104,10 @@ packages:
98
  resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
99
  engines: {node: '>=6.9.0'}
100
 
 
 
 
 
101
  '@csstools/color-helpers@6.0.1':
102
  resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==}
103
  engines: {node: '>=20.19.0'}
@@ -469,6 +479,9 @@ packages:
469
  resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
470
  engines: {node: '>=14'}
471
 
 
 
 
472
  '@rolldown/pluginutils@1.0.0-rc.2':
473
  resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==}
474
 
@@ -706,8 +719,8 @@ packages:
706
  resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
707
  engines: {node: '>= 10'}
708
 
709
- '@tsconfig/node20@20.1.9':
710
- resolution: {integrity: sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==}
711
 
712
  '@turf/bbox@7.3.3':
713
  resolution: {integrity: sha512-1zNO/JUgDp0N+3EG5fG7+8EolE95OW1LD8ur0hRP0JK+lRyN0gAvJT7n1I9pu/NIqTa8x/zXxGRc1dcOdohYkg==}
@@ -785,6 +798,15 @@ packages:
785
  vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
786
  vue: ^3.2.25
787
 
 
 
 
 
 
 
 
 
 
788
  '@vitest/expect@4.0.18':
789
  resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
790
 
@@ -811,6 +833,11 @@ packages:
811
  '@vitest/spy@4.0.18':
812
  resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
813
 
 
 
 
 
 
814
  '@vitest/utils@4.0.18':
815
  resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
816
 
@@ -898,6 +925,9 @@ packages:
898
  resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
899
  engines: {node: '>=12'}
900
 
 
 
 
901
  balanced-match@1.0.2:
902
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
903
 
@@ -1111,6 +1141,9 @@ packages:
1111
  picomatch:
1112
  optional: true
1113
 
 
 
 
1114
  file-entry-cache@8.0.0:
1115
  resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
1116
  engines: {node: '>=16.0.0'}
@@ -1147,10 +1180,17 @@ packages:
1147
  graceful-fs@4.2.11:
1148
  resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1149
 
 
 
 
 
1150
  html-encoding-sniffer@6.0.0:
1151
  resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==}
1152
  engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
1153
 
 
 
 
1154
  http-proxy-agent@7.0.2:
1155
  resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
1156
  engines: {node: '>= 14'}
@@ -1188,6 +1228,18 @@ packages:
1188
  isexe@2.0.0:
1189
  resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1190
 
 
 
 
 
 
 
 
 
 
 
 
 
1191
  jackspeak@3.4.3:
1192
  resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
1193
 
@@ -1204,6 +1256,9 @@ packages:
1204
  resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
1205
  engines: {node: '>=14'}
1206
 
 
 
 
1207
  jsdom@28.0.0:
1208
  resolution: {integrity: sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA==}
1209
  engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
@@ -1326,6 +1381,13 @@ packages:
1326
  magic-string@0.30.21:
1327
  resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
1328
 
 
 
 
 
 
 
 
1329
  mdn-data@2.12.2:
1330
  resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
1331
 
@@ -1349,6 +1411,10 @@ packages:
1349
  resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1350
  engines: {node: '>=4'}
1351
 
 
 
 
 
1352
  ms@2.1.3:
1353
  resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1354
 
@@ -1486,6 +1552,10 @@ packages:
1486
  resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1487
  engines: {node: '>=14'}
1488
 
 
 
 
 
1489
  source-map-js@1.2.1:
1490
  resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1491
  engines: {node: '>=0.10.0'}
@@ -1515,6 +1585,10 @@ packages:
1515
  resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
1516
  engines: {node: '>=12'}
1517
 
 
 
 
 
1518
  sweepline-intersections@1.5.0:
1519
  resolution: {integrity: sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==}
1520
 
@@ -1553,6 +1627,10 @@ packages:
1553
  resolution: {integrity: sha512-nqpKFC53CgopKPjT6Wfb6tpIcZXHcI6G37hesvikhx0EmUGPkZrujRyAjgnmp1SHNgpQfKVanZ+KfpANFt2Hxw==}
1554
  hasBin: true
1555
 
 
 
 
 
1556
  tough-cookie@6.0.0:
1557
  resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==}
1558
  engines: {node: '>=16'}
@@ -1760,6 +1838,8 @@ snapshots:
1760
  '@babel/helper-string-parser': 7.27.1
1761
  '@babel/helper-validator-identifier': 7.28.5
1762
 
 
 
1763
  '@csstools/color-helpers@6.0.1': {}
1764
 
1765
  '@csstools/css-calc@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
@@ -2012,6 +2092,8 @@ snapshots:
2012
  '@pkgjs/parseargs@0.11.0':
2013
  optional: true
2014
 
 
 
2015
  '@rolldown/pluginutils@1.0.0-rc.2': {}
2016
 
2017
  '@rollup/rollup-android-arm-eabi@4.57.1':
@@ -2162,7 +2244,7 @@ snapshots:
2162
  '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
2163
  '@tailwindcss/oxide-win32-x64-msvc': 4.1.18
2164
 
2165
- '@tsconfig/node20@20.1.9': {}
2166
 
2167
  '@turf/bbox@7.3.3':
2168
  dependencies:
@@ -2310,6 +2392,20 @@ snapshots:
2310
  vite: 7.3.1(@types/node@25.2.1)(jiti@2.6.1)(lightningcss@1.30.2)
2311
  vue: 3.5.27
2312
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2313
  '@vitest/expect@4.0.18':
2314
  dependencies:
2315
  '@standard-schema/spec': 1.1.0
@@ -2344,6 +2440,17 @@ snapshots:
2344
 
2345
  '@vitest/spy@4.0.18': {}
2346
 
 
 
 
 
 
 
 
 
 
 
 
2347
  '@vitest/utils@4.0.18':
2348
  dependencies:
2349
  '@vitest/pretty-format': 4.0.18
@@ -2441,6 +2548,12 @@ snapshots:
2441
 
2442
  assertion-error@2.0.1: {}
2443
 
 
 
 
 
 
 
2444
  balanced-match@1.0.2: {}
2445
 
2446
  bidi-js@1.0.3:
@@ -2674,6 +2787,8 @@ snapshots:
2674
  optionalDependencies:
2675
  picomatch: 4.0.3
2676
 
 
 
2677
  file-entry-cache@8.0.0:
2678
  dependencies:
2679
  flat-cache: 4.0.1
@@ -2713,12 +2828,16 @@ snapshots:
2713
 
2714
  graceful-fs@4.2.11: {}
2715
 
 
 
2716
  html-encoding-sniffer@6.0.0:
2717
  dependencies:
2718
  '@exodus/bytes': 1.11.0
2719
  transitivePeerDependencies:
2720
  - '@noble/hashes'
2721
 
 
 
2722
  http-proxy-agent@7.0.2:
2723
  dependencies:
2724
  agent-base: 7.1.4
@@ -2751,6 +2870,19 @@ snapshots:
2751
 
2752
  isexe@2.0.0: {}
2753
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2754
  jackspeak@3.4.3:
2755
  dependencies:
2756
  '@isaacs/cliui': 8.0.2
@@ -2769,6 +2901,8 @@ snapshots:
2769
 
2770
  js-cookie@3.0.5: {}
2771
 
 
 
2772
  jsdom@28.0.0:
2773
  dependencies:
2774
  '@acemir/cssom': 0.9.31
@@ -2877,6 +3011,16 @@ snapshots:
2877
  dependencies:
2878
  '@jridgewell/sourcemap-codec': 1.5.5
2879
 
 
 
 
 
 
 
 
 
 
 
2880
  mdn-data@2.12.2: {}
2881
 
2882
  minimatch@10.1.2:
@@ -2895,6 +3039,8 @@ snapshots:
2895
 
2896
  mri@1.2.0: {}
2897
 
 
 
2898
  ms@2.1.3: {}
2899
 
2900
  nanoid@3.3.11: {}
@@ -3036,6 +3182,12 @@ snapshots:
3036
 
3037
  signal-exit@4.1.0: {}
3038
 
 
 
 
 
 
 
3039
  source-map-js@1.2.1: {}
3040
 
3041
  splaytree-ts@1.0.2: {}
@@ -3064,6 +3216,10 @@ snapshots:
3064
  dependencies:
3065
  ansi-regex: 6.2.2
3066
 
 
 
 
 
3067
  sweepline-intersections@1.5.0:
3068
  dependencies:
3069
  tinyqueue: 2.0.3
@@ -3093,6 +3249,8 @@ snapshots:
3093
  dependencies:
3094
  tldts-core: 7.0.22
3095
 
 
 
3096
  tough-cookie@6.0.0:
3097
  dependencies:
3098
  tldts: 7.0.22
@@ -3131,7 +3289,7 @@ snapshots:
3131
  jiti: 2.6.1
3132
  lightningcss: 1.30.2
3133
 
3134
- vitest@4.0.18(@types/node@25.2.1)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2):
3135
  dependencies:
3136
  '@vitest/expect': 4.0.18
3137
  '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.2.1)(jiti@2.6.1)(lightningcss@1.30.2))
@@ -3155,6 +3313,7 @@ snapshots:
3155
  why-is-node-running: 2.3.0
3156
  optionalDependencies:
3157
  '@types/node': 25.2.1
 
3158
  jsdom: 28.0.0
3159
  transitivePeerDependencies:
3160
  - jiti
 
27
  '@tailwindcss/cli':
28
  specifier: ^4.1.18
29
  version: 4.1.18
30
+ '@tsconfig/node24':
31
+ specifier: ^24.0.4
32
+ version: 24.0.4
33
  '@types/leaflet':
34
  specifier: ^1.9.21
35
  version: 1.9.21
 
39
  '@vitejs/plugin-vue':
40
  specifier: ^6.0.4
41
  version: 6.0.4(vite@7.3.1(@types/node@25.2.1)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.27)
42
+ '@vitest/coverage-v8':
43
+ specifier: ^4.0.18
44
+ version: 4.0.18(vitest@4.0.18)
45
+ '@vitest/ui':
46
+ specifier: ^4.0.18
47
+ version: 4.0.18(vitest@4.0.18)
48
  '@vue/test-utils':
49
  specifier: ^2.4.6
50
  version: 2.4.6
 
71
  version: 7.3.1(@types/node@25.2.1)(jiti@2.6.1)(lightningcss@1.30.2)
72
  vitest:
73
  specifier: ^4.0.18
74
+ version: 4.0.18(@types/node@25.2.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)
75
 
76
  packages:
77
 
 
104
  resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
105
  engines: {node: '>=6.9.0'}
106
 
107
+ '@bcoe/v8-coverage@1.0.2':
108
+ resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
109
+ engines: {node: '>=18'}
110
+
111
  '@csstools/color-helpers@6.0.1':
112
  resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==}
113
  engines: {node: '>=20.19.0'}
 
479
  resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
480
  engines: {node: '>=14'}
481
 
482
+ '@polka/url@1.0.0-next.29':
483
+ resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
484
+
485
  '@rolldown/pluginutils@1.0.0-rc.2':
486
  resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==}
487
 
 
719
  resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
720
  engines: {node: '>= 10'}
721
 
722
+ '@tsconfig/node24@24.0.4':
723
+ resolution: {integrity: sha512-2A933l5P5oCbv6qSxHs7ckKwobs8BDAe9SJ/Xr2Hy+nDlwmLE1GhFh/g/vXGRZWgxBg9nX/5piDtHR9Dkw/XuA==}
724
 
725
  '@turf/bbox@7.3.3':
726
  resolution: {integrity: sha512-1zNO/JUgDp0N+3EG5fG7+8EolE95OW1LD8ur0hRP0JK+lRyN0gAvJT7n1I9pu/NIqTa8x/zXxGRc1dcOdohYkg==}
 
798
  vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
799
  vue: ^3.2.25
800
 
801
+ '@vitest/coverage-v8@4.0.18':
802
+ resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==}
803
+ peerDependencies:
804
+ '@vitest/browser': 4.0.18
805
+ vitest: 4.0.18
806
+ peerDependenciesMeta:
807
+ '@vitest/browser':
808
+ optional: true
809
+
810
  '@vitest/expect@4.0.18':
811
  resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==}
812
 
 
833
  '@vitest/spy@4.0.18':
834
  resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==}
835
 
836
+ '@vitest/ui@4.0.18':
837
+ resolution: {integrity: sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==}
838
+ peerDependencies:
839
+ vitest: 4.0.18
840
+
841
  '@vitest/utils@4.0.18':
842
  resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==}
843
 
 
925
  resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
926
  engines: {node: '>=12'}
927
 
928
+ ast-v8-to-istanbul@0.3.11:
929
+ resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==}
930
+
931
  balanced-match@1.0.2:
932
  resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
933
 
 
1141
  picomatch:
1142
  optional: true
1143
 
1144
+ fflate@0.8.2:
1145
+ resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
1146
+
1147
  file-entry-cache@8.0.0:
1148
  resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
1149
  engines: {node: '>=16.0.0'}
 
1180
  graceful-fs@4.2.11:
1181
  resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1182
 
1183
+ has-flag@4.0.0:
1184
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1185
+ engines: {node: '>=8'}
1186
+
1187
  html-encoding-sniffer@6.0.0:
1188
  resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==}
1189
  engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
1190
 
1191
+ html-escaper@2.0.2:
1192
+ resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
1193
+
1194
  http-proxy-agent@7.0.2:
1195
  resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
1196
  engines: {node: '>= 14'}
 
1228
  isexe@2.0.0:
1229
  resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1230
 
1231
+ istanbul-lib-coverage@3.2.2:
1232
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
1233
+ engines: {node: '>=8'}
1234
+
1235
+ istanbul-lib-report@3.0.1:
1236
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
1237
+ engines: {node: '>=10'}
1238
+
1239
+ istanbul-reports@3.2.0:
1240
+ resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
1241
+ engines: {node: '>=8'}
1242
+
1243
  jackspeak@3.4.3:
1244
  resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
1245
 
 
1256
  resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
1257
  engines: {node: '>=14'}
1258
 
1259
+ js-tokens@10.0.0:
1260
+ resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==}
1261
+
1262
  jsdom@28.0.0:
1263
  resolution: {integrity: sha512-KDYJgZ6T2TKdU8yBfYueq5EPG/EylMsBvCaenWMJb2OXmjgczzwveRCoJ+Hgj1lXPDyasvrgneSn4GBuR1hYyA==}
1264
  engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
 
1381
  magic-string@0.30.21:
1382
  resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
1383
 
1384
+ magicast@0.5.2:
1385
+ resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==}
1386
+
1387
+ make-dir@4.0.0:
1388
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
1389
+ engines: {node: '>=10'}
1390
+
1391
  mdn-data@2.12.2:
1392
  resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
1393
 
 
1411
  resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1412
  engines: {node: '>=4'}
1413
 
1414
+ mrmime@2.0.1:
1415
+ resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
1416
+ engines: {node: '>=10'}
1417
+
1418
  ms@2.1.3:
1419
  resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1420
 
 
1552
  resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1553
  engines: {node: '>=14'}
1554
 
1555
+ sirv@3.0.2:
1556
+ resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
1557
+ engines: {node: '>=18'}
1558
+
1559
  source-map-js@1.2.1:
1560
  resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1561
  engines: {node: '>=0.10.0'}
 
1585
  resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
1586
  engines: {node: '>=12'}
1587
 
1588
+ supports-color@7.2.0:
1589
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1590
+ engines: {node: '>=8'}
1591
+
1592
  sweepline-intersections@1.5.0:
1593
  resolution: {integrity: sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==}
1594
 
 
1627
  resolution: {integrity: sha512-nqpKFC53CgopKPjT6Wfb6tpIcZXHcI6G37hesvikhx0EmUGPkZrujRyAjgnmp1SHNgpQfKVanZ+KfpANFt2Hxw==}
1628
  hasBin: true
1629
 
1630
+ totalist@3.0.1:
1631
+ resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
1632
+ engines: {node: '>=6'}
1633
+
1634
  tough-cookie@6.0.0:
1635
  resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==}
1636
  engines: {node: '>=16'}
 
1838
  '@babel/helper-string-parser': 7.27.1
1839
  '@babel/helper-validator-identifier': 7.28.5
1840
 
1841
+ '@bcoe/v8-coverage@1.0.2': {}
1842
+
1843
  '@csstools/color-helpers@6.0.1': {}
1844
 
1845
  '@csstools/css-calc@3.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
 
2092
  '@pkgjs/parseargs@0.11.0':
2093
  optional: true
2094
 
2095
+ '@polka/url@1.0.0-next.29': {}
2096
+
2097
  '@rolldown/pluginutils@1.0.0-rc.2': {}
2098
 
2099
  '@rollup/rollup-android-arm-eabi@4.57.1':
 
2244
  '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
2245
  '@tailwindcss/oxide-win32-x64-msvc': 4.1.18
2246
 
2247
+ '@tsconfig/node24@24.0.4': {}
2248
 
2249
  '@turf/bbox@7.3.3':
2250
  dependencies:
 
2392
  vite: 7.3.1(@types/node@25.2.1)(jiti@2.6.1)(lightningcss@1.30.2)
2393
  vue: 3.5.27
2394
 
2395
+ '@vitest/coverage-v8@4.0.18(vitest@4.0.18)':
2396
+ dependencies:
2397
+ '@bcoe/v8-coverage': 1.0.2
2398
+ '@vitest/utils': 4.0.18
2399
+ ast-v8-to-istanbul: 0.3.11
2400
+ istanbul-lib-coverage: 3.2.2
2401
+ istanbul-lib-report: 3.0.1
2402
+ istanbul-reports: 3.2.0
2403
+ magicast: 0.5.2
2404
+ obug: 2.1.1
2405
+ std-env: 3.10.0
2406
+ tinyrainbow: 3.0.3
2407
+ vitest: 4.0.18(@types/node@25.2.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)
2408
+
2409
  '@vitest/expect@4.0.18':
2410
  dependencies:
2411
  '@standard-schema/spec': 1.1.0
 
2440
 
2441
  '@vitest/spy@4.0.18': {}
2442
 
2443
+ '@vitest/ui@4.0.18(vitest@4.0.18)':
2444
+ dependencies:
2445
+ '@vitest/utils': 4.0.18
2446
+ fflate: 0.8.2
2447
+ flatted: 3.3.3
2448
+ pathe: 2.0.3
2449
+ sirv: 3.0.2
2450
+ tinyglobby: 0.2.15
2451
+ tinyrainbow: 3.0.3
2452
+ vitest: 4.0.18(@types/node@25.2.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2)
2453
+
2454
  '@vitest/utils@4.0.18':
2455
  dependencies:
2456
  '@vitest/pretty-format': 4.0.18
 
2548
 
2549
  assertion-error@2.0.1: {}
2550
 
2551
+ ast-v8-to-istanbul@0.3.11:
2552
+ dependencies:
2553
+ '@jridgewell/trace-mapping': 0.3.31
2554
+ estree-walker: 3.0.3
2555
+ js-tokens: 10.0.0
2556
+
2557
  balanced-match@1.0.2: {}
2558
 
2559
  bidi-js@1.0.3:
 
2787
  optionalDependencies:
2788
  picomatch: 4.0.3
2789
 
2790
+ fflate@0.8.2: {}
2791
+
2792
  file-entry-cache@8.0.0:
2793
  dependencies:
2794
  flat-cache: 4.0.1
 
2828
 
2829
  graceful-fs@4.2.11: {}
2830
 
2831
+ has-flag@4.0.0: {}
2832
+
2833
  html-encoding-sniffer@6.0.0:
2834
  dependencies:
2835
  '@exodus/bytes': 1.11.0
2836
  transitivePeerDependencies:
2837
  - '@noble/hashes'
2838
 
2839
+ html-escaper@2.0.2: {}
2840
+
2841
  http-proxy-agent@7.0.2:
2842
  dependencies:
2843
  agent-base: 7.1.4
 
2870
 
2871
  isexe@2.0.0: {}
2872
 
2873
+ istanbul-lib-coverage@3.2.2: {}
2874
+
2875
+ istanbul-lib-report@3.0.1:
2876
+ dependencies:
2877
+ istanbul-lib-coverage: 3.2.2
2878
+ make-dir: 4.0.0
2879
+ supports-color: 7.2.0
2880
+
2881
+ istanbul-reports@3.2.0:
2882
+ dependencies:
2883
+ html-escaper: 2.0.2
2884
+ istanbul-lib-report: 3.0.1
2885
+
2886
  jackspeak@3.4.3:
2887
  dependencies:
2888
  '@isaacs/cliui': 8.0.2
 
2901
 
2902
  js-cookie@3.0.5: {}
2903
 
2904
+ js-tokens@10.0.0: {}
2905
+
2906
  jsdom@28.0.0:
2907
  dependencies:
2908
  '@acemir/cssom': 0.9.31
 
3011
  dependencies:
3012
  '@jridgewell/sourcemap-codec': 1.5.5
3013
 
3014
+ magicast@0.5.2:
3015
+ dependencies:
3016
+ '@babel/parser': 7.29.0
3017
+ '@babel/types': 7.29.0
3018
+ source-map-js: 1.2.1
3019
+
3020
+ make-dir@4.0.0:
3021
+ dependencies:
3022
+ semver: 7.7.4
3023
+
3024
  mdn-data@2.12.2: {}
3025
 
3026
  minimatch@10.1.2:
 
3039
 
3040
  mri@1.2.0: {}
3041
 
3042
+ mrmime@2.0.1: {}
3043
+
3044
  ms@2.1.3: {}
3045
 
3046
  nanoid@3.3.11: {}
 
3182
 
3183
  signal-exit@4.1.0: {}
3184
 
3185
+ sirv@3.0.2:
3186
+ dependencies:
3187
+ '@polka/url': 1.0.0-next.29
3188
+ mrmime: 2.0.1
3189
+ totalist: 3.0.1
3190
+
3191
  source-map-js@1.2.1: {}
3192
 
3193
  splaytree-ts@1.0.2: {}
 
3216
  dependencies:
3217
  ansi-regex: 6.2.2
3218
 
3219
+ supports-color@7.2.0:
3220
+ dependencies:
3221
+ has-flag: 4.0.0
3222
+
3223
  sweepline-intersections@1.5.0:
3224
  dependencies:
3225
  tinyqueue: 2.0.3
 
3249
  dependencies:
3250
  tldts-core: 7.0.22
3251
 
3252
+ totalist@3.0.1: {}
3253
+
3254
  tough-cookie@6.0.0:
3255
  dependencies:
3256
  tldts: 7.0.22
 
3289
  jiti: 2.6.1
3290
  lightningcss: 1.30.2
3291
 
3292
+ vitest@4.0.18(@types/node@25.2.1)(@vitest/ui@4.0.18)(jiti@2.6.1)(jsdom@28.0.0)(lightningcss@1.30.2):
3293
  dependencies:
3294
  '@vitest/expect': 4.0.18
3295
  '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.2.1)(jiti@2.6.1)(lightningcss@1.30.2))
 
3313
  why-is-node-running: 2.3.0
3314
  optionalDependencies:
3315
  '@types/node': 25.2.1
3316
+ '@vitest/ui': 4.0.18(vitest@4.0.18)
3317
  jsdom: 28.0.0
3318
  transitivePeerDependencies:
3319
  - jiti
static/tsconfig.node.json CHANGED
@@ -1,5 +1,5 @@
1
  {
2
- "extends": "@tsconfig/node20/tsconfig.json",
3
  "include": [
4
  "vite.config.*",
5
  "vitest.config.*",
 
1
  {
2
+ "extends": "@tsconfig/node24/tsconfig.json",
3
  "include": [
4
  "vite.config.*",
5
  "vitest.config.*",
static/tsconfig.vitest.json CHANGED
@@ -5,6 +5,6 @@
5
  "compilerOptions": {
6
  "composite": true,
7
  "lib": [],
8
- "types": ["node", "jsdom"]
9
  }
10
  }
 
5
  "compilerOptions": {
6
  "composite": true,
7
  "lib": [],
8
+ "types": ["node"]
9
  }
10
  }
static/vite.config.ts CHANGED
@@ -26,6 +26,19 @@ export default defineConfig(({mode}) => {
26
  test: {
27
  include: ['tests/**/*.{test,spec}.ts'],
28
  environment: 'jsdom',
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  }
30
  }
31
  })
 
26
  test: {
27
  include: ['tests/**/*.{test,spec}.ts'],
28
  environment: 'jsdom',
29
+ coverage: {
30
+ provider: 'v8',
31
+ reporter: ['text', 'html'],
32
+ include: ['src/**/*.{ts,vue}'],
33
+ exclude: ['src/**/*.d.ts', 'src/main.ts'],
34
+
35
+ thresholds: {
36
+ branches: 70,
37
+ lines: 70,
38
+ functions: 70,
39
+ statements: 70,
40
+ }
41
+ },
42
  }
43
  }
44
  })