From 64fa3197ec6ce07aa6a9b2db4bb65a19456ea19a Mon Sep 17 00:00:00 2001 From: sdairs Date: Mon, 5 Oct 2026 11:17:46 +0100 Subject: [PATCH] Add PostGIS field dispatch map with React and deck.gl --- .github/workflows/field-dispatch.yml | 25 + applications/field-dispatch/.env.example | 4 + applications/field-dispatch/.gitignore | 7 + applications/field-dispatch/.node-version | 1 + applications/field-dispatch/README.md | 240 + .../field-dispatch/THIRD_PARTY_NOTICES.md | 23 + .../field-dispatch/docs/dispatch-desktop.png | Bin 0 -> 161335 bytes .../field-dispatch/docs/dispatch-mobile.png | Bin 0 -> 94407 bytes applications/field-dispatch/index.html | 2 + applications/field-dispatch/package-lock.json | 4596 +++++++++++++++++ applications/field-dispatch/package.json | 44 + .../field-dispatch/playwright.config.ts | 20 + .../public/maintenance-town.pmtiles | Bin 0 -> 7995 bytes .../scripts/generate-basemap.py | 76 + .../field-dispatch/server/database.ts | 35 + .../field-dispatch/server/dispatch.ts | 153 + applications/field-dispatch/server/http.ts | 149 + applications/field-dispatch/server/index.ts | 19 + applications/field-dispatch/sql/bootstrap.sql | 13 + applications/field-dispatch/sql/grants.sql | 7 + .../sql/migrations/001_initial.sql | 37 + applications/field-dispatch/sql/seed.sql | 58 + applications/field-dispatch/src/MapView.tsx | 275 + applications/field-dispatch/src/domain.ts | 59 + applications/field-dispatch/src/main.tsx | 346 ++ applications/field-dispatch/src/styles.css | 393 ++ .../tests/browser/dispatch.spec.ts | 308 ++ .../field-dispatch/tests/database.test.ts | 183 + .../field-dispatch/tests/native.test.ts | 82 + applications/field-dispatch/tsconfig.json | 28 + applications/field-dispatch/vite.config.ts | 3 + 31 files changed, 7186 insertions(+) create mode 100644 .github/workflows/field-dispatch.yml create mode 100644 applications/field-dispatch/.env.example create mode 100644 applications/field-dispatch/.gitignore create mode 100644 applications/field-dispatch/.node-version create mode 100644 applications/field-dispatch/README.md create mode 100644 applications/field-dispatch/THIRD_PARTY_NOTICES.md create mode 100644 applications/field-dispatch/docs/dispatch-desktop.png create mode 100644 applications/field-dispatch/docs/dispatch-mobile.png create mode 100644 applications/field-dispatch/index.html create mode 100644 applications/field-dispatch/package-lock.json create mode 100644 applications/field-dispatch/package.json create mode 100644 applications/field-dispatch/playwright.config.ts create mode 100644 applications/field-dispatch/public/maintenance-town.pmtiles create mode 100644 applications/field-dispatch/scripts/generate-basemap.py create mode 100644 applications/field-dispatch/server/database.ts create mode 100644 applications/field-dispatch/server/dispatch.ts create mode 100644 applications/field-dispatch/server/http.ts create mode 100644 applications/field-dispatch/server/index.ts create mode 100644 applications/field-dispatch/sql/bootstrap.sql create mode 100644 applications/field-dispatch/sql/grants.sql create mode 100644 applications/field-dispatch/sql/migrations/001_initial.sql create mode 100644 applications/field-dispatch/sql/seed.sql create mode 100644 applications/field-dispatch/src/MapView.tsx create mode 100644 applications/field-dispatch/src/domain.ts create mode 100644 applications/field-dispatch/src/main.tsx create mode 100644 applications/field-dispatch/src/styles.css create mode 100644 applications/field-dispatch/tests/browser/dispatch.spec.ts create mode 100644 applications/field-dispatch/tests/database.test.ts create mode 100644 applications/field-dispatch/tests/native.test.ts create mode 100644 applications/field-dispatch/tsconfig.json create mode 100644 applications/field-dispatch/vite.config.ts diff --git a/.github/workflows/field-dispatch.yml b/.github/workflows/field-dispatch.yml new file mode 100644 index 00000000..531f3e67 --- /dev/null +++ b/.github/workflows/field-dispatch.yml @@ -0,0 +1,25 @@ +name: Field dispatch +on: + pull_request: + paths: ['applications/field-dispatch/**', '.github/workflows/field-dispatch.yml'] + push: + paths: ['applications/field-dispatch/**', '.github/workflows/field-dispatch.yml'] +permissions: + contents: read +jobs: + native: + runs-on: ubuntu-latest + defaults: + run: + working-directory: applications/field-dispatch + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: applications/field-dispatch/.node-version + cache: npm + cache-dependency-path: applications/field-dispatch/package-lock.json + - run: npm ci --ignore-scripts --strict-peer-deps + - run: npm test + - run: npm run check + - run: npm run build diff --git a/applications/field-dispatch/.env.example b/applications/field-dispatch/.env.example new file mode 100644 index 00000000..fb5bd401 --- /dev/null +++ b/applications/field-dispatch/.env.example @@ -0,0 +1,4 @@ +DATABASE_URL=postgresql://dispatch_app:replace-me@replace-me:5432/postgres +DATABASE_CA_PATH=.deployment/ca.pem +APP_ORIGIN=http://127.0.0.1:3002 +PORT=3002 diff --git a/applications/field-dispatch/.gitignore b/applications/field-dispatch/.gitignore new file mode 100644 index 00000000..3f4ea5ad --- /dev/null +++ b/applications/field-dispatch/.gitignore @@ -0,0 +1,7 @@ +.env +.deployment/ +node_modules/ +dist/ +test-results/ +playwright-report/ +__pycache__/ diff --git a/applications/field-dispatch/.node-version b/applications/field-dispatch/.node-version new file mode 100644 index 00000000..df6ae337 --- /dev/null +++ b/applications/field-dispatch/.node-version @@ -0,0 +1 @@ +24.21.0 diff --git a/applications/field-dispatch/README.md b/applications/field-dispatch/README.md new file mode 100644 index 00000000..56839c6e --- /dev/null +++ b/applications/field-dispatch/README.md @@ -0,0 +1,240 @@ +# Field dispatch + +A synthetic maintenance desk built with **React, MapLibre GL JS, deck.gl, Turf.js, +PMTiles and PostGIS** on [ClickHouse Managed Postgres](https://clickhouse.com/cloud/postgres). +Pan the town, review jobs within the visible viewport, preview service coverage, +assign the right crew and save the map view for your next session. + +**[Start a ClickHouse Cloud trial with $300 in credits](https://clickhouse.com/cloud).** + +| Integration | Visible use | +| --- | --- | +| React | Dispatch list, coverage review, layer/area selection and saved-view feedback | +| MapLibre GL JS | Real WebGL map, vector basemap, service boundary layer, viewport events | +| PMTiles | Checked-in v3 archive, range requests and MapLibre protocol; no token | +| deck.gl | Pickable job points and arcs between assigned jobs and crew depots | +| Turf.js | Service area in km², point-in-polygon preview and straight-line depot distance | +| PostGIS | Indexed viewport queries and authoritative stored-boundary assignment checks | + +The archive contains wholly synthetic blocks, parks, roads and a river. All jobs +and boundaries are fictional. Arcs represent depot-to-job relationships, not +road routes. Coordinates are `[longitude, latitude]`, SRID 4326; SQL viewports use +degrees. Turf computes the displayed area and distance units. + +## Native setup + +Use an isolated Linux VM, Node **24.21.0**, npm, `psql`, OpenSSL and `jq`. +Application dependencies and browser binaries belong inside the VM. + +```sh +git clone https://github.com/ClickHouse/examples.git +cd examples/applications/field-dispatch +npm ci --ignore-scripts --strict-peer-deps +npm test +npm run check +npm run build +``` + +Native tests read the real PMTiles archive through the app's HTTP range endpoint +and reject unsupported viewports/revisions. They do not require a database. +The pinned stack uses React 19.3.0, MapLibre 6.12.0, deck.gl 9.4.0, +Turf 7.4.0, PMTiles 4.5.0, pg 8.23.1, Zod 4.6.5 and TypeScript 6.0.3. +The dedicated `@deck.gl/maplibre` adapter supports MapLibre 6 and shares its +WebGL2 context. The lockfile resolves compatible luma/loaders peers without +forcing installation. + +## Create Postgres with clickhousectl + +Use [clickhousectl](https://clickhouse.com/docs/interfaces/cli) on your provisioning +machine. Cloud management credentials are separate from application credentials. +Install the CLI if needed and authenticate interactively with an Admin API key: + +```sh +curl -fsSL https://clickhouse.com/cli | sh +export PATH="$HOME/.local/bin:$PATH" +clickhousectl --version +clickhousectl cloud auth login --interactive +clickhousectl cloud auth status +clickhousectl cloud org list +umask 077 +mkdir -p .deployment +``` + +Create a key using the [Cloud API guide](https://clickhouse.com/docs/cloud/manage/openapi). +In an editor, create `.deployment/resources.env` with an organization ID and an +available AWS region/size: + +```dotenv +CH_ORG_ID=YOUR_ORGANIZATION_UUID +DEPLOYMENT_NAME=field-dispatch-example +CLOUD_REGION=YOUR_AVAILABLE_REGION +PG_SIZE=YOUR_AVAILABLE_POSTGRES_SIZE +``` + +This example uses one Postgres 18 service with no HA. Check current +[pricing](https://clickhouse.com/pricing). Database charges continue until the +service is deleted; stopping Node or the VM does not stop them. + +```sh +source .deployment/resources.env +clickhousectl cloud postgres create \ + --org-id "$CH_ORG_ID" --name "$DEPLOYMENT_NAME" \ + --provider aws --region "$CLOUD_REGION" --size "$PG_SIZE" \ + --pg-version 18 --ha-type none --tag project=field-dispatch --json \ + > .deployment/postgres-create.json +PG_SERVICE_ID="$(jq -er '.id' .deployment/postgres-create.json)" +printf 'PG_SERVICE_ID=%s\n' "$PG_SERVICE_ID" >> .deployment/resources.env +``` + +The receipt contains the initial administrator password, returned once. Keep it +private. If creation is interrupted, inspect the service list before retrying. +A missing receipt does not prove creation failed. + +Repeat inspection until `state` is `running`, then download its CA: + +```sh +clickhousectl cloud postgres get "$PG_SERVICE_ID" \ + --org-id "$CH_ORG_ID" --json > .deployment/postgres-status.json +jq '{id,state,hostname,username,postgresVersion,size}' .deployment/postgres-status.json +clickhousectl cloud postgres certs get "$PG_SERVICE_ID" \ + --org-id "$CH_ORG_ID" --output .deployment/postgres-ca.pem +``` + +If provisioning runs outside the VM, transfer only the private database receipt +and CA into the VM's app `.deployment/` directory. Keep Cloud API keys outside +the application. Continue the following steps in that app directory in Linux. + +## Roles, schema and seed + +Generate separate migration and runtime passwords once and preserve them for +setup retries. Generated hex passwords are safe in the connection URL: + +```sh +umask 077 +cat > .deployment/passwords.env < .env < .deployment/inventory-after.json +jq --arg id "$PG_SERVICE_ID" '[.. | objects | select(.id? == $id)]' .deployment/inventory-after.json +``` diff --git a/applications/field-dispatch/THIRD_PARTY_NOTICES.md b/applications/field-dispatch/THIRD_PARTY_NOTICES.md new file mode 100644 index 00000000..1358208a --- /dev/null +++ b/applications/field-dispatch/THIRD_PARTY_NOTICES.md @@ -0,0 +1,23 @@ +# Third-party notices + +This example pins dependencies in package-lock.json. Their upstream licenses +remain applicable; installation retains each package's license files. + +| Demonstrated package | License | Upstream | +| --- | --- | --- | +| React / ReactDOM | MIT | https://github.com/facebook/react | +| MapLibre GL JS | BSD-3-Clause | https://github.com/maplibre/maplibre-gl-js | +| deck.gl / MapLibre adapter | MIT | https://github.com/visgl/deck.gl | +| Turf.js | MIT | https://github.com/Turfjs/turf | +| PMTiles JavaScript | BSD-3-Clause | https://github.com/protomaps/PMTiles | +| node-postgres / pg | MIT | https://github.com/brianc/node-postgres | +| Zod | MIT | https://github.com/colinhacks/zod | +| PMTiles Python 3.8.1 (optional fixture tool) | BSD-3-Clause | https://pypi.org/project/pmtiles/ | +| mapbox-vector-tile 2.2.0 (optional fixture tool) | MIT | https://github.com/tilezen/mapbox-vector-tile | + +PostGIS is the database extension and is GPL-2.0-or-later: +https://postgis.net/docs/manual-3.6/using_postgis_dbmanagement.html + +The checked-in PMTiles archive and geographic fixtures are synthetic data created +for this example. No OpenStreetMap or commercial map data is copied. The map +attribution identifies the synthetic source. No Mapbox-hosted style or token is used. diff --git a/applications/field-dispatch/docs/dispatch-desktop.png b/applications/field-dispatch/docs/dispatch-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..6e078787ca12771700631ab41625dec7e3605c94 GIT binary patch literal 161335 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

x*eloHti2-!?>|JrD9u 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�TIG$SO_93siWRnF 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�o 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%0Au3d)MhA1ATClw4>*77%mAwIVEs=6!=gk`)z{% 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 m@9(ifEN3tec>lP6;{fyv1haGWz2`9_0Ia literal 0 HcmV?d00001 diff --git a/applications/field-dispatch/index.html b/applications/field-dispatch/index.html new file mode 100644 index 00000000..b8150b42 --- /dev/null +++ b/applications/field-dispatch/index.html @@ -0,0 +1,2 @@ + +Field dispatch | Maintenance desk
diff --git a/applications/field-dispatch/package-lock.json b/applications/field-dispatch/package-lock.json new file mode 100644 index 00000000..d25d1e2d --- /dev/null +++ b/applications/field-dispatch/package-lock.json @@ -0,0 +1,4596 @@ +{ + "name": "field-dispatch", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "field-dispatch", + "dependencies": { + "@deck.gl/core": "9.4.0", + "@deck.gl/layers": "9.4.0", + "@deck.gl/maplibre": "9.4.0", + "@loaders.gl/core": "4.5.2", + "@luma.gl/core": "9.4.0", + "@luma.gl/engine": "9.4.0", + "@turf/turf": "7.4.0", + "maplibre-gl": "6.12.0", + "pg": "8.23.1", + "pmtiles": "4.5.0", + "react": "19.3.0", + "react-dom": "19.3.0", + "zod": "4.6.5" + }, + "devDependencies": { + "@playwright/test": "1.63.0", + "@types/geojson": "7946.0.16", + "@types/node": "26.6.4", + "@types/pg": "8.23.1", + "@types/react": "19.3.0", + "@types/react-dom": "19.3.0", + "@vitejs/plugin-react": "6.1.1", + "prettier": "3.9.9", + "tsx": "4.23.15", + "typescript": "6.0.3", + "vite": "8.3.2" + }, + "engines": { + "node": ">=24.21.0 <25" + } + }, + "node_modules/@deck.gl/core": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-9.4.0.tgz", + "integrity": "sha512-0isP+x2eGNxteO7lT650lYO7oiAYXAu4aF1jG+BMi8aKYh38HtPugLq1TlQTravIXzBSi5Oe1oZNuVj8h4ZEjA==", + "license": "MIT", + "dependencies": { + "@loaders.gl/core": "^4.4.3", + "@loaders.gl/images": "^4.4.3", + "@luma.gl/core": "^9.4.0", + "@luma.gl/engine": "^9.4.0", + "@luma.gl/gpgpu": "^9.4.0", + "@luma.gl/shadertools": "^9.4.0", + "@luma.gl/webgl": "^9.4.0", + "@math.gl/core": "^4.1.0", + "@math.gl/sun": "^4.1.0", + "@math.gl/types": "^4.1.0", + "@math.gl/web-mercator": "^4.1.0", + "@probe.gl/env": "^4.1.1", + "@probe.gl/log": "^4.1.1", + "@probe.gl/stats": "^4.1.1", + "@types/offscreencanvas": "^2019.6.4", + "gl-matrix": "^3.0.0", + "mjolnir.js": "^3.1.1" + } + }, + "node_modules/@deck.gl/core/node_modules/@loaders.gl/images": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-4.5.2.tgz", + "integrity": "sha512-Xw9pxuOrxISg2aCVtFmiytMFuxAHQc+KGy5roVGDfryZDYi494SGtgJaVAmWGY3pxOXkZ3em2BWJleG5W/jzXg==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.5.2" + }, + "peerDependencies": { + "@loaders.gl/core": "~4.5.0" + } + }, + "node_modules/@deck.gl/layers": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-9.4.0.tgz", + "integrity": "sha512-jSL/xje2Ez7DmnP8AAIdhhg6IAtfXMmnXiUAKNgpl/TTaEL+iL5TAnagCdt39H3azmKVcCG33kOlIoWFAuLuRg==", + "license": "MIT", + "dependencies": { + "@loaders.gl/images": "^4.4.3", + "@loaders.gl/schema": "^4.4.3", + "@luma.gl/shadertools": "^9.4.0", + "@mapbox/tiny-sdf": "^2.0.5", + "@math.gl/core": "^4.1.0", + "@math.gl/polygon": "^4.1.0", + "@math.gl/web-mercator": "^4.1.0", + "@types/geojson": "^7946.0.16", + "earcut": "^2.2.4" + }, + "peerDependencies": { + "@deck.gl/core": "~9.4.0", + "@loaders.gl/core": "^4.4.3", + "@luma.gl/core": "~9.4.0", + "@luma.gl/engine": "~9.4.0" + } + }, + "node_modules/@deck.gl/layers/node_modules/@loaders.gl/images": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-4.5.2.tgz", + "integrity": "sha512-Xw9pxuOrxISg2aCVtFmiytMFuxAHQc+KGy5roVGDfryZDYi494SGtgJaVAmWGY3pxOXkZ3em2BWJleG5W/jzXg==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.5.2" + }, + "peerDependencies": { + "@loaders.gl/core": "~4.5.0" + } + }, + "node_modules/@deck.gl/maplibre": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@deck.gl/maplibre/-/maplibre-9.4.0.tgz", + "integrity": "sha512-ck7Hxzt0t9M7iVgbVwelZiuUEx+e2HtmhGyPmZulURV0Ct5QtIjDYc6SWWUYZqASQnyDiBgFVaSaA9DisU8ziw==", + "license": "MIT", + "peerDependencies": { + "@deck.gl/core": "~9.4.0", + "@luma.gl/core": "~9.4.0", + "maplibre-gl": "^4.5.1 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@loaders.gl/core": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-4.5.2.tgz", + "integrity": "sha512-Al1NEd/tCz0KLWslqmEaGka9F/VpBLGUFyjb0Oc7zgmgvzJEAOMWac7nGgO8Zqobl4uVcC8HTkNSFCMV4PKIQw==", + "license": "MIT", + "dependencies": { + "@loaders.gl/loader-utils": "4.5.2", + "@loaders.gl/schema": "4.5.1", + "@loaders.gl/schema-utils": "4.5.2", + "@loaders.gl/worker-utils": "4.5.2", + "@probe.gl/log": "^4.1.1" + } + }, + "node_modules/@loaders.gl/loader-utils": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-4.5.2.tgz", + "integrity": "sha512-ov5se9HOmvgJasOHq9v2dyEfYGClSVQFyFwaD78BD8Nqz1xRxU5O5TRk19WpIExs9MFpNyqVgUHq1yE1PTwWLQ==", + "license": "MIT", + "dependencies": { + "@loaders.gl/schema": "4.5.1", + "@loaders.gl/worker-utils": "4.5.2", + "@probe.gl/log": "^4.1.1", + "@probe.gl/stats": "^4.1.1" + } + }, + "node_modules/@loaders.gl/schema": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-4.5.1.tgz", + "integrity": "sha512-qrMqcwIHQRCfAx/zkujuI8ZfiwaOXvh82y5OXVfPkGtAw5EhLBM3fQxqdNOpfVhy0m4GCC6QvlXyurJXcx++yQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.7", + "apache-arrow": ">= 17.0.0" + } + }, + "node_modules/@loaders.gl/schema-utils": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema-utils/-/schema-utils-4.5.2.tgz", + "integrity": "sha512-giaz4ZzmxuxhWNV1TSOazUksbgFBgnjtxFMHbikaDeBHYQNzHsGWGoG3SLsvmnKCJ5q/fUwFJZqRGqTVdBcoKg==", + "license": "MIT", + "dependencies": { + "@loaders.gl/schema": "4.5.1", + "@math.gl/types": "^4.1.0", + "@types/geojson": "^7946.0.7", + "apache-arrow": ">= 17.0.0" + }, + "peerDependencies": { + "@loaders.gl/core": "~4.5.0" + } + }, + "node_modules/@loaders.gl/worker-utils": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-4.5.2.tgz", + "integrity": "sha512-w5zWjtWQZRYME9Gk7v+u5tAs5bHa+09at10106vZ7wNI0YP4kbcVu424+vxP2dfppR54U2goiS1RY4QGYGXXcQ==", + "license": "MIT", + "peerDependencies": { + "@loaders.gl/core": "~4.5.0" + } + }, + "node_modules/@luma.gl/core": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-9.4.0.tgz", + "integrity": "sha512-2SIB77DoZ6LMZW/aPS/M3hKHP8UR0WR6f5R2+Sir5FdNVdOvFiOHAxPCafjVTxTqFWWHnh1NSCo5k/qq6sdFQw==", + "license": "MIT", + "dependencies": { + "@math.gl/types": "^4.1.0", + "@probe.gl/env": "^4.1.1", + "@probe.gl/log": "^4.1.1", + "@probe.gl/stats": "^4.1.1", + "@types/offscreencanvas": "^2019.7.3" + } + }, + "node_modules/@luma.gl/engine": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-9.4.0.tgz", + "integrity": "sha512-VK1kvdbGKzUmxNC0caR2YB65Q9VV5JA2bMOZwE3k6+mwrSymUrgIgjsNZHasjwe8QnSPlZNpMBsQDVVrdG9P1g==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "^4.1.0", + "@math.gl/types": "^4.1.0", + "@probe.gl/log": "^4.1.1", + "@probe.gl/stats": "^4.1.1" + }, + "peerDependencies": { + "@luma.gl/core": "~9.4.0", + "@luma.gl/shadertools": "~9.4.0" + } + }, + "node_modules/@luma.gl/gpgpu": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@luma.gl/gpgpu/-/gpgpu-9.4.2.tgz", + "integrity": "sha512-LoEqoViPZqMHqQzvq/txFuOLsxI6sn8xmv+IZyovRFBqcWaV184PE/8Ieufww0pjVyJMfubhUCQmGuGrOME8oA==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "^4.1.0", + "@math.gl/types": "^4.1.0", + "@probe.gl/log": "^4.0.8", + "@probe.gl/stats": "^4.0.8" + }, + "peerDependencies": { + "@luma.gl/core": "~9.4.0", + "@luma.gl/engine": "~9.4.0", + "@luma.gl/shadertools": "~9.4.0", + "@luma.gl/webgpu": "~9.4.0" + } + }, + "node_modules/@luma.gl/shadertools": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-9.4.2.tgz", + "integrity": "sha512-0/6pLZSfnQnvcWdYePKKSwVet+gFtAAnKeGXNfxpgp3I8E3WsF/SbD6oEzgU7jdnRqONwGsoACWNpQHO0zZvIQ==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "^4.1.0", + "@math.gl/types": "^4.1.0" + }, + "peerDependencies": { + "@luma.gl/core": "~9.4.0" + } + }, + "node_modules/@luma.gl/webgl": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-9.4.2.tgz", + "integrity": "sha512-D3GqnxTgQI+vsyH56hX5+jwqdVUhvhbpnPurTwbQOSlSQ8mshhNKcRdrZytTy10qiodDwrcjTnndPEAP6UgCzA==", + "license": "MIT", + "dependencies": { + "@math.gl/types": "^4.1.0", + "@probe.gl/env": "^4.1.1" + }, + "peerDependencies": { + "@luma.gl/core": "~9.4.0" + } + }, + "node_modules/@luma.gl/webgpu": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/@luma.gl/webgpu/-/webgpu-9.4.2.tgz", + "integrity": "sha512-24gDOmLyL81fVHxn+UXajnYN5jVln7XgB9fvobc1Yh3PAtXjlcAkmVTqYRvULVGeEamuqvqPDscAkaK/T+R1iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@probe.gl/env": "^4.1.1", + "@webgpu/types": "^0.1.69" + }, + "peerDependencies": { + "@luma.gl/core": "~9.4.0", + "@luma.gl/shadertools": "~9.4.0" + } + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.3.tgz", + "integrity": "sha512-0SElaV0uMxEnxzBhhX9WTuPyUeMsAN/SS0i16tjuba4/mio63MG9khjC1a0JAiPGXAwvwm4UfHJURCN7nyudQg==", + "license": "MIT", + "engines": { + "node": ">= 22" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-1.1.0.tgz", + "integrity": "sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==", + "license": "ISC" + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.2.0.tgz", + "integrity": "sha512-LVL4wgI9YAum5V+LNVQO6QgFBPw7/MIIY4XJPNsPDMrjEwcE+JfKk1LuIl8GnF197ejVdC9QdPaxrx5gfgdGXg==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/unitbezier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-1.0.0.tgz", + "integrity": "sha512-fqd515fjBmANKGGsQ286E2Wvj/XvDFpGzwJxq4CI6jMQue6Oy04uCKp+JWKF00xRTmk6cEu1jPJ9p3xqH8YWqQ==", + "license": "BSD-2-Clause" + }, + "node_modules/@mapbox/vector-tile": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-3.0.0.tgz", + "integrity": "sha512-Qf10S1uIHMk20ri/IVBnpS+esUEkVaR5Hftmz88jTInrpmWgPGJfPe3LVjjlE77trLx8tH6qjTG7uWH9hIq/0Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/point-geometry": "~1.1.0", + "@types/geojson": "^7946.0.16", + "pbf": "^5.0.0" + } + }, + "node_modules/@maplibre/geojson-vt": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@maplibre/geojson-vt/-/geojson-vt-6.1.2.tgz", + "integrity": "sha512-2ZYhobdAY+y4/P/z1xe0698165LywD0yDdWugdu3NRUrajgVWut+tLkcz7i/RJguMTURwK7gxwmwYMFJbgbQFw==", + "license": "ISC", + "dependencies": { + "kdbush": "^4.1.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "26.4.4", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-26.4.4.tgz", + "integrity": "sha512-hG4RZR4PBd/+6A3ODdZ3AnQRF106ZQk1y3bhwDg8bH/A4Oz2tnRUJVVWs9BZa6gXZ1d3UKe89C+Mm+olGBELvA==", + "license": "ISC", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "^2.0.3", + "@mapbox/unitbezier": "^1.0.0", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "quickselect": "^3.0.0", + "tinyqueue": "^3.0.0" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, + "node_modules/@maplibre/mlt": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@maplibre/mlt/-/mlt-1.3.0.tgz", + "integrity": "sha512-7M2O7ABM80Oi8XPkfkrjKB8mOBIxGoVgkA52Mu4RMWoBvvMdagQ522+WxVYujZsMpqIr3BpzrTbXrm4k8lCzCQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "@mapbox/point-geometry": "^1.1.0" + } + }, + "node_modules/@maplibre/vt-pbf": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@maplibre/vt-pbf/-/vt-pbf-4.3.2.tgz", + "integrity": "sha512-j6p0AdjvAR19Z3XaCysle7A4ZSo08tYOzxD0Y9NQylwPAkwJJeYub5b2eVucdeDh7erhv69DahoLOevDRERRUw==", + "license": "MIT", + "dependencies": { + "@mapbox/point-geometry": "^1.1.0", + "@types/geojson": "^7946.0.16", + "pbf": "^5.1.0" + } + }, + "node_modules/@math.gl/core": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-4.1.0.tgz", + "integrity": "sha512-FrdHBCVG3QdrworwrUSzXIaK+/9OCRLscxI2OUy6sLOHyHgBMyfnEGs99/m3KNvs+95BsnQLWklVfpKfQzfwKA==", + "license": "MIT", + "dependencies": { + "@math.gl/types": "4.1.0" + } + }, + "node_modules/@math.gl/polygon": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-4.1.0.tgz", + "integrity": "sha512-YA/9PzaCRHbIP5/0E9uTYrqe+jsYTQoqoDWhf6/b0Ixz8bPZBaGDEafLg3z7ffBomZLacUty9U3TlPjqMtzPjA==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "4.1.0" + } + }, + "node_modules/@math.gl/sun": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/sun/-/sun-4.1.0.tgz", + "integrity": "sha512-i3q6OCBLSZ5wgZVhXg+X7gsjY/TUtuFW/2KBiq/U1ypLso3S4sEykoU/MGjxUv1xiiGtr+v8TeMbO1OBIh/HmA==", + "license": "MIT" + }, + "node_modules/@math.gl/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-4.1.0.tgz", + "integrity": "sha512-clYZdHcmRvMzVK5fjeDkQlHUzXQSNdZ7s4xOqC3nJPgz4C/TZkUecTo9YS4PruZqtDda/ag4erndP0MIn40dGA==", + "license": "MIT" + }, + "node_modules/@math.gl/web-mercator": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-4.1.0.tgz", + "integrity": "sha512-HZo3vO5GCMkXJThxRJ5/QYUYRr3XumfT8CzNNCwoJfinxy5NtKUd7dusNTXn7yJ40UoB8FMIwkVwNlqaiRZZAw==", + "license": "MIT", + "dependencies": { + "@math.gl/core": "4.1.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.152.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.152.0.tgz", + "integrity": "sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@playwright/test": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.63.0.tgz", + "integrity": "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@probe.gl/env": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-4.1.2.tgz", + "integrity": "sha512-KIcdjrEiEZVIGX9nh7pZSmTMIKrd+wCb09gyXqpYYI4hs9WMqrQHvKZ7KD8ASutf6kwARwgd4WNQn8aucLSz3g==", + "license": "MIT" + }, + "node_modules/@probe.gl/log": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-4.1.2.tgz", + "integrity": "sha512-2LqSq4CHhc/HJQasHMPOzA6c7rprlGz8CCREGebo19jxcuKdvXQo0DEmlfId076U6UldMp6jGhWvDHEFLX111Q==", + "license": "MIT", + "dependencies": { + "@probe.gl/env": "4.1.2" + } + }, + "node_modules/@probe.gl/stats": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.1.2.tgz", + "integrity": "sha512-Hqc0UIHd0IZ2+JbovzTz7lYG7CY9D8yCB81zyP92Zl9UDSPcw2cLbTySW14keAQeAo1sjGjUw0+KHxr0Y2h/hA==", + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.12.tgz", + "integrity": "sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.12.tgz", + "integrity": "sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.12.tgz", + "integrity": "sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.12.tgz", + "integrity": "sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.12.tgz", + "integrity": "sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.12.tgz", + "integrity": "sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.12.tgz", + "integrity": "sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.12.tgz", + "integrity": "sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.12.tgz", + "integrity": "sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.12.tgz", + "integrity": "sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.12.tgz", + "integrity": "sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.12.tgz", + "integrity": "sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.12.tgz", + "integrity": "sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.12.tgz", + "integrity": "sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.12.tgz", + "integrity": "sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@turf/along": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/along/-/along-7.4.0.tgz", + "integrity": "sha512-uWh26sph1bJm3eO1toaoq9fbPRNxtbQlW/u0m04n7m6uFyGrUu4qE+8DTDQeF+cHGWbMQft4zshHZy0rz4Nyog==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.4.0", + "@turf/destination": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/angle": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/angle/-/angle-7.4.0.tgz", + "integrity": "sha512-QcylOejONtVUQVG25/GznC2URvYLta6HCDLPB12wT/AEsG3pEKvUh5RGJDcFwk8WKfKPRp9C24kzsbp1Nwp9XQ==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/rhumb-bearing": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/area": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.4.0.tgz", + "integrity": "sha512-B7q5f6QwKIxxbl4/L59lAYA+FF7h2hv6st96PuKue0TGCYGSxAG/lV8LHSPUSOuOrLywN4jytJcKK3vOFBs7Nw==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bbox": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.4.0.tgz", + "integrity": "sha512-yOX9lALc2GmjYUIE99+nRj7eZA7eDtx7Ixu/hrgIo+YqHvL1reaPVTC9rQWMHMm0pH0/WHjzk8uOpAHjptrudQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bbox-clip": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/bbox-clip/-/bbox-clip-7.4.0.tgz", + "integrity": "sha512-Vxi8XznT/vhLHfqE9C1IMw0wi73+6EP3Bn51Vm0v9AWLUEv1zKPqR9/a4cj+s7f3diPE1g238rS48+BB5nYKSQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bbox-polygon": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-7.4.0.tgz", + "integrity": "sha512-hF0ylAOhzwk9i7m/PCmTtg+TP5AnFb9B+bMXgEPIYd/C3BOVet1YaA8nF6ViN5bNF0GSkWFYivvclSgWbtZyqg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bearing": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-7.4.0.tgz", + "integrity": "sha512-utMyjTU5U3QfHWLRIKUAvJerCMmC6NLI7X6cmL6PA5+KYdzul/ymxL6CQrwJugrf9zt4Hnzvipwz0j5H1Yo87w==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/bezier-spline": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/bezier-spline/-/bezier-spline-7.4.0.tgz", + "integrity": "sha512-ctzTB46Mo5umz658IFh2C9zB8fs/FtqDOjcozAcUm7TUs6h4hdrXsCMRLb4a9NIX7ekPB84xQ6ZrISXwI+6/yQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-clockwise": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-7.4.0.tgz", + "integrity": "sha512-3wO+W9P63JZMK1Ud5ER0kKXpiZaeXkOR5Omq5USKlPcopwZ6TP/mJjt8lUYYWsB2WGDXuUhlYmSVec43z3wwow==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-concave": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-concave/-/boolean-concave-7.4.0.tgz", + "integrity": "sha512-uSu01JxLsivXIyT8R7fN7ujyjyP0A8qTLaC/YlA2FSKDjpW1876KbWua203R9JxqZ4hgNUPCE7dhk9uTRXuZIg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-contains": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-7.4.0.tgz", + "integrity": "sha512-vR8sfdKhSlDy6Jd6UAI2Bt27ZAU287G8lhLieIGfxKCpoUa2V8v3y0I9FH+ZpFen07I33aysHIZ4dMH92hBO3Q==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/boolean-point-on-line": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/line-split": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-crosses": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-crosses/-/boolean-crosses-7.4.0.tgz", + "integrity": "sha512-athvZ8yB04BcuT53plyRJnn4jMmbiwlGk/pdxj28JZtsKipi+Ti6xmWDklFnrXpGfeaSHpPvKVt7XRduTB/qVA==", + "license": "MIT", + "dependencies": { + "@turf/boolean-equal": "7.4.0", + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/line-intersect": "7.4.0", + "@turf/polygon-to-line": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-disjoint": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-disjoint/-/boolean-disjoint-7.4.0.tgz", + "integrity": "sha512-B6nXGFHa1+m181BZ5MOKa1l7/otws/NonUpOd0CKWTuBUzrlc6e60z/kRp5ceRYmE2LFOH5ZZxItnrsWgKc2VA==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/line-intersect": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/polygon-to-line": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-equal": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-equal/-/boolean-equal-7.4.0.tgz", + "integrity": "sha512-OZWSaWvG7tZn90/7sBclZxpLyjrbxh8oNfOqrmdJigTY/XzAyjCE+jaweVTY8NGRkytC53kkDO0Q2DPZptpUcw==", + "license": "MIT", + "dependencies": { + "@turf/clean-coords": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "geojson-equality-ts": "^1.0.2", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-intersects": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-intersects/-/boolean-intersects-7.4.0.tgz", + "integrity": "sha512-tV30WLBgLh89uGYpWsKjU29eMhdyhSh2Sc1IKmv1W0YFHKwp6oDm2eRajMzMgdtN8cl6Jyb8oFCmw4LbMMuWAQ==", + "license": "MIT", + "dependencies": { + "@turf/boolean-disjoint": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-overlap": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-7.4.0.tgz", + "integrity": "sha512-WcwQC042FnqDbZJCTm67NoQqV3bWz3C5M89b39MJtEPDWbO6kWwgMBt3Rm9w6gwrYljPE43vVB4pLiaSdNgKSQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/line-intersect": "7.4.0", + "@turf/line-overlap": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "geojson-equality-ts": "^1.0.2", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-parallel": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-parallel/-/boolean-parallel-7.4.0.tgz", + "integrity": "sha512-EUjTkvbd1zumtXwP3vEQPsjdlny9UjDkWRzNrZjBpc0MVY9g0clSslMBgHbcJAtOz4lP3+6fqOgwOkjA6XJBLQ==", + "license": "MIT", + "dependencies": { + "@turf/clean-coords": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/line-segment": "7.4.0", + "@turf/rhumb-bearing": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-point-in-polygon": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.4.0.tgz", + "integrity": "sha512-GQrHc6WSDHhf32GB/b9AGyOeC05AQ3nGN7ooWTrlCYefKn7X9/2wG9BNexF47AuyDq5jPdOvITVR26BLFWV+mA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "point-in-polygon-hao": "^1.1.0", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-point-on-line": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-7.4.0.tgz", + "integrity": "sha512-5i5UBeZf/LuzgavkIj8L8L5/8SYWItWzQQcE9ymFZr60lV5lM8eFvQDfzAz2R3WQFCrxXExPqNvAVZOKGUyvoA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-touches": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-touches/-/boolean-touches-7.4.0.tgz", + "integrity": "sha512-ociH8gYuQ/jpTIFDAr3krbh5lMWjfbJXG1diGdmV03smutui/LhnMF8AvqQ46/nzo1IgD0640gbdzkQn91090g==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/boolean-point-on-line": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-valid": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-valid/-/boolean-valid-7.4.0.tgz", + "integrity": "sha512-Gop9r5YA3Asz80bPDCs3PjO4YPY5fyE55wlQDqLBSr6ZxbOaJXIoKrMgaBb1RBcM+9BFYnBlnpekMG3C8Gscrg==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/boolean-crosses": "7.4.0", + "@turf/boolean-disjoint": "7.4.0", + "@turf/boolean-overlap": "7.4.0", + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/boolean-point-on-line": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/line-intersect": "7.4.0", + "@types/geojson": "^7946.0.10", + "geojson-polygon-self-intersections": "^1.2.1", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/boolean-within": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-within/-/boolean-within-7.4.0.tgz", + "integrity": "sha512-wld+Og3HZlSe+QcovDY4JKLDkEqOx6gW52jkvAWIvbr4fDB/HUV95zX6SY78reJwm6hNwmnuX3nSriWooLU4HA==", + "license": "MIT", + "dependencies": { + "@turf/boolean-contains": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/buffer": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-7.4.0.tgz", + "integrity": "sha512-ewYjC7NmmP+BZ8JcjX1TglzYH1FCMWAh5L08j0iAP4lbn3/AutVjjbwIXedZZy5He1OfgmXf+rIBcNXdeEYceg==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/center": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/jsts": "^2.7.1", + "@turf/meta": "7.4.0", + "@turf/projection": "7.4.0", + "@types/geojson": "^7946.0.10", + "d3-geo": "^2.0.2", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/center": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/center/-/center-7.4.0.tgz", + "integrity": "sha512-JVuTaIdnQtmTV8eQfVxqza1okKiaFzgVeIA6Xoy/u6aBMxg2+oBpS6GcHZkEqR8OapPWValB1AYYqimUSiyOXw==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/center-mean": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/center-mean/-/center-mean-7.4.0.tgz", + "integrity": "sha512-M4PG7NPiy5OoxueLkgw/OIe3driLic37xSsfs6KSjg7u/ZNBysymThy9a6lYUlygS/Z1xhqSfjOsOcxHtxKTzA==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/center-median": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/center-median/-/center-median-7.4.0.tgz", + "integrity": "sha512-R2ap2S789WRFzbk54gv3hSN0vnT+djRL0nqultWmvhYBJE2FsN5Z0libZNetP+VyOV/mg5AF8CFLbkmnmqJg3Q==", + "license": "MIT", + "dependencies": { + "@turf/center-mean": "7.4.0", + "@turf/centroid": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/center-of-mass": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/center-of-mass/-/center-of-mass-7.4.0.tgz", + "integrity": "sha512-wpa22gBJvwYmvh+I3idMds1mtSEYXqLFTu9s9U7TZTy2HrglIIe+6iz0zSm4is58W7TNXQQlfeCmyvURU2+kdQ==", + "license": "MIT", + "dependencies": { + "@turf/centroid": "7.4.0", + "@turf/convex": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/centroid": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.4.0.tgz", + "integrity": "sha512-WglCFe+TnMqeYa/LcbUp37NgIF0zHTNYmlxwUm40fyyzyLsYeDq4dgFWLTYpvRNqb5oIMV6xsBjSf+vCPtVJ6w==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/circle": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-7.4.0.tgz", + "integrity": "sha512-H7dXQP7WRpIE/UwZFFGYoSewsali5rjk9yzHPNZ03Bc9F11PWA3H+lwznEWmi/wLMMx91uMU+NkyGtJUeQr9cg==", + "license": "MIT", + "dependencies": { + "@turf/destination": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/clean-coords": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/clean-coords/-/clean-coords-7.4.0.tgz", + "integrity": "sha512-xl3lVPey/FyVc3Z+drAWtVuVtvt737RHKGUMGyuskmKYW0JUeFDgqSR0OnrDfxXWb58Im/65BgPd1B+TUA9WfA==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-on-line": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/clone": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-7.4.0.tgz", + "integrity": "sha512-IfYnuil7XYJauy3crzIYEr26QkmBiTgFdGfYwUUe3S6dawX+lyb3vhuaYyssEPcCJq83g0G7hwxZy7141Mmzjg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/clusters": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/clusters/-/clusters-7.4.0.tgz", + "integrity": "sha512-ZY8ZXONy88EnsHCTdaAILkZjkR3gd8xYx4Sc8TpRFuRTDzI2abzU6ET9zezMd+U8QWs7//QJctcfapzCpXBXQg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/clusters-dbscan": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/clusters-dbscan/-/clusters-dbscan-7.4.0.tgz", + "integrity": "sha512-6uKPUvL7VNx3MueOqgGTx/pnGe5p5rgy/tA/6HOgRFLlDu0oYUTUdNg2JE0ylYOc0HW5hxCcmsRR0lz6fxw1KA==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "rbush": "^3.0.1", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/clusters-kmeans": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/clusters-kmeans/-/clusters-kmeans-7.4.0.tgz", + "integrity": "sha512-fGSapN0nNzQ8NdKSsVgwPUQ5vkwlVK4M/zGN91jY29VcKb6ua8CotH7DNGKutCByr0c7WBefhUGeYVeZEgd9tQ==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "skmeans": "0.9.7", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/collect": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/collect/-/collect-7.4.0.tgz", + "integrity": "sha512-vQ0NH9SCUacKtQGValYxF8Q1mv4g4vLdWSwuVjIDbsH7NTgGUCFQwKXeHuGqh3U9r2PCQ+3ZbsMK61ok8U75fg==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "rbush": "^3.0.1", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/combine": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/combine/-/combine-7.4.0.tgz", + "integrity": "sha512-G3tEctgA3Kqz9T3PjF3lQdMUodQxOOLLBy8s5Y//8qyx7IRJqOazxdCaZRo2lq7C8eEdoUud6PIAXLz0gHue4w==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/concave": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/concave/-/concave-7.4.0.tgz", + "integrity": "sha512-EzCHDEbGRVbo9vR/HJriC8U7mpxgTYgyluBDNzcaT7kX53eH7/eS1U7rp/Q36e5RXMmlAWBknqtVseGMvKE5tw==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/tin": "7.4.0", + "@types/geojson": "^7946.0.10", + "topojson-client": "3.x", + "topojson-server": "3.x", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/convex": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/convex/-/convex-7.4.0.tgz", + "integrity": "sha512-MKKAKBMZAQJLicdJSck0rPkwvf/Yz4IFl672iNq9ZoofQxgAqQSEGtBGy4Zgnr5edDoIexzLRAoqm6woyx4Lzw==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "concaveman": "^1.2.1", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/destination": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-7.4.0.tgz", + "integrity": "sha512-+jFpOUtzCiN8l9ZOvr66rxi/UxizphXaBDldaw9NfxlX/HcMn3ZDzC8IiCHiNXAilVh4WpCH0qqmH9ykOgdBKA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/difference": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-7.4.0.tgz", + "integrity": "sha512-4zV7Xi3CwUdyNsDzrPty08PiUeYYVBdbCnNVlSf8sk5Z7SL7seA42RabRG8ByTzcrbLATeDU4oTEthVhOGPlyw==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "polyclip-ts": "^0.16.8", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/directional-mean": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/directional-mean/-/directional-mean-7.4.0.tgz", + "integrity": "sha512-TEgKLz71yLVAvjP9ozRAtB1gk7ziSq+a7LGePkMWLMxLtoJxb7eapAqcDk/QqRUBUJ4Dw/41qtRRwkVX0hQE/A==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.4.0", + "@turf/centroid": "7.4.0", + "@turf/destination": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/length": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/dissolve": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/dissolve/-/dissolve-7.4.0.tgz", + "integrity": "sha512-UHx+XiReD+qHXN0dKOyOxlB+NF0L1PkUHlERCPZcYNqd4JWl2uqOjMEBYxlVeBj6SO3yQPTM9kvWXPE3HqLanQ==", + "license": "MIT", + "dependencies": { + "@turf/flatten": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "polyclip-ts": "^0.16.8", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/distance": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-7.4.0.tgz", + "integrity": "sha512-ODkopQDG1m/U6Mx7OMmShncaCvneomwX3lZY1CDA7x40bhDdTTRYP/n/6LicZVyIO4/oK+aXkov4NOtWYthA2g==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/distance-weight": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/distance-weight/-/distance-weight-7.4.0.tgz", + "integrity": "sha512-HUS57zzrSJAUUUlpEZYAsjK+BuCisgRf5/9pW5uW9TfegSbysA0T0C800GYqZcSPIpv22zVF5LE/hFnnu8WjHA==", + "license": "MIT", + "dependencies": { + "@turf/centroid": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/ellipse": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-7.4.0.tgz", + "integrity": "sha512-m5s/fwYUbNN1MW/nW33sZ/jD58lMU1kGP6muU4inGAP7OxKbS15yz+Qg2aXsfyKcb0z19AFjhnCLQGWHU0sl1w==", + "license": "MIT", + "dependencies": { + "@turf/destination": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/transform-rotate": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/envelope": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/envelope/-/envelope-7.4.0.tgz", + "integrity": "sha512-BNpwP70dFElOrYAVxLvjd9kMnxdowJB0ojsTs2OTvaC8Hp+qfrVTzTK5ZZ6Dzix/UpgdRlC5cDrEmbXTdvDpjA==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/bbox-polygon": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/explode": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/explode/-/explode-7.4.0.tgz", + "integrity": "sha512-kTWoryCTAiBwFvyJYNQWLJCaFx4bSRpyCjJWmuLoBEQRh9Fi4JLDEug+6JZxygMxCMWGXBH8/R3ICl+soLPFAg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/flatten": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/flatten/-/flatten-7.4.0.tgz", + "integrity": "sha512-yrXpvXtmPlXIIoRuonQ7z+Uj47Sw9KYlH9oh9NBb3QRfz53LN+OTNndkGeXPaI00BDXxO/aZ7wEGmzuoCaDn1w==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/flip": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/flip/-/flip-7.4.0.tgz", + "integrity": "sha512-SlLwkHlY0MzFXmn/3pFNT7JILsEZer+KzLIxVxebiu6nd3aQaIOqGvxLHVFRbIXYd48UrORg1L40sWsw8z1Egg==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/geojson-rbush": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/geojson-rbush/-/geojson-rbush-7.4.0.tgz", + "integrity": "sha512-o+debVj+6KQ2p0VebH+FgcTig2jUuG6mWMgLYvb34c7cOHoEuY6ICvKRKtHn/XcHa6eyoSk0TvnLEJAfFTQDMg==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "rbush": "^3.0.1", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/great-circle": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/great-circle/-/great-circle-7.4.0.tgz", + "integrity": "sha512-dV8qrH9rpvtUsqrXgUKWojCCJTdgAKgX6eyE+zm9GUtzq0pYUxG2JXVIxWBT65ucQPigBSbS5hxx6lAOpoD/Ew==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "arc": "^0.2.0", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/helpers": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.4.0.tgz", + "integrity": "sha512-7PAwLZqOdRzTI5g9bHvUwlloAXPDH/mlajtryk0tw4ZwGMtmXsAyF4QundsAMfy4u48Fyd3AUqMXY0SMxqJGWg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/hex-grid": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/hex-grid/-/hex-grid-7.4.0.tgz", + "integrity": "sha512-IQ35KzK2N9KZ7W0xVeZlDVcXURE2h+GD0CHru/LlWW7hkjVLNYvWjm+ZlMA141As038+4XremSGNzHAZxp3xsQ==", + "license": "MIT", + "dependencies": { + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/intersect": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/interpolate": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/interpolate/-/interpolate-7.4.0.tgz", + "integrity": "sha512-QRY0i2CW5ZhEhvDa1HDCO5gjun25HSjo4X7/Q2gC8BkjwpL12Ogo883BGAlt5Qq0JZq5uVFU9Ae7W7yVjfIPfw==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/centroid": "7.4.0", + "@turf/clone": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/hex-grid": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/point-grid": "7.4.0", + "@turf/square-grid": "7.4.0", + "@turf/triangle-grid": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/intersect": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-7.4.0.tgz", + "integrity": "sha512-n/wbZfDPoM1JKwrql8mHBoS9cdRWUC7/VE9IBZOttVPv8Guo0B6+Mzc2Z2e1PdIkSP/1R2yH6lxPpWMuuBfVEA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "polyclip-ts": "^0.16.8", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/invariant": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.4.0.tgz", + "integrity": "sha512-OAsc3qdNx+tRqzWmMNFMnVlWWACIqnYqIejZKvb2oKkKPYJJrURPXZ6OdrGD58ljJMolLoqwIZGSx3VndaEjxg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/isobands": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/isobands/-/isobands-7.4.0.tgz", + "integrity": "sha512-ClOkFMwcgQmRCespoQavY4AA+gH5qkbcQgrGsKn12VrgbresgA2hBM9bVMNDaEmDauN7RdDBoNcNhkakhD/ZOQ==", + "license": "MIT", + "dependencies": { + "@turf/area": "7.4.0", + "@turf/bbox": "7.4.0", + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/explode": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/isolines": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/isolines/-/isolines-7.4.0.tgz", + "integrity": "sha512-Pu0i03/GqAcYT4yJ9fj3NWa4Z/c4Viv3Duhzua05XLJ9c70wWJmb+eniLg2l+qiuVKi4ob0Xl2AKkgkKYiezgg==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/jsts": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@turf/jsts/-/jsts-2.7.2.tgz", + "integrity": "sha512-zAezGlwWHPyU0zxwcX2wQY3RkRpwuoBmhhNE9HY9kWhFDkCxZ3aWK5URKwa/SWKJbj9aztO+8vtdiBA28KVJFg==", + "license": "(EDL-1.0 OR EPL-1.0)", + "dependencies": { + "jsts": "2.7.1" + } + }, + "node_modules/@turf/kinks": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/kinks/-/kinks-7.4.0.tgz", + "integrity": "sha512-M2deZpJq45WASRru5MmGwDJkVIj+JL/rcS6LLZBQyhSna47pxOQIVDC/tIx6xyFezxXw3lhX9VsoRst3irDdAQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/length": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/length/-/length-7.4.0.tgz", + "integrity": "sha512-vQsJLuL7uy8m6HAMuJJKoiOHYY1de1Hd6mY/fM90qfu2RyIrkoF8J4bRUb72XZNCVnvob/eHpUMdhZeoUhSyfQ==", + "license": "MIT", + "dependencies": { + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-arc": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-arc/-/line-arc-7.4.0.tgz", + "integrity": "sha512-fkqfm3S1nRIBoKoK3LfpjDVGswyOw1cRb0W1qV6Na02ccrCJfJ7P9C4SkKZz2iakZioFCot4emraWno3B9YsYg==", + "license": "MIT", + "dependencies": { + "@turf/circle": "7.4.0", + "@turf/destination": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-chunk": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-chunk/-/line-chunk-7.4.0.tgz", + "integrity": "sha512-vGytKbvTc+PtRimeEJez8nGoIxuu5uQiqSrK7DD7JB4ULLnBtABAMEr0EaEQQ2fyvE1zkTsbWSQPoFlQ3M52cQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/length": "7.4.0", + "@turf/line-slice-along": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-intersect": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-7.4.0.tgz", + "integrity": "sha512-5qNmEJ/0tQEaUUKSt2zIZGIS6eYGn3T7Z32yN6+Py0ANs8ln3dQNWaDyOEMms/qVY7BFvSaO+8iBmD8vlHdNcA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "robust-predicates": "^2.0.4", + "tinyqueue": "^2.0.3", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-offset": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-offset/-/line-offset-7.4.0.tgz", + "integrity": "sha512-vAF3tNvHfo6efcrDwhjSL7UgAt2QjPyCKhIWO0g5xvuGMw9v3DZDErla3fVNT/b+DG01UmNmYQWvMzlUWcTLoQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-overlap": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-7.4.0.tgz", + "integrity": "sha512-40ZFjTk103uXFF5MfkhqzhowvBNozMcm18yR24Z38BbLC+4BLUNUslNDqyXStGZPXQ1X0MH3LeE2TbIpw9wKRA==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/boolean-point-on-line": "7.4.0", + "@turf/geojson-rbush": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/line-segment": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/nearest-point-on-line": "7.4.0", + "@types/geojson": "^7946.0.10", + "fast-deep-equal": "^3.1.3", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-segment": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-7.4.0.tgz", + "integrity": "sha512-v4Gnxpj6XqWbl4d/aVZHYwvSFzaTGGBW4eQQ9Ozqcgt+bvignOMdtVogFDHSWKDj9Gr2tbS2jYp57c8OTa+Olw==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-slice": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-slice/-/line-slice-7.4.0.tgz", + "integrity": "sha512-urpVBcce/Z2Gprhv6cRniiaOr0L2UVjBqzEpp3esrW20iu25aDXor43d2KAqAP3Yhlv+vNMFlAJAGPcX/nTSzA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/nearest-point-on-line": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-slice-along": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-slice-along/-/line-slice-along-7.4.0.tgz", + "integrity": "sha512-N3rBS/E/N2v2udmglBU1XTfWIQlxkSDuzGCjbGnWUMX2ClVgJvptQXI1zQ29aIeOTbcqKNiSbEyqBg8e+fugPw==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.4.0", + "@turf/destination": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-split": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-split/-/line-split-7.4.0.tgz", + "integrity": "sha512-bAij7u19sFVdYoAp3bQnu/cVzlORxM/W3FM+WeFN/VvGkZ6YiAtcPq/lLP4WwK3WxthTcavED3wbd32iXGpzZw==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/geojson-rbush": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/line-intersect": "7.4.0", + "@turf/line-segment": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/nearest-point-on-line": "7.4.0", + "@turf/truncate": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/line-to-polygon": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/line-to-polygon/-/line-to-polygon-7.4.0.tgz", + "integrity": "sha512-wUsYNTP+tN+2J0+tzakKVHdo6Y1Pe8Ne1rJUuCxZRumwOFyML6/aIQvQaXdbAjN0gmfuoZTCv78RDSZBtsAPAQ==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/mask": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/mask/-/mask-7.4.0.tgz", + "integrity": "sha512-NVED/D8XcTHJTi080l9ezH3f+BzFbnBdVa0s5G9Q+sZQcrabSS5BOL1kdvQhu1LS49QhAGYNBtcfKB9e0hvwJg==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "polyclip-ts": "^0.16.8", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/meta": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.4.0.tgz", + "integrity": "sha512-3cLUvlEyDuSnMSzrjhaLAEiYR8xhbfWyTVQlrlEw40xL81d4KF4PqUWbjTXKpXZStdYbet2GCurl79KMypNw6g==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/midpoint": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-7.4.0.tgz", + "integrity": "sha512-+poTGThn9F2tveuUDjg1z5TE3QG8zp/IHVqpzkFwFLWX3xpeys0mev9H3LqlbzRU7waawZJ/lsqYlHg3mIWHJw==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.4.0", + "@turf/destination": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/moran-index": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/moran-index/-/moran-index-7.4.0.tgz", + "integrity": "sha512-lZqEUOhpmV2Fngjv6O16Pl3zbDlRUudEeuv/iinkT5adesOAKqngIrg4wYOT0kkNaSdaqNqbKyJGZ8mAlP4Lig==", + "license": "MIT", + "dependencies": { + "@turf/distance-weight": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/nearest-neighbor-analysis": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-neighbor-analysis/-/nearest-neighbor-analysis-7.4.0.tgz", + "integrity": "sha512-WBZbuH+f7/ezEdBGMToT2yYzONdYqhE79yxHTvoJMk1+o0eakg4DY+/owM5FWYgB3GnJCp260//Uz1D/q6wFlg==", + "license": "MIT", + "dependencies": { + "@turf/area": "7.4.0", + "@turf/bbox": "7.4.0", + "@turf/bbox-polygon": "7.4.0", + "@turf/centroid": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/nearest-point": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/nearest-point": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-point/-/nearest-point-7.4.0.tgz", + "integrity": "sha512-rH+M5H/rWiOXStiHkV3Cs5OS+Tg/531Tonr7tm2pUjVy1RRLmDqSzKn+iFs3S6ybvjSK2pJa1BbTXjYlc8Pv3Q==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/nearest-point-on-line": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-7.4.0.tgz", + "integrity": "sha512-eKTKf/qODIsPankYMZrNfI3LjLaVtQvYV/1hcj9kH/Zr3GfLUszevjhTRDZtMgTFrv8+awW3+MyhmN+PJGuLdQ==", + "license": "MIT", + "dependencies": { + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/nearest-point-to-line": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-to-line/-/nearest-point-to-line-7.4.0.tgz", + "integrity": "sha512-PQjS+7/OIjib5HGHtrtDuIH0B6ifT8b4b8ADmcvKcKEMaOk5wjc+Z40oPc0n5OwRoddvbd2K2yV59+fh1cXxeA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/point-to-line-distance": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/planepoint": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/planepoint/-/planepoint-7.4.0.tgz", + "integrity": "sha512-4TQxrbFpbEjIEv9C+5MO5BbnL/Ay2wrJlLxaiIbJ61LaFFuMx6ZCWu1rBYMDo72Ik5+oK4Pik1J5e8rKW3YGRg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/point-grid": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/point-grid/-/point-grid-7.4.0.tgz", + "integrity": "sha512-Lx7M6JkLHT8A3hPc+811rALohOJ9mJBjAh+NQz9Mj/QdFmnhzGa8aia4F4agy3uSyJP/7EFXUXlPRK4Yc6/4tw==", + "license": "MIT", + "dependencies": { + "@turf/boolean-within": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/point-on-feature": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/point-on-feature/-/point-on-feature-7.4.0.tgz", + "integrity": "sha512-H7YamrW510QJLnhWIT9oecm1siwhwvb4SZrZSqu6hUOS+pFxumJjUYogE+B6kL+Ymtui2+h6cOtOHJnrNrKaEA==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/center": "7.4.0", + "@turf/explode": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/nearest-point": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/point-to-line-distance": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-7.4.0.tgz", + "integrity": "sha512-2Egagkj3BK6SrcUxMBJ40PHhW/numknLsJQhlv4kl3d3t83HChhUtH2mXnhqcdi97V3jXSRV1SZIhZKc8TrwOg==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/nearest-point-on-line": "7.4.0", + "@turf/projection": "7.4.0", + "@turf/rhumb-bearing": "7.4.0", + "@turf/rhumb-distance": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/point-to-polygon-distance": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/point-to-polygon-distance/-/point-to-polygon-distance-7.4.0.tgz", + "integrity": "sha512-37h+HzsMgXMu9MJhfQJk11aJ8ZSK4Db/kccvrIyRFv+SX7bCjFON6P4FC4+4PVACajK9VJ52h+KRufaCZqlxdA==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/point-to-line-distance": "7.4.0", + "@turf/polygon-to-line": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/points-within-polygon": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/points-within-polygon/-/points-within-polygon-7.4.0.tgz", + "integrity": "sha512-8TtUvUeM7USPD11rEPPR/C+aADov1G8wxmgP8ExE2KUDCg4X6cnYTxpWgOHe3uijpv4QRHGhiz12xNmB4ysyyA==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/polygon-smooth": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/polygon-smooth/-/polygon-smooth-7.4.0.tgz", + "integrity": "sha512-UxcEo+OrHbl4+YWuhiIT2lLXvA6rohNdbRBqnZY/X9uQ41JYhh5gMYwlQxbsLTgdYA2pE6wJO52PDHvpqsPu4g==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/polygon-tangents": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/polygon-tangents/-/polygon-tangents-7.4.0.tgz", + "integrity": "sha512-QXKxDhRIDeW/+FQ8Eh6gQMPJFpyf6iXal6tdbL7+5jw9Zpm8DTFVvcPzERBZ3gey6P3CSqP/GD1zZT8gQ+mZng==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/boolean-within": "7.4.0", + "@turf/explode": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/nearest-point": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/polygon-to-line": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-7.4.0.tgz", + "integrity": "sha512-LCHZ9bojUj99et83ZLGpSR/PFx48c0tcjtfuI1nn66a6Q+EGy7GO4NsHv4rWZsC8Lljy5ldbJ3dd8+WGnAk7dw==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/polygonize": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/polygonize/-/polygonize-7.4.0.tgz", + "integrity": "sha512-SwEazUYz4KFXllNNXGUt2rP6XpPBfNEOnx+1uP0rcioIsNocFfgwfCUcgHXYM+GZhG0JTD7jQB9RXeNGb6hNIg==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/envelope": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/projection": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-7.4.0.tgz", + "integrity": "sha512-ZS932qM+18V1UBvNlrNXUCD7mh9CzQqZzw/ElVtb0kAk6N00FYQ9bo26Cca08UZKXh3rZqG/e4eCK74JNGS4Zg==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/quadrat-analysis": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/quadrat-analysis/-/quadrat-analysis-7.4.0.tgz", + "integrity": "sha512-p+Af0+LpwnsVQuGSL1BWuLxgMjd6dYaSs+PxwJ2Y05nSXlsIFpWy+/T55r0Sfun7SoypclKURRCmDy3Q/RVdJw==", + "license": "MIT", + "dependencies": { + "@turf/area": "7.4.0", + "@turf/bbox": "7.4.0", + "@turf/bbox-polygon": "7.4.0", + "@turf/centroid": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/point-grid": "7.4.0", + "@turf/random": "7.4.0", + "@turf/square-grid": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/random": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/random/-/random-7.4.0.tgz", + "integrity": "sha512-ttoPPPQppLYww3ZSeOSlbZlaH4Ki4Mxrdu7wMuDWNrINEhrkr/PuqWyIDISTpILsSARqT0Zzfjwdp0ptkUyakw==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/rectangle-grid": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/rectangle-grid/-/rectangle-grid-7.4.0.tgz", + "integrity": "sha512-JeRq5pgmn543DmZU6x4nSX+KVNRGEz3iJQIgbKgSMnzZeiJxfMStINvASz7mz6yky2EwUHvQOBRRlhgCqWViuQ==", + "license": "MIT", + "dependencies": { + "@turf/boolean-intersects": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/rewind": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-7.4.0.tgz", + "integrity": "sha512-Q2qOcLzymxXyIAYXM9BZQT09L63EhzgneCBMka0dPf9jVShxMeA3oF1kY20ChWkZvTGOAbM7YU9hghphbCxo2w==", + "license": "MIT", + "dependencies": { + "@turf/boolean-clockwise": "7.4.0", + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/rhumb-bearing": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-7.4.0.tgz", + "integrity": "sha512-y5omgg5SqHwz46fZlra2/70z5eOKXSp/ZzRNIDYKJVYF5oNT2YbG9Z6lj4Az51bjqJQESXUoR6wRmFnpliIp0w==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/rhumb-destination": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-7.4.0.tgz", + "integrity": "sha512-3x4dNLheJJIK/6daH9U7dDkFRSq3wqvDIdqgSxsqgFHoNEI6xDACKGrx47JFWVbg/zh9osG5JSv96e70Y4P5XA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/rhumb-distance": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-7.4.0.tgz", + "integrity": "sha512-29pFCftS/yxEzrYWB777I23Mob+yw9WAECJNw+uabbJi6fwFphJfqWApMXY2ZnudVSJFCGJbByVAHVDTvOGG+w==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/sample": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/sample/-/sample-7.4.0.tgz", + "integrity": "sha512-RfU8+bp5RzxxDq5ldKk8qR+E/ADboOhlcVjFu2p99SVivlnbkMBNXlFRAwdmaDeyqI6bTuwymc7DsCxE0ZA1Uw==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/sector": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/sector/-/sector-7.4.0.tgz", + "integrity": "sha512-BGTbeT/LHW+6H43by4EQfAQaql94rOg5sxIN1T9/PeQR13KV6CnCVzxEmMzPVEZvy7VDfssv9eMerY0WGkjfYg==", + "license": "MIT", + "dependencies": { + "@turf/circle": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/line-arc": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/shortest-path": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/shortest-path/-/shortest-path-7.4.0.tgz", + "integrity": "sha512-Bq/4/yN+CFWo0TcxXKO/VW7/BB5EgrHj9lwP4Kbk00i43flF0EpnlABWoO/MDUVFBPAkBCyWUgcCUW5MZbid6w==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/bbox-polygon": "7.4.0", + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/clean-coords": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/transform-scale": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/simplify": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/simplify/-/simplify-7.4.0.tgz", + "integrity": "sha512-HTolHFuXLReKHJoh3iz92+WpF5EsuCmmZR7fNv3hWnA4hZfkuEzbGB/WZqRdQpvDs99IUS8QIc6BAp6FHzQbBQ==", + "license": "MIT", + "dependencies": { + "@turf/clean-coords": "7.4.0", + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/square": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/square/-/square-7.4.0.tgz", + "integrity": "sha512-XjL7taeIZdh3iIS1vertswqa+dgQEgBlByfInjTj3uDDjrpHYG13Yxg6EHuOW/y1SeTWp2fTAKLRQFexC+kwGw==", + "license": "MIT", + "dependencies": { + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/square-grid": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/square-grid/-/square-grid-7.4.0.tgz", + "integrity": "sha512-jq4pxYs+FQ8Y1m3RhpTBYvSLzSwj75hurT53T1jXboEYIyeFGtGdlOy2o3yx/2cxUK+AP1KtKrQGX5v7sdpzVg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/rectangle-grid": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/standard-deviational-ellipse": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/standard-deviational-ellipse/-/standard-deviational-ellipse-7.4.0.tgz", + "integrity": "sha512-02Erb1A1BARE0MKxLMxsSL3BVHZWZrW/edZISvqZUF1eBOc7FMpIy6Pu55COkFkN3YYOQHysrc4COAZdYEjcwg==", + "license": "MIT", + "dependencies": { + "@turf/center-mean": "7.4.0", + "@turf/ellipse": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/points-within-polygon": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/tag": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/tag/-/tag-7.4.0.tgz", + "integrity": "sha512-IBd4Lz01FWyTnyxmzcyK3DypMkd7vMzptZIQFlkC/LDeMnPMnmT1oJD7wMdZCJIV1YGVC5abpXoNwY3xnj/eTw==", + "license": "MIT", + "dependencies": { + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/tesselate": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/tesselate/-/tesselate-7.4.0.tgz", + "integrity": "sha512-73Jj0+9GPUYoegut9J1ex9kVYe+WAIV+tBm6EXXtaZzmobIp8fPsAvspyTzXMQvPtlUsf/St+L0W4KFwWe2KrQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/earcut": "^2.1.4", + "@types/geojson": "^7946.0.10", + "earcut": "^2.2.4", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/tin": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/tin/-/tin-7.4.0.tgz", + "integrity": "sha512-54uBeNKIP8GufZCdeMUMy33e0blR4w0JoE6sYO8I6ZPshNRbVbI24ck+kREVMjzNyeuhL+l7DUrNEn/pcDgBRg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/transform-rotate": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-7.4.0.tgz", + "integrity": "sha512-JsXtvydU23rJdOlS5u9Fpdi6mPtbRCo8/6y3QSjkg37EubFTd357M+lX8+lQ+LHjs8hXxvp9LKBZwTujlqsDcw==", + "license": "MIT", + "dependencies": { + "@turf/centroid": "7.4.0", + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/rhumb-bearing": "7.4.0", + "@turf/rhumb-destination": "7.4.0", + "@turf/rhumb-distance": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/transform-scale": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-7.4.0.tgz", + "integrity": "sha512-lPsvppxBfK+5z9fC1R3F/7y4113cwZ7hLG9dR97EUYaUhphQveVShrFK18S8+AXxs0J4PnDm3HptTfuJyD7bMQ==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.4.0", + "@turf/center": "7.4.0", + "@turf/centroid": "7.4.0", + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/rhumb-bearing": "7.4.0", + "@turf/rhumb-destination": "7.4.0", + "@turf/rhumb-distance": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/transform-translate": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-7.4.0.tgz", + "integrity": "sha512-tMHS7lovcHRpKtM0A9w1Y337ZM279YALzPmEvbLA/1Piy6Ik2osecxGB90T+HaobYkWVWhiQ70XP48f49qFc8g==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/rhumb-destination": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/triangle-grid": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/triangle-grid/-/triangle-grid-7.4.0.tgz", + "integrity": "sha512-3aPtajJH67JkuEe+9WAEecRHBs9Q6lK0KrJIhs8QDx4VJ4nGjRazomz+UuxbhBRtn37lQ/cIxWn0nH9JYFembw==", + "license": "MIT", + "dependencies": { + "@turf/distance": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/intersect": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/truncate": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/truncate/-/truncate-7.4.0.tgz", + "integrity": "sha512-eTXO62l1mD++mKlhUqLNHGcgCQvhxXJGB/EUL1KSzpVIeMYtgcmItAneWdHW+gEpmHfjeDjBuvtbZWA23r7Eig==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/turf": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/turf/-/turf-7.4.0.tgz", + "integrity": "sha512-enR/94yESzZb4t7lj/DSqk6oMdsSfPhMnXHn+f4umpdtZuMmFSbB/mPWxMFoyWCD0z+luwPwtJ7kdtHO5nGi9w==", + "license": "MIT", + "dependencies": { + "@turf/along": "7.4.0", + "@turf/angle": "7.4.0", + "@turf/area": "7.4.0", + "@turf/bbox": "7.4.0", + "@turf/bbox-clip": "7.4.0", + "@turf/bbox-polygon": "7.4.0", + "@turf/bearing": "7.4.0", + "@turf/bezier-spline": "7.4.0", + "@turf/boolean-clockwise": "7.4.0", + "@turf/boolean-concave": "7.4.0", + "@turf/boolean-contains": "7.4.0", + "@turf/boolean-crosses": "7.4.0", + "@turf/boolean-disjoint": "7.4.0", + "@turf/boolean-equal": "7.4.0", + "@turf/boolean-intersects": "7.4.0", + "@turf/boolean-overlap": "7.4.0", + "@turf/boolean-parallel": "7.4.0", + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/boolean-point-on-line": "7.4.0", + "@turf/boolean-touches": "7.4.0", + "@turf/boolean-valid": "7.4.0", + "@turf/boolean-within": "7.4.0", + "@turf/buffer": "7.4.0", + "@turf/center": "7.4.0", + "@turf/center-mean": "7.4.0", + "@turf/center-median": "7.4.0", + "@turf/center-of-mass": "7.4.0", + "@turf/centroid": "7.4.0", + "@turf/circle": "7.4.0", + "@turf/clean-coords": "7.4.0", + "@turf/clone": "7.4.0", + "@turf/clusters": "7.4.0", + "@turf/clusters-dbscan": "7.4.0", + "@turf/clusters-kmeans": "7.4.0", + "@turf/collect": "7.4.0", + "@turf/combine": "7.4.0", + "@turf/concave": "7.4.0", + "@turf/convex": "7.4.0", + "@turf/destination": "7.4.0", + "@turf/difference": "7.4.0", + "@turf/directional-mean": "7.4.0", + "@turf/dissolve": "7.4.0", + "@turf/distance": "7.4.0", + "@turf/distance-weight": "7.4.0", + "@turf/ellipse": "7.4.0", + "@turf/envelope": "7.4.0", + "@turf/explode": "7.4.0", + "@turf/flatten": "7.4.0", + "@turf/flip": "7.4.0", + "@turf/geojson-rbush": "7.4.0", + "@turf/great-circle": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/hex-grid": "7.4.0", + "@turf/interpolate": "7.4.0", + "@turf/intersect": "7.4.0", + "@turf/invariant": "7.4.0", + "@turf/isobands": "7.4.0", + "@turf/isolines": "7.4.0", + "@turf/kinks": "7.4.0", + "@turf/length": "7.4.0", + "@turf/line-arc": "7.4.0", + "@turf/line-chunk": "7.4.0", + "@turf/line-intersect": "7.4.0", + "@turf/line-offset": "7.4.0", + "@turf/line-overlap": "7.4.0", + "@turf/line-segment": "7.4.0", + "@turf/line-slice": "7.4.0", + "@turf/line-slice-along": "7.4.0", + "@turf/line-split": "7.4.0", + "@turf/line-to-polygon": "7.4.0", + "@turf/mask": "7.4.0", + "@turf/meta": "7.4.0", + "@turf/midpoint": "7.4.0", + "@turf/moran-index": "7.4.0", + "@turf/nearest-neighbor-analysis": "7.4.0", + "@turf/nearest-point": "7.4.0", + "@turf/nearest-point-on-line": "7.4.0", + "@turf/nearest-point-to-line": "7.4.0", + "@turf/planepoint": "7.4.0", + "@turf/point-grid": "7.4.0", + "@turf/point-on-feature": "7.4.0", + "@turf/point-to-line-distance": "7.4.0", + "@turf/point-to-polygon-distance": "7.4.0", + "@turf/points-within-polygon": "7.4.0", + "@turf/polygon-smooth": "7.4.0", + "@turf/polygon-tangents": "7.4.0", + "@turf/polygon-to-line": "7.4.0", + "@turf/polygonize": "7.4.0", + "@turf/projection": "7.4.0", + "@turf/quadrat-analysis": "7.4.0", + "@turf/random": "7.4.0", + "@turf/rectangle-grid": "7.4.0", + "@turf/rewind": "7.4.0", + "@turf/rhumb-bearing": "7.4.0", + "@turf/rhumb-destination": "7.4.0", + "@turf/rhumb-distance": "7.4.0", + "@turf/sample": "7.4.0", + "@turf/sector": "7.4.0", + "@turf/shortest-path": "7.4.0", + "@turf/simplify": "7.4.0", + "@turf/square": "7.4.0", + "@turf/square-grid": "7.4.0", + "@turf/standard-deviational-ellipse": "7.4.0", + "@turf/tag": "7.4.0", + "@turf/tesselate": "7.4.0", + "@turf/tin": "7.4.0", + "@turf/transform-rotate": "7.4.0", + "@turf/transform-scale": "7.4.0", + "@turf/transform-translate": "7.4.0", + "@turf/triangle-grid": "7.4.0", + "@turf/truncate": "7.4.0", + "@turf/union": "7.4.0", + "@turf/unkink-polygon": "7.4.0", + "@turf/voronoi": "7.4.0", + "@types/geojson": "^7946.0.10", + "@types/kdbush": "^3.0.5", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/union": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-7.4.0.tgz", + "integrity": "sha512-SYVtsCW9IznTyKlcGWxssRrf90p/hdpch1UeIcZc31pkSVdmeLOyuzPx0ef3UPmaF//fgXAphMph6JWA/FpKbA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "polyclip-ts": "^0.16.8", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/unkink-polygon": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/unkink-polygon/-/unkink-polygon-7.4.0.tgz", + "integrity": "sha512-GAQdiRmfR3Q64LoOqorr2Ec9eKoaVssSE1Rq34ZVTGmf2H49vjOPTXfTBp9ZVva4apVUkNLPPv3r4VaUHmABog==", + "license": "MIT", + "dependencies": { + "@turf/area": "7.4.0", + "@turf/boolean-point-in-polygon": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/meta": "7.4.0", + "@types/geojson": "^7946.0.10", + "rbush": "^3.0.1", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/voronoi": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@turf/voronoi/-/voronoi-7.4.0.tgz", + "integrity": "sha512-Uw/gyd0vuRonM/zCzgKqsb4Pt8gLl3oMPPscGVtmtyH0vsdlaZuaimJFC9Xdo9sWkLxn8eokhFnkJ3MZSl2UTA==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.4.0", + "@turf/helpers": "7.4.0", + "@turf/invariant": "7.4.0", + "@types/d3-voronoi": "^1.1.12", + "@types/geojson": "^7946.0.10", + "d3-voronoi": "1.1.2", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@types/d3-voronoi": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.12.tgz", + "integrity": "sha512-DauBl25PKZZ0WVJr42a6CNvI6efsdzofl9sajqZr2Gf5Gu733WkDdUGiPkUHXiUvYGzNNlFQde2wdZdfQPG+yw==", + "license": "MIT" + }, + "node_modules/@types/earcut": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.4.tgz", + "integrity": "sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==", + "license": "MIT" + }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/kdbush": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/kdbush/-/kdbush-3.0.5.tgz", + "integrity": "sha512-tdJz7jaWFu4nR+8b2B+CdPZ6811ighYylWsu2hpsivapzW058yP0KdfZuNY89IiRe5jbKvBGXN3LQdN2KPXVdQ==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "26.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.4.tgz", + "integrity": "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "license": "MIT" + }, + "node_modules/@types/pg": { + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.23.1.tgz", + "integrity": "sha512-fKVHpikPdg4GKks3JuLEhvwSyvwzF23hnabPy6DD8ljVbC7+6J5dQzdv4arV6jqq57djnMgs1HKBxX4P8aBI3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", + "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.3.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.1.tgz", + "integrity": "sha512-yxLaQV9gkhS8ezJqCM6+ndU7mDY6gqAg75NQ+0IjwEI8IYOmQCgkRwHKVSfWXW076DsqMo0Dk+0FK1U+M5RgFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.145.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/@webgpu/types": { + "version": "0.1.74", + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.74.tgz", + "integrity": "sha512-lgiI4hbuLcI9unnm2cL/tvCaQU45dp0xcLWJh5uB/9MBGvIA4F8XIk7nSiBeg+K4xWGYwgZKn80LmERI5CxoTA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/apache-arrow": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-21.2.0.tgz", + "integrity": "sha512-Hxe6Agq26gQOM954qpzYSllJBPJl+e16U5CkfuMUhLrNba+5nKkttIVlflaovN6oaTratqMGAO8H5u/aNhmHWQ==", + "license": "Apache-2.0", + "dependencies": { + "@types/node": "^25.2.0", + "flatbuffers": "^25.1.24", + "json-with-bigint": "^3.5.3", + "tslib": "^2.6.2" + }, + "bin": { + "arrow2csv": "bin/arrow2csv.js" + } + }, + "node_modules/apache-arrow/node_modules/@types/node": { + "version": "25.9.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.9.tgz", + "integrity": "sha512-b4e2xxj/yMeT2hNlD6x7zNFiQK2Dlmkb9CQ6v3/1G2RezKN4YS2lcEv8lzGm1mhs4f2lM4yNAMI/zUDBZBBt7w==", + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/apache-arrow/node_modules/undici-types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "license": "MIT" + }, + "node_modules/arc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/arc/-/arc-0.2.0.tgz", + "integrity": "sha512-8NFOo126uYKQJyXNSLY/jSklgfLQL+XWAcPXGo876JwEQ8nSOPXWNI3TV2jLZMN8QEw8uksJ1ZwS4npjBca8MA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/bidi-js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.1.0.tgz", + "integrity": "sha512-fX1Onk0tdVPC7obPWB5EbJ1z7NVhLq4m2xZLq2YXBkxzMXIGRpNMU88n0EPgWseKl12J7zXs7qrDxPK4sRs2fg==", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/concaveman": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz", + "integrity": "sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==", + "license": "ISC", + "dependencies": { + "point-in-polygon": "^1.1.0", + "rbush": "^3.0.1", + "robust-predicates": "^2.0.4", + "tinyqueue": "^2.0.3" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-geo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-2.0.2.tgz", + "integrity": "sha512-8pM1WGMLGFuhq9S+FpPURxic+gKzjluCD/CHTuUF3mXMeiCo0i6R0tO1s4+GArRFde96SLcW/kOFRjoAosPsFA==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "^2.5.0" + } + }, + "node_modules/d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==", + "license": "BSD-3-Clause" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" + }, + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "license": "MIT" + }, + "node_modules/flatbuffers": { + "version": "25.9.23", + "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-25.9.23.tgz", + "integrity": "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==", + "license": "Apache-2.0" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/geojson-equality-ts": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/geojson-equality-ts/-/geojson-equality-ts-1.0.2.tgz", + "integrity": "sha512-h3Ryq+0mCSN/7yLs0eDgrZhvc9af23o/QuC4aTiuuzP/MRCtd6mf5rLsLRY44jX0RPUfM8c4GqERQmlUxPGPoQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.14" + } + }, + "node_modules/geojson-polygon-self-intersections": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/geojson-polygon-self-intersections/-/geojson-polygon-self-intersections-1.2.2.tgz", + "integrity": "sha512-6XRNF4CsRHYmR9z5YuIk5f/aOototnDf0dgMqYGcS7y1l57ttt6MAIAxl3rXyas6lq1HEbTuLMh4PgvO+OV42w==", + "license": "MIT", + "dependencies": { + "rbush": "^2.0.1" + } + }, + "node_modules/geojson-polygon-self-intersections/node_modules/quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", + "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==", + "license": "ISC" + }, + "node_modules/geojson-polygon-self-intersections/node_modules/rbush": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", + "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", + "license": "MIT", + "dependencies": { + "quickselect": "^1.0.1" + } + }, + "node_modules/gl-matrix": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", + "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", + "license": "MIT" + }, + "node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, + "node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT" + }, + "node_modules/json-with-bigint": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.12.tgz", + "integrity": "sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w==", + "license": "MIT" + }, + "node_modules/jsts": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/jsts/-/jsts-2.7.1.tgz", + "integrity": "sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg==", + "license": "(EDL-1.0 OR EPL-1.0)", + "engines": { + "node": ">= 12" + } + }, + "node_modules/kdbush": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.1.0.tgz", + "integrity": "sha512-e9vurzrXJQrFX6ckpHP3bvj5l+9CnYzkxDNnNQ1h2QTqdWsUAJgXiKdGNcOa1EY85dU8KbQ+z/FdQdB7P+9yfQ==", + "license": "ISC" + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/maplibre-gl": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-6.12.0.tgz", + "integrity": "sha512-DwgganVi2BhNxOpD7ob3lJC0dQQz4HfJfuQQV3XxCY3XdOzFrMqp9ylMXhRzryRsOnIezdZcklWXIIs/Q8JPjA==", + "license": "BSD-3-Clause", + "dependencies": { + "@mapbox/point-geometry": "^1.1.0", + "@mapbox/tiny-sdf": "^2.2.0", + "@mapbox/unitbezier": "^1.0.0", + "@mapbox/vector-tile": "^3.0.0", + "@maplibre/geojson-vt": "^6.1.1", + "@maplibre/maplibre-gl-style-spec": "^26.4.4", + "@maplibre/mlt": "^1.3.0", + "@maplibre/vt-pbf": "^4.3.2", + "@types/geojson": "^7946.0.16", + "bidi-js": "^1.1.0", + "earcut": "^3.2.4", + "gl-matrix": "^3.4.4", + "kdbush": "^4.1.0", + "murmurhash-js": "^1.0.0", + "pbf": "^5.1.2", + "potpack": "^2.1.0", + "quickselect": "^3.0.0", + "tinyqueue": "^3.0.0" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/maplibre-gl/node_modules/earcut": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.2.4.tgz", + "integrity": "sha512-FHc6yNpnTORB0tM5kmZ03iD2mDuNakDE2lvf4Hw1XkfxtEHIGVi01B/GqUSwx+NcC1WGjidAfpTXzeALtPtfpg==", + "license": "ISC" + }, + "node_modules/maplibre-gl/node_modules/tinyqueue": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mjolnir.js": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-3.1.1.tgz", + "integrity": "sha512-Em3+0p6n2RamaiiDenHByvaWNolr+K0fWsFpgUgUXRssFI59ramCMdp0crU6V75clbA4fDJBVTBXfBF5rlPB9A==", + "license": "MIT" + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.19", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", + "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/pbf": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-5.1.2.tgz", + "integrity": "sha512-mnvGdvOrIvJOBGUEdGkrVXjN8E/VkIJCkf2eS1DH2yv82ORUlLttmDt0rWY38yYZmVwciZwBUvHM20qxBZf40w==", + "license": "BSD-3-Clause", + "dependencies": { + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/pg": { + "version": "8.23.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.23.1.tgz", + "integrity": "sha512-aL96AHANtWjPLDOLqnhx+ngp9+UK7ETEU8VJrDCGvsSSi/mGLcWYsS6Herg7lmaBJe4uwrfqsa7gTEFaSizDoQ==", + "license": "MIT", + "dependencies": { + "pg-connection-string": "^2.14.1", + "pg-pool": "^3.14.0", + "pg-protocol": "^1.16.1", + "pg-types": "2.2.0", + "pgpass": "1.0.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.4.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.4.1.tgz", + "integrity": "sha512-6PQbsFWZcp9EmJEwy5cGQ2La+AMWpP46lgbb8X+U/XsHIUweYDNCpeuKck5RxL2MdVFi7krbbEi5nX4Zh7JhrQ==", + "license": "MIT", + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.14.1.tgz", + "integrity": "sha512-qR3kGNPBLpCNtz0evbKA0Y/MRFXwSSdT+pTJvYp/bXTcReZbvX1kzF0IyTc1QnxqF7AZbOeBhNL8R5mYQZV/MA==", + "license": "MIT" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.14.0.tgz", + "integrity": "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw==", + "license": "MIT", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.16.1.tgz", + "integrity": "sha512-p9VOFMiHB/ZbJATetbg+99PxssTVSQRnyuPSQ67mN1+1KBOjZaZ83ZQzltnxPhJwSsC3nwVjJ10DVJlerbFzLg==", + "license": "MIT" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "license": "MIT", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "license": "MIT", + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", + "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.63.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.63.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", + "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/pmtiles": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/pmtiles/-/pmtiles-4.5.0.tgz", + "integrity": "sha512-CBeD4SoUluFziGdy/8k7FOjQxQy486n+929W/tWophauvMICpkZ26vGBWhDt/6b1FZQWNaf4jFdT/5+q0Wii5w==", + "license": "BSD-3-Clause", + "dependencies": { + "fflate": "^0.8.2" + } + }, + "node_modules/point-in-polygon": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==", + "license": "MIT" + }, + "node_modules/point-in-polygon-hao": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/point-in-polygon-hao/-/point-in-polygon-hao-1.2.4.tgz", + "integrity": "sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ==", + "license": "MIT", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, + "node_modules/point-in-polygon-hao/node_modules/robust-predicates": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", + "license": "Unlicense" + }, + "node_modules/polyclip-ts": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/polyclip-ts/-/polyclip-ts-0.16.8.tgz", + "integrity": "sha512-JPtKbDRuPEuAjuTdhR62Gph7Is2BS1Szx69CFOO3g71lpJDFo78k4tFyi+qFOMVPePEzdSKkpGU3NBXPHHjvKQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.1.0", + "splaytree-ts": "^1.0.2" + } + }, + "node_modules/postcss": { + "version": "8.5.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", + "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.19", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", + "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/potpack": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz", + "integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==", + "license": "ISC" + }, + "node_modules/prettier": { + "version": "3.9.9", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.9.tgz", + "integrity": "sha512-Z/CJHIkdujO/OtN7nXUii0Rf3VT5SRuhjBA82Xvu2XhBUgX3nhP67T0LHceBdQLex7OOFGTox+Q5Yg8Jk2Qivg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.1.tgz", + "integrity": "sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==", + "license": "MIT" + }, + "node_modules/quickselect": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" + }, + "node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "license": "MIT", + "dependencies": { + "quickselect": "^2.0.0" + } + }, + "node_modules/rbush/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.28.0" + }, + "peerDependencies": { + "react": "^19.3.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/robust-predicates": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", + "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==", + "license": "Unlicense" + }, + "node_modules/rolldown": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.12.tgz", + "integrity": "sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.152.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.12", + "@rolldown/binding-android-arm64": "1.2.12", + "@rolldown/binding-darwin-arm64": "1.2.12", + "@rolldown/binding-darwin-x64": "1.2.12", + "@rolldown/binding-freebsd-x64": "1.2.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.12", + "@rolldown/binding-linux-arm64-gnu": "1.2.12", + "@rolldown/binding-linux-arm64-musl": "1.2.12", + "@rolldown/binding-linux-ppc64-gnu": "1.2.12", + "@rolldown/binding-linux-s390x-gnu": "1.2.12", + "@rolldown/binding-linux-x64-gnu": "1.2.12", + "@rolldown/binding-linux-x64-musl": "1.2.12", + "@rolldown/binding-openharmony-arm64": "1.2.12", + "@rolldown/binding-win32-arm64-msvc": "1.2.12", + "@rolldown/binding-win32-x64-msvc": "1.2.12" + } + }, + "node_modules/scheduler": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "license": "MIT" + }, + "node_modules/skmeans": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/skmeans/-/skmeans-0.9.7.tgz", + "integrity": "sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==", + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/splaytree-ts": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/splaytree-ts/-/splaytree-ts-1.0.2.tgz", + "integrity": "sha512-0kGecIZNIReCSiznK3uheYB8sbstLjCZLiwcQwbmLhgHJj2gz6OnSPkVzJQCMnmEz1BQ4gPK59ylhBoEWOhGNA==", + "license": "BDS-3-Clause" + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "license": "ISC" + }, + "node_modules/topojson-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", + "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "license": "ISC", + "dependencies": { + "commander": "2" + }, + "bin": { + "topo2geo": "bin/topo2geo", + "topomerge": "bin/topomerge", + "topoquantize": "bin/topoquantize" + } + }, + "node_modules/topojson-server": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/topojson-server/-/topojson-server-3.0.1.tgz", + "integrity": "sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==", + "license": "ISC", + "dependencies": { + "commander": "2" + }, + "bin": { + "geo2topo": "bin/geo2topo" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.23.15", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.15.tgz", + "integrity": "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.28.0" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.2.tgz", + "integrity": "sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.28", + "rolldown": "~1.2.11", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/zod": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/applications/field-dispatch/package.json b/applications/field-dispatch/package.json new file mode 100644 index 00000000..b97b147e --- /dev/null +++ b/applications/field-dispatch/package.json @@ -0,0 +1,44 @@ +{ + "name": "field-dispatch", + "private": true, + "type": "module", + "engines": { + "node": ">=24.21.0 <25" + }, + "scripts": { + "build": "vite build", + "check": "tsc --noEmit", + "start": "node --env-file=.env --import tsx server/index.ts", + "test": "tsx --test tests/native.test.ts", + "test:integration": "node --env-file=.env --import tsx --test tests/database.test.ts", + "test:browser": "node --env-file=.env ./node_modules/@playwright/test/cli.js test" + }, + "dependencies": { + "react": "19.3.0", + "react-dom": "19.3.0", + "maplibre-gl": "6.12.0", + "@deck.gl/core": "9.4.0", + "@deck.gl/layers": "9.4.0", + "@deck.gl/maplibre": "9.4.0", + "@luma.gl/core": "9.4.0", + "@luma.gl/engine": "9.4.0", + "@loaders.gl/core": "4.5.2", + "@turf/turf": "7.4.0", + "pmtiles": "4.5.0", + "pg": "8.23.1", + "zod": "4.6.5" + }, + "devDependencies": { + "@types/react": "19.3.0", + "@types/react-dom": "19.3.0", + "@types/geojson": "7946.0.16", + "@types/node": "26.6.4", + "@types/pg": "8.23.1", + "@vitejs/plugin-react": "6.1.1", + "vite": "8.3.2", + "typescript": "6.0.3", + "tsx": "4.23.15", + "@playwright/test": "1.63.0", + "prettier": "3.9.9" + } +} diff --git a/applications/field-dispatch/playwright.config.ts b/applications/field-dispatch/playwright.config.ts new file mode 100644 index 00000000..1afbd22c --- /dev/null +++ b/applications/field-dispatch/playwright.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "@playwright/test"; +export default defineConfig({ + testDir: "tests/browser", + workers: 1, + retries: 0, + timeout: 180_000, + use: { + actionTimeout: 10_000, + baseURL: process.env.APP_ORIGIN ?? "http://127.0.0.1:3002", + viewport: { width: 1440, height: 1050 }, + trace: "retain-on-failure", + launchOptions: { + args: [ + "--use-gl=angle", + "--use-angle=swiftshader", + "--enable-unsafe-swiftshader", + ], + }, + }, +}); diff --git a/applications/field-dispatch/public/maintenance-town.pmtiles b/applications/field-dispatch/public/maintenance-town.pmtiles new file mode 100644 index 0000000000000000000000000000000000000000..1a4e44095363edd9ab35f35b78196bec1ea3154f GIT binary patch literal 7995 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 bU-Xv~`gb!oBXR6Z>VrVHuj;1d0|)pI@Dotv literal 0 HcmV?d00001 diff --git a/applications/field-dispatch/scripts/generate-basemap.py b/applications/field-dispatch/scripts/generate-basemap.py new file mode 100644 index 00000000..2da22014 --- /dev/null +++ b/applications/field-dispatch/scripts/generate-basemap.py @@ -0,0 +1,76 @@ +"""Generate a tiny, wholly synthetic vector PMTiles basemap (no OSM data).""" +import gzip +import math +from pathlib import Path + +import mapbox_vector_tile +from pmtiles.tile import Compression, TileType, zxy_to_tileid +from pmtiles.writer import Writer +from shapely.geometry import LineString, box +from shapely.ops import transform + +ROOT = Path(__file__).resolve().parents[1] +WORLD = 20037508.342789244 +EXTENT = (-1.51, 53.33, -1.41, 53.41) + + +def mercator(lon, lat): + return lon * WORLD / 180, math.log(math.tan(math.pi / 4 + math.radians(lat) / 2)) * WORLD / math.pi + + +def tile_xy(lon, lat, zoom): + scale = 2 ** zoom + return int((lon + 180) / 360 * scale), int((1 - math.asinh(math.tan(math.radians(lat))) / math.pi) / 2 * scale) + + +def feature(geometry, kind, identifier): + return {"geometry": transform(mercator, geometry), "properties": {"kind": kind}, "id": identifier} + + +roads = [] +for i in range(10): + lon = -1.495 + i * 0.006 + roads.append(feature(LineString([(lon, 53.343), (lon + 0.003, 53.400)]), "minor", i + 1)) +for i in range(9): + lat = 53.346 + i * 0.006 + roads.append(feature(LineString([(-1.501, lat), (-1.435, lat + 0.001)]), "main" if i in (2, 6) else "minor", i + 20)) +land = [] +for x in range(8): + for y in range(7): + lon, lat = -1.493 + x * 0.006, 53.349 + y * 0.006 + land.append(feature(box(lon, lat, lon + 0.003, lat + 0.002), "park" if (x + y) % 7 == 0 else "block", 100 + x * 10 + y)) +water = [feature(LineString([(-1.469, 53.340), (-1.466, 53.360), (-1.462, 53.380), (-1.458, 53.402)]), "river", 500)] + +output = ROOT / "public" / "maintenance-town.pmtiles" +output.parent.mkdir(exist_ok=True) +with output.open("wb") as stream: + writer = Writer(stream) + tiles = [] + for zoom in range(12, 15): + west, south, east, north = EXTENT + min_x, min_y = tile_xy(west, north, zoom) + max_x, max_y = tile_xy(east, south, zoom) + for x in range(min_x, max_x + 1): + for y in range(min_y, max_y + 1): + size = 2 * WORLD / 2 ** zoom + bounds = (-WORLD + x * size, WORLD - (y + 1) * size, -WORLD + (x + 1) * size, WORLD - y * size) + clip = box(*bounds) + layers = [] + for name, source in [("roads", roads), ("land", land), ("water", water)]: + clipped = [] + for original in source: + geometry = original["geometry"].intersection(clip) + if not geometry.is_empty and geometry.geom_type in ("Polygon", "MultiPolygon", "LineString", "MultiLineString"): + clipped.append({**original, "geometry": geometry}) + layers.append({"name": name, "features": clipped}) + encoded = mapbox_vector_tile.encode(layers, default_options={"quantize_bounds": bounds, "extents": 4096}) + tiles.append((zxy_to_tileid(zoom, x, y), gzip.compress(encoded, mtime=0))) + for tileid, encoded in sorted(tiles): + writer.write_tile(tileid, encoded) + writer.finalize({"tile_type": TileType.MVT, "tile_compression": Compression.GZIP, + "min_lon_e7": int(EXTENT[0] * 1e7), "min_lat_e7": int(EXTENT[1] * 1e7), + "max_lon_e7": int(EXTENT[2] * 1e7), "max_lat_e7": int(EXTENT[3] * 1e7), + "center_zoom": 14, "center_lon_e7": -14670000, "center_lat_e7": 533730000}, + {"name": "Synthetic maintenance town", "description": "Generated fictional streets, blocks and parks. No real map data.", + "attribution": "Synthetic map data · ClickHouse examples", "vector_layers": [{"id": name, "fields": {"kind": "String"}, "minzoom": 12, "maxzoom": 14} for name in ["roads", "land", "water"]]}) +print(f"Generated {len(tiles)} vector tiles, {output.stat().st_size} bytes: {output.name}") diff --git a/applications/field-dispatch/server/database.ts b/applications/field-dispatch/server/database.ts new file mode 100644 index 00000000..822bfa82 --- /dev/null +++ b/applications/field-dispatch/server/database.ts @@ -0,0 +1,35 @@ +import { readFileSync } from "node:fs"; +import { Pool } from "pg"; +let pool: Pool | undefined; +export function databaseConfig() { + const connectionString = process.env.DATABASE_URL; + const caPath = process.env.DATABASE_CA_PATH; + if (!connectionString || !caPath) + throw new Error("DATABASE_URL and DATABASE_CA_PATH are required."); + const url = new URL(connectionString); + if ( + !["postgresql:", "postgres:"].includes(url.protocol) || + url.search || + url.hash || + process.env.NODE_TLS_REJECT_UNAUTHORIZED === "0" + ) + throw new Error("Use a direct Postgres URL without SSL query parameters."); + return { + connectionString, + max: 5, + connectionTimeoutMillis: 10_000, + query_timeout: 15_000, + ssl: { + ca: readFileSync(caPath, "utf8"), + rejectUnauthorized: true, + servername: url.hostname, + }, + }; +} +export function database() { + return (pool ??= new Pool(databaseConfig())); +} +export async function closeDatabase() { + await pool?.end(); + pool = undefined; +} diff --git a/applications/field-dispatch/server/dispatch.ts b/applications/field-dispatch/server/dispatch.ts new file mode 100644 index 00000000..b7e13046 --- /dev/null +++ b/applications/field-dispatch/server/dispatch.ts @@ -0,0 +1,153 @@ +import type { PoolClient } from "pg"; +import { database } from "./database"; +import { + assignmentSchema, + mapStateSchema, + viewportSchema, + type Area, + type Bootstrap, + type Job, + type MapState, + type Team, + type Viewport, +} from "../src/domain"; + +export class DispatchError extends Error { + constructor( + message: string, + public status = 400, + ) { + super(message); + } +} +async function transaction(work: (client: PoolClient) => Promise) { + const client = await database().connect(); + try { + await client.query("BEGIN"); + const result = await work(client); + await client.query("COMMIT"); + return result; + } catch (error) { + await client.query("ROLLBACK"); + throw error; + } finally { + client.release(); + } +} +export async function bootstrap(): Promise { + return transaction(async (client) => { + await client.query( + "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ READ ONLY", + ); + const areas = ( + await client.query(` + SELECT id, name, color, jsonb_build_object( + 'type','Feature','properties',jsonb_build_object('id',id,'name',name), + 'geometry',public.ST_AsGeoJSON(boundary)::jsonb) AS feature + FROM dispatch.areas ORDER BY name + `) + ).rows; + const teams = ( + await client.query(` + SELECT id,name,area_id AS "areaId", + jsonb_build_array(public.ST_X(depot),public.ST_Y(depot)) AS position + FROM dispatch.teams ORDER BY name + `) + ).rows; + const state = ( + await client.query(` + SELECT longitude,latitude,zoom,area_id AS "areaId",mode,revision + FROM dispatch.map_state WHERE id='dispatch' + `) + ).rows[0]; + return { areas, teams, state }; + }); +} +export async function viewportJobs(input: unknown) { + const bounds = viewportSchema.parse(input); + const rows = ( + await database().query( + ` + SELECT id,code,title,priority,team_id AS "teamId",revision, + jsonb_build_array(public.ST_X(geom),public.ST_Y(geom)) AS position, + (count(*) OVER ())::integer AS total + FROM dispatch.jobs + WHERE public.ST_Intersects(geom,public.ST_MakeEnvelope($1,$2,$3,$4,4326)) + ORDER BY CASE priority WHEN 'urgent' THEN 0 ELSE 1 END,code LIMIT 100 + `, + [bounds.west, bounds.south, bounds.east, bounds.north], + ) + ).rows; + const total = rows[0]?.total ?? 0; + return { + jobs: rows.map(({ total: _total, ...job }) => job), + total, + capped: total > rows.length, + }; +} +export async function assign(input: { + jobId: string; + teamId: string; + revision: number; +}) { + const data = assignmentSchema.parse(input); + return transaction(async (client) => { + const result = await client.query<{ revision: number; inside: boolean }>( + ` + SELECT j.revision,public.ST_Covers(a.boundary,j.geom) AS inside + FROM dispatch.jobs j + JOIN dispatch.teams t ON t.id=$2 + JOIN dispatch.areas a ON a.id=t.area_id + WHERE j.id=$1 FOR UPDATE OF j + `, + [data.jobId, data.teamId], + ); + const job = result.rows[0]; + if (!job) throw new DispatchError("Job or team not found.", 404); + if (job.revision !== data.revision) + throw new DispatchError( + "This job changed in another tab. Refresh before assigning.", + 409, + ); + if (!job.inside) + throw new DispatchError( + "This job lies outside the team’s service area. Assignment was not saved.", + ); + await client.query( + ` + UPDATE dispatch.jobs SET team_id=$2,revision=revision+1 WHERE id=$1 + `, + [data.jobId, data.teamId], + ); + return { revision: job.revision + 1 }; + }); +} +export async function saveMap(input: MapState) { + const state = mapStateSchema.parse(input); + return transaction(async (client) => { + const result = await client.query(` + SELECT revision FROM dispatch.map_state WHERE id='dispatch' FOR UPDATE + `); + if (result.rows[0].revision !== state.revision) + throw new DispatchError( + "The saved view changed in another tab. Reload before saving.", + 409, + ); + if ( + !( + await client.query("SELECT 1 FROM dispatch.areas WHERE id=$1", [ + state.areaId, + ]) + ).rowCount + ) + throw new DispatchError("Select an existing service area."); + await client.query( + ` + UPDATE dispatch.map_state SET longitude=$1,latitude=$2,zoom=$3, + area_id=$4,mode=$5,revision=revision+1 WHERE id='dispatch' + `, + [state.longitude, state.latitude, state.zoom, state.areaId, state.mode], + ); + return { revision: state.revision + 1 }; + }); +} diff --git a/applications/field-dispatch/server/http.ts b/applications/field-dispatch/server/http.ts new file mode 100644 index 00000000..9e86001c --- /dev/null +++ b/applications/field-dispatch/server/http.ts @@ -0,0 +1,149 @@ +import { + createServer, + type IncomingMessage, + type ServerResponse, +} from "node:http"; +import { createReadStream } from "node:fs"; +import { stat } from "node:fs/promises"; +import { resolve, sep, extname } from "node:path"; +import { z } from "zod"; +import { + bootstrap, + viewportJobs, + assign, + saveMap, + DispatchError, +} from "./dispatch"; + +export function parseRange(value: string, size: number) { + const match = /^bytes=(\d+)-(\d*)$/.exec(value); + if (!match) throw new DispatchError("Use one forward byte range.", 416); + const start = Number(match[1]); + const end = match[2] ? Math.min(Number(match[2]), size - 1) : size - 1; + if ( + !Number.isSafeInteger(start) || + !Number.isSafeInteger(end) || + start > end || + start >= size + ) + throw new DispatchError("Byte range is outside the archive.", 416); + return { start, end }; +} +function json(response: ServerResponse, status: number, value: unknown) { + response.writeHead(status, { + "content-type": "application/json; charset=utf-8", + "cache-control": "no-store", + }); + response.end(JSON.stringify(value)); +} +async function body(request: IncomingMessage) { + if (request.headers["content-type"]?.split(";")[0] !== "application/json") + throw new DispatchError("Send a JSON request body.", 415); + const chunks: Buffer[] = []; + let bytes = 0; + for await (const chunk of request) { + bytes += chunk.length; + if (bytes > 8192) + throw new DispatchError("Request body is too large.", 413); + chunks.push(chunk); + } + try { + return JSON.parse(Buffer.concat(chunks).toString("utf8")); + } catch { + throw new DispatchError("Request body is not valid JSON."); + } +} +async function staticFile( + request: IncomingMessage, + response: ServerResponse, + pathname: string, +) { + const archive = pathname === "/maintenance-town.pmtiles"; + const root = resolve(archive ? "public" : "dist"); + let path = resolve(root, pathname === "/" ? "index.html" : `.${pathname}`); + if (!path.startsWith(root + sep)) + throw new DispatchError("File not found.", 404); + let info; + try { + info = await stat(path); + } catch { + throw new DispatchError("File not found.", 404); + } + if (!info.isFile()) throw new DispatchError("File not found.", 404); + const mime: Record = { + ".html": "text/html; charset=utf-8", + ".js": "text/javascript", + ".mjs": "text/javascript", + ".css": "text/css", + ".svg": "image/svg+xml", + ".pmtiles": "application/octet-stream", + }; + const headers: Record = { + "content-type": mime[extname(path)] ?? "application/octet-stream", + "cache-control": archive ? "public, max-age=3600" : "no-cache", + "content-length": info.size, + }; + if (archive) headers["accept-ranges"] = "bytes"; + if (archive && request.headers.range) { + const range = parseRange(request.headers.range, info.size); + headers["content-range"] = `bytes ${range.start}-${range.end}/${info.size}`; + headers["content-length"] = range.end - range.start + 1; + response.writeHead(206, headers); + if (request.method === "HEAD") response.end(); + else createReadStream(path, range).pipe(response); + } else { + response.writeHead(200, headers); + if (request.method === "HEAD") response.end(); + else createReadStream(path).pipe(response); + } +} +export function createApplication() { + return createServer((request, response) => { + void (async () => { + const origin = process.env.APP_ORIGIN; + if ( + !origin || + !["127.0.0.1", "localhost", "[::1]"].includes(new URL(origin).hostname) + ) + throw new DispatchError("Configure a loopback APP_ORIGIN.", 503); + if ( + request.headers.host !== new URL(origin).host || + (!["GET", "HEAD"].includes(request.method ?? "") && + request.headers.origin !== origin) + ) + throw new DispatchError("Use the configured dispatch address.", 403); + const url = new URL(request.url ?? "/", origin); + if (request.method === "GET" && url.pathname === "/api/bootstrap") + return json(response, 200, await bootstrap()); + if (request.method === "GET" && url.pathname === "/api/jobs") + return json( + response, + 200, + await viewportJobs(Object.fromEntries(url.searchParams)), + ); + if (request.method === "POST" && url.pathname === "/api/assign") + return json(response, 200, await assign(await body(request))); + if (request.method === "POST" && url.pathname === "/api/map") + return json(response, 200, await saveMap(await body(request))); + if (url.pathname.startsWith("/api/")) + throw new DispatchError("API route not found.", 404); + if (!["GET", "HEAD"].includes(request.method ?? "")) + throw new DispatchError("Method not allowed.", 405); + await staticFile(request, response, url.pathname); + })().catch((error) => { + if (error instanceof z.ZodError) + return json(response, 400, { + error: "Use valid coordinates, identifiers and revisions.", + }); + if (error instanceof DispatchError) + return json(response, error.status, { error: error.message }); + console.error( + "Dispatch request failed.", + error.code ?? error.constructor.name, + ); + json(response, 503, { + error: "Request failed. Check the database connection.", + }); + }); + }); +} diff --git a/applications/field-dispatch/server/index.ts b/applications/field-dispatch/server/index.ts new file mode 100644 index 00000000..52f7dc5a --- /dev/null +++ b/applications/field-dispatch/server/index.ts @@ -0,0 +1,19 @@ +import { createApplication } from "./http"; +import { closeDatabase } from "./database"; +const port = Number(process.env.PORT ?? 3002); +if (!Number.isInteger(port) || port < 1 || port > 65535) + throw new Error("Use a valid PORT."); +const server = createApplication(); +server.listen(port, "127.0.0.1", () => + console.log(`Field dispatch at http://127.0.0.1:${port}`), +); +process.once("SIGTERM", () => + server.close(() => { + void closeDatabase().then(() => process.exit(0)); + }), +); +process.once("SIGINT", () => + server.close(() => { + void closeDatabase().then(() => process.exit(0)); + }), +); diff --git a/applications/field-dispatch/sql/bootstrap.sql b/applications/field-dispatch/sql/bootstrap.sql new file mode 100644 index 00000000..1bef14cc --- /dev/null +++ b/applications/field-dispatch/sql/bootstrap.sql @@ -0,0 +1,13 @@ +\set ON_ERROR_STOP on +\getenv migration_password PG_MIGRATION_PASSWORD +\getenv app_password PG_APP_PASSWORD +BEGIN; +CREATE EXTENSION IF NOT EXISTS postgis WITH SCHEMA public; +CREATE ROLE dispatch_owner NOLOGIN; +CREATE ROLE dispatch_migrator LOGIN PASSWORD :'migration_password'; +GRANT dispatch_owner TO dispatch_migrator; +CREATE ROLE dispatch_app LOGIN PASSWORD :'app_password'; +CREATE SCHEMA dispatch AUTHORIZATION dispatch_owner; +REVOKE ALL ON SCHEMA dispatch FROM PUBLIC; +GRANT USAGE ON SCHEMA dispatch, public TO dispatch_app; +COMMIT; diff --git a/applications/field-dispatch/sql/grants.sql b/applications/field-dispatch/sql/grants.sql new file mode 100644 index 00000000..aea8b782 --- /dev/null +++ b/applications/field-dispatch/sql/grants.sql @@ -0,0 +1,7 @@ +\set ON_ERROR_STOP on +BEGIN; +SET LOCAL ROLE dispatch_owner; +GRANT SELECT ON dispatch.areas, dispatch.teams, dispatch.jobs, dispatch.map_state TO dispatch_app; +GRANT UPDATE (team_id, revision) ON dispatch.jobs TO dispatch_app; +GRANT UPDATE (longitude, latitude, zoom, area_id, mode, revision) ON dispatch.map_state TO dispatch_app; +COMMIT; diff --git a/applications/field-dispatch/sql/migrations/001_initial.sql b/applications/field-dispatch/sql/migrations/001_initial.sql new file mode 100644 index 00000000..b76c6c43 --- /dev/null +++ b/applications/field-dispatch/sql/migrations/001_initial.sql @@ -0,0 +1,37 @@ +\set ON_ERROR_STOP on +BEGIN; +SET LOCAL ROLE dispatch_owner; +CREATE TABLE dispatch.areas ( + id uuid PRIMARY KEY, + name text NOT NULL CHECK (length(name) BETWEEN 1 AND 80), + color text NOT NULL CHECK (color ~ '^#[0-9a-fA-F]{6}$'), + boundary public.geometry(Polygon, 4326) NOT NULL, + CHECK (public.ST_IsValid(boundary) AND NOT public.ST_IsEmpty(boundary)) +); +CREATE INDEX areas_boundary_gist ON dispatch.areas USING gist (boundary); +CREATE TABLE dispatch.teams ( + id uuid PRIMARY KEY, + name text NOT NULL, + area_id uuid NOT NULL REFERENCES dispatch.areas(id), + depot public.geometry(Point, 4326) NOT NULL +); +CREATE TABLE dispatch.jobs ( + id uuid PRIMARY KEY, + code text NOT NULL UNIQUE, + title text NOT NULL, + priority text NOT NULL CHECK (priority IN ('routine', 'urgent')), + geom public.geometry(Point, 4326) NOT NULL, + team_id uuid REFERENCES dispatch.teams(id), + revision integer NOT NULL DEFAULT 1 CHECK (revision > 0) +); +CREATE INDEX jobs_geom_gist ON dispatch.jobs USING gist (geom); +CREATE TABLE dispatch.map_state ( + id text PRIMARY KEY CHECK (id = 'dispatch'), + longitude double precision NOT NULL CHECK (longitude BETWEEN -1.52 AND -1.40), + latitude double precision NOT NULL CHECK (latitude BETWEEN 53.32 AND 53.42), + zoom double precision NOT NULL CHECK (zoom BETWEEN 12 AND 16), + area_id uuid NOT NULL REFERENCES dispatch.areas(id), + mode text NOT NULL CHECK (mode IN ('assignments', 'priority')), + revision integer NOT NULL DEFAULT 1 CHECK (revision > 0) +); +COMMIT; diff --git a/applications/field-dispatch/sql/seed.sql b/applications/field-dispatch/sql/seed.sql new file mode 100644 index 00000000..dad55fb1 --- /dev/null +++ b/applications/field-dispatch/sql/seed.sql @@ -0,0 +1,58 @@ +\set ON_ERROR_STOP on +BEGIN; +SET LOCAL ROLE dispatch_owner; +INSERT INTO dispatch.areas (id,name,color,boundary) VALUES + ('20000000-0000-4000-8000-000000000001','West garden','#648662', + public.ST_GeomFromText('POLYGON((-1.495 53.345,-1.465 53.345,-1.465 53.379,-1.495 53.379,-1.495 53.345))',4326)), + ('20000000-0000-4000-8000-000000000002','Riverside','#46858d', + public.ST_GeomFromText('POLYGON((-1.465 53.345,-1.435 53.345,-1.435 53.379,-1.465 53.379,-1.465 53.345))',4326)), + ('20000000-0000-4000-8000-000000000003','North common','#b28544', + public.ST_GeomFromText('POLYGON((-1.49 53.376,-1.44 53.376,-1.44 53.402,-1.49 53.402,-1.49 53.376))',4326)) +ON CONFLICT (id) DO NOTHING; +INSERT INTO dispatch.teams (id,name,area_id,depot) VALUES + ('30000000-0000-4000-8000-000000000001','Garden crew','20000000-0000-4000-8000-000000000001',public.ST_SetSRID(public.ST_MakePoint(-1.482,53.36),4326)), + ('30000000-0000-4000-8000-000000000002','River crew','20000000-0000-4000-8000-000000000002',public.ST_SetSRID(public.ST_MakePoint(-1.451,53.354),4326)), + ('30000000-0000-4000-8000-000000000003','Common crew','20000000-0000-4000-8000-000000000003',public.ST_SetSRID(public.ST_MakePoint(-1.469,53.392),4326)) +ON CONFLICT (id) DO NOTHING; +INSERT INTO dispatch.jobs (id,code,title,priority,geom) VALUES + ('40000000-0000-4000-8000-000000000001','FD-001','Repair garden gate','urgent', + public.ST_SetSRID(public.ST_MakePoint(-1.481,53.361),4326)), + ('40000000-0000-4000-8000-000000000002','FD-002','Clear riverside drain','urgent', + public.ST_SetSRID(public.ST_MakePoint(-1.448,53.36),4326)), + ('40000000-0000-4000-8000-000000000003','FD-003','Replace path light','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.467,53.391),4326)), + ('40000000-0000-4000-8000-000000000004','FD-004','Inspect common bench','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.475,53.377),4326)), + ('40000000-0000-4000-8000-000000000005','FD-005','Repair play-area fence','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.486,53.352),4326)), + ('40000000-0000-4000-8000-000000000006','FD-006','Clear fallen branch','urgent', + public.ST_SetSRID(public.ST_MakePoint(-1.442,53.373),4326)), + ('40000000-0000-4000-8000-000000000007','FD-007','Fix fountain valve','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.478,53.367),4326)), + ('40000000-0000-4000-8000-000000000008','FD-008','Reset crossing bollard','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.452,53.367),4326)), + ('40000000-0000-4000-8000-000000000009','FD-009','Replace notice board','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.482,53.389),4326)), + ('40000000-0000-4000-8000-000000000010','FD-010','Collect damaged bin','urgent', + public.ST_SetSRID(public.ST_MakePoint(-1.462,53.381),4326)), + ('40000000-0000-4000-8000-000000000011','FD-011','Repair picnic table','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.473,53.356),4326)), + ('40000000-0000-4000-8000-000000000012','FD-012','Clear footbridge debris','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.454,53.353),4326)), + ('40000000-0000-4000-8000-000000000013','FD-013','Inspect gravel path','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.449,53.393),4326)), + ('40000000-0000-4000-8000-000000000014','FD-014','Replace bike rack','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.49,53.373),4326)), + ('40000000-0000-4000-8000-000000000015','FD-015','Repair allotment tap','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.479,53.398),4326)), + ('40000000-0000-4000-8000-000000000016','FD-016','Clear blocked culvert','urgent', + public.ST_SetSRID(public.ST_MakePoint(-1.44,53.382),4326)), + ('40000000-0000-4000-8000-000000000017','FD-017','Inspect boundary sign','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.501,53.375),4326)), + ('40000000-0000-4000-8000-000000000018','FD-018','Repair orchard fence','routine', + public.ST_SetSRID(public.ST_MakePoint(-1.501,53.39),4326)) +ON CONFLICT (id) DO NOTHING; +INSERT INTO dispatch.map_state (id,longitude,latitude,zoom,area_id,mode) +VALUES ('dispatch',-1.467,53.373,13,'20000000-0000-4000-8000-000000000001','assignments') +ON CONFLICT (id) DO NOTHING; +COMMIT; diff --git a/applications/field-dispatch/src/MapView.tsx b/applications/field-dispatch/src/MapView.tsx new file mode 100644 index 00000000..c897ee54 --- /dev/null +++ b/applications/field-dispatch/src/MapView.tsx @@ -0,0 +1,275 @@ +import { useEffect, useRef, useState } from "react"; +import { + Map, + NavigationControl, + addProtocol, + removeProtocol, + setWorkerUrl, +} from "maplibre-gl"; +import workerUrl from "maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url"; +import { Protocol } from "pmtiles"; +import { MapLibreOverlay } from "@deck.gl/maplibre"; +import { ArcLayer, ScatterplotLayer } from "@deck.gl/layers"; +import type { Color } from "@deck.gl/core"; +import type { Bootstrap, Job, MapState, Viewport } from "./domain"; +import "maplibre-gl/dist/maplibre-gl.css"; + +setWorkerUrl(workerUrl); +function rgb(hex: string): Color { + return [ + parseInt(hex.slice(1, 3), 16), + parseInt(hex.slice(3, 5), 16), + parseInt(hex.slice(5, 7), 16), + 230, + ]; +} +type Props = { + data: Bootstrap; + jobs: Job[]; + selectedJob: string | null; + areaId: string; + mode: MapState["mode"]; + onJob: (id: string) => void; + onViewport: (bounds: Viewport) => void; + onCamera: (camera: Pick) => void; + onError: (message: string) => void; +}; +export function MapView(props: Props) { + const container = useRef(null); + const mapRef = useRef(null); + const overlayRef = useRef(null); + const [ready, setReady] = useState(false); + useEffect(() => { + const protocol = new Protocol(); + addProtocol("pmtiles", protocol.tile); + const map = new Map({ + container: container.current!, + center: [props.data.state.longitude, props.data.state.latitude], + zoom: props.data.state.zoom, + minZoom: 12, + maxZoom: 16, + maxBounds: [ + [-1.51, 53.33], + [-1.41, 53.41], + ], + dragRotate: false, + pitchWithRotate: false, + touchPitch: false, + canvasContextAttributes: { preserveDrawingBuffer: true, antialias: true }, + style: { + version: 8, + sources: { + town: { + type: "vector", + url: `pmtiles://${location.origin}/maintenance-town.pmtiles`, + attribution: "Synthetic map data · ClickHouse examples", + }, + }, + layers: [ + { + id: "paper", + type: "background", + paint: { "background-color": "#eff0e5" }, + }, + { + id: "blocks", + type: "fill", + source: "town", + "source-layer": "land", + filter: ["==", ["get", "kind"], "block"], + paint: { "fill-color": "#d8d4c3", "fill-opacity": 0.7 }, + }, + { + id: "parks", + type: "fill", + source: "town", + "source-layer": "land", + filter: ["==", ["get", "kind"], "park"], + paint: { "fill-color": "#c0d2a4" }, + }, + { + id: "river", + type: "line", + source: "town", + "source-layer": "water", + paint: { "line-color": "#8cb7c3", "line-width": 7 }, + }, + { + id: "roads", + type: "line", + source: "town", + "source-layer": "roads", + paint: { + "line-color": "#faf9f2", + "line-width": ["case", ["==", ["get", "kind"], "main"], 5, 3], + }, + }, + ], + }, + }); + mapRef.current = map; + map.addControl(new NavigationControl({ showCompass: false }), "top-right"); + const captureView = () => { + const bounds = map.getBounds(); + props.onViewport({ + west: bounds.getWest(), + south: bounds.getSouth(), + east: bounds.getEast(), + north: bounds.getNorth(), + }); + const center = map.getCenter(); + props.onCamera({ + longitude: center.lng, + latitude: center.lat, + zoom: map.getZoom(), + }); + }; + map.on("load", () => { + map.addSource("areas", { + type: "geojson", + data: { + type: "FeatureCollection", + features: props.data.areas.map((area) => ({ + ...area.feature, + properties: { ...area.feature.properties, color: area.color }, + })), + }, + }); + map.addLayer({ + id: "service-fill", + type: "fill", + source: "areas", + paint: { "fill-color": ["get", "color"], "fill-opacity": 0.07 }, + }); + map.addLayer({ + id: "service-outline", + type: "line", + source: "areas", + paint: { + "line-color": ["get", "color"], + "line-width": 2, + "line-dasharray": [4, 2], + }, + }); + const overlay = new MapLibreOverlay({ interleaved: true, layers: [] }); + map.addControl(overlay); + overlayRef.current = overlay; + map.on("click", (event) => { + const picked = overlay.pickObject({ + x: event.point.x, + y: event.point.y, + radius: 5, + layerIds: ["maintenance-jobs"], + }); + if (picked?.object) props.onJob((picked.object as Job).id); + }); + setReady(true); + captureView(); + }); + map.on("moveend", captureView); + map.on("error", () => + props.onError( + "The map could not render. Check WebGL and the local basemap archive.", + ), + ); + return () => { + setReady(false); + overlayRef.current?.finalize(); + overlayRef.current = null; + map.remove(); + mapRef.current = null; + removeProtocol("pmtiles"); + }; + }, [props.data, props.onViewport, props.onCamera, props.onError]); + useEffect(() => { + if (!ready || !mapRef.current) return; + mapRef.current.setPaintProperty("service-fill", "fill-opacity", [ + "case", + ["==", ["get", "id"], props.areaId], + 0.2, + 0.04, + ]); + mapRef.current.setPaintProperty("service-outline", "line-width", [ + "case", + ["==", ["get", "id"], props.areaId], + 3, + 1, + ]); + }, [ready, props.areaId]); + useEffect(() => { + if (!ready || !overlayRef.current) return; + const teams = new globalThis.Map( + props.data.teams.map((team) => [team.id, team]), + ); + const areas = new globalThis.Map( + props.data.areas.map((area) => [area.id, area]), + ); + const color = (job: Job): Color => + props.mode === "priority" + ? job.priority === "urgent" + ? [178, 86, 42, 240] + : [88, 105, 120, 220] + : job.teamId + ? rgb(areas.get(teams.get(job.teamId)!.areaId)!.color) + : [93, 103, 113, 235]; + overlayRef.current.setProps({ + layers: [ + new ArcLayer({ + id: "assignment-links", + data: + props.mode === "assignments" + ? props.jobs.filter((job) => job.teamId && teams.has(job.teamId)) + : [], + getSourcePosition: (job) => teams.get(job.teamId!)!.position, + getTargetPosition: (job) => job.position, + getSourceColor: color, + getTargetColor: color, + getWidth: 2, + getHeight: 0.12, + pickable: false, + }), + new ScatterplotLayer({ + id: "maintenance-jobs", + data: props.jobs, + pickable: true, + getPosition: (job) => job.position, + getFillColor: color, + getRadius: (job) => (job.priority === "urgent" ? 34 : 24), + radiusMinPixels: 7, + radiusMaxPixels: 18, + stroked: true, + getLineColor: (job) => + job.id === props.selectedJob + ? [255, 255, 255, 255] + : [49, 65, 71, 220], + getLineWidth: (job) => (job.id === props.selectedJob ? 4 : 1), + lineWidthUnits: "pixels", + updateTriggers: { + getFillColor: [props.mode], + getLineColor: [props.selectedJob], + getLineWidth: [props.selectedJob], + }, + }), + ], + }); + }, [ + ready, + props.data, + props.jobs, + props.selectedJob, + props.mode, + props.onJob, + ]); + return ( +
+
+ + {ready ? "Map ready · Synthetic town" : "Loading local map…"} + +
+ ); +} diff --git a/applications/field-dispatch/src/domain.ts b/applications/field-dispatch/src/domain.ts new file mode 100644 index 00000000..89d34205 --- /dev/null +++ b/applications/field-dispatch/src/domain.ts @@ -0,0 +1,59 @@ +import { z } from "zod"; +import type { Feature, Polygon } from "geojson"; + +export const viewportSchema = z + .object({ + west: z.coerce.number().finite().min(-1.53).max(-1.39), + south: z.coerce.number().finite().min(53.31).max(53.43), + east: z.coerce.number().finite().min(-1.53).max(-1.39), + north: z.coerce.number().finite().min(53.31).max(53.43), + }) + .refine( + (v) => + v.east > v.west && + v.north > v.south && + v.east - v.west <= 0.14 && + v.north - v.south <= 0.12, + "Use a bounded viewport around the synthetic town.", + ); +export const assignmentSchema = z + .object({ + jobId: z.uuid(), + teamId: z.uuid(), + revision: z.number().int().positive().max(2147483646), + }) + .strict(); +export const mapStateSchema = z + .object({ + longitude: z.number().finite().min(-1.52).max(-1.4), + latitude: z.number().finite().min(53.32).max(53.42), + zoom: z.number().finite().min(12).max(16), + areaId: z.uuid(), + mode: z.enum(["assignments", "priority"]), + revision: z.number().int().positive().max(2147483646), + }) + .strict(); +export type Viewport = z.infer; +export type MapState = z.infer; +export type Area = { + id: string; + name: string; + color: string; + feature: Feature; +}; +export type Team = { + id: string; + name: string; + areaId: string; + position: [number, number]; +}; +export type Job = { + id: string; + code: string; + title: string; + priority: "routine" | "urgent"; + position: [number, number]; + teamId: string | null; + revision: number; +}; +export type Bootstrap = { areas: Area[]; teams: Team[]; state: MapState }; diff --git a/applications/field-dispatch/src/main.tsx b/applications/field-dispatch/src/main.tsx new file mode 100644 index 00000000..7c03ebbe --- /dev/null +++ b/applications/field-dispatch/src/main.tsx @@ -0,0 +1,346 @@ +import { createRoot } from "react-dom/client"; +import { useCallback, useEffect, useRef, useState } from "react"; +import { area, booleanPointInPolygon, distance, point } from "@turf/turf"; +import { MapView } from "./MapView"; +import type { Bootstrap, Job, MapState, Viewport } from "./domain"; +import "./styles.css"; + +async function api(path: string, options?: RequestInit): Promise { + const response = await fetch(path, options); + const value = await response.json(); + if (!response.ok) + throw new Error(value.error ?? "The request could not be completed."); + return value as T; +} +function App() { + const [data, setData] = useState(null); + const [jobs, setJobs] = useState([]); + const [total, setTotal] = useState(0); + const [capped, setCapped] = useState(false); + const [jobsStatus, setJobsStatus] = useState<"loading" | "ready" | "error">( + "loading", + ); + const [selectedJob, setSelectedJob] = useState(null); + const [areaId, setAreaId] = useState(""); + const [mode, setMode] = useState("assignments"); + const [camera, setCamera] = useState | null>(null); + const [savedRevision, setSavedRevision] = useState(1); + const [message, setMessage] = useState(""); + const [error, setError] = useState(""); + const [busy, setBusy] = useState(false); + const viewport = useRef(null); + const request = useRef(null); + const fetchJobs = useCallback((bounds: Viewport) => { + viewport.current = bounds; + setJobs([]); + setTotal(0); + setCapped(false); + setJobsStatus("loading"); + request.current?.abort(); + const controller = new AbortController(); + request.current = controller; + const query = new URLSearchParams( + Object.entries(bounds).map(([key, value]) => [key, String(value)]), + ); + void api<{ jobs: Job[]; total: number; capped: boolean }>( + `/api/jobs?${query}`, + { signal: controller.signal }, + ) + .then((result) => { + if (controller.signal.aborted) return; + setJobs(result.jobs); + setTotal(result.total); + setCapped(result.capped); + setJobsStatus("ready"); + setError(""); + }) + .catch((err) => { + if (!controller.signal.aborted) { + setError(err.message); + setJobsStatus("error"); + } + }); + }, []); + useEffect(() => { + let active = true; + void api("/api/bootstrap") + .then((value) => { + if (!active) return; + setData(value); + setAreaId(value.state.areaId); + setMode(value.state.mode); + setSavedRevision(value.state.revision); + }) + .catch((err) => { + if (active) setError(err.message); + }); + return () => { + active = false; + request.current?.abort(); + }; + }, []); + const service = data?.areas.find((value) => value.id === areaId); + const team = data?.teams.find((value) => value.areaId === areaId); + const job = jobs.find((value) => value.id === selectedJob); + const inside = !!( + service && + job && + booleanPointInPolygon(point(job.position), service.feature) + ); + const previewArea = service ? area(service.feature) / 1_000_000 : 0; + const previewDistance = + job && team + ? distance(point(team.position), point(job.position), { + units: "kilometers", + }) + : 0; + async function assignJob() { + if (!job || !team) return; + setBusy(true); + setMessage(""); + setError(""); + try { + await api("/api/assign", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ + jobId: job.id, + teamId: team.id, + revision: job.revision, + }), + }); + if (viewport.current) fetchJobs(viewport.current); + setMessage(`${team.name} assigned to ${job.code}.`); + } catch (err) { + setError((err as Error).message); + } finally { + setBusy(false); + } + } + async function saveView() { + if (!camera) return; + setBusy(true); + setMessage(""); + setError(""); + try { + const result = await api<{ revision: number }>("/api/map", { + method: "POST", + headers: { "content-type": "application/json" }, + body: JSON.stringify({ + ...camera, + areaId, + mode, + revision: savedRevision, + }), + }); + setSavedRevision(result.revision); + setMessage( + "Map view saved. Reload to restore this area, camera and layer.", + ); + } catch (err) { + setError((err as Error).message); + } finally { + setBusy(false); + } + } + return ( +
+
+
+

FIELD OPERATIONS / MAINTENANCE DESK

+

A place for every job.

+

+ Review the work in view, check service coverage and send the right + crew. +

+
+ + Synthetic town +
+ Morning dispatch +
+
+
+ + +
+ AREA PREVIEW + {previewArea.toFixed(2)} km² +
+ +
+ {message && ( +

+ {message} +

+ )} + {error && ( +

+ {error} +

+ )} +
+ +
+ {data ? ( + + ) : ( +
Loading the saved dispatch view…
+ )} +
+ + + Unassigned / routine + + {mode === "assignments" ? ( + data?.teams.map((t) => ( + + a.id === t.areaId) + ?.color, + }} + /> + {t.name} + + )) + ) : ( + + + Urgent work + + )} + + Lines link assigned jobs to crew depots; they are not road routes. + +
+
+
+ 02 / COVERAGE BEFORE COMMIT +

+ {job + ? `${job.code} · ${job.title}` + : "Select a job on the map or in the list"} +

+ {job && ( +

+ {inside ? "Inside" : "Outside"} {service?.name} ·{" "} + {previewDistance.toFixed(2)} km straight-line from{" "} + {team?.name} depot. +

+ )} +

+ The browser previews coverage. PostGIS checks the stored + boundary before saving. +

+
+ +
+
+
+
+ Field dispatch · Fictional jobs and service boundaries · Coordinates + [longitude, latitude], SRID 4326 +
+
+ ); +} +createRoot(document.getElementById("root")!).render(); diff --git a/applications/field-dispatch/src/styles.css b/applications/field-dispatch/src/styles.css new file mode 100644 index 00000000..b6d4c1aa --- /dev/null +++ b/applications/field-dispatch/src/styles.css @@ -0,0 +1,393 @@ +:root { + font-family: Arial, sans-serif; + color: #253f49; + background: #f2f1eb; + font-synthesis: none; +} +* { + box-sizing: border-box; +} +body { + margin: 0; +} +button, +select { + font: inherit; +} +button { + cursor: pointer; +} +button:disabled { + cursor: default; + opacity: 0.52; +} +button:focus-visible, +select:focus-visible { + outline: 3px solid #cc9b49; + outline-offset: 3px; +} +main { + max-width: 1500px; + margin: 0 auto; + padding: 40px 36px 22px; +} +header { + display: flex; + justify-content: space-between; + align-items: center; + gap: 24px; + margin-bottom: 32px; +} +h1, +h2, +p { + margin: 0; +} +h1 { + font-family: Georgia, serif; + font-size: clamp(32px, 4vw, 54px); + font-weight: normal; + letter-spacing: -0.04em; + margin: 10px 0; +} +h2 { + font-family: Georgia, serif; + font-size: 24px; + font-weight: normal; + line-height: 1.2; +} +.eyebrow { + font-size: 10px; + font-weight: bold; + letter-spacing: 0.15em; + color: #687a75; +} +.intro { + color: #73817f; + font-size: 14px; + line-height: 1.6; +} +.edition { + text-align: right; + line-height: 1.5; + font-size: 12px; + color: #6c7a76; + border-right: 3px solid #af8648; + padding-right: 16px; +} +.toolbar { + background: #203e4a; + color: #f7f7ef; + display: flex; + gap: 24px; + align-items: center; + padding: 18px 22px; + border-radius: 8px; + margin-bottom: 24px; +} +.toolbar label { + display: flex; + flex-direction: column; + gap: 7px; + font-size: 10px; + font-weight: bold; + letter-spacing: 0.06em; +} +select { + min-width: 170px; + font-size: 13px; + font-weight: normal; + border: 1px solid #617980; + color: #fff; + background: #2b4b58; + border-radius: 5px; + padding: 10px 30px 10px 12px; +} +.coverage { + display: flex; + flex-direction: column; + gap: 6px; + margin-left: auto; +} +.coverage span { + font-size: 9px; + letter-spacing: 0.12em; + color: #a2bbb8; +} +.coverage strong { + font-size: 19px; + font-weight: normal; +} +.save, +.review-panel button { + padding: 12px 18px; + border: 0; + border-radius: 5px; + background: #c89a52; + color: #183441; + font-size: 12px; + font-weight: bold; +} +.notice { + padding: 14px 18px; + margin: 0 0 18px; + border-radius: 5px; + font-size: 13px; + line-height: 1.5; +} +.success { + background: #e5eddf; + border: 1px solid #c9d6bd; +} +.failure { + background: #fae5dc; + border: 1px solid #deb6a3; + color: #883d2b; +} +.desk { + display: grid; + grid-template-columns: 300px minmax(0, 1fr); + gap: 24px; +} +aside { + border: 1px solid #dddcd3; + border-radius: 8px; + background: #fffefa; + overflow: hidden; +} +.panel-heading { + padding: 24px 20px 18px; + border-bottom: 1px solid #e6e5da; +} +.panel-heading h2 { + margin: 10px 0 8px; +} +.panel-heading p { + font-size: 12px; + color: #79857c; + line-height: 1.5; +} +.jobs { + max-height: 680px; + overflow: auto; + padding: 12px; +} +.job { + display: block; + text-align: left; + width: 100%; + border: 1px solid transparent; + border-bottom-color: #e4e4da; + background: transparent; + padding: 14px 12px; + border-radius: 5px; + color: #2b424a; +} +.job:hover { + background: #f5f5ed; +} +.job.selected { + background: #edf0e6; + border-color: #8ba488; +} +.job-top { + display: flex; + justify-content: space-between; + align-items: center; + gap: 12px; + font-size: 10px; + letter-spacing: 0.05em; +} +.priority { + font-size: 9px; + border-radius: 12px; + padding: 3px 7px; + letter-spacing: 0; +} +.priority.urgent { + background: #f7e5d2; + color: #a55c2e; +} +.priority.routine { + background: #e8eceb; + color: #6b787f; +} +.job-title { + display: block; + font-size: 14px; + line-height: 1.45; + margin: 8px 0 6px; +} +.assignment { + font-size: 10px; + color: #748274; +} +.map-column { + min-width: 0; +} +.map-frame { + position: relative; + overflow: hidden; + border-radius: 8px; + border: 1px solid #c7cdbb; +} +.map { + height: 570px; + width: 100%; +} +.map-status { + position: absolute; + left: 12px; + top: 12px; + padding: 7px 11px; + border-radius: 4px; + font-size: 10px; + background: #fffff4e8; + box-shadow: 0 1px 6px #243a4620; +} +.loading { + height: 570px; + display: grid; + place-content: center; + background: #e1e7db; + border-radius: 8px; + color: #6c7f73; +} +.legend { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 14px; + padding: 14px 3px; + font-size: 10px; + color: #69796e; +} +.legend > span { + display: flex; + align-items: center; + gap: 6px; +} +.legend small { + display: block; + width: 100%; + font-size: 10px; +} +.swatch { + width: 9px; + height: 9px; + border-radius: 50%; + display: inline-block; +} +.unassigned { + background: #5d6771; +} +.swatch.urgent { + background: #b2562a; +} +.review-panel { + background: #fffefa; + padding: 24px; + border-radius: 8px; + border: 1px solid #dddcd3; + display: flex; + justify-content: space-between; + align-items: center; + gap: 24px; +} +.review-panel h2 { + margin: 10px 0; + font-size: 23px; +} +.review-panel p { + font-size: 12px; + line-height: 1.5; +} +.review-panel .hint { + margin-top: 7px; + font-size: 10px; + color: #788275; +} +.review-panel button { + flex-shrink: 0; +} +footer { + padding: 24px 2px 0; + color: #8a9387; + font-size: 10px; + line-height: 1.5; +} +@media (max-width: 900px) { + .desk { + grid-template-columns: 240px minmax(0, 1fr); + gap: 16px; + } + main { + padding: 28px 20px 18px; + } + .toolbar { + gap: 16px; + } + .review-panel { + flex-direction: column; + align-items: flex-start; + padding: 18px; + } + .toolbar select { + min-width: 140px; + } +} +@media (max-width: 680px) { + header { + align-items: flex-start; + } + .edition { + display: none; + } + .toolbar { + flex-wrap: wrap; + padding: 16px; + gap: 16px; + } + .toolbar label { + flex: 1; + } + select { + width: 100%; + } + .coverage { + margin-left: 0; + } + .save { + margin-left: auto; + } + .desk { + grid-template-columns: 1fr; + } + .jobs { + max-height: 220px; + } + .map { + height: 390px; + } + .panel-heading { + padding: 18px; + } + .legend { + gap: 10px; + } +} + +.panel-heading button { + margin-top: 10px; + padding: 8px 12px; + border: 1px solid #bfc9bd; + border-radius: 5px; + background: #edf1e8; + color: #29443d; + font: inherit; + cursor: pointer; +} +.panel-heading button:disabled { + opacity: 0.55; + cursor: wait; +} diff --git a/applications/field-dispatch/tests/browser/dispatch.spec.ts b/applications/field-dispatch/tests/browser/dispatch.spec.ts new file mode 100644 index 00000000..71473406 --- /dev/null +++ b/applications/field-dispatch/tests/browser/dispatch.spec.ts @@ -0,0 +1,308 @@ +import { test, expect } from "@playwright/test"; +import { spawn, type ChildProcess } from "node:child_process"; +import { once } from "node:events"; +import { mkdirSync, writeFileSync } from "node:fs"; +import { join } from "node:path"; +import { database, closeDatabase } from "../../server/database"; +import { bootstrap, saveMap } from "../../server/dispatch"; +const base = process.env.APP_ORIGIN ?? "http://127.0.0.1:3002"; +const evidence = process.env.EVIDENCE_DIR ?? "test-results"; +let server: ChildProcess; +async function startServer() { + server = spawn( + process.execPath, + ["--env-file=.env", "--import", "tsx", "server/index.ts"], + { stdio: "ignore", env: process.env }, + ); + for (let i = 0; i < 80; i++) { + if (server.exitCode !== null) throw new Error("Dispatch server exited."); + try { + if ((await fetch(base)).ok) return; + } catch {} + await new Promise((resolve) => setTimeout(resolve, 250)); + } + throw new Error("Dispatch server did not start."); +} +async function stopServer() { + if (server && server.exitCode === null) { + const exited = once(server, "exit"); + server.kill("SIGTERM"); + await exited; + } +} +test.beforeAll(async () => { + mkdirSync(evidence, { recursive: true }); + // Dedicated demo test fixture only: restore two jobs and the singleton view. + await database().query( + "UPDATE dispatch.jobs SET team_id=NULL,revision=revision+1 WHERE code IN ('FD-001','FD-002')", + ); + const state = (await bootstrap()).state; + await saveMap({ + ...state, + longitude: -1.467, + latitude: 53.373, + zoom: 13, + areaId: "20000000-0000-4000-8000-000000000001", + mode: "assignments", + }); + await startServer(); +}); +test.afterAll(async () => { + await stopServer(); + await closeDatabase(); +}); +test("actual WebGL, PMTiles, deck picking, coverage, assignment, viewport retry and saved-view process restart", async ({ + page, + request, +}) => { + let viewportRequest = ""; + page.on("request", (req) => { + if (req.url().includes("/api/jobs?")) viewportRequest = req.url(); + }); + + const errors: string[] = []; + page.on("pageerror", (error) => errors.push(error.message)); + const ranges: { status: number; range: string | null }[] = []; + page.on("response", (response) => { + if (response.url().endsWith(".pmtiles")) + ranges.push({ + status: response.status(), + range: response.headers()["content-range"] ?? null, + }); + }); + await page.goto("/"); + await expect( + page.getByText("Map ready · Synthetic town", { exact: true }), + ).toBeVisible(); + await expect(page.getByRole("button", { name: /FD-001/ })).toBeVisible(); + await expect + .poll(() => ranges.filter((value) => value.status === 206).length) + .toBeGreaterThan(0); + const canvas = page.locator("canvas.maplibregl-canvas"); + const rendered = await canvas.evaluate((element: HTMLCanvasElement) => { + const gl = element.getContext("webgl2")!; + if (!gl) throw new Error("No actual WebGL2 context."); + const pixels = new Uint8Array( + gl.drawingBufferWidth * gl.drawingBufferHeight * 4, + ); + gl.readPixels( + 0, + 0, + gl.drawingBufferWidth, + gl.drawingBufferHeight, + gl.RGBA, + gl.UNSIGNED_BYTE, + pixels, + ); + const colors = new Set(); + for (let i = 0; i < pixels.length; i += 400) + colors.add( + `${pixels[i]},${pixels[i + 1]},${pixels[i + 2]},${pixels[i + 3]}`, + ); + return { + webgl: gl.getParameter(gl.VERSION), + renderer: gl.getParameter(gl.RENDERER), + colors: colors.size, + }; + }); + expect(rendered.colors).toBeGreaterThan(5); + const state = (await (await request.get("/api/bootstrap")).json()).state; + const size = await canvas.boundingBox(); + expect(size).not.toBeNull(); + const query = new URL(viewportRequest).searchParams; + const bounds = Object.fromEntries( + [...query].map(([key, value]) => [key, Number(value)]), + ); + const projected = await page.evaluate( + ({ bounds, width, height }) => { + const mercator = (lat: number) => + Math.log(Math.tan(Math.PI / 4 + (lat * Math.PI) / 360)); + return { + x: ((-1.481 - bounds.west) / (bounds.east - bounds.west)) * width, + y: + ((mercator(bounds.north) - mercator(53.361)) / + (mercator(bounds.north) - mercator(bounds.south))) * + height, + }; + }, + { bounds, width: size!.width, height: size!.height }, + ); + writeFileSync( + join(evidence, "picking-debug.json"), + JSON.stringify({ state, size, projected, rendered }), + ); + await page.screenshot({ + path: join(evidence, "picking-debug.png"), + fullPage: true, + }); + await page.waitForTimeout(1000); + await page.mouse.click(size!.x + projected.x, size!.y + projected.y); + await expect(page.locator(".review-panel h2")).toContainText("FD-001"); + await expect(page.locator(".review-panel")).toContainText( + "Inside West garden", + ); + await page + .getByRole("button", { name: "Assign Garden crew", exact: true }) + .click(); + await expect(page.getByRole("status")).toContainText( + "Garden crew assigned to FD-001", + ); + await expect(page.getByRole("button", { name: /FD-001/ })).toContainText( + "Garden crew", + ); + const jobs = ( + await ( + await request.get( + "/api/jobs?west=-1.51&south=53.33&east=-1.41&north=53.41", + ) + ).json() + ).jobs; + expect( + ( + await request.post("/api/map", { + headers: { origin: "https://wrong-origin.invalid" }, + data: state, + }) + ).status(), + ).toBe(403); + const first = jobs.find((job: any) => job.code === "FD-001"); + const stale = await request.post("/api/assign", { + headers: { origin: base }, + data: { + jobId: first.id, + teamId: first.teamId, + revision: first.revision - 1, + }, + }); + expect(stale.status()).toBe(409); + await page.getByRole("button", { name: /FD-002/ }).click(); + await expect(page.locator(".review-panel")).toContainText( + "Outside West garden", + ); + await expect( + page.getByRole("button", { name: "Assign Garden crew", exact: true }), + ).toBeDisabled(); + const river = jobs.find((job: any) => job.code === "FD-002"); + expect( + ( + await request.post("/api/assign", { + headers: { origin: base }, + data: { + jobId: river.id, + teamId: first.teamId, + revision: river.revision, + }, + }) + ).status(), + ).toBe(400); + await page + .getByRole("combobox", { name: "Service area", exact: true }) + .selectOption("20000000-0000-4000-8000-000000000002"); + await expect(page.locator(".review-panel")).toContainText("Inside Riverside"); + await page + .getByRole("button", { name: "Assign River crew", exact: true }) + .click(); + await expect(page.getByRole("status")).toContainText( + "River crew assigned to FD-002", + ); + await page + .getByRole("combobox", { name: "Map layer", exact: true }) + .selectOption("priority"); + await page.route("**/api/jobs?**", (route) => + route.fulfill({ + status: 503, + contentType: "application/json", + body: JSON.stringify({ error: "Controlled viewport failure" }), + }), + ); + await page.getByRole("button", { name: "Refresh jobs" }).click(); + await expect( + page.getByRole("heading", { name: "Jobs unavailable" }), + ).toBeVisible(); + await expect(page.locator(".jobs button")).toHaveCount(0); + await page.unroute("**/api/jobs?**"); + await page.getByRole("button", { name: "Refresh jobs" }).click(); + await expect(page.getByRole("button", { name: /FD-001/ })).toBeVisible(); + await expect(page.getByRole("alert")).toHaveCount(0); + const before = (await (await request.get("/api/bootstrap")).json()).state; + await page.mouse.move(size!.x + size!.width / 2, size!.y + size!.height / 2); + await page.mouse.down(); + await page.mouse.move( + size!.x + size!.width / 2 + 90, + size!.y + size!.height / 2 + 35, + { steps: 12 }, + ); + await page.mouse.up(); + await page.waitForTimeout(700); + await page.getByRole("button", { name: "Save map view" }).click(); + await expect(page.getByRole("status")).toContainText("Map view saved"); + const saved = (await (await request.get("/api/bootstrap")).json()).state; + expect(saved.longitude).not.toBe(before.longitude); + expect(saved.mode).toBe("priority"); + expect(saved.areaId).toBe("20000000-0000-4000-8000-000000000002"); + await page.screenshot({ + path: join(evidence, "dispatch-desktop.png"), + fullPage: true, + }); + const originalPid = server.pid; + await stopServer(); + await startServer(); + await page.reload(); + await expect( + page.getByText("Map ready · Synthetic town", { exact: true }), + ).toBeVisible(); + await expect( + page.getByRole("combobox", { name: "Map layer", exact: true }), + ).toHaveValue("priority"); + expect((await (await request.get("/api/bootstrap")).json()).state).toEqual( + saved, + ); + const restored = ( + await ( + await request.get( + "/api/jobs?west=-1.51&south=53.33&east=-1.41&north=53.41", + ) + ).json() + ).jobs; + expect(restored.find((job: any) => job.code === "FD-001").teamId).toBe( + first.teamId, + ); + await page.setViewportSize({ width: 390, height: 844 }); + await page.waitForTimeout(500); + await page.screenshot({ + path: join(evidence, "dispatch-mobile.png"), + fullPage: true, + }); + expect( + await page.evaluate( + () => document.documentElement.scrollWidth <= window.innerWidth, + ), + ).toBe(true); + expect(errors).toEqual([]); + writeFileSync( + join(evidence, "restart.json"), + JSON.stringify( + { + originalPid, + replacementPid: server.pid, + saved, + assignmentsRestored: true, + }, + null, + 2, + ), + ); + writeFileSync( + join(evidence, "webgl.json"), + JSON.stringify( + { + rendered, + ranges, + picking: "FD-001 actual deck point", + viewportFailureCleared: true, + }, + null, + 2, + ), + ); +}); diff --git a/applications/field-dispatch/tests/database.test.ts b/applications/field-dispatch/tests/database.test.ts new file mode 100644 index 00000000..cc957e4f --- /dev/null +++ b/applications/field-dispatch/tests/database.test.ts @@ -0,0 +1,183 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { lookup } from "node:dns/promises"; +import { mkdtempSync, readFileSync, rmSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { execFileSync } from "node:child_process"; +import { Pool } from "pg"; +import { database, databaseConfig, closeDatabase } from "../server/database"; +import { + assign, + bootstrap, + viewportJobs, + saveMap, + DispatchError, +} from "../server/dispatch"; +const id = (prefix: string, suffix: number) => + `${prefix}0000000-0000-4000-8000-${String(suffix).padStart(12, "0")}`; +test("managed PostGIS: indexed viewport, stored coverage, revision races, grants and verified TLS", async () => { + try { + const identity = ( + await database().query( + "SELECT current_user,version() AS version,public.postgis_full_version() AS postgis", + ) + ).rows[0]; + assert.equal(identity.current_user, "dispatch_app"); + console.log(JSON.stringify(identity)); + const limited = await viewportJobs({ + west: -1.485, + south: 53.355, + east: -1.475, + north: 53.365, + }); + assert.ok(limited.jobs.some((job) => job.code === "FD-001")); + assert.ok( + limited.jobs.every( + (job) => + job.position[0] >= -1.485 && + job.position[0] <= -1.475 && + job.position[1] >= 53.355 && + job.position[1] <= 53.365, + ), + ); + const river = ( + await database().query( + "SELECT team_id,revision FROM dispatch.jobs WHERE id=$1", + [id("4", 2)], + ) + ).rows[0]; + await assert.rejects( + assign({ + jobId: id("4", 2), + teamId: id("3", 1), + revision: river.revision, + }), + (error) => error instanceof DispatchError && error.status === 400, + ); + assert.deepEqual( + ( + await database().query( + "SELECT team_id,revision FROM dispatch.jobs WHERE id=$1", + [id("4", 2)], + ) + ).rows[0], + river, + ); + const revision = ( + await database().query("SELECT revision FROM dispatch.jobs WHERE id=$1", [ + id("4", 4), + ]) + ).rows[0].revision; + const race = await Promise.allSettled([ + assign({ jobId: id("4", 4), teamId: id("3", 1), revision }), + assign({ jobId: id("4", 4), teamId: id("3", 3), revision }), + ]); + assert.equal( + race.filter((result) => result.status === "fulfilled").length, + 1, + ); + assert.ok( + race.some( + (result) => + result.status === "rejected" && + result.reason instanceof DispatchError && + result.reason.status === 409, + ), + ); + const state = (await bootstrap()).state; + const saves = await Promise.allSettled([ + saveMap({ ...state, mode: "priority" }), + saveMap({ ...state, mode: "assignments" }), + ]); + assert.equal( + saves.filter((result) => result.status === "fulfilled").length, + 1, + ); + assert.ok( + saves.some( + (result) => + result.status === "rejected" && + result.reason instanceof DispatchError && + result.reason.status === 409, + ), + ); + for (const sql of [ + "CREATE TABLE dispatch.forbidden(id integer)", + "ALTER TABLE dispatch.jobs ADD COLUMN forbidden text", + "DELETE FROM dispatch.jobs", + "UPDATE dispatch.jobs SET geom=public.ST_SetSRID(public.ST_MakePoint(0,0),4326)", + "INSERT INTO dispatch.jobs(id,code,title,priority,geom) VALUES(gen_random_uuid(),'forbidden','Forbidden','routine',public.ST_SetSRID(public.ST_MakePoint(0,0),4326))", + ]) + await assert.rejects( + database().query(sql), + (error: any) => error.code === "42501", + ); + const config = databaseConfig(); + const ip = new URL(process.env.DATABASE_URL!); + ip.hostname = (await lookup(ip.hostname, { family: 4 })).address; + const wrongName = new Pool({ + ...config, + connectionString: ip.toString(), + max: 1, + ssl: { ...(config.ssl as object), servername: "wrong-host.invalid" }, + }); + try { + await assert.rejects( + wrongName.query("SELECT 1"), + (err: any) => err.code === "ERR_TLS_CERT_ALTNAME_INVALID", + ); + } finally { + await wrongName.end(); + } + const directory = mkdtempSync(join(tmpdir(), "dispatch-ca-")); + try { + execFileSync( + "openssl", + [ + "req", + "-x509", + "-newkey", + "rsa:2048", + "-nodes", + "-keyout", + join(directory, "key.pem"), + "-out", + join(directory, "ca.pem"), + "-days", + "1", + "-subj", + "/CN=unrelated-dispatch-root", + ], + { stdio: "ignore" }, + ); + const wrongCa = new Pool({ + ...config, + max: 1, + ssl: { + ...(config.ssl as object), + ca: readFileSync(join(directory, "ca.pem"), "utf8"), + }, + }); + try { + await assert.rejects(wrongCa.query("SELECT 1"), (err: any) => + [ + "UNABLE_TO_VERIFY_LEAF_SIGNATURE", + "UNABLE_TO_GET_ISSUER_CERT_LOCALLY", + "SELF_SIGNED_CERT_IN_CHAIN", + "DEPTH_ZERO_SELF_SIGNED_CERT", + ].includes(err.code), + ); + } finally { + await wrongCa.end(); + } + } finally { + rmSync(directory, { recursive: true, force: true }); + } + console.log( + "Passed PostGIS viewport, outside-area rollback, competing job/map writers, restricted grants and pg wrong-CA/hostname controls.", + ); + } finally { + await closeDatabase(); + } +}); diff --git a/applications/field-dispatch/tests/native.test.ts b/applications/field-dispatch/tests/native.test.ts new file mode 100644 index 00000000..a2da08a1 --- /dev/null +++ b/applications/field-dispatch/tests/native.test.ts @@ -0,0 +1,82 @@ +import test from "node:test"; +import { get } from "node:http"; +import assert from "node:assert/strict"; +import { PMTiles } from "pmtiles"; +import { createApplication } from "../server/http"; +import { + assignmentSchema, + mapStateSchema, + viewportSchema, +} from "../src/domain"; + +test("the checked-in PMTiles archive is read through actual HTTP byte ranges", async () => { + process.env.APP_ORIGIN = "http://127.0.0.1:3002"; + const server = createApplication(); + await new Promise((resolve) => + server.listen(3002, "127.0.0.1", resolve), + ); + try { + const url = `${process.env.APP_ORIGIN}/maintenance-town.pmtiles`; + const response = await fetch(url, { headers: { range: "bytes=0-126" } }); + assert.equal(response.status, 206); + assert.equal(response.headers.get("content-range"), "bytes 0-126/7995"); + assert.equal((await response.arrayBuffer()).byteLength, 127); + const archive = new PMTiles(url); + const header = await archive.getHeader(); + assert.equal(header.specVersion, 3); + assert.equal(header.numAddressedTiles, 61); + assert.equal(header.minZoom, 12); + const metadata = await archive.getMetadata(); + assert.equal( + (metadata as { vector_layers: unknown[] }).vector_layers.length, + 3, + ); + const tile = await archive.getZxy(12, 2031, 1327); + assert.ok(tile && tile.data.byteLength > 0); + for (const range of ["bytes=-10", "bytes=8000-", "bytes=0-1,3-5"]) { + assert.equal((await fetch(url, { headers: { range } })).status, 416); + } + const wrongHost = await new Promise((resolve) => + get(url, { headers: { host: "unexpected.example" } }, (response) => { + response.resume(); + resolve(response.statusCode); + }), + ); + assert.equal(wrongHost, 403); + } finally { + await new Promise((resolve, reject) => + server.close((error) => (error ? reject(error) : resolve())), + ); + } +}); + +test("public payloads reject world viewports and non-incrementable PostgreSQL revisions", () => { + assert.equal( + viewportSchema.safeParse({ west: -180, south: -90, east: 180, north: 90 }) + .success, + false, + ); + const ids = { + jobId: "40000000-0000-4000-8000-000000000001", + teamId: "30000000-0000-4000-8000-000000000001", + }; + assert.equal( + assignmentSchema.safeParse({ ...ids, revision: 2147483647 }).success, + false, + ); + assert.equal( + assignmentSchema.safeParse({ ...ids, revision: 2147483646 }).success, + true, + ); + assert.equal( + mapStateSchema.safeParse({ + longitude: -1.467, + latitude: 53.373, + zoom: 13, + areaId: "20000000-0000-4000-8000-000000000001", + mode: "priority", + revision: 2147483647, + }).success, + false, + ); +}); diff --git a/applications/field-dispatch/tsconfig.json b/applications/field-dispatch/tsconfig.json new file mode 100644 index 00000000..085b655d --- /dev/null +++ b/applications/field-dispatch/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "moduleResolution": "Bundler", + "jsx": "react-jsx", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "noEmit": true, + "lib": [ + "ES2022", + "DOM", + "DOM.Iterable" + ], + "types": [ + "node", + "vite/client" + ] + }, + "include": [ + "src", + "server", + "tests", + "vite.config.ts", + "playwright.config.ts" + ] +} diff --git a/applications/field-dispatch/vite.config.ts b/applications/field-dispatch/vite.config.ts new file mode 100644 index 00000000..50eb7916 --- /dev/null +++ b/applications/field-dispatch/vite.config.ts @@ -0,0 +1,3 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; +export default defineConfig({ plugins: [react()], server: { host: '127.0.0.1' } });