├── .github └── workflows │ ├── example.yml │ └── test.yml ├── .gitignore ├── README.md ├── codecov.yml ├── example ├── index.html └── index.ts ├── package.json ├── pnpm-lock.yaml ├── screenshot.png ├── src ├── terrain.test.ts ├── terrain.ts └── worker.ts ├── tsconfig.json ├── vite.config.example.ts └── vite.config.js /.github/workflows/example.yml: -------------------------------------------------------------------------------- 1 | name: github pages 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | paths: 8 | - 'src/**' 9 | - 'example/**' 10 | workflow_dispatch: 11 | 12 | jobs: 13 | build-deploy: 14 | runs-on: ubuntu-22.04 15 | steps: 16 | - uses: actions/checkout@v2 17 | 18 | # Node.js環境のセットアップを行う 19 | - name: setup node 20 | uses: actions/setup-node@v1 21 | with: 22 | node-version: '22.x' 23 | 24 | - name: install pnpm 25 | run: npm install -g pnpm 26 | 27 | - name: install 28 | run: pnpm install 29 | 30 | - name: build 31 | run: pnpm build:example 32 | 33 | - name: add nojekyll 34 | run: touch ./demo/.nojekyll 35 | 36 | - name: deploy 37 | uses: peaceiris/actions-gh-pages@v3 38 | with: 39 | github_token: ${{ secrets.GITHUB_TOKEN }} 40 | publish_dir: ./demo 41 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - master 7 | paths: 8 | - 'src/**' 9 | - 'example/**' 10 | workflow_dispatch: 11 | 12 | jobs: 13 | test: 14 | runs-on: ubuntu-22.04 15 | steps: 16 | - uses: actions/checkout@v2 17 | 18 | - name: setup node 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: '22.x' 22 | 23 | - name: install pnpm 24 | run: npm install -g pnpm 25 | 26 | - name: install 27 | run: pnpm install 28 | 29 | - name: build 30 | run: pnpm build 31 | 32 | - name: install playwright 33 | run: pnpm exec playwright install 34 | 35 | - name: unittest 36 | run: pnpm test 37 | 38 | - name: Upload coverage reports to Codecov 39 | uses: codecov/codecov-action@v5 40 | with: 41 | token: ${{ secrets.CODECOV_TOKEN }} 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | types 12 | dist 13 | dist-ssr 14 | *.local 15 | 16 | # Editor directories and files 17 | .vscode/* 18 | !.vscode/extensions.json 19 | .idea 20 | .DS_Store 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | 27 | __screenshots__ 28 | coverage -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![GitHub Release](https://badge.fury.io/js/maplibre-gl-gsi-terrain.svg) 2 | ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/mug-jp/maplibre-gl-gsi-terrain/test.yml?label=test) 3 | [![codecov](https://codecov.io/gh/mug-jp/maplibre-gl-gsi-terrain/graph/badge.svg?token=U9WGZANPZ9)](https://codecov.io/gh/mug-jp/maplibre-gl-gsi-terrain) 4 | 5 | # maplibre-gl-gsi-terrain 6 | 7 | ![](./screenshot.png) 8 | 9 | ## インストール 10 | 11 | ### CDN経由 12 | 13 | ```html 14 | 17 | ``` 18 | 19 | ### npm module として利用する 20 | 21 | ```sh 22 | npm install maplibre-gl-gsi-terrain 23 | ``` 24 | 25 | ## 使い方 26 | 27 | ```typescript 28 | import maplibregl from 'maplibre-gl'; 29 | import { useGsiTerrainSource } from 'maplibre-gl-gsi-terrain'; 30 | 31 | const gsiTerrainSource = useGsiTerrainSource(maplibregl.addProtocol); 32 | const map = new maplibregl.Map({ 33 | container: 'map', 34 | style: { 35 | version: 8, 36 | center: [139.6917, 35.6895], 37 | zoom: 10, 38 | pitch: 30, 39 | maxPitch: 100, 40 | sources: { 41 | terrain: gsiTerrainSource, 42 | seamlessphoto: { 43 | type: 'raster', 44 | tiles: [ 45 | 'https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg', 46 | ], 47 | maxzoom: 18, 48 | tileSize: 256, 49 | attribution: 50 | '地理院タイル', 51 | }, 52 | }, 53 | layers: [ 54 | { 55 | id: 'seamlessphoto', 56 | source: 'seamlessphoto', 57 | type: 'raster', 58 | }, 59 | ], 60 | terrain: { 61 | source: 'terrain', 62 | exaggeration: 1.2, 63 | }, 64 | }, 65 | }); 66 | ``` 67 | 68 | `useGsiTerrainSource()`は第2引数でオプションを受け取ります。 69 | 70 | | オプション名 | 型 | デフォルト | 71 | | --- | --- | --- | 72 | | `tileUrl` | `string` | 地理院標高タイルに準ずるエンコーディングのタイルURL,{z}/{x}/{y}形式。
デフォルトは`https://cyberjapandata.gsi.go.jp/xyz/dem_png/{z}/{x}/{y}.png` | 73 | | `maxzoom` | `number` | 最大ズームレベル、デフォルトは`14` | 74 | | `minzoom` | `number` | 最小ズームレベル、デフォルトは`1` | 75 | | `attribution` | `string` | デフォルトは`地理院タイル` | 76 | 77 | ### 産総研シームレス標高タイルを利用する例 78 | 79 | ```typescript 80 | import maplibreGl from 'maplibre-gl'; 81 | import { useGsiTerrainSource } from 'maplibre-gl-gsi-terrain'; 82 | 83 | const gsiTerrainSource = useGsiTerrainSource(maplibreGl.addProtocol, { 84 | tileUrl: 'https://tiles.gsj.jp/tiles/elev/mixed/{z}/{y}/{x}.png', 85 | maxzoom: 17, 86 | attribution: '産総研シームレス標高タイル' 87 | }); 88 | ``` 89 | 90 | ### `ProtocolAction`を直接利用する 91 | 92 | `getGsiDemProtocolAction()`を利用することで、`ProtocolAction`を取得できます。通常のケースでは`useGsiTerrainSource()`の利用を推奨します。 93 | 94 | ```typescript 95 | import maplibregl, { RasterDEMSourceSpecification } from 'maplibre-gl'; 96 | import { getGsiDemProtocolAction } from '../src/terrain.ts'; 97 | 98 | const protocolAction = getGsiDemProtocolAction('gsidem'); 99 | maplibregl.addProtocol('gsidem', protocolAction); 100 | const gsiTerrainSource: RasterDEMSourceSpecification = { 101 | type: 'raster-dem', 102 | tiles: ['gsidem://https://tiles.gsj.jp/tiles/elev/mixed/{z}/{y}/{x}.png'], 103 | tileSize: 256, 104 | minzoom: 1, 105 | maxzoom: 17, 106 | encoding: 'terrarium', 107 | attribution: 108 | '地理院タイル', 109 | }; 110 | ``` 111 | 112 | ## MapLibre GL JS v3以前を利用する場合 113 | 114 | このライブラリは`maplibregl.addProtocol`に依存しています。`addProtocol`はv4で破壊的変更があり、このライブラリでは`v1.0.0`以降、v4に準拠した仕様になっています。v3以前を利用する場合は`v0.0.2`を利用してください。 115 | 116 | ```sh 117 | npm install maplibre-gl-gsi-terrain@0.0.2 118 | ``` 119 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | ignore: 2 | - "example" -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | maplibre-gl-gsi-terrain 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /example/index.ts: -------------------------------------------------------------------------------- 1 | import maplibregl, { RasterDEMSourceSpecification } from 'maplibre-gl'; 2 | import 'maplibre-gl/dist/maplibre-gl.css'; 3 | import { getGsiDemProtocolAction } from '../src/terrain.ts'; 4 | 5 | const protocolAction = getGsiDemProtocolAction('gsidem'); 6 | maplibregl.addProtocol('gsidem', protocolAction); 7 | const gsiTerrainSource: RasterDEMSourceSpecification = { 8 | type: 'raster-dem', 9 | tiles: ['gsidem://https://tiles.gsj.jp/tiles/elev/mixed/{z}/{y}/{x}.png'], 10 | tileSize: 256, 11 | encoding: 'terrarium', 12 | minzoom: 1, 13 | maxzoom: 17, 14 | attribution: 15 | '地理院タイル', 16 | }; 17 | 18 | new maplibregl.Map({ 19 | container: 'app', 20 | zoom: 13, 21 | center: [138.7, 35.3], 22 | minZoom: 5, 23 | maxZoom: 18, 24 | pitch: 70, 25 | maxPitch: 100, 26 | style: { 27 | version: 8, 28 | projection: { 29 | type: 'globe', 30 | }, 31 | sources: { 32 | seamlessphoto: { 33 | type: 'raster', 34 | tiles: [ 35 | 'https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg', 36 | ], 37 | maxzoom: 18, 38 | tileSize: 256, 39 | attribution: 40 | '地理院タイル', 41 | }, 42 | terrain: gsiTerrainSource, 43 | }, 44 | layers: [ 45 | { 46 | id: 'seamlessphoto', 47 | source: 'seamlessphoto', 48 | type: 'raster', 49 | }, 50 | ], 51 | terrain: { 52 | source: 'terrain', 53 | exaggeration: 1.2, 54 | }, 55 | }, 56 | }); 57 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "maplibre-gl-gsi-terrain", 3 | "version": "2.2.2", 4 | "type": "module", 5 | "main": "./dist/terrain.js", 6 | "types": "./dist/terrain.d.ts", 7 | "files": [ 8 | "dist" 9 | ], 10 | "scripts": { 11 | "dev": "vite -c vite.config.example.ts", 12 | "build:example": "vite build -c vite.config.example.ts", 13 | "build": "vite build && tsc", 14 | "prepare": "npm run build", 15 | "test": "vitest src --coverage --coverage.provider=v8" 16 | }, 17 | "devDependencies": { 18 | "@vitest/browser": "^2.1.8", 19 | "@vitest/coverage-v8": "^2.1.8", 20 | "maplibre-gl": "^5.0.0", 21 | "playwright": "^1.49.1", 22 | "typescript": "^5.5.3", 23 | "vite": "^3.2.3", 24 | "vitest": "^2.1.8" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | devDependencies: 11 | '@vitest/browser': 12 | specifier: ^2.1.8 13 | version: 2.1.8(@types/node@22.10.5)(playwright@1.49.1)(typescript@5.7.2)(vite@3.2.11(@types/node@22.10.5))(vitest@2.1.8) 14 | '@vitest/coverage-v8': 15 | specifier: ^2.1.8 16 | version: 2.1.8(@vitest/browser@2.1.8)(vitest@2.1.8) 17 | maplibre-gl: 18 | specifier: ^5.0.0 19 | version: 5.0.0 20 | playwright: 21 | specifier: ^1.49.1 22 | version: 1.49.1 23 | typescript: 24 | specifier: ^5.5.3 25 | version: 5.7.2 26 | vite: 27 | specifier: ^3.2.3 28 | version: 3.2.11(@types/node@22.10.5) 29 | vitest: 30 | specifier: ^2.1.8 31 | version: 2.1.8(@types/node@22.10.5)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2)) 32 | 33 | packages: 34 | 35 | '@ampproject/remapping@2.3.0': 36 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 37 | engines: {node: '>=6.0.0'} 38 | 39 | '@babel/code-frame@7.26.2': 40 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 41 | engines: {node: '>=6.9.0'} 42 | 43 | '@babel/helper-string-parser@7.25.9': 44 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 45 | engines: {node: '>=6.9.0'} 46 | 47 | '@babel/helper-validator-identifier@7.25.9': 48 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 49 | engines: {node: '>=6.9.0'} 50 | 51 | '@babel/parser@7.26.3': 52 | resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} 53 | engines: {node: '>=6.0.0'} 54 | hasBin: true 55 | 56 | '@babel/runtime@7.26.0': 57 | resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} 58 | engines: {node: '>=6.9.0'} 59 | 60 | '@babel/types@7.26.3': 61 | resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} 62 | engines: {node: '>=6.9.0'} 63 | 64 | '@bcoe/v8-coverage@0.2.3': 65 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 66 | 67 | '@bundled-es-modules/cookie@2.0.1': 68 | resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} 69 | 70 | '@bundled-es-modules/statuses@1.0.1': 71 | resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} 72 | 73 | '@bundled-es-modules/tough-cookie@0.1.6': 74 | resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} 75 | 76 | '@esbuild/aix-ppc64@0.21.5': 77 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 78 | engines: {node: '>=12'} 79 | cpu: [ppc64] 80 | os: [aix] 81 | 82 | '@esbuild/android-arm64@0.21.5': 83 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 84 | engines: {node: '>=12'} 85 | cpu: [arm64] 86 | os: [android] 87 | 88 | '@esbuild/android-arm@0.15.18': 89 | resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} 90 | engines: {node: '>=12'} 91 | cpu: [arm] 92 | os: [android] 93 | 94 | '@esbuild/android-arm@0.21.5': 95 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 96 | engines: {node: '>=12'} 97 | cpu: [arm] 98 | os: [android] 99 | 100 | '@esbuild/android-x64@0.21.5': 101 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 102 | engines: {node: '>=12'} 103 | cpu: [x64] 104 | os: [android] 105 | 106 | '@esbuild/darwin-arm64@0.21.5': 107 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 108 | engines: {node: '>=12'} 109 | cpu: [arm64] 110 | os: [darwin] 111 | 112 | '@esbuild/darwin-x64@0.21.5': 113 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 114 | engines: {node: '>=12'} 115 | cpu: [x64] 116 | os: [darwin] 117 | 118 | '@esbuild/freebsd-arm64@0.21.5': 119 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 120 | engines: {node: '>=12'} 121 | cpu: [arm64] 122 | os: [freebsd] 123 | 124 | '@esbuild/freebsd-x64@0.21.5': 125 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 126 | engines: {node: '>=12'} 127 | cpu: [x64] 128 | os: [freebsd] 129 | 130 | '@esbuild/linux-arm64@0.21.5': 131 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 132 | engines: {node: '>=12'} 133 | cpu: [arm64] 134 | os: [linux] 135 | 136 | '@esbuild/linux-arm@0.21.5': 137 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 138 | engines: {node: '>=12'} 139 | cpu: [arm] 140 | os: [linux] 141 | 142 | '@esbuild/linux-ia32@0.21.5': 143 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 144 | engines: {node: '>=12'} 145 | cpu: [ia32] 146 | os: [linux] 147 | 148 | '@esbuild/linux-loong64@0.15.18': 149 | resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} 150 | engines: {node: '>=12'} 151 | cpu: [loong64] 152 | os: [linux] 153 | 154 | '@esbuild/linux-loong64@0.21.5': 155 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 156 | engines: {node: '>=12'} 157 | cpu: [loong64] 158 | os: [linux] 159 | 160 | '@esbuild/linux-mips64el@0.21.5': 161 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 162 | engines: {node: '>=12'} 163 | cpu: [mips64el] 164 | os: [linux] 165 | 166 | '@esbuild/linux-ppc64@0.21.5': 167 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 168 | engines: {node: '>=12'} 169 | cpu: [ppc64] 170 | os: [linux] 171 | 172 | '@esbuild/linux-riscv64@0.21.5': 173 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 174 | engines: {node: '>=12'} 175 | cpu: [riscv64] 176 | os: [linux] 177 | 178 | '@esbuild/linux-s390x@0.21.5': 179 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 180 | engines: {node: '>=12'} 181 | cpu: [s390x] 182 | os: [linux] 183 | 184 | '@esbuild/linux-x64@0.21.5': 185 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 186 | engines: {node: '>=12'} 187 | cpu: [x64] 188 | os: [linux] 189 | 190 | '@esbuild/netbsd-x64@0.21.5': 191 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 192 | engines: {node: '>=12'} 193 | cpu: [x64] 194 | os: [netbsd] 195 | 196 | '@esbuild/openbsd-x64@0.21.5': 197 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 198 | engines: {node: '>=12'} 199 | cpu: [x64] 200 | os: [openbsd] 201 | 202 | '@esbuild/sunos-x64@0.21.5': 203 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 204 | engines: {node: '>=12'} 205 | cpu: [x64] 206 | os: [sunos] 207 | 208 | '@esbuild/win32-arm64@0.21.5': 209 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 210 | engines: {node: '>=12'} 211 | cpu: [arm64] 212 | os: [win32] 213 | 214 | '@esbuild/win32-ia32@0.21.5': 215 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 216 | engines: {node: '>=12'} 217 | cpu: [ia32] 218 | os: [win32] 219 | 220 | '@esbuild/win32-x64@0.21.5': 221 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 222 | engines: {node: '>=12'} 223 | cpu: [x64] 224 | os: [win32] 225 | 226 | '@inquirer/confirm@5.1.1': 227 | resolution: {integrity: sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==} 228 | engines: {node: '>=18'} 229 | peerDependencies: 230 | '@types/node': '>=18' 231 | 232 | '@inquirer/core@10.1.2': 233 | resolution: {integrity: sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==} 234 | engines: {node: '>=18'} 235 | 236 | '@inquirer/figures@1.0.9': 237 | resolution: {integrity: sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==} 238 | engines: {node: '>=18'} 239 | 240 | '@inquirer/type@3.0.2': 241 | resolution: {integrity: sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==} 242 | engines: {node: '>=18'} 243 | peerDependencies: 244 | '@types/node': '>=18' 245 | 246 | '@isaacs/cliui@8.0.2': 247 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 248 | engines: {node: '>=12'} 249 | 250 | '@istanbuljs/schema@0.1.3': 251 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 252 | engines: {node: '>=8'} 253 | 254 | '@jridgewell/gen-mapping@0.3.8': 255 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 256 | engines: {node: '>=6.0.0'} 257 | 258 | '@jridgewell/resolve-uri@3.1.2': 259 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 260 | engines: {node: '>=6.0.0'} 261 | 262 | '@jridgewell/set-array@1.2.1': 263 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 264 | engines: {node: '>=6.0.0'} 265 | 266 | '@jridgewell/sourcemap-codec@1.5.0': 267 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 268 | 269 | '@jridgewell/trace-mapping@0.3.25': 270 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 271 | 272 | '@mapbox/geojson-rewind@0.5.2': 273 | resolution: {integrity: sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==} 274 | hasBin: true 275 | 276 | '@mapbox/jsonlint-lines-primitives@2.0.2': 277 | resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} 278 | engines: {node: '>= 0.6'} 279 | 280 | '@mapbox/point-geometry@0.1.0': 281 | resolution: {integrity: sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==} 282 | 283 | '@mapbox/tiny-sdf@2.0.6': 284 | resolution: {integrity: sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==} 285 | 286 | '@mapbox/unitbezier@0.0.1': 287 | resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} 288 | 289 | '@mapbox/vector-tile@1.3.1': 290 | resolution: {integrity: sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==} 291 | 292 | '@mapbox/whoots-js@3.1.0': 293 | resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} 294 | engines: {node: '>=6.0.0'} 295 | 296 | '@maplibre/maplibre-gl-style-spec@22.0.1': 297 | resolution: {integrity: sha512-V7bSw7Ui6+NhpeeuYqGoqamvKuy+3+uCvQ/t4ZJkwN8cx527CAlQQQ2kp+w5R9q+Tw6bUAH+fsq+mPEkicgT8g==} 298 | hasBin: true 299 | 300 | '@mswjs/interceptors@0.37.4': 301 | resolution: {integrity: sha512-YUenGsnvhhuBkabJZrga8dv/8QFRBe/isTb5CYvmzaI/IISLIkKp8kItSu9URY9tsJLvkPkq2W48OU/piDvfnA==} 302 | engines: {node: '>=18'} 303 | 304 | '@open-draft/deferred-promise@2.2.0': 305 | resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} 306 | 307 | '@open-draft/logger@0.3.0': 308 | resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} 309 | 310 | '@open-draft/until@2.1.0': 311 | resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} 312 | 313 | '@pkgjs/parseargs@0.11.0': 314 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 315 | engines: {node: '>=14'} 316 | 317 | '@polka/url@1.0.0-next.28': 318 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 319 | 320 | '@rollup/rollup-android-arm-eabi@4.29.1': 321 | resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} 322 | cpu: [arm] 323 | os: [android] 324 | 325 | '@rollup/rollup-android-arm64@4.29.1': 326 | resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} 327 | cpu: [arm64] 328 | os: [android] 329 | 330 | '@rollup/rollup-darwin-arm64@4.29.1': 331 | resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} 332 | cpu: [arm64] 333 | os: [darwin] 334 | 335 | '@rollup/rollup-darwin-x64@4.29.1': 336 | resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} 337 | cpu: [x64] 338 | os: [darwin] 339 | 340 | '@rollup/rollup-freebsd-arm64@4.29.1': 341 | resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} 342 | cpu: [arm64] 343 | os: [freebsd] 344 | 345 | '@rollup/rollup-freebsd-x64@4.29.1': 346 | resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} 347 | cpu: [x64] 348 | os: [freebsd] 349 | 350 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 351 | resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} 352 | cpu: [arm] 353 | os: [linux] 354 | 355 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 356 | resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} 357 | cpu: [arm] 358 | os: [linux] 359 | 360 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 361 | resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} 362 | cpu: [arm64] 363 | os: [linux] 364 | 365 | '@rollup/rollup-linux-arm64-musl@4.29.1': 366 | resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} 367 | cpu: [arm64] 368 | os: [linux] 369 | 370 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 371 | resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} 372 | cpu: [loong64] 373 | os: [linux] 374 | 375 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 376 | resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} 377 | cpu: [ppc64] 378 | os: [linux] 379 | 380 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 381 | resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} 382 | cpu: [riscv64] 383 | os: [linux] 384 | 385 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 386 | resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} 387 | cpu: [s390x] 388 | os: [linux] 389 | 390 | '@rollup/rollup-linux-x64-gnu@4.29.1': 391 | resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} 392 | cpu: [x64] 393 | os: [linux] 394 | 395 | '@rollup/rollup-linux-x64-musl@4.29.1': 396 | resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} 397 | cpu: [x64] 398 | os: [linux] 399 | 400 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 401 | resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} 402 | cpu: [arm64] 403 | os: [win32] 404 | 405 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 406 | resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} 407 | cpu: [ia32] 408 | os: [win32] 409 | 410 | '@rollup/rollup-win32-x64-msvc@4.29.1': 411 | resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} 412 | cpu: [x64] 413 | os: [win32] 414 | 415 | '@testing-library/dom@10.4.0': 416 | resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} 417 | engines: {node: '>=18'} 418 | 419 | '@testing-library/user-event@14.5.2': 420 | resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} 421 | engines: {node: '>=12', npm: '>=6'} 422 | peerDependencies: 423 | '@testing-library/dom': '>=7.21.4' 424 | 425 | '@types/aria-query@5.0.4': 426 | resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} 427 | 428 | '@types/cookie@0.6.0': 429 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 430 | 431 | '@types/estree@1.0.6': 432 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 433 | 434 | '@types/geojson-vt@3.2.5': 435 | resolution: {integrity: sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==} 436 | 437 | '@types/geojson@7946.0.15': 438 | resolution: {integrity: sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==} 439 | 440 | '@types/mapbox__point-geometry@0.1.4': 441 | resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==} 442 | 443 | '@types/mapbox__vector-tile@1.3.4': 444 | resolution: {integrity: sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==} 445 | 446 | '@types/node@22.10.5': 447 | resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} 448 | 449 | '@types/pbf@3.0.5': 450 | resolution: {integrity: sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==} 451 | 452 | '@types/statuses@2.0.5': 453 | resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} 454 | 455 | '@types/supercluster@7.1.3': 456 | resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} 457 | 458 | '@types/tough-cookie@4.0.5': 459 | resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} 460 | 461 | '@vitest/browser@2.1.8': 462 | resolution: {integrity: sha512-OWVvEJThRgxlNMYNVLEK/9qVkpRcLvyuKLngIV3Hob01P56NjPHprVBYn+rx4xAJudbM9yrCrywPIEuA3Xyo8A==} 463 | peerDependencies: 464 | playwright: '*' 465 | safaridriver: '*' 466 | vitest: 2.1.8 467 | webdriverio: '*' 468 | peerDependenciesMeta: 469 | playwright: 470 | optional: true 471 | safaridriver: 472 | optional: true 473 | webdriverio: 474 | optional: true 475 | 476 | '@vitest/coverage-v8@2.1.8': 477 | resolution: {integrity: sha512-2Y7BPlKH18mAZYAW1tYByudlCYrQyl5RGvnnDYJKW5tCiO5qg3KSAy3XAxcxKz900a0ZXxWtKrMuZLe3lKBpJw==} 478 | peerDependencies: 479 | '@vitest/browser': 2.1.8 480 | vitest: 2.1.8 481 | peerDependenciesMeta: 482 | '@vitest/browser': 483 | optional: true 484 | 485 | '@vitest/expect@2.1.8': 486 | resolution: {integrity: sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==} 487 | 488 | '@vitest/mocker@2.1.8': 489 | resolution: {integrity: sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==} 490 | peerDependencies: 491 | msw: ^2.4.9 492 | vite: ^5.0.0 493 | peerDependenciesMeta: 494 | msw: 495 | optional: true 496 | vite: 497 | optional: true 498 | 499 | '@vitest/pretty-format@2.1.8': 500 | resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} 501 | 502 | '@vitest/runner@2.1.8': 503 | resolution: {integrity: sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==} 504 | 505 | '@vitest/snapshot@2.1.8': 506 | resolution: {integrity: sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==} 507 | 508 | '@vitest/spy@2.1.8': 509 | resolution: {integrity: sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==} 510 | 511 | '@vitest/utils@2.1.8': 512 | resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} 513 | 514 | ansi-escapes@4.3.2: 515 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 516 | engines: {node: '>=8'} 517 | 518 | ansi-regex@5.0.1: 519 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 520 | engines: {node: '>=8'} 521 | 522 | ansi-regex@6.1.0: 523 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 524 | engines: {node: '>=12'} 525 | 526 | ansi-styles@4.3.0: 527 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 528 | engines: {node: '>=8'} 529 | 530 | ansi-styles@5.2.0: 531 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 532 | engines: {node: '>=10'} 533 | 534 | ansi-styles@6.2.1: 535 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 536 | engines: {node: '>=12'} 537 | 538 | aria-query@5.3.0: 539 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} 540 | 541 | assertion-error@2.0.1: 542 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 543 | engines: {node: '>=12'} 544 | 545 | balanced-match@1.0.2: 546 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 547 | 548 | brace-expansion@2.0.1: 549 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 550 | 551 | cac@6.7.14: 552 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 553 | engines: {node: '>=8'} 554 | 555 | chai@5.1.2: 556 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} 557 | engines: {node: '>=12'} 558 | 559 | chalk@4.1.2: 560 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 561 | engines: {node: '>=10'} 562 | 563 | check-error@2.1.1: 564 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 565 | engines: {node: '>= 16'} 566 | 567 | cli-width@4.1.0: 568 | resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} 569 | engines: {node: '>= 12'} 570 | 571 | cliui@8.0.1: 572 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 573 | engines: {node: '>=12'} 574 | 575 | color-convert@2.0.1: 576 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 577 | engines: {node: '>=7.0.0'} 578 | 579 | color-name@1.1.4: 580 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 581 | 582 | cookie@0.7.2: 583 | resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 584 | engines: {node: '>= 0.6'} 585 | 586 | cross-spawn@7.0.6: 587 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 588 | engines: {node: '>= 8'} 589 | 590 | debug@4.4.0: 591 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 592 | engines: {node: '>=6.0'} 593 | peerDependencies: 594 | supports-color: '*' 595 | peerDependenciesMeta: 596 | supports-color: 597 | optional: true 598 | 599 | deep-eql@5.0.2: 600 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 601 | engines: {node: '>=6'} 602 | 603 | dequal@2.0.3: 604 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 605 | engines: {node: '>=6'} 606 | 607 | dom-accessibility-api@0.5.16: 608 | resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} 609 | 610 | earcut@3.0.1: 611 | resolution: {integrity: sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==} 612 | 613 | eastasianwidth@0.2.0: 614 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 615 | 616 | emoji-regex@8.0.0: 617 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 618 | 619 | emoji-regex@9.2.2: 620 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 621 | 622 | es-module-lexer@1.6.0: 623 | resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} 624 | 625 | esbuild-android-64@0.15.18: 626 | resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} 627 | engines: {node: '>=12'} 628 | cpu: [x64] 629 | os: [android] 630 | 631 | esbuild-android-arm64@0.15.18: 632 | resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} 633 | engines: {node: '>=12'} 634 | cpu: [arm64] 635 | os: [android] 636 | 637 | esbuild-darwin-64@0.15.18: 638 | resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} 639 | engines: {node: '>=12'} 640 | cpu: [x64] 641 | os: [darwin] 642 | 643 | esbuild-darwin-arm64@0.15.18: 644 | resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} 645 | engines: {node: '>=12'} 646 | cpu: [arm64] 647 | os: [darwin] 648 | 649 | esbuild-freebsd-64@0.15.18: 650 | resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} 651 | engines: {node: '>=12'} 652 | cpu: [x64] 653 | os: [freebsd] 654 | 655 | esbuild-freebsd-arm64@0.15.18: 656 | resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} 657 | engines: {node: '>=12'} 658 | cpu: [arm64] 659 | os: [freebsd] 660 | 661 | esbuild-linux-32@0.15.18: 662 | resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} 663 | engines: {node: '>=12'} 664 | cpu: [ia32] 665 | os: [linux] 666 | 667 | esbuild-linux-64@0.15.18: 668 | resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} 669 | engines: {node: '>=12'} 670 | cpu: [x64] 671 | os: [linux] 672 | 673 | esbuild-linux-arm64@0.15.18: 674 | resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} 675 | engines: {node: '>=12'} 676 | cpu: [arm64] 677 | os: [linux] 678 | 679 | esbuild-linux-arm@0.15.18: 680 | resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} 681 | engines: {node: '>=12'} 682 | cpu: [arm] 683 | os: [linux] 684 | 685 | esbuild-linux-mips64le@0.15.18: 686 | resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} 687 | engines: {node: '>=12'} 688 | cpu: [mips64el] 689 | os: [linux] 690 | 691 | esbuild-linux-ppc64le@0.15.18: 692 | resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} 693 | engines: {node: '>=12'} 694 | cpu: [ppc64] 695 | os: [linux] 696 | 697 | esbuild-linux-riscv64@0.15.18: 698 | resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} 699 | engines: {node: '>=12'} 700 | cpu: [riscv64] 701 | os: [linux] 702 | 703 | esbuild-linux-s390x@0.15.18: 704 | resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} 705 | engines: {node: '>=12'} 706 | cpu: [s390x] 707 | os: [linux] 708 | 709 | esbuild-netbsd-64@0.15.18: 710 | resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} 711 | engines: {node: '>=12'} 712 | cpu: [x64] 713 | os: [netbsd] 714 | 715 | esbuild-openbsd-64@0.15.18: 716 | resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} 717 | engines: {node: '>=12'} 718 | cpu: [x64] 719 | os: [openbsd] 720 | 721 | esbuild-sunos-64@0.15.18: 722 | resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} 723 | engines: {node: '>=12'} 724 | cpu: [x64] 725 | os: [sunos] 726 | 727 | esbuild-windows-32@0.15.18: 728 | resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} 729 | engines: {node: '>=12'} 730 | cpu: [ia32] 731 | os: [win32] 732 | 733 | esbuild-windows-64@0.15.18: 734 | resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} 735 | engines: {node: '>=12'} 736 | cpu: [x64] 737 | os: [win32] 738 | 739 | esbuild-windows-arm64@0.15.18: 740 | resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} 741 | engines: {node: '>=12'} 742 | cpu: [arm64] 743 | os: [win32] 744 | 745 | esbuild@0.15.18: 746 | resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} 747 | engines: {node: '>=12'} 748 | hasBin: true 749 | 750 | esbuild@0.21.5: 751 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 752 | engines: {node: '>=12'} 753 | hasBin: true 754 | 755 | escalade@3.2.0: 756 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 757 | engines: {node: '>=6'} 758 | 759 | estree-walker@3.0.3: 760 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 761 | 762 | expect-type@1.1.0: 763 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} 764 | engines: {node: '>=12.0.0'} 765 | 766 | foreground-child@3.3.0: 767 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 768 | engines: {node: '>=14'} 769 | 770 | fsevents@2.3.2: 771 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 772 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 773 | os: [darwin] 774 | 775 | fsevents@2.3.3: 776 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 777 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 778 | os: [darwin] 779 | 780 | function-bind@1.1.2: 781 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 782 | 783 | geojson-vt@4.0.2: 784 | resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==} 785 | 786 | get-caller-file@2.0.5: 787 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 788 | engines: {node: 6.* || 8.* || >= 10.*} 789 | 790 | get-stream@6.0.1: 791 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 792 | engines: {node: '>=10'} 793 | 794 | gl-matrix@3.4.3: 795 | resolution: {integrity: sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==} 796 | 797 | glob@10.4.5: 798 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 799 | hasBin: true 800 | 801 | global-prefix@4.0.0: 802 | resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==} 803 | engines: {node: '>=16'} 804 | 805 | graphql@16.10.0: 806 | resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} 807 | engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} 808 | 809 | has-flag@4.0.0: 810 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 811 | engines: {node: '>=8'} 812 | 813 | hasown@2.0.2: 814 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 815 | engines: {node: '>= 0.4'} 816 | 817 | headers-polyfill@4.0.3: 818 | resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} 819 | 820 | html-escaper@2.0.2: 821 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 822 | 823 | ieee754@1.2.1: 824 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 825 | 826 | ini@4.1.3: 827 | resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} 828 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 829 | 830 | is-core-module@2.16.1: 831 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 832 | engines: {node: '>= 0.4'} 833 | 834 | is-fullwidth-code-point@3.0.0: 835 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 836 | engines: {node: '>=8'} 837 | 838 | is-node-process@1.2.0: 839 | resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} 840 | 841 | isexe@2.0.0: 842 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 843 | 844 | isexe@3.1.1: 845 | resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} 846 | engines: {node: '>=16'} 847 | 848 | istanbul-lib-coverage@3.2.2: 849 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 850 | engines: {node: '>=8'} 851 | 852 | istanbul-lib-report@3.0.1: 853 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 854 | engines: {node: '>=10'} 855 | 856 | istanbul-lib-source-maps@5.0.6: 857 | resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} 858 | engines: {node: '>=10'} 859 | 860 | istanbul-reports@3.1.7: 861 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 862 | engines: {node: '>=8'} 863 | 864 | jackspeak@3.4.3: 865 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 866 | 867 | js-tokens@4.0.0: 868 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 869 | 870 | json-stringify-pretty-compact@4.0.0: 871 | resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==} 872 | 873 | kdbush@4.0.2: 874 | resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} 875 | 876 | kind-of@6.0.3: 877 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 878 | engines: {node: '>=0.10.0'} 879 | 880 | loupe@3.1.2: 881 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} 882 | 883 | lru-cache@10.4.3: 884 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 885 | 886 | lz-string@1.5.0: 887 | resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} 888 | hasBin: true 889 | 890 | magic-string@0.30.17: 891 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 892 | 893 | magicast@0.3.5: 894 | resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} 895 | 896 | make-dir@4.0.0: 897 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 898 | engines: {node: '>=10'} 899 | 900 | maplibre-gl@5.0.0: 901 | resolution: {integrity: sha512-WG8IYFK2gfJYXvWjlqg1yavo/YO/JlNkblAJMt19sjIafP5oJzTgXFiOLUIYkjtrv5pKiAWuSYsx4CD3ithJqw==} 902 | engines: {node: '>=16.14.0', npm: '>=8.1.0'} 903 | 904 | minimatch@9.0.5: 905 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 906 | engines: {node: '>=16 || 14 >=14.17'} 907 | 908 | minimist@1.2.8: 909 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 910 | 911 | minipass@7.1.2: 912 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 913 | engines: {node: '>=16 || 14 >=14.17'} 914 | 915 | mrmime@2.0.0: 916 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 917 | engines: {node: '>=10'} 918 | 919 | ms@2.1.3: 920 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 921 | 922 | msw@2.7.0: 923 | resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} 924 | engines: {node: '>=18'} 925 | hasBin: true 926 | peerDependencies: 927 | typescript: '>= 4.8.x' 928 | peerDependenciesMeta: 929 | typescript: 930 | optional: true 931 | 932 | murmurhash-js@1.0.0: 933 | resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} 934 | 935 | mute-stream@2.0.0: 936 | resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} 937 | engines: {node: ^18.17.0 || >=20.5.0} 938 | 939 | nanoid@3.3.8: 940 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 941 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 942 | hasBin: true 943 | 944 | outvariant@1.4.3: 945 | resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} 946 | 947 | package-json-from-dist@1.0.1: 948 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 949 | 950 | path-key@3.1.1: 951 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 952 | engines: {node: '>=8'} 953 | 954 | path-parse@1.0.7: 955 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 956 | 957 | path-scurry@1.11.1: 958 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 959 | engines: {node: '>=16 || 14 >=14.18'} 960 | 961 | path-to-regexp@6.3.0: 962 | resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} 963 | 964 | pathe@1.1.2: 965 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 966 | 967 | pathval@2.0.0: 968 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 969 | engines: {node: '>= 14.16'} 970 | 971 | pbf@3.3.0: 972 | resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} 973 | hasBin: true 974 | 975 | picocolors@1.1.1: 976 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 977 | 978 | playwright-core@1.49.1: 979 | resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==} 980 | engines: {node: '>=18'} 981 | hasBin: true 982 | 983 | playwright@1.49.1: 984 | resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==} 985 | engines: {node: '>=18'} 986 | hasBin: true 987 | 988 | postcss@8.4.49: 989 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 990 | engines: {node: ^10 || ^12 || >=14} 991 | 992 | potpack@2.0.0: 993 | resolution: {integrity: sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==} 994 | 995 | pretty-format@27.5.1: 996 | resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} 997 | engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} 998 | 999 | protocol-buffers-schema@3.6.0: 1000 | resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} 1001 | 1002 | psl@1.15.0: 1003 | resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} 1004 | 1005 | punycode@2.3.1: 1006 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1007 | engines: {node: '>=6'} 1008 | 1009 | querystringify@2.2.0: 1010 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} 1011 | 1012 | quickselect@3.0.0: 1013 | resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} 1014 | 1015 | react-is@17.0.2: 1016 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 1017 | 1018 | regenerator-runtime@0.14.1: 1019 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} 1020 | 1021 | require-directory@2.1.1: 1022 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1023 | engines: {node: '>=0.10.0'} 1024 | 1025 | requires-port@1.0.0: 1026 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} 1027 | 1028 | resolve-protobuf-schema@2.1.0: 1029 | resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} 1030 | 1031 | resolve@1.22.10: 1032 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1033 | engines: {node: '>= 0.4'} 1034 | hasBin: true 1035 | 1036 | rollup@2.79.2: 1037 | resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} 1038 | engines: {node: '>=10.0.0'} 1039 | hasBin: true 1040 | 1041 | rollup@4.29.1: 1042 | resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} 1043 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1044 | hasBin: true 1045 | 1046 | rw@1.3.3: 1047 | resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} 1048 | 1049 | semver@7.6.3: 1050 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1051 | engines: {node: '>=10'} 1052 | hasBin: true 1053 | 1054 | shebang-command@2.0.0: 1055 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1056 | engines: {node: '>=8'} 1057 | 1058 | shebang-regex@3.0.0: 1059 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1060 | engines: {node: '>=8'} 1061 | 1062 | siginfo@2.0.0: 1063 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1064 | 1065 | signal-exit@4.1.0: 1066 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1067 | engines: {node: '>=14'} 1068 | 1069 | sirv@3.0.0: 1070 | resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} 1071 | engines: {node: '>=18'} 1072 | 1073 | source-map-js@1.2.1: 1074 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1075 | engines: {node: '>=0.10.0'} 1076 | 1077 | stackback@0.0.2: 1078 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1079 | 1080 | statuses@2.0.1: 1081 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1082 | engines: {node: '>= 0.8'} 1083 | 1084 | std-env@3.8.0: 1085 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} 1086 | 1087 | strict-event-emitter@0.5.1: 1088 | resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} 1089 | 1090 | string-width@4.2.3: 1091 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1092 | engines: {node: '>=8'} 1093 | 1094 | string-width@5.1.2: 1095 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1096 | engines: {node: '>=12'} 1097 | 1098 | strip-ansi@6.0.1: 1099 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1100 | engines: {node: '>=8'} 1101 | 1102 | strip-ansi@7.1.0: 1103 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1104 | engines: {node: '>=12'} 1105 | 1106 | supercluster@8.0.1: 1107 | resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} 1108 | 1109 | supports-color@7.2.0: 1110 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1111 | engines: {node: '>=8'} 1112 | 1113 | supports-preserve-symlinks-flag@1.0.0: 1114 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1115 | engines: {node: '>= 0.4'} 1116 | 1117 | test-exclude@7.0.1: 1118 | resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} 1119 | engines: {node: '>=18'} 1120 | 1121 | tinybench@2.9.0: 1122 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1123 | 1124 | tinyexec@0.3.2: 1125 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 1126 | 1127 | tinypool@1.0.2: 1128 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 1129 | engines: {node: ^18.0.0 || >=20.0.0} 1130 | 1131 | tinyqueue@3.0.0: 1132 | resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} 1133 | 1134 | tinyrainbow@1.2.0: 1135 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} 1136 | engines: {node: '>=14.0.0'} 1137 | 1138 | tinyspy@3.0.2: 1139 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 1140 | engines: {node: '>=14.0.0'} 1141 | 1142 | totalist@3.0.1: 1143 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1144 | engines: {node: '>=6'} 1145 | 1146 | tough-cookie@4.1.4: 1147 | resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} 1148 | engines: {node: '>=6'} 1149 | 1150 | type-fest@0.21.3: 1151 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 1152 | engines: {node: '>=10'} 1153 | 1154 | type-fest@4.31.0: 1155 | resolution: {integrity: sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==} 1156 | engines: {node: '>=16'} 1157 | 1158 | typescript@5.7.2: 1159 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 1160 | engines: {node: '>=14.17'} 1161 | hasBin: true 1162 | 1163 | undici-types@6.20.0: 1164 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1165 | 1166 | universalify@0.2.0: 1167 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} 1168 | engines: {node: '>= 4.0.0'} 1169 | 1170 | url-parse@1.5.10: 1171 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} 1172 | 1173 | vite-node@2.1.8: 1174 | resolution: {integrity: sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==} 1175 | engines: {node: ^18.0.0 || >=20.0.0} 1176 | hasBin: true 1177 | 1178 | vite@3.2.11: 1179 | resolution: {integrity: sha512-K/jGKL/PgbIgKCiJo5QbASQhFiV02X9Jh+Qq0AKCRCRKZtOTVi4t6wh75FDpGf2N9rYOnzH87OEFQNaFy6pdxQ==} 1180 | engines: {node: ^14.18.0 || >=16.0.0} 1181 | hasBin: true 1182 | peerDependencies: 1183 | '@types/node': '>= 14' 1184 | less: '*' 1185 | sass: '*' 1186 | stylus: '*' 1187 | sugarss: '*' 1188 | terser: ^5.4.0 1189 | peerDependenciesMeta: 1190 | '@types/node': 1191 | optional: true 1192 | less: 1193 | optional: true 1194 | sass: 1195 | optional: true 1196 | stylus: 1197 | optional: true 1198 | sugarss: 1199 | optional: true 1200 | terser: 1201 | optional: true 1202 | 1203 | vite@5.4.11: 1204 | resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} 1205 | engines: {node: ^18.0.0 || >=20.0.0} 1206 | hasBin: true 1207 | peerDependencies: 1208 | '@types/node': ^18.0.0 || >=20.0.0 1209 | less: '*' 1210 | lightningcss: ^1.21.0 1211 | sass: '*' 1212 | sass-embedded: '*' 1213 | stylus: '*' 1214 | sugarss: '*' 1215 | terser: ^5.4.0 1216 | peerDependenciesMeta: 1217 | '@types/node': 1218 | optional: true 1219 | less: 1220 | optional: true 1221 | lightningcss: 1222 | optional: true 1223 | sass: 1224 | optional: true 1225 | sass-embedded: 1226 | optional: true 1227 | stylus: 1228 | optional: true 1229 | sugarss: 1230 | optional: true 1231 | terser: 1232 | optional: true 1233 | 1234 | vitest@2.1.8: 1235 | resolution: {integrity: sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==} 1236 | engines: {node: ^18.0.0 || >=20.0.0} 1237 | hasBin: true 1238 | peerDependencies: 1239 | '@edge-runtime/vm': '*' 1240 | '@types/node': ^18.0.0 || >=20.0.0 1241 | '@vitest/browser': 2.1.8 1242 | '@vitest/ui': 2.1.8 1243 | happy-dom: '*' 1244 | jsdom: '*' 1245 | peerDependenciesMeta: 1246 | '@edge-runtime/vm': 1247 | optional: true 1248 | '@types/node': 1249 | optional: true 1250 | '@vitest/browser': 1251 | optional: true 1252 | '@vitest/ui': 1253 | optional: true 1254 | happy-dom: 1255 | optional: true 1256 | jsdom: 1257 | optional: true 1258 | 1259 | vt-pbf@3.1.3: 1260 | resolution: {integrity: sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==} 1261 | 1262 | which@2.0.2: 1263 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1264 | engines: {node: '>= 8'} 1265 | hasBin: true 1266 | 1267 | which@4.0.0: 1268 | resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} 1269 | engines: {node: ^16.13.0 || >=18.0.0} 1270 | hasBin: true 1271 | 1272 | why-is-node-running@2.3.0: 1273 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 1274 | engines: {node: '>=8'} 1275 | hasBin: true 1276 | 1277 | wrap-ansi@6.2.0: 1278 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} 1279 | engines: {node: '>=8'} 1280 | 1281 | wrap-ansi@7.0.0: 1282 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1283 | engines: {node: '>=10'} 1284 | 1285 | wrap-ansi@8.1.0: 1286 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1287 | engines: {node: '>=12'} 1288 | 1289 | ws@8.18.0: 1290 | resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} 1291 | engines: {node: '>=10.0.0'} 1292 | peerDependencies: 1293 | bufferutil: ^4.0.1 1294 | utf-8-validate: '>=5.0.2' 1295 | peerDependenciesMeta: 1296 | bufferutil: 1297 | optional: true 1298 | utf-8-validate: 1299 | optional: true 1300 | 1301 | y18n@5.0.8: 1302 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1303 | engines: {node: '>=10'} 1304 | 1305 | yargs-parser@21.1.1: 1306 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1307 | engines: {node: '>=12'} 1308 | 1309 | yargs@17.7.2: 1310 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1311 | engines: {node: '>=12'} 1312 | 1313 | yoctocolors-cjs@2.1.2: 1314 | resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} 1315 | engines: {node: '>=18'} 1316 | 1317 | snapshots: 1318 | 1319 | '@ampproject/remapping@2.3.0': 1320 | dependencies: 1321 | '@jridgewell/gen-mapping': 0.3.8 1322 | '@jridgewell/trace-mapping': 0.3.25 1323 | 1324 | '@babel/code-frame@7.26.2': 1325 | dependencies: 1326 | '@babel/helper-validator-identifier': 7.25.9 1327 | js-tokens: 4.0.0 1328 | picocolors: 1.1.1 1329 | 1330 | '@babel/helper-string-parser@7.25.9': {} 1331 | 1332 | '@babel/helper-validator-identifier@7.25.9': {} 1333 | 1334 | '@babel/parser@7.26.3': 1335 | dependencies: 1336 | '@babel/types': 7.26.3 1337 | 1338 | '@babel/runtime@7.26.0': 1339 | dependencies: 1340 | regenerator-runtime: 0.14.1 1341 | 1342 | '@babel/types@7.26.3': 1343 | dependencies: 1344 | '@babel/helper-string-parser': 7.25.9 1345 | '@babel/helper-validator-identifier': 7.25.9 1346 | 1347 | '@bcoe/v8-coverage@0.2.3': {} 1348 | 1349 | '@bundled-es-modules/cookie@2.0.1': 1350 | dependencies: 1351 | cookie: 0.7.2 1352 | 1353 | '@bundled-es-modules/statuses@1.0.1': 1354 | dependencies: 1355 | statuses: 2.0.1 1356 | 1357 | '@bundled-es-modules/tough-cookie@0.1.6': 1358 | dependencies: 1359 | '@types/tough-cookie': 4.0.5 1360 | tough-cookie: 4.1.4 1361 | 1362 | '@esbuild/aix-ppc64@0.21.5': 1363 | optional: true 1364 | 1365 | '@esbuild/android-arm64@0.21.5': 1366 | optional: true 1367 | 1368 | '@esbuild/android-arm@0.15.18': 1369 | optional: true 1370 | 1371 | '@esbuild/android-arm@0.21.5': 1372 | optional: true 1373 | 1374 | '@esbuild/android-x64@0.21.5': 1375 | optional: true 1376 | 1377 | '@esbuild/darwin-arm64@0.21.5': 1378 | optional: true 1379 | 1380 | '@esbuild/darwin-x64@0.21.5': 1381 | optional: true 1382 | 1383 | '@esbuild/freebsd-arm64@0.21.5': 1384 | optional: true 1385 | 1386 | '@esbuild/freebsd-x64@0.21.5': 1387 | optional: true 1388 | 1389 | '@esbuild/linux-arm64@0.21.5': 1390 | optional: true 1391 | 1392 | '@esbuild/linux-arm@0.21.5': 1393 | optional: true 1394 | 1395 | '@esbuild/linux-ia32@0.21.5': 1396 | optional: true 1397 | 1398 | '@esbuild/linux-loong64@0.15.18': 1399 | optional: true 1400 | 1401 | '@esbuild/linux-loong64@0.21.5': 1402 | optional: true 1403 | 1404 | '@esbuild/linux-mips64el@0.21.5': 1405 | optional: true 1406 | 1407 | '@esbuild/linux-ppc64@0.21.5': 1408 | optional: true 1409 | 1410 | '@esbuild/linux-riscv64@0.21.5': 1411 | optional: true 1412 | 1413 | '@esbuild/linux-s390x@0.21.5': 1414 | optional: true 1415 | 1416 | '@esbuild/linux-x64@0.21.5': 1417 | optional: true 1418 | 1419 | '@esbuild/netbsd-x64@0.21.5': 1420 | optional: true 1421 | 1422 | '@esbuild/openbsd-x64@0.21.5': 1423 | optional: true 1424 | 1425 | '@esbuild/sunos-x64@0.21.5': 1426 | optional: true 1427 | 1428 | '@esbuild/win32-arm64@0.21.5': 1429 | optional: true 1430 | 1431 | '@esbuild/win32-ia32@0.21.5': 1432 | optional: true 1433 | 1434 | '@esbuild/win32-x64@0.21.5': 1435 | optional: true 1436 | 1437 | '@inquirer/confirm@5.1.1(@types/node@22.10.5)': 1438 | dependencies: 1439 | '@inquirer/core': 10.1.2(@types/node@22.10.5) 1440 | '@inquirer/type': 3.0.2(@types/node@22.10.5) 1441 | '@types/node': 22.10.5 1442 | 1443 | '@inquirer/core@10.1.2(@types/node@22.10.5)': 1444 | dependencies: 1445 | '@inquirer/figures': 1.0.9 1446 | '@inquirer/type': 3.0.2(@types/node@22.10.5) 1447 | ansi-escapes: 4.3.2 1448 | cli-width: 4.1.0 1449 | mute-stream: 2.0.0 1450 | signal-exit: 4.1.0 1451 | strip-ansi: 6.0.1 1452 | wrap-ansi: 6.2.0 1453 | yoctocolors-cjs: 2.1.2 1454 | transitivePeerDependencies: 1455 | - '@types/node' 1456 | 1457 | '@inquirer/figures@1.0.9': {} 1458 | 1459 | '@inquirer/type@3.0.2(@types/node@22.10.5)': 1460 | dependencies: 1461 | '@types/node': 22.10.5 1462 | 1463 | '@isaacs/cliui@8.0.2': 1464 | dependencies: 1465 | string-width: 5.1.2 1466 | string-width-cjs: string-width@4.2.3 1467 | strip-ansi: 7.1.0 1468 | strip-ansi-cjs: strip-ansi@6.0.1 1469 | wrap-ansi: 8.1.0 1470 | wrap-ansi-cjs: wrap-ansi@7.0.0 1471 | 1472 | '@istanbuljs/schema@0.1.3': {} 1473 | 1474 | '@jridgewell/gen-mapping@0.3.8': 1475 | dependencies: 1476 | '@jridgewell/set-array': 1.2.1 1477 | '@jridgewell/sourcemap-codec': 1.5.0 1478 | '@jridgewell/trace-mapping': 0.3.25 1479 | 1480 | '@jridgewell/resolve-uri@3.1.2': {} 1481 | 1482 | '@jridgewell/set-array@1.2.1': {} 1483 | 1484 | '@jridgewell/sourcemap-codec@1.5.0': {} 1485 | 1486 | '@jridgewell/trace-mapping@0.3.25': 1487 | dependencies: 1488 | '@jridgewell/resolve-uri': 3.1.2 1489 | '@jridgewell/sourcemap-codec': 1.5.0 1490 | 1491 | '@mapbox/geojson-rewind@0.5.2': 1492 | dependencies: 1493 | get-stream: 6.0.1 1494 | minimist: 1.2.8 1495 | 1496 | '@mapbox/jsonlint-lines-primitives@2.0.2': {} 1497 | 1498 | '@mapbox/point-geometry@0.1.0': {} 1499 | 1500 | '@mapbox/tiny-sdf@2.0.6': {} 1501 | 1502 | '@mapbox/unitbezier@0.0.1': {} 1503 | 1504 | '@mapbox/vector-tile@1.3.1': 1505 | dependencies: 1506 | '@mapbox/point-geometry': 0.1.0 1507 | 1508 | '@mapbox/whoots-js@3.1.0': {} 1509 | 1510 | '@maplibre/maplibre-gl-style-spec@22.0.1': 1511 | dependencies: 1512 | '@mapbox/jsonlint-lines-primitives': 2.0.2 1513 | '@mapbox/unitbezier': 0.0.1 1514 | json-stringify-pretty-compact: 4.0.0 1515 | minimist: 1.2.8 1516 | quickselect: 3.0.0 1517 | rw: 1.3.3 1518 | tinyqueue: 3.0.0 1519 | 1520 | '@mswjs/interceptors@0.37.4': 1521 | dependencies: 1522 | '@open-draft/deferred-promise': 2.2.0 1523 | '@open-draft/logger': 0.3.0 1524 | '@open-draft/until': 2.1.0 1525 | is-node-process: 1.2.0 1526 | outvariant: 1.4.3 1527 | strict-event-emitter: 0.5.1 1528 | 1529 | '@open-draft/deferred-promise@2.2.0': {} 1530 | 1531 | '@open-draft/logger@0.3.0': 1532 | dependencies: 1533 | is-node-process: 1.2.0 1534 | outvariant: 1.4.3 1535 | 1536 | '@open-draft/until@2.1.0': {} 1537 | 1538 | '@pkgjs/parseargs@0.11.0': 1539 | optional: true 1540 | 1541 | '@polka/url@1.0.0-next.28': {} 1542 | 1543 | '@rollup/rollup-android-arm-eabi@4.29.1': 1544 | optional: true 1545 | 1546 | '@rollup/rollup-android-arm64@4.29.1': 1547 | optional: true 1548 | 1549 | '@rollup/rollup-darwin-arm64@4.29.1': 1550 | optional: true 1551 | 1552 | '@rollup/rollup-darwin-x64@4.29.1': 1553 | optional: true 1554 | 1555 | '@rollup/rollup-freebsd-arm64@4.29.1': 1556 | optional: true 1557 | 1558 | '@rollup/rollup-freebsd-x64@4.29.1': 1559 | optional: true 1560 | 1561 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 1562 | optional: true 1563 | 1564 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 1565 | optional: true 1566 | 1567 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 1568 | optional: true 1569 | 1570 | '@rollup/rollup-linux-arm64-musl@4.29.1': 1571 | optional: true 1572 | 1573 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 1574 | optional: true 1575 | 1576 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 1577 | optional: true 1578 | 1579 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 1580 | optional: true 1581 | 1582 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 1583 | optional: true 1584 | 1585 | '@rollup/rollup-linux-x64-gnu@4.29.1': 1586 | optional: true 1587 | 1588 | '@rollup/rollup-linux-x64-musl@4.29.1': 1589 | optional: true 1590 | 1591 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 1592 | optional: true 1593 | 1594 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 1595 | optional: true 1596 | 1597 | '@rollup/rollup-win32-x64-msvc@4.29.1': 1598 | optional: true 1599 | 1600 | '@testing-library/dom@10.4.0': 1601 | dependencies: 1602 | '@babel/code-frame': 7.26.2 1603 | '@babel/runtime': 7.26.0 1604 | '@types/aria-query': 5.0.4 1605 | aria-query: 5.3.0 1606 | chalk: 4.1.2 1607 | dom-accessibility-api: 0.5.16 1608 | lz-string: 1.5.0 1609 | pretty-format: 27.5.1 1610 | 1611 | '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': 1612 | dependencies: 1613 | '@testing-library/dom': 10.4.0 1614 | 1615 | '@types/aria-query@5.0.4': {} 1616 | 1617 | '@types/cookie@0.6.0': {} 1618 | 1619 | '@types/estree@1.0.6': {} 1620 | 1621 | '@types/geojson-vt@3.2.5': 1622 | dependencies: 1623 | '@types/geojson': 7946.0.15 1624 | 1625 | '@types/geojson@7946.0.15': {} 1626 | 1627 | '@types/mapbox__point-geometry@0.1.4': {} 1628 | 1629 | '@types/mapbox__vector-tile@1.3.4': 1630 | dependencies: 1631 | '@types/geojson': 7946.0.15 1632 | '@types/mapbox__point-geometry': 0.1.4 1633 | '@types/pbf': 3.0.5 1634 | 1635 | '@types/node@22.10.5': 1636 | dependencies: 1637 | undici-types: 6.20.0 1638 | 1639 | '@types/pbf@3.0.5': {} 1640 | 1641 | '@types/statuses@2.0.5': {} 1642 | 1643 | '@types/supercluster@7.1.3': 1644 | dependencies: 1645 | '@types/geojson': 7946.0.15 1646 | 1647 | '@types/tough-cookie@4.0.5': {} 1648 | 1649 | '@vitest/browser@2.1.8(@types/node@22.10.5)(playwright@1.49.1)(typescript@5.7.2)(vite@3.2.11(@types/node@22.10.5))(vitest@2.1.8)': 1650 | dependencies: 1651 | '@testing-library/dom': 10.4.0 1652 | '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) 1653 | '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2))(vite@3.2.11(@types/node@22.10.5)) 1654 | '@vitest/utils': 2.1.8 1655 | magic-string: 0.30.17 1656 | msw: 2.7.0(@types/node@22.10.5)(typescript@5.7.2) 1657 | sirv: 3.0.0 1658 | tinyrainbow: 1.2.0 1659 | vitest: 2.1.8(@types/node@22.10.5)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2)) 1660 | ws: 8.18.0 1661 | optionalDependencies: 1662 | playwright: 1.49.1 1663 | transitivePeerDependencies: 1664 | - '@types/node' 1665 | - bufferutil 1666 | - typescript 1667 | - utf-8-validate 1668 | - vite 1669 | 1670 | '@vitest/coverage-v8@2.1.8(@vitest/browser@2.1.8)(vitest@2.1.8)': 1671 | dependencies: 1672 | '@ampproject/remapping': 2.3.0 1673 | '@bcoe/v8-coverage': 0.2.3 1674 | debug: 4.4.0 1675 | istanbul-lib-coverage: 3.2.2 1676 | istanbul-lib-report: 3.0.1 1677 | istanbul-lib-source-maps: 5.0.6 1678 | istanbul-reports: 3.1.7 1679 | magic-string: 0.30.17 1680 | magicast: 0.3.5 1681 | std-env: 3.8.0 1682 | test-exclude: 7.0.1 1683 | tinyrainbow: 1.2.0 1684 | vitest: 2.1.8(@types/node@22.10.5)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2)) 1685 | optionalDependencies: 1686 | '@vitest/browser': 2.1.8(@types/node@22.10.5)(playwright@1.49.1)(typescript@5.7.2)(vite@3.2.11(@types/node@22.10.5))(vitest@2.1.8) 1687 | transitivePeerDependencies: 1688 | - supports-color 1689 | 1690 | '@vitest/expect@2.1.8': 1691 | dependencies: 1692 | '@vitest/spy': 2.1.8 1693 | '@vitest/utils': 2.1.8 1694 | chai: 5.1.2 1695 | tinyrainbow: 1.2.0 1696 | 1697 | '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2))(vite@3.2.11(@types/node@22.10.5))': 1698 | dependencies: 1699 | '@vitest/spy': 2.1.8 1700 | estree-walker: 3.0.3 1701 | magic-string: 0.30.17 1702 | optionalDependencies: 1703 | msw: 2.7.0(@types/node@22.10.5)(typescript@5.7.2) 1704 | vite: 3.2.11(@types/node@22.10.5) 1705 | 1706 | '@vitest/mocker@2.1.8(msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2))(vite@5.4.11(@types/node@22.10.5))': 1707 | dependencies: 1708 | '@vitest/spy': 2.1.8 1709 | estree-walker: 3.0.3 1710 | magic-string: 0.30.17 1711 | optionalDependencies: 1712 | msw: 2.7.0(@types/node@22.10.5)(typescript@5.7.2) 1713 | vite: 5.4.11(@types/node@22.10.5) 1714 | 1715 | '@vitest/pretty-format@2.1.8': 1716 | dependencies: 1717 | tinyrainbow: 1.2.0 1718 | 1719 | '@vitest/runner@2.1.8': 1720 | dependencies: 1721 | '@vitest/utils': 2.1.8 1722 | pathe: 1.1.2 1723 | 1724 | '@vitest/snapshot@2.1.8': 1725 | dependencies: 1726 | '@vitest/pretty-format': 2.1.8 1727 | magic-string: 0.30.17 1728 | pathe: 1.1.2 1729 | 1730 | '@vitest/spy@2.1.8': 1731 | dependencies: 1732 | tinyspy: 3.0.2 1733 | 1734 | '@vitest/utils@2.1.8': 1735 | dependencies: 1736 | '@vitest/pretty-format': 2.1.8 1737 | loupe: 3.1.2 1738 | tinyrainbow: 1.2.0 1739 | 1740 | ansi-escapes@4.3.2: 1741 | dependencies: 1742 | type-fest: 0.21.3 1743 | 1744 | ansi-regex@5.0.1: {} 1745 | 1746 | ansi-regex@6.1.0: {} 1747 | 1748 | ansi-styles@4.3.0: 1749 | dependencies: 1750 | color-convert: 2.0.1 1751 | 1752 | ansi-styles@5.2.0: {} 1753 | 1754 | ansi-styles@6.2.1: {} 1755 | 1756 | aria-query@5.3.0: 1757 | dependencies: 1758 | dequal: 2.0.3 1759 | 1760 | assertion-error@2.0.1: {} 1761 | 1762 | balanced-match@1.0.2: {} 1763 | 1764 | brace-expansion@2.0.1: 1765 | dependencies: 1766 | balanced-match: 1.0.2 1767 | 1768 | cac@6.7.14: {} 1769 | 1770 | chai@5.1.2: 1771 | dependencies: 1772 | assertion-error: 2.0.1 1773 | check-error: 2.1.1 1774 | deep-eql: 5.0.2 1775 | loupe: 3.1.2 1776 | pathval: 2.0.0 1777 | 1778 | chalk@4.1.2: 1779 | dependencies: 1780 | ansi-styles: 4.3.0 1781 | supports-color: 7.2.0 1782 | 1783 | check-error@2.1.1: {} 1784 | 1785 | cli-width@4.1.0: {} 1786 | 1787 | cliui@8.0.1: 1788 | dependencies: 1789 | string-width: 4.2.3 1790 | strip-ansi: 6.0.1 1791 | wrap-ansi: 7.0.0 1792 | 1793 | color-convert@2.0.1: 1794 | dependencies: 1795 | color-name: 1.1.4 1796 | 1797 | color-name@1.1.4: {} 1798 | 1799 | cookie@0.7.2: {} 1800 | 1801 | cross-spawn@7.0.6: 1802 | dependencies: 1803 | path-key: 3.1.1 1804 | shebang-command: 2.0.0 1805 | which: 2.0.2 1806 | 1807 | debug@4.4.0: 1808 | dependencies: 1809 | ms: 2.1.3 1810 | 1811 | deep-eql@5.0.2: {} 1812 | 1813 | dequal@2.0.3: {} 1814 | 1815 | dom-accessibility-api@0.5.16: {} 1816 | 1817 | earcut@3.0.1: {} 1818 | 1819 | eastasianwidth@0.2.0: {} 1820 | 1821 | emoji-regex@8.0.0: {} 1822 | 1823 | emoji-regex@9.2.2: {} 1824 | 1825 | es-module-lexer@1.6.0: {} 1826 | 1827 | esbuild-android-64@0.15.18: 1828 | optional: true 1829 | 1830 | esbuild-android-arm64@0.15.18: 1831 | optional: true 1832 | 1833 | esbuild-darwin-64@0.15.18: 1834 | optional: true 1835 | 1836 | esbuild-darwin-arm64@0.15.18: 1837 | optional: true 1838 | 1839 | esbuild-freebsd-64@0.15.18: 1840 | optional: true 1841 | 1842 | esbuild-freebsd-arm64@0.15.18: 1843 | optional: true 1844 | 1845 | esbuild-linux-32@0.15.18: 1846 | optional: true 1847 | 1848 | esbuild-linux-64@0.15.18: 1849 | optional: true 1850 | 1851 | esbuild-linux-arm64@0.15.18: 1852 | optional: true 1853 | 1854 | esbuild-linux-arm@0.15.18: 1855 | optional: true 1856 | 1857 | esbuild-linux-mips64le@0.15.18: 1858 | optional: true 1859 | 1860 | esbuild-linux-ppc64le@0.15.18: 1861 | optional: true 1862 | 1863 | esbuild-linux-riscv64@0.15.18: 1864 | optional: true 1865 | 1866 | esbuild-linux-s390x@0.15.18: 1867 | optional: true 1868 | 1869 | esbuild-netbsd-64@0.15.18: 1870 | optional: true 1871 | 1872 | esbuild-openbsd-64@0.15.18: 1873 | optional: true 1874 | 1875 | esbuild-sunos-64@0.15.18: 1876 | optional: true 1877 | 1878 | esbuild-windows-32@0.15.18: 1879 | optional: true 1880 | 1881 | esbuild-windows-64@0.15.18: 1882 | optional: true 1883 | 1884 | esbuild-windows-arm64@0.15.18: 1885 | optional: true 1886 | 1887 | esbuild@0.15.18: 1888 | optionalDependencies: 1889 | '@esbuild/android-arm': 0.15.18 1890 | '@esbuild/linux-loong64': 0.15.18 1891 | esbuild-android-64: 0.15.18 1892 | esbuild-android-arm64: 0.15.18 1893 | esbuild-darwin-64: 0.15.18 1894 | esbuild-darwin-arm64: 0.15.18 1895 | esbuild-freebsd-64: 0.15.18 1896 | esbuild-freebsd-arm64: 0.15.18 1897 | esbuild-linux-32: 0.15.18 1898 | esbuild-linux-64: 0.15.18 1899 | esbuild-linux-arm: 0.15.18 1900 | esbuild-linux-arm64: 0.15.18 1901 | esbuild-linux-mips64le: 0.15.18 1902 | esbuild-linux-ppc64le: 0.15.18 1903 | esbuild-linux-riscv64: 0.15.18 1904 | esbuild-linux-s390x: 0.15.18 1905 | esbuild-netbsd-64: 0.15.18 1906 | esbuild-openbsd-64: 0.15.18 1907 | esbuild-sunos-64: 0.15.18 1908 | esbuild-windows-32: 0.15.18 1909 | esbuild-windows-64: 0.15.18 1910 | esbuild-windows-arm64: 0.15.18 1911 | 1912 | esbuild@0.21.5: 1913 | optionalDependencies: 1914 | '@esbuild/aix-ppc64': 0.21.5 1915 | '@esbuild/android-arm': 0.21.5 1916 | '@esbuild/android-arm64': 0.21.5 1917 | '@esbuild/android-x64': 0.21.5 1918 | '@esbuild/darwin-arm64': 0.21.5 1919 | '@esbuild/darwin-x64': 0.21.5 1920 | '@esbuild/freebsd-arm64': 0.21.5 1921 | '@esbuild/freebsd-x64': 0.21.5 1922 | '@esbuild/linux-arm': 0.21.5 1923 | '@esbuild/linux-arm64': 0.21.5 1924 | '@esbuild/linux-ia32': 0.21.5 1925 | '@esbuild/linux-loong64': 0.21.5 1926 | '@esbuild/linux-mips64el': 0.21.5 1927 | '@esbuild/linux-ppc64': 0.21.5 1928 | '@esbuild/linux-riscv64': 0.21.5 1929 | '@esbuild/linux-s390x': 0.21.5 1930 | '@esbuild/linux-x64': 0.21.5 1931 | '@esbuild/netbsd-x64': 0.21.5 1932 | '@esbuild/openbsd-x64': 0.21.5 1933 | '@esbuild/sunos-x64': 0.21.5 1934 | '@esbuild/win32-arm64': 0.21.5 1935 | '@esbuild/win32-ia32': 0.21.5 1936 | '@esbuild/win32-x64': 0.21.5 1937 | 1938 | escalade@3.2.0: {} 1939 | 1940 | estree-walker@3.0.3: 1941 | dependencies: 1942 | '@types/estree': 1.0.6 1943 | 1944 | expect-type@1.1.0: {} 1945 | 1946 | foreground-child@3.3.0: 1947 | dependencies: 1948 | cross-spawn: 7.0.6 1949 | signal-exit: 4.1.0 1950 | 1951 | fsevents@2.3.2: 1952 | optional: true 1953 | 1954 | fsevents@2.3.3: 1955 | optional: true 1956 | 1957 | function-bind@1.1.2: {} 1958 | 1959 | geojson-vt@4.0.2: {} 1960 | 1961 | get-caller-file@2.0.5: {} 1962 | 1963 | get-stream@6.0.1: {} 1964 | 1965 | gl-matrix@3.4.3: {} 1966 | 1967 | glob@10.4.5: 1968 | dependencies: 1969 | foreground-child: 3.3.0 1970 | jackspeak: 3.4.3 1971 | minimatch: 9.0.5 1972 | minipass: 7.1.2 1973 | package-json-from-dist: 1.0.1 1974 | path-scurry: 1.11.1 1975 | 1976 | global-prefix@4.0.0: 1977 | dependencies: 1978 | ini: 4.1.3 1979 | kind-of: 6.0.3 1980 | which: 4.0.0 1981 | 1982 | graphql@16.10.0: {} 1983 | 1984 | has-flag@4.0.0: {} 1985 | 1986 | hasown@2.0.2: 1987 | dependencies: 1988 | function-bind: 1.1.2 1989 | 1990 | headers-polyfill@4.0.3: {} 1991 | 1992 | html-escaper@2.0.2: {} 1993 | 1994 | ieee754@1.2.1: {} 1995 | 1996 | ini@4.1.3: {} 1997 | 1998 | is-core-module@2.16.1: 1999 | dependencies: 2000 | hasown: 2.0.2 2001 | 2002 | is-fullwidth-code-point@3.0.0: {} 2003 | 2004 | is-node-process@1.2.0: {} 2005 | 2006 | isexe@2.0.0: {} 2007 | 2008 | isexe@3.1.1: {} 2009 | 2010 | istanbul-lib-coverage@3.2.2: {} 2011 | 2012 | istanbul-lib-report@3.0.1: 2013 | dependencies: 2014 | istanbul-lib-coverage: 3.2.2 2015 | make-dir: 4.0.0 2016 | supports-color: 7.2.0 2017 | 2018 | istanbul-lib-source-maps@5.0.6: 2019 | dependencies: 2020 | '@jridgewell/trace-mapping': 0.3.25 2021 | debug: 4.4.0 2022 | istanbul-lib-coverage: 3.2.2 2023 | transitivePeerDependencies: 2024 | - supports-color 2025 | 2026 | istanbul-reports@3.1.7: 2027 | dependencies: 2028 | html-escaper: 2.0.2 2029 | istanbul-lib-report: 3.0.1 2030 | 2031 | jackspeak@3.4.3: 2032 | dependencies: 2033 | '@isaacs/cliui': 8.0.2 2034 | optionalDependencies: 2035 | '@pkgjs/parseargs': 0.11.0 2036 | 2037 | js-tokens@4.0.0: {} 2038 | 2039 | json-stringify-pretty-compact@4.0.0: {} 2040 | 2041 | kdbush@4.0.2: {} 2042 | 2043 | kind-of@6.0.3: {} 2044 | 2045 | loupe@3.1.2: {} 2046 | 2047 | lru-cache@10.4.3: {} 2048 | 2049 | lz-string@1.5.0: {} 2050 | 2051 | magic-string@0.30.17: 2052 | dependencies: 2053 | '@jridgewell/sourcemap-codec': 1.5.0 2054 | 2055 | magicast@0.3.5: 2056 | dependencies: 2057 | '@babel/parser': 7.26.3 2058 | '@babel/types': 7.26.3 2059 | source-map-js: 1.2.1 2060 | 2061 | make-dir@4.0.0: 2062 | dependencies: 2063 | semver: 7.6.3 2064 | 2065 | maplibre-gl@5.0.0: 2066 | dependencies: 2067 | '@mapbox/geojson-rewind': 0.5.2 2068 | '@mapbox/jsonlint-lines-primitives': 2.0.2 2069 | '@mapbox/point-geometry': 0.1.0 2070 | '@mapbox/tiny-sdf': 2.0.6 2071 | '@mapbox/unitbezier': 0.0.1 2072 | '@mapbox/vector-tile': 1.3.1 2073 | '@mapbox/whoots-js': 3.1.0 2074 | '@maplibre/maplibre-gl-style-spec': 22.0.1 2075 | '@types/geojson': 7946.0.15 2076 | '@types/geojson-vt': 3.2.5 2077 | '@types/mapbox__point-geometry': 0.1.4 2078 | '@types/mapbox__vector-tile': 1.3.4 2079 | '@types/pbf': 3.0.5 2080 | '@types/supercluster': 7.1.3 2081 | earcut: 3.0.1 2082 | geojson-vt: 4.0.2 2083 | gl-matrix: 3.4.3 2084 | global-prefix: 4.0.0 2085 | kdbush: 4.0.2 2086 | murmurhash-js: 1.0.0 2087 | pbf: 3.3.0 2088 | potpack: 2.0.0 2089 | quickselect: 3.0.0 2090 | supercluster: 8.0.1 2091 | tinyqueue: 3.0.0 2092 | vt-pbf: 3.1.3 2093 | 2094 | minimatch@9.0.5: 2095 | dependencies: 2096 | brace-expansion: 2.0.1 2097 | 2098 | minimist@1.2.8: {} 2099 | 2100 | minipass@7.1.2: {} 2101 | 2102 | mrmime@2.0.0: {} 2103 | 2104 | ms@2.1.3: {} 2105 | 2106 | msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2): 2107 | dependencies: 2108 | '@bundled-es-modules/cookie': 2.0.1 2109 | '@bundled-es-modules/statuses': 1.0.1 2110 | '@bundled-es-modules/tough-cookie': 0.1.6 2111 | '@inquirer/confirm': 5.1.1(@types/node@22.10.5) 2112 | '@mswjs/interceptors': 0.37.4 2113 | '@open-draft/deferred-promise': 2.2.0 2114 | '@open-draft/until': 2.1.0 2115 | '@types/cookie': 0.6.0 2116 | '@types/statuses': 2.0.5 2117 | graphql: 16.10.0 2118 | headers-polyfill: 4.0.3 2119 | is-node-process: 1.2.0 2120 | outvariant: 1.4.3 2121 | path-to-regexp: 6.3.0 2122 | picocolors: 1.1.1 2123 | strict-event-emitter: 0.5.1 2124 | type-fest: 4.31.0 2125 | yargs: 17.7.2 2126 | optionalDependencies: 2127 | typescript: 5.7.2 2128 | transitivePeerDependencies: 2129 | - '@types/node' 2130 | 2131 | murmurhash-js@1.0.0: {} 2132 | 2133 | mute-stream@2.0.0: {} 2134 | 2135 | nanoid@3.3.8: {} 2136 | 2137 | outvariant@1.4.3: {} 2138 | 2139 | package-json-from-dist@1.0.1: {} 2140 | 2141 | path-key@3.1.1: {} 2142 | 2143 | path-parse@1.0.7: {} 2144 | 2145 | path-scurry@1.11.1: 2146 | dependencies: 2147 | lru-cache: 10.4.3 2148 | minipass: 7.1.2 2149 | 2150 | path-to-regexp@6.3.0: {} 2151 | 2152 | pathe@1.1.2: {} 2153 | 2154 | pathval@2.0.0: {} 2155 | 2156 | pbf@3.3.0: 2157 | dependencies: 2158 | ieee754: 1.2.1 2159 | resolve-protobuf-schema: 2.1.0 2160 | 2161 | picocolors@1.1.1: {} 2162 | 2163 | playwright-core@1.49.1: {} 2164 | 2165 | playwright@1.49.1: 2166 | dependencies: 2167 | playwright-core: 1.49.1 2168 | optionalDependencies: 2169 | fsevents: 2.3.2 2170 | 2171 | postcss@8.4.49: 2172 | dependencies: 2173 | nanoid: 3.3.8 2174 | picocolors: 1.1.1 2175 | source-map-js: 1.2.1 2176 | 2177 | potpack@2.0.0: {} 2178 | 2179 | pretty-format@27.5.1: 2180 | dependencies: 2181 | ansi-regex: 5.0.1 2182 | ansi-styles: 5.2.0 2183 | react-is: 17.0.2 2184 | 2185 | protocol-buffers-schema@3.6.0: {} 2186 | 2187 | psl@1.15.0: 2188 | dependencies: 2189 | punycode: 2.3.1 2190 | 2191 | punycode@2.3.1: {} 2192 | 2193 | querystringify@2.2.0: {} 2194 | 2195 | quickselect@3.0.0: {} 2196 | 2197 | react-is@17.0.2: {} 2198 | 2199 | regenerator-runtime@0.14.1: {} 2200 | 2201 | require-directory@2.1.1: {} 2202 | 2203 | requires-port@1.0.0: {} 2204 | 2205 | resolve-protobuf-schema@2.1.0: 2206 | dependencies: 2207 | protocol-buffers-schema: 3.6.0 2208 | 2209 | resolve@1.22.10: 2210 | dependencies: 2211 | is-core-module: 2.16.1 2212 | path-parse: 1.0.7 2213 | supports-preserve-symlinks-flag: 1.0.0 2214 | 2215 | rollup@2.79.2: 2216 | optionalDependencies: 2217 | fsevents: 2.3.3 2218 | 2219 | rollup@4.29.1: 2220 | dependencies: 2221 | '@types/estree': 1.0.6 2222 | optionalDependencies: 2223 | '@rollup/rollup-android-arm-eabi': 4.29.1 2224 | '@rollup/rollup-android-arm64': 4.29.1 2225 | '@rollup/rollup-darwin-arm64': 4.29.1 2226 | '@rollup/rollup-darwin-x64': 4.29.1 2227 | '@rollup/rollup-freebsd-arm64': 4.29.1 2228 | '@rollup/rollup-freebsd-x64': 4.29.1 2229 | '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 2230 | '@rollup/rollup-linux-arm-musleabihf': 4.29.1 2231 | '@rollup/rollup-linux-arm64-gnu': 4.29.1 2232 | '@rollup/rollup-linux-arm64-musl': 4.29.1 2233 | '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 2234 | '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 2235 | '@rollup/rollup-linux-riscv64-gnu': 4.29.1 2236 | '@rollup/rollup-linux-s390x-gnu': 4.29.1 2237 | '@rollup/rollup-linux-x64-gnu': 4.29.1 2238 | '@rollup/rollup-linux-x64-musl': 4.29.1 2239 | '@rollup/rollup-win32-arm64-msvc': 4.29.1 2240 | '@rollup/rollup-win32-ia32-msvc': 4.29.1 2241 | '@rollup/rollup-win32-x64-msvc': 4.29.1 2242 | fsevents: 2.3.3 2243 | 2244 | rw@1.3.3: {} 2245 | 2246 | semver@7.6.3: {} 2247 | 2248 | shebang-command@2.0.0: 2249 | dependencies: 2250 | shebang-regex: 3.0.0 2251 | 2252 | shebang-regex@3.0.0: {} 2253 | 2254 | siginfo@2.0.0: {} 2255 | 2256 | signal-exit@4.1.0: {} 2257 | 2258 | sirv@3.0.0: 2259 | dependencies: 2260 | '@polka/url': 1.0.0-next.28 2261 | mrmime: 2.0.0 2262 | totalist: 3.0.1 2263 | 2264 | source-map-js@1.2.1: {} 2265 | 2266 | stackback@0.0.2: {} 2267 | 2268 | statuses@2.0.1: {} 2269 | 2270 | std-env@3.8.0: {} 2271 | 2272 | strict-event-emitter@0.5.1: {} 2273 | 2274 | string-width@4.2.3: 2275 | dependencies: 2276 | emoji-regex: 8.0.0 2277 | is-fullwidth-code-point: 3.0.0 2278 | strip-ansi: 6.0.1 2279 | 2280 | string-width@5.1.2: 2281 | dependencies: 2282 | eastasianwidth: 0.2.0 2283 | emoji-regex: 9.2.2 2284 | strip-ansi: 7.1.0 2285 | 2286 | strip-ansi@6.0.1: 2287 | dependencies: 2288 | ansi-regex: 5.0.1 2289 | 2290 | strip-ansi@7.1.0: 2291 | dependencies: 2292 | ansi-regex: 6.1.0 2293 | 2294 | supercluster@8.0.1: 2295 | dependencies: 2296 | kdbush: 4.0.2 2297 | 2298 | supports-color@7.2.0: 2299 | dependencies: 2300 | has-flag: 4.0.0 2301 | 2302 | supports-preserve-symlinks-flag@1.0.0: {} 2303 | 2304 | test-exclude@7.0.1: 2305 | dependencies: 2306 | '@istanbuljs/schema': 0.1.3 2307 | glob: 10.4.5 2308 | minimatch: 9.0.5 2309 | 2310 | tinybench@2.9.0: {} 2311 | 2312 | tinyexec@0.3.2: {} 2313 | 2314 | tinypool@1.0.2: {} 2315 | 2316 | tinyqueue@3.0.0: {} 2317 | 2318 | tinyrainbow@1.2.0: {} 2319 | 2320 | tinyspy@3.0.2: {} 2321 | 2322 | totalist@3.0.1: {} 2323 | 2324 | tough-cookie@4.1.4: 2325 | dependencies: 2326 | psl: 1.15.0 2327 | punycode: 2.3.1 2328 | universalify: 0.2.0 2329 | url-parse: 1.5.10 2330 | 2331 | type-fest@0.21.3: {} 2332 | 2333 | type-fest@4.31.0: {} 2334 | 2335 | typescript@5.7.2: {} 2336 | 2337 | undici-types@6.20.0: {} 2338 | 2339 | universalify@0.2.0: {} 2340 | 2341 | url-parse@1.5.10: 2342 | dependencies: 2343 | querystringify: 2.2.0 2344 | requires-port: 1.0.0 2345 | 2346 | vite-node@2.1.8(@types/node@22.10.5): 2347 | dependencies: 2348 | cac: 6.7.14 2349 | debug: 4.4.0 2350 | es-module-lexer: 1.6.0 2351 | pathe: 1.1.2 2352 | vite: 5.4.11(@types/node@22.10.5) 2353 | transitivePeerDependencies: 2354 | - '@types/node' 2355 | - less 2356 | - lightningcss 2357 | - sass 2358 | - sass-embedded 2359 | - stylus 2360 | - sugarss 2361 | - supports-color 2362 | - terser 2363 | 2364 | vite@3.2.11(@types/node@22.10.5): 2365 | dependencies: 2366 | esbuild: 0.15.18 2367 | postcss: 8.4.49 2368 | resolve: 1.22.10 2369 | rollup: 2.79.2 2370 | optionalDependencies: 2371 | '@types/node': 22.10.5 2372 | fsevents: 2.3.3 2373 | 2374 | vite@5.4.11(@types/node@22.10.5): 2375 | dependencies: 2376 | esbuild: 0.21.5 2377 | postcss: 8.4.49 2378 | rollup: 4.29.1 2379 | optionalDependencies: 2380 | '@types/node': 22.10.5 2381 | fsevents: 2.3.3 2382 | 2383 | vitest@2.1.8(@types/node@22.10.5)(@vitest/browser@2.1.8)(msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2)): 2384 | dependencies: 2385 | '@vitest/expect': 2.1.8 2386 | '@vitest/mocker': 2.1.8(msw@2.7.0(@types/node@22.10.5)(typescript@5.7.2))(vite@5.4.11(@types/node@22.10.5)) 2387 | '@vitest/pretty-format': 2.1.8 2388 | '@vitest/runner': 2.1.8 2389 | '@vitest/snapshot': 2.1.8 2390 | '@vitest/spy': 2.1.8 2391 | '@vitest/utils': 2.1.8 2392 | chai: 5.1.2 2393 | debug: 4.4.0 2394 | expect-type: 1.1.0 2395 | magic-string: 0.30.17 2396 | pathe: 1.1.2 2397 | std-env: 3.8.0 2398 | tinybench: 2.9.0 2399 | tinyexec: 0.3.2 2400 | tinypool: 1.0.2 2401 | tinyrainbow: 1.2.0 2402 | vite: 5.4.11(@types/node@22.10.5) 2403 | vite-node: 2.1.8(@types/node@22.10.5) 2404 | why-is-node-running: 2.3.0 2405 | optionalDependencies: 2406 | '@types/node': 22.10.5 2407 | '@vitest/browser': 2.1.8(@types/node@22.10.5)(playwright@1.49.1)(typescript@5.7.2)(vite@3.2.11(@types/node@22.10.5))(vitest@2.1.8) 2408 | transitivePeerDependencies: 2409 | - less 2410 | - lightningcss 2411 | - msw 2412 | - sass 2413 | - sass-embedded 2414 | - stylus 2415 | - sugarss 2416 | - supports-color 2417 | - terser 2418 | 2419 | vt-pbf@3.1.3: 2420 | dependencies: 2421 | '@mapbox/point-geometry': 0.1.0 2422 | '@mapbox/vector-tile': 1.3.1 2423 | pbf: 3.3.0 2424 | 2425 | which@2.0.2: 2426 | dependencies: 2427 | isexe: 2.0.0 2428 | 2429 | which@4.0.0: 2430 | dependencies: 2431 | isexe: 3.1.1 2432 | 2433 | why-is-node-running@2.3.0: 2434 | dependencies: 2435 | siginfo: 2.0.0 2436 | stackback: 0.0.2 2437 | 2438 | wrap-ansi@6.2.0: 2439 | dependencies: 2440 | ansi-styles: 4.3.0 2441 | string-width: 4.2.3 2442 | strip-ansi: 6.0.1 2443 | 2444 | wrap-ansi@7.0.0: 2445 | dependencies: 2446 | ansi-styles: 4.3.0 2447 | string-width: 4.2.3 2448 | strip-ansi: 6.0.1 2449 | 2450 | wrap-ansi@8.1.0: 2451 | dependencies: 2452 | ansi-styles: 6.2.1 2453 | string-width: 5.1.2 2454 | strip-ansi: 7.1.0 2455 | 2456 | ws@8.18.0: {} 2457 | 2458 | y18n@5.0.8: {} 2459 | 2460 | yargs-parser@21.1.1: {} 2461 | 2462 | yargs@17.7.2: 2463 | dependencies: 2464 | cliui: 8.0.1 2465 | escalade: 3.2.0 2466 | get-caller-file: 2.0.5 2467 | require-directory: 2.1.1 2468 | string-width: 4.2.3 2469 | y18n: 5.0.8 2470 | yargs-parser: 21.1.1 2471 | 2472 | yoctocolors-cjs@2.1.2: {} 2473 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mug-jp/maplibre-gl-gsi-terrain/cf3180f65303f32f2ed22e41ca78412cb5b94d0d/screenshot.png -------------------------------------------------------------------------------- /src/terrain.test.ts: -------------------------------------------------------------------------------- 1 | import { expect, test } from 'vitest'; 2 | import { getGsiDemProtocolAction, useGsiTerrainSource } from './terrain'; 3 | import maplibregl, { 4 | Map, 5 | type RasterDEMSourceSpecification, 6 | } from 'maplibre-gl'; 7 | 8 | test('getGsiDemProtocolAction', async () => { 9 | const protocolAction = getGsiDemProtocolAction('myprotocol'); 10 | maplibregl.addProtocol('myprotocol', protocolAction); 11 | const myProtocolSource: RasterDEMSourceSpecification = { 12 | type: 'raster-dem', 13 | tiles: ['myprotocol://https://example.com/{z}/{x}/{y}.png'], 14 | tileSize: 256, 15 | minzoom: 1, 16 | maxzoom: 17, 17 | attribution: 'example', 18 | }; 19 | 20 | const map = new Map({ 21 | container: document.createElement('div'), 22 | style: { 23 | version: 8, 24 | sources: { myProtocolSource }, 25 | layers: [], 26 | terrain: { source: 'myProtocolSource', exaggeration: 1.2 }, 27 | }, 28 | }); 29 | 30 | await new Promise((resolve) => map.on('load', resolve)); 31 | 32 | expect(map.getSource('myProtocolSource')).toBeDefined(); 33 | expect(map.getTerrain()).toEqual({ 34 | source: 'myProtocolSource', 35 | exaggeration: 1.2, 36 | }); 37 | }); 38 | 39 | test('useGsiTerrainSource', async () => { 40 | const gsiTerrainSource = useGsiTerrainSource(maplibregl.addProtocol); 41 | const map = new Map({ 42 | container: document.createElement('div'), 43 | style: { 44 | version: 8, 45 | sources: { terrain: gsiTerrainSource }, 46 | layers: [], 47 | terrain: { source: 'terrain', exaggeration: 1.234 }, 48 | }, 49 | }); 50 | 51 | await new Promise((resolve) => map.on('load', resolve)); 52 | 53 | expect(map.getSource('terrain')).toBeDefined(); 54 | expect(map.getTerrain()).toEqual({ 55 | source: 'terrain', 56 | exaggeration: 1.234, 57 | }); 58 | }); 59 | -------------------------------------------------------------------------------- /src/terrain.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | AddProtocolAction, 3 | RasterDEMSourceSpecification, 4 | } from 'maplibre-gl'; 5 | import maplibregl from 'maplibre-gl'; 6 | import { workerCode } from './worker'; 7 | 8 | const loadImage = async ( 9 | src: string, 10 | signal: AbortSignal, 11 | ): Promise => { 12 | let response: Response; 13 | try { 14 | response = await fetch(src, { signal }); 15 | } catch (e) { 16 | if (!signal.aborted) { 17 | console.error(`Failed to fetch image: ${e}`); 18 | } 19 | return null; 20 | } 21 | if (!response.ok) { 22 | return null; 23 | } 24 | return await createImageBitmap(await response.blob()); 25 | }; 26 | class WorkerProtocol { 27 | private worker: Worker; 28 | private pendingRequests: Map< 29 | string, 30 | { 31 | resolve: ( 32 | value: { data: Uint8Array } | PromiseLike<{ data: Uint8Array }>, 33 | ) => void; 34 | reject: (reason?: Error) => void; 35 | controller: AbortController; 36 | } 37 | >; 38 | 39 | constructor(worker: Worker) { 40 | this.worker = worker; 41 | this.pendingRequests = new Map(); 42 | this.worker.addEventListener('message', this.handleMessage); 43 | this.worker.addEventListener('error', this.handleError); 44 | } 45 | 46 | async request( 47 | url: string, 48 | controller: AbortController, 49 | ): Promise<{ data: Uint8Array }> { 50 | const image = await loadImage(url, controller.signal); 51 | 52 | if (!image) { 53 | return Promise.reject(new Error('Failed to load image')); 54 | } 55 | 56 | return new Promise((resolve, reject) => { 57 | this.pendingRequests.set(url, { resolve, reject, controller }); 58 | this.worker.postMessage({ image, url }); 59 | 60 | controller.signal.onabort = () => { 61 | this.pendingRequests.delete(url); 62 | reject(new Error('Request aborted')); 63 | }; 64 | }); 65 | } 66 | 67 | private handleMessage = (e: MessageEvent) => { 68 | const { url, buffer, error } = e.data; 69 | if (error) { 70 | console.error(`Error processing tile ${url}:`, error); 71 | } else { 72 | const request = this.pendingRequests.get(url); 73 | if (request) { 74 | request.resolve({ data: new Uint8Array(buffer) }); 75 | this.pendingRequests.delete(url); 76 | } 77 | } 78 | }; 79 | 80 | private handleError = (e: ErrorEvent) => { 81 | console.error('Worker error:', e); 82 | this.pendingRequests.forEach((request) => { 83 | request.reject(new Error('Worker error occurred')); 84 | }); 85 | this.pendingRequests.clear(); 86 | }; 87 | } 88 | 89 | const blob = new Blob([workerCode], { type: 'application/javascript' }); 90 | const worker = new Worker(URL.createObjectURL(blob)); 91 | const workerProtocol = new WorkerProtocol(worker); 92 | 93 | type Options = { 94 | attribution?: string; 95 | maxzoom?: number; 96 | minzoom?: number; 97 | tileUrl?: string; 98 | }; 99 | 100 | /** 101 | * 地理院標高タイルを利用したtype=raster-demのsourceを返す 102 | * @param addProtocol 103 | * @param options 104 | * @returns {RasterDEMSourceSpecification} - source 105 | * @example 106 | * const gsiTerrainSource = useGsiTerrainSource(maplibreGl.addProtocol); 107 | * const map = new Map({ 108 | * container: 'app', 109 | * style: { 110 | * version: 8, 111 | * sources: { 112 | * terrain: gsiTerrainSource, 113 | * }, 114 | * terrain: { 115 | * source: 'terrain', 116 | * exaggeration: 1.2, 117 | * }, 118 | * }, 119 | * }); 120 | * 121 | * const seamlessTerrainSource = useGsiTerrainSource(maplibreGl.addProtocol, { 122 | * tileUrl: 'https://tiles.gsj.jp/tiles/elev/mixed/{z}/{y}/{x}.png', 123 | * minzoom: 1, 124 | * maxzoom: 17, 125 | * attribution: '産総研シームレス標高タイル', 126 | * }); 127 | */ 128 | export const useGsiTerrainSource = ( 129 | addProtocol: typeof maplibregl.addProtocol, 130 | options: Options = {}, 131 | ): RasterDEMSourceSpecification => { 132 | const protocolName = 'gsidem'; 133 | const protocolAction = getGsiDemProtocolAction(protocolName); 134 | addProtocol(protocolName, protocolAction); 135 | 136 | const tileUrl = 137 | options.tileUrl ?? 138 | `https://cyberjapandata.gsi.go.jp/xyz/dem_png/{z}/{x}/{y}.png`; 139 | 140 | return { 141 | type: 'raster-dem', 142 | tiles: [`gsidem://${tileUrl}`], 143 | tileSize: 256, 144 | encoding: 'terrarium', 145 | minzoom: options.minzoom ?? 1, 146 | maxzoom: options.maxzoom ?? 14, 147 | attribution: 148 | options.attribution ?? 149 | '地理院タイル', 150 | }; 151 | }; 152 | 153 | /** 154 | * 地理院標高タイルを利用してtype=raster-demのsourceを生成するためのProtocolActionを返す 155 | * @param customProtocol - 任意のプロトコル名(例: 'gsidem') 156 | * @returns {AddProtocolAction} - ProtocolAction 157 | * @example 158 | * const protocolAction = getGsiDemProtocolAction('gsidem'); 159 | * addProtocol('gsidem', protocolAction); 160 | * const rasterDemSource = { 161 | * type: 'raster-dem', 162 | * tiles: ['gsidem://https://cyberjapandata.gsi.go.jp/xyz/dem_png/{z}/{x}/{y}.png'], 163 | * tileSize: 256, 164 | * minzoom: 1, 165 | * maxzoom: 14, 166 | * attribution: '地理院タイル', 167 | * }; 168 | * const map = new Map({container: 'app', style: {sources: {terrain: gsiTerrainSource}}}); 169 | */ 170 | export const getGsiDemProtocolAction = ( 171 | customProtocol: string, 172 | ): AddProtocolAction => { 173 | return (params, abortController) => { 174 | const urlWithoutProtocol = params.url.replace(customProtocol + '://', ''); 175 | return workerProtocol.request(urlWithoutProtocol, abortController); 176 | }; 177 | }; 178 | -------------------------------------------------------------------------------- /src/worker.ts: -------------------------------------------------------------------------------- 1 | // インラインWebワーカーのコードを文字列で定義 2 | export const workerCode = ` 3 | const vsSource = \`#version 300 es 4 | in vec4 a_position; 5 | out vec2 v_tex_coord; 6 | 7 | void main() { 8 | gl_Position = a_position; 9 | v_tex_coord = vec2(a_position.x * 0.5 + 0.5, a_position.y * -0.5 + 0.5); 10 | } 11 | \`; 12 | 13 | const fsSource = \`#version 300 es 14 | #ifdef GL_FRAGMENT_PRECISION_HIGH 15 | precision highp float; 16 | #else 17 | precision mediump float; 18 | #endif 19 | 20 | uniform sampler2D u_height_map; 21 | in vec2 v_tex_coord; 22 | out vec4 fragColor; 23 | 24 | void main() { 25 | vec4 color = texture(u_height_map, v_tex_coord); 26 | vec3 rgb = color.rgb * 255.0; 27 | 28 | // terrariumにおける高度0の色 29 | vec4 zero_elevation_color = vec4(128.0, 0.0, 0.0, 255.0) / 255.0; 30 | 31 | // 地理院標高タイルの無効値または完全に透明なピクセルの判定 32 | bool is_valid = (rgb.r != 128.0 || rgb.g != 0.0 || rgb.b != 0.0) && color.a != 0.0; 33 | 34 | float rgb_value = dot(rgb, vec3(65536.0, 256.0, 1.0)); 35 | float height = mix(rgb_value, rgb_value - 16777216.0, step(8388608.0, rgb_value)) * 0.01; 36 | 37 | // terrariumの標高値エンコード 38 | height += 32768.0; 39 | float r = floor(height / 256.0); 40 | float g = floor(mod(height, 256.0)); 41 | float b = floor((height - floor(height)) * 256.0); 42 | 43 | // terrariumの標高値を色に変換 44 | fragColor = mix( 45 | zero_elevation_color, 46 | vec4( 47 | r / 255.0, 48 | g / 255.0, 49 | b / 255.0, 50 | 1.0 51 | ), 52 | float(is_valid) 53 | ); 54 | } 55 | \`; 56 | 57 | let gl = null; 58 | let program = null; 59 | let positionBuffer = null; 60 | let heightMapLocation = null; 61 | 62 | const initWebGL = (canvas) => { 63 | gl = canvas.getContext('webgl2'); 64 | if (!gl) { 65 | throw new Error('WebGL not supported'); 66 | } 67 | 68 | const loadShader = ( 69 | gl, 70 | type, 71 | source, 72 | ) => { 73 | const shader = gl.createShader(type); 74 | if (!shader) { 75 | console.error('Unable to create shader'); 76 | return null; 77 | } 78 | gl.shaderSource(shader, source); 79 | gl.compileShader(shader); 80 | 81 | if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { 82 | console.error( 83 | 'An error occurred compiling the shaders: ' + 84 | gl.getShaderInfoLog(shader), 85 | ); 86 | gl.deleteShader(shader); 87 | return null; 88 | } 89 | return shader; 90 | }; 91 | 92 | const vertexShader = loadShader(gl, gl.VERTEX_SHADER, vsSource); 93 | const fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fsSource); 94 | if (!vertexShader || !fragmentShader) { 95 | throw new Error('Failed to load shaders'); 96 | } 97 | 98 | program = gl.createProgram(); 99 | if (!program) { 100 | throw new Error('Failed to create program'); 101 | } 102 | gl.attachShader(program, vertexShader); 103 | gl.attachShader(program, fragmentShader); 104 | gl.linkProgram(program); 105 | 106 | if (!gl.getProgramParameter(program, gl.LINK_STATUS)) { 107 | console.error( 108 | 'Unable to initialize the shader program: ' + 109 | gl.getProgramInfoLog(program), 110 | ); 111 | throw new Error('Failed to link program'); 112 | } 113 | 114 | positionBuffer = gl.createBuffer(); 115 | gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); 116 | const positions = new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]); 117 | gl.bufferData(gl.ARRAY_BUFFER, positions, gl.STATIC_DRAW); 118 | const positionLocation = gl.getAttribLocation(program, 'a_position'); 119 | gl.enableVertexAttribArray(positionLocation); 120 | gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0); 121 | 122 | heightMapLocation = gl.getUniformLocation(program, 'u_height_map'); 123 | }; 124 | 125 | const canvas = new OffscreenCanvas(256, 256); 126 | 127 | self.onmessage = async (e) => { 128 | const { url, image } = e.data; 129 | 130 | try { 131 | if (!gl) { 132 | initWebGL(canvas); 133 | } 134 | 135 | if (!gl || !program || !positionBuffer || !heightMapLocation) { 136 | throw new Error('WebGL initialization failed'); 137 | } 138 | 139 | const heightMap = gl.createTexture(); 140 | gl.activeTexture(gl.TEXTURE0); 141 | gl.bindTexture(gl.TEXTURE_2D, heightMap); 142 | gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); 143 | gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); 144 | gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); 145 | gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); 146 | gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 147 | 148 | gl.useProgram(program); 149 | gl.uniform1i(heightMapLocation, 0); 150 | 151 | gl.clear(gl.COLOR_BUFFER_BIT); 152 | gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); 153 | 154 | const blob = await canvas.convertToBlob(); 155 | if (!blob) { 156 | throw new Error('Failed to convert canvas to blob'); 157 | } 158 | const buffer = await blob.arrayBuffer(); 159 | self.postMessage({ url, buffer }); 160 | } catch (error) { 161 | if (error instanceof Error) { 162 | self.postMessage({ url, error: error.message }); 163 | } 164 | } 165 | }; 166 | `; 167 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "types": ["vite/client"], 5 | "useDefineForClassFields": true, 6 | "module": "ESNext", 7 | "lib": ["ESNext", "DOM"], 8 | "moduleResolution": "Node", 9 | "strict": true, 10 | "resolveJsonModule": true, 11 | "isolatedModules": true, 12 | "esModuleInterop": true, 13 | "declaration": true, 14 | "declarationMap": true, 15 | "declarationDir": "dist", 16 | "emitDeclarationOnly": true, 17 | "noUnusedLocals": true, 18 | "noUnusedParameters": true, 19 | "noImplicitReturns": true, 20 | "skipLibCheck": true, 21 | "outDir": "dist" 22 | }, 23 | "include": ["src/terrain.ts"] 24 | } 25 | -------------------------------------------------------------------------------- /vite.config.example.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | 3 | export default defineConfig({ 4 | root: './example', 5 | base: './', 6 | build: { 7 | outDir: '../demo', 8 | rollupOptions: { 9 | input: { 10 | index: 'example/index.html', 11 | }, 12 | }, 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | // vite.config.js 2 | import { defineConfig } from 'vite'; 3 | 4 | export default defineConfig({ 5 | build: { 6 | outDir: 'dist', 7 | base: './', 8 | lib: { 9 | entry: 'src/terrain.ts', 10 | name: 'terrain', 11 | fileName: 'terrain', 12 | }, 13 | }, 14 | test: { 15 | browser: { 16 | provider: 'playwright', // or 'webdriverio' 17 | enabled: true, 18 | name: 'chromium', // browser name is required 19 | headless: true, 20 | }, 21 | }, 22 | }); 23 | --------------------------------------------------------------------------------