├── .devcontainer └── devcontainer.json ├── .github └── dependabot.yml ├── .gitignore ├── Dockerfile ├── Makefile ├── README.md ├── data └── trees.ndjson ├── index.html ├── javascript.svg ├── main.js ├── package-lock.json ├── package.json ├── poetry.lock ├── public └── vite.svg ├── pyproject.toml └── style.css /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 2 | // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu 3 | { 4 | "name": "Ubuntu", 5 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile 6 | // "image": "mcr.microsoft.com/devcontainers/base:jammy", 7 | 8 | "build": { 9 | // Path is relative to the devcontainer.json file. 10 | "dockerfile": "../Dockerfile" 11 | } 12 | 13 | // Features to add to the dev container. More info: https://containers.dev/features. 14 | // "features": {}, 15 | 16 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 17 | // "forwardPorts": [], 18 | 19 | // Use 'postCreateCommand' to run commands after the container is created. 20 | // "postCreateCommand": "uname -a", 21 | 22 | // Configure tool-specific properties. 23 | // "customizations": {}, 24 | 25 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. 26 | // "remoteUser": "root" 27 | } 28 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for more information: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | # https://containers.dev/guide/dependabot 6 | 7 | version: 2 8 | updates: 9 | - package-ecosystem: "devcontainers" 10 | directory: "/" 11 | schedule: 12 | interval: weekly 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | 26 | .venv 27 | __pycache__/ 28 | *.py[cod] 29 | *$py.class 30 | venv 31 | .eggs 32 | .pytest_cache 33 | *.egg-info 34 | .DS_Store 35 | .vscode 36 | dist 37 | build 38 | 39 | *.db 40 | *.db-wal 41 | *.db-journal 42 | *.db-shm 43 | *.mbtiles 44 | *.pmtiles 45 | *.pbf 46 | *.zip 47 | 48 | public/fonts/ -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/devcontainers/base:jammy 2 | 3 | RUN apt-get update -y && apt-get install -y build-essential libsqlite3-dev zlib1g-dev wget python3-dev libsqlite3-mod-spatialite 4 | 5 | # tippecanoe 6 | RUN git clone https://github.com/felt/tippecanoe.git && \ 7 | cd tippecanoe && \ 8 | make -j && \ 9 | make install 10 | 11 | # pmtiles 12 | RUN wget https://github.com/protomaps/go-pmtiles/releases/download/v1.17.0/go-pmtiles_1.17.0_Linux_x86_64.tar.gz && \ 13 | tar -xvzf go-pmtiles_1.17.0_Linux_x86_64.tar.gz && mv pmtiles /usr/local/bin/ 14 | 15 | # nodejs 16 | RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ 17 | apt-get install -y nodejs 18 | 19 | # poetry 20 | ENV POETRY_HOME="/usr/local" 21 | RUN curl -sSL https://install.python-poetry.org | python3 - 22 | 23 | WORKDIR /app 24 | 25 | COPY . /app/ 26 | 27 | RUN npm ci 28 | RUN poetry install --no-root 29 | 30 | EXPOSE 8001 31 | EXPOSE 5173 32 | 33 | CMD [ "/bin/bash" ] -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | DB = baltimore.db 2 | 3 | SU = poetry run sqlite-utils 4 | 5 | BBOX = -76.861861,39.096181,-76.360388,39.454149 6 | 7 | # https://maps.protomaps.com/builds/ 8 | TODAY = $(shell date +%Y%m%d) 9 | PMTILES_BUILD = https://build.protomaps.com/$(TODAY).pmtiles 10 | 11 | install: 12 | poetry install --no-root 13 | npm ci 14 | 15 | build: 16 | docker build . -t self-hosted-maps:latest 17 | 18 | container: 19 | docker run --rm -it self-hosted-maps:latest 20 | 21 | tiles: public/baltimore.pmtiles public/trees.pmtiles 22 | 23 | trees: $(DB) data/trees.ndjson 24 | poetry run geojson-to-sqlite $(DB) $@ data/trees.ndjson --nl --spatialite --pk ID 25 | 26 | fonts: 27 | wget https://github.com/protomaps/basemaps-assets/archive/refs/heads/main.zip 28 | unzip main.zip 29 | mv basemaps-assets-main/fonts public/fonts 30 | rm -r basemaps-assets-main main.zip 31 | 32 | run: 33 | # https://docs.datasette.io/en/stable/settings.html#configuration-directory-mode 34 | npm run dev -- --open & poetry run datasette serve . --load-extension spatialite -h 0.0.0.0 35 | 36 | ds: 37 | poetry run datasette serve . --load-extension spatialite -h 0.0.0.0 38 | 39 | clean: 40 | rm -rf $(DB) $(DB)-shm $(DB)-wal public/*.pmtiles public/*.mbtiles public/fonts 41 | 42 | data/trees.ndjson: 43 | poetry run ./download.py 44 | 45 | $(DB): 46 | $(SU) create-database $@ --enable-wal --init-spatialite 47 | 48 | public/baltimore.pmtiles: 49 | pmtiles extract $(PMTILES_BUILD) $@ --bbox="$(BBOX)" 50 | 51 | public/trees.pmtiles: data/trees.ndjson 52 | tippecanoe -zg -o $@ --drop-densest-as-needed --layer trees $^ 53 | 54 | public/trees.mbtiles: data/trees.ndjson 55 | tippecanoe -zg -o $@ --drop-densest-as-needed --layer trees $^ 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Self-hosted maps in a codespace 2 | 3 | This repo contains a Dockerfile and dev container configuration that will build the tools necessary for self-hosted maps: 4 | 5 | - `pmtiles` CLI 6 | - `tippecanoe` 7 | - NodeJS 8 | - Python 9 | 10 | The `Makefile` includes build steps for an example project mapping trees in Baltimore. You can see the finished project [on Github](https://github.com/eyeseast/baltimore-trees). 11 | 12 | [Read more about self-hosted maps](https://www.muckrock.com/news/archives/2024/feb/13/release-notes-how-to-make-self-hosted-maps-that-work-everywhere-cost-next-to-nothing-and-might-even-work-in-airplane-mode/). 13 | 14 | ## Setup 15 | 16 | This project will work with or without Docker. The easiest setup uses [Github's codespaces](https://docs.github.com/en/codespaces/overview). Locally, it can use a [development container](https://code.visualstudio.com/docs/devcontainers/containers) to create a consistent environment. 17 | 18 | ### Getting started via Github.com 19 | 20 | 1. Navigate to https://github.com/eyeseast/self-hosted-maps-codespace (you might already be here) 21 | 2. Click **Use this template**, then click **Open in a codespace** 22 | 23 | See [Codespaces Quickstart](https://docs.github.com/en/codespaces/getting-started/quickstart) for more information. 24 | 25 | Inside the codebase, you'll need to install Python and NodeJS dependencies to use Datasette or build the map. Running `make install` will get both. 26 | 27 | ### Working locally, using VSCode and docker 28 | 29 | Assuming you've cloned this repository, open it in VS Code, and you should be prompted to reopen it inside a dev container. This will build a docker image with all dependencies installed. 30 | 31 | For more detailed instructions, see [Developing inside a Container](https://code.visualstudio.com/docs/devcontainers/containers#_quick-start-open-an-existing-folder-in-a-container). 32 | 33 | This will work on any system that can run Docker and should give you a consistent development environment regardless of your root operating system. 34 | 35 | ### Working locally on MacOS 36 | 37 | I work on a MacBook, and if you don't mind installing things with Homebrew, you can work without a dev container. 38 | 39 | ```sh 40 | brew install pmtiles 41 | brew install tippecanoe 42 | brew install libspatialite 43 | ``` 44 | 45 | (It's possible I'm forgetting something here. I don't recreate my laptop environment from scratch that often. Please open an issue if needed.) 46 | 47 | Building the final map requires NodeJS. I recommend either downloading the [current LTS version](https://nodejs.org/en) or using a version manager like [`nodenv`](https://github.com/nodenv/nodenv). 48 | 49 | To explore the included tree data with [datasette](https://datasette.io/), you'll need a working Python environment. You can follow my [recommended Python setup](https://chrisamico.com/blog/2023-01-14/python-setup/). This repo uses Poetry instead of Pipenv, so install that using `pipx install poetry`. 50 | 51 | Once Python and NodeJS are configured, run `make install` to download dependencies for both environments. 52 | 53 | ## Building the map 54 | 55 | tl;dr 56 | 57 | ```sh 58 | make install 59 | make tiles 60 | make fonts 61 | npm run dev 62 | ``` 63 | 64 | We have two sets of tiles: the underlying street map, and the point data for trees. Running `make tiles` will get both. Street tiles are extracted from today's [Protomaps build](https://maps.protomaps.com/builds/). We use [tippecanoe](https://github.com/felt/tippecanoe) to turn tree data into tiles. 65 | 66 | NOTE: if you run into an error with `make tiles`, with a 404 error from build.protomaps.com, you may be one day ahead of the available protomap builds from https://maps.protomaps.com/builds/. To remedy, edit the `TODAY` variable in the `Makefile` to be a valid day that will call an available pmtiles set from https://maps.protomaps.com/builds/. 67 | 68 | ## Exploring tree data with Datasette 69 | 70 | If you want to dig into Baltimore's tree inventory, you can build a SpatiaLite database and explore it with Datasette. 71 | 72 | ```sh 73 | make trees # build the database 74 | make ds # run datasette 75 | ``` 76 | 77 | Have fun. 78 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | Baltimore trees 12 | 13 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /javascript.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | import maplibregl from "maplibre-gl"; 2 | import * as pmtiles from "pmtiles"; 3 | import layers from "protomaps-themes-base"; 4 | 5 | const protocol = new pmtiles.Protocol(); 6 | 7 | maplibregl.addProtocol("pmtiles", protocol.tile); 8 | 9 | const style = { 10 | version: 8, 11 | glyphs: "./fonts/{fontstack}/{range}.pbf", 12 | sources: { 13 | protomaps: { 14 | type: "vector", 15 | url: "pmtiles://" + "baltimore.pmtiles", 16 | attribution: 17 | 'Protomaps © OpenStreetMap', 18 | }, 19 | 20 | // load our tree data 21 | trees: { 22 | type: "vector", 23 | url: "pmtiles://" + "trees.pmtiles", 24 | }, 25 | }, 26 | 27 | // this builds a set of layers matching the OpenMapTiles schema, using "protomaps" as a source ID 28 | layers: layers("protomaps", "light"), 29 | }; 30 | 31 | const map = new maplibregl.Map({ 32 | container: "map", 33 | style, 34 | maxBounds: [-76.861861, 39.096181, -76.360388, 39.454149], 35 | hash: true, 36 | center: [-76.6055754, 39.2835701], 37 | zoom: 13, 38 | }); 39 | 40 | map.once("load", (e) => { 41 | const firstSymbolLayer = map 42 | .getStyle() 43 | .layers.find((layer) => layer.type === "symbol"); 44 | 45 | // add our tree layer here 46 | map.addLayer( 47 | { 48 | id: "trees", 49 | type: "circle", 50 | source: "trees", 51 | "source-layer": "trees", 52 | paint: { 53 | "circle-color": "green", 54 | "circle-opacity": 0.5, 55 | "circle-radius": 3, 56 | }, 57 | }, 58 | firstSymbolLayer.id 59 | ); 60 | }); 61 | 62 | window.map = map; 63 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "self-hosted-maps", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "self-hosted-maps", 9 | "version": "0.0.0", 10 | "devDependencies": { 11 | "maplibre-gl": "^3.6.2", 12 | "pmtiles": "^2.11.0", 13 | "protomaps-themes-base": "^2.0.0-alpha.4", 14 | "vite": "^5.1.0" 15 | } 16 | }, 17 | "node_modules/@esbuild/aix-ppc64": { 18 | "version": "0.19.12", 19 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", 20 | "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", 21 | "cpu": [ 22 | "ppc64" 23 | ], 24 | "dev": true, 25 | "optional": true, 26 | "os": [ 27 | "aix" 28 | ], 29 | "engines": { 30 | "node": ">=12" 31 | } 32 | }, 33 | "node_modules/@esbuild/android-arm": { 34 | "version": "0.19.12", 35 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", 36 | "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", 37 | "cpu": [ 38 | "arm" 39 | ], 40 | "dev": true, 41 | "optional": true, 42 | "os": [ 43 | "android" 44 | ], 45 | "engines": { 46 | "node": ">=12" 47 | } 48 | }, 49 | "node_modules/@esbuild/android-arm64": { 50 | "version": "0.19.12", 51 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", 52 | "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", 53 | "cpu": [ 54 | "arm64" 55 | ], 56 | "dev": true, 57 | "optional": true, 58 | "os": [ 59 | "android" 60 | ], 61 | "engines": { 62 | "node": ">=12" 63 | } 64 | }, 65 | "node_modules/@esbuild/android-x64": { 66 | "version": "0.19.12", 67 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", 68 | "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", 69 | "cpu": [ 70 | "x64" 71 | ], 72 | "dev": true, 73 | "optional": true, 74 | "os": [ 75 | "android" 76 | ], 77 | "engines": { 78 | "node": ">=12" 79 | } 80 | }, 81 | "node_modules/@esbuild/darwin-arm64": { 82 | "version": "0.19.12", 83 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", 84 | "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", 85 | "cpu": [ 86 | "arm64" 87 | ], 88 | "dev": true, 89 | "optional": true, 90 | "os": [ 91 | "darwin" 92 | ], 93 | "engines": { 94 | "node": ">=12" 95 | } 96 | }, 97 | "node_modules/@esbuild/darwin-x64": { 98 | "version": "0.19.12", 99 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", 100 | "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", 101 | "cpu": [ 102 | "x64" 103 | ], 104 | "dev": true, 105 | "optional": true, 106 | "os": [ 107 | "darwin" 108 | ], 109 | "engines": { 110 | "node": ">=12" 111 | } 112 | }, 113 | "node_modules/@esbuild/freebsd-arm64": { 114 | "version": "0.19.12", 115 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", 116 | "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", 117 | "cpu": [ 118 | "arm64" 119 | ], 120 | "dev": true, 121 | "optional": true, 122 | "os": [ 123 | "freebsd" 124 | ], 125 | "engines": { 126 | "node": ">=12" 127 | } 128 | }, 129 | "node_modules/@esbuild/freebsd-x64": { 130 | "version": "0.19.12", 131 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", 132 | "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", 133 | "cpu": [ 134 | "x64" 135 | ], 136 | "dev": true, 137 | "optional": true, 138 | "os": [ 139 | "freebsd" 140 | ], 141 | "engines": { 142 | "node": ">=12" 143 | } 144 | }, 145 | "node_modules/@esbuild/linux-arm": { 146 | "version": "0.19.12", 147 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", 148 | "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", 149 | "cpu": [ 150 | "arm" 151 | ], 152 | "dev": true, 153 | "optional": true, 154 | "os": [ 155 | "linux" 156 | ], 157 | "engines": { 158 | "node": ">=12" 159 | } 160 | }, 161 | "node_modules/@esbuild/linux-arm64": { 162 | "version": "0.19.12", 163 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", 164 | "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", 165 | "cpu": [ 166 | "arm64" 167 | ], 168 | "dev": true, 169 | "optional": true, 170 | "os": [ 171 | "linux" 172 | ], 173 | "engines": { 174 | "node": ">=12" 175 | } 176 | }, 177 | "node_modules/@esbuild/linux-ia32": { 178 | "version": "0.19.12", 179 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", 180 | "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", 181 | "cpu": [ 182 | "ia32" 183 | ], 184 | "dev": true, 185 | "optional": true, 186 | "os": [ 187 | "linux" 188 | ], 189 | "engines": { 190 | "node": ">=12" 191 | } 192 | }, 193 | "node_modules/@esbuild/linux-loong64": { 194 | "version": "0.19.12", 195 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", 196 | "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", 197 | "cpu": [ 198 | "loong64" 199 | ], 200 | "dev": true, 201 | "optional": true, 202 | "os": [ 203 | "linux" 204 | ], 205 | "engines": { 206 | "node": ">=12" 207 | } 208 | }, 209 | "node_modules/@esbuild/linux-mips64el": { 210 | "version": "0.19.12", 211 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", 212 | "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", 213 | "cpu": [ 214 | "mips64el" 215 | ], 216 | "dev": true, 217 | "optional": true, 218 | "os": [ 219 | "linux" 220 | ], 221 | "engines": { 222 | "node": ">=12" 223 | } 224 | }, 225 | "node_modules/@esbuild/linux-ppc64": { 226 | "version": "0.19.12", 227 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", 228 | "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", 229 | "cpu": [ 230 | "ppc64" 231 | ], 232 | "dev": true, 233 | "optional": true, 234 | "os": [ 235 | "linux" 236 | ], 237 | "engines": { 238 | "node": ">=12" 239 | } 240 | }, 241 | "node_modules/@esbuild/linux-riscv64": { 242 | "version": "0.19.12", 243 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", 244 | "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", 245 | "cpu": [ 246 | "riscv64" 247 | ], 248 | "dev": true, 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "engines": { 254 | "node": ">=12" 255 | } 256 | }, 257 | "node_modules/@esbuild/linux-s390x": { 258 | "version": "0.19.12", 259 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", 260 | "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", 261 | "cpu": [ 262 | "s390x" 263 | ], 264 | "dev": true, 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "engines": { 270 | "node": ">=12" 271 | } 272 | }, 273 | "node_modules/@esbuild/linux-x64": { 274 | "version": "0.19.12", 275 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", 276 | "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", 277 | "cpu": [ 278 | "x64" 279 | ], 280 | "dev": true, 281 | "optional": true, 282 | "os": [ 283 | "linux" 284 | ], 285 | "engines": { 286 | "node": ">=12" 287 | } 288 | }, 289 | "node_modules/@esbuild/netbsd-x64": { 290 | "version": "0.19.12", 291 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", 292 | "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", 293 | "cpu": [ 294 | "x64" 295 | ], 296 | "dev": true, 297 | "optional": true, 298 | "os": [ 299 | "netbsd" 300 | ], 301 | "engines": { 302 | "node": ">=12" 303 | } 304 | }, 305 | "node_modules/@esbuild/openbsd-x64": { 306 | "version": "0.19.12", 307 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", 308 | "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", 309 | "cpu": [ 310 | "x64" 311 | ], 312 | "dev": true, 313 | "optional": true, 314 | "os": [ 315 | "openbsd" 316 | ], 317 | "engines": { 318 | "node": ">=12" 319 | } 320 | }, 321 | "node_modules/@esbuild/sunos-x64": { 322 | "version": "0.19.12", 323 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", 324 | "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", 325 | "cpu": [ 326 | "x64" 327 | ], 328 | "dev": true, 329 | "optional": true, 330 | "os": [ 331 | "sunos" 332 | ], 333 | "engines": { 334 | "node": ">=12" 335 | } 336 | }, 337 | "node_modules/@esbuild/win32-arm64": { 338 | "version": "0.19.12", 339 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", 340 | "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", 341 | "cpu": [ 342 | "arm64" 343 | ], 344 | "dev": true, 345 | "optional": true, 346 | "os": [ 347 | "win32" 348 | ], 349 | "engines": { 350 | "node": ">=12" 351 | } 352 | }, 353 | "node_modules/@esbuild/win32-ia32": { 354 | "version": "0.19.12", 355 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", 356 | "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", 357 | "cpu": [ 358 | "ia32" 359 | ], 360 | "dev": true, 361 | "optional": true, 362 | "os": [ 363 | "win32" 364 | ], 365 | "engines": { 366 | "node": ">=12" 367 | } 368 | }, 369 | "node_modules/@esbuild/win32-x64": { 370 | "version": "0.19.12", 371 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", 372 | "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", 373 | "cpu": [ 374 | "x64" 375 | ], 376 | "dev": true, 377 | "optional": true, 378 | "os": [ 379 | "win32" 380 | ], 381 | "engines": { 382 | "node": ">=12" 383 | } 384 | }, 385 | "node_modules/@mapbox/geojson-rewind": { 386 | "version": "0.5.2", 387 | "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", 388 | "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", 389 | "dev": true, 390 | "dependencies": { 391 | "get-stream": "^6.0.1", 392 | "minimist": "^1.2.6" 393 | }, 394 | "bin": { 395 | "geojson-rewind": "geojson-rewind" 396 | } 397 | }, 398 | "node_modules/@mapbox/jsonlint-lines-primitives": { 399 | "version": "2.0.2", 400 | "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", 401 | "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", 402 | "dev": true, 403 | "engines": { 404 | "node": ">= 0.6" 405 | } 406 | }, 407 | "node_modules/@mapbox/point-geometry": { 408 | "version": "0.1.0", 409 | "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", 410 | "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", 411 | "dev": true 412 | }, 413 | "node_modules/@mapbox/tiny-sdf": { 414 | "version": "2.0.6", 415 | "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", 416 | "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==", 417 | "dev": true 418 | }, 419 | "node_modules/@mapbox/unitbezier": { 420 | "version": "0.0.1", 421 | "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", 422 | "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", 423 | "dev": true 424 | }, 425 | "node_modules/@mapbox/vector-tile": { 426 | "version": "1.3.1", 427 | "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", 428 | "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", 429 | "dev": true, 430 | "dependencies": { 431 | "@mapbox/point-geometry": "~0.1.0" 432 | } 433 | }, 434 | "node_modules/@mapbox/whoots-js": { 435 | "version": "3.1.0", 436 | "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", 437 | "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", 438 | "dev": true, 439 | "engines": { 440 | "node": ">=6.0.0" 441 | } 442 | }, 443 | "node_modules/@maplibre/maplibre-gl-style-spec": { 444 | "version": "19.3.3", 445 | "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz", 446 | "integrity": "sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==", 447 | "dev": true, 448 | "dependencies": { 449 | "@mapbox/jsonlint-lines-primitives": "~2.0.2", 450 | "@mapbox/unitbezier": "^0.0.1", 451 | "json-stringify-pretty-compact": "^3.0.0", 452 | "minimist": "^1.2.8", 453 | "rw": "^1.3.3", 454 | "sort-object": "^3.0.3" 455 | }, 456 | "bin": { 457 | "gl-style-format": "dist/gl-style-format.mjs", 458 | "gl-style-migrate": "dist/gl-style-migrate.mjs", 459 | "gl-style-validate": "dist/gl-style-validate.mjs" 460 | } 461 | }, 462 | "node_modules/@rollup/rollup-android-arm-eabi": { 463 | "version": "4.12.0", 464 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", 465 | "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", 466 | "cpu": [ 467 | "arm" 468 | ], 469 | "dev": true, 470 | "optional": true, 471 | "os": [ 472 | "android" 473 | ] 474 | }, 475 | "node_modules/@rollup/rollup-android-arm64": { 476 | "version": "4.12.0", 477 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", 478 | "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", 479 | "cpu": [ 480 | "arm64" 481 | ], 482 | "dev": true, 483 | "optional": true, 484 | "os": [ 485 | "android" 486 | ] 487 | }, 488 | "node_modules/@rollup/rollup-darwin-arm64": { 489 | "version": "4.12.0", 490 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", 491 | "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", 492 | "cpu": [ 493 | "arm64" 494 | ], 495 | "dev": true, 496 | "optional": true, 497 | "os": [ 498 | "darwin" 499 | ] 500 | }, 501 | "node_modules/@rollup/rollup-darwin-x64": { 502 | "version": "4.12.0", 503 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", 504 | "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", 505 | "cpu": [ 506 | "x64" 507 | ], 508 | "dev": true, 509 | "optional": true, 510 | "os": [ 511 | "darwin" 512 | ] 513 | }, 514 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 515 | "version": "4.12.0", 516 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", 517 | "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", 518 | "cpu": [ 519 | "arm" 520 | ], 521 | "dev": true, 522 | "optional": true, 523 | "os": [ 524 | "linux" 525 | ] 526 | }, 527 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 528 | "version": "4.12.0", 529 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", 530 | "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", 531 | "cpu": [ 532 | "arm64" 533 | ], 534 | "dev": true, 535 | "optional": true, 536 | "os": [ 537 | "linux" 538 | ] 539 | }, 540 | "node_modules/@rollup/rollup-linux-arm64-musl": { 541 | "version": "4.12.0", 542 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", 543 | "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", 544 | "cpu": [ 545 | "arm64" 546 | ], 547 | "dev": true, 548 | "optional": true, 549 | "os": [ 550 | "linux" 551 | ] 552 | }, 553 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 554 | "version": "4.12.0", 555 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", 556 | "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", 557 | "cpu": [ 558 | "riscv64" 559 | ], 560 | "dev": true, 561 | "optional": true, 562 | "os": [ 563 | "linux" 564 | ] 565 | }, 566 | "node_modules/@rollup/rollup-linux-x64-gnu": { 567 | "version": "4.12.0", 568 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", 569 | "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", 570 | "cpu": [ 571 | "x64" 572 | ], 573 | "dev": true, 574 | "optional": true, 575 | "os": [ 576 | "linux" 577 | ] 578 | }, 579 | "node_modules/@rollup/rollup-linux-x64-musl": { 580 | "version": "4.12.0", 581 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", 582 | "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", 583 | "cpu": [ 584 | "x64" 585 | ], 586 | "dev": true, 587 | "optional": true, 588 | "os": [ 589 | "linux" 590 | ] 591 | }, 592 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 593 | "version": "4.12.0", 594 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", 595 | "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", 596 | "cpu": [ 597 | "arm64" 598 | ], 599 | "dev": true, 600 | "optional": true, 601 | "os": [ 602 | "win32" 603 | ] 604 | }, 605 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 606 | "version": "4.12.0", 607 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", 608 | "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", 609 | "cpu": [ 610 | "ia32" 611 | ], 612 | "dev": true, 613 | "optional": true, 614 | "os": [ 615 | "win32" 616 | ] 617 | }, 618 | "node_modules/@rollup/rollup-win32-x64-msvc": { 619 | "version": "4.12.0", 620 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", 621 | "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", 622 | "cpu": [ 623 | "x64" 624 | ], 625 | "dev": true, 626 | "optional": true, 627 | "os": [ 628 | "win32" 629 | ] 630 | }, 631 | "node_modules/@types/estree": { 632 | "version": "1.0.5", 633 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 634 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 635 | "dev": true 636 | }, 637 | "node_modules/@types/geojson": { 638 | "version": "7946.0.14", 639 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", 640 | "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", 641 | "dev": true 642 | }, 643 | "node_modules/@types/mapbox__point-geometry": { 644 | "version": "0.1.4", 645 | "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", 646 | "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", 647 | "dev": true 648 | }, 649 | "node_modules/@types/mapbox__vector-tile": { 650 | "version": "1.3.4", 651 | "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", 652 | "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", 653 | "dev": true, 654 | "dependencies": { 655 | "@types/geojson": "*", 656 | "@types/mapbox__point-geometry": "*", 657 | "@types/pbf": "*" 658 | } 659 | }, 660 | "node_modules/@types/pbf": { 661 | "version": "3.0.5", 662 | "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", 663 | "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", 664 | "dev": true 665 | }, 666 | "node_modules/@types/supercluster": { 667 | "version": "7.1.3", 668 | "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", 669 | "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", 670 | "dev": true, 671 | "dependencies": { 672 | "@types/geojson": "*" 673 | } 674 | }, 675 | "node_modules/arr-union": { 676 | "version": "3.1.0", 677 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 678 | "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", 679 | "dev": true, 680 | "engines": { 681 | "node": ">=0.10.0" 682 | } 683 | }, 684 | "node_modules/assign-symbols": { 685 | "version": "1.0.0", 686 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 687 | "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", 688 | "dev": true, 689 | "engines": { 690 | "node": ">=0.10.0" 691 | } 692 | }, 693 | "node_modules/bytewise": { 694 | "version": "1.1.0", 695 | "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", 696 | "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", 697 | "dev": true, 698 | "dependencies": { 699 | "bytewise-core": "^1.2.2", 700 | "typewise": "^1.0.3" 701 | } 702 | }, 703 | "node_modules/bytewise-core": { 704 | "version": "1.2.3", 705 | "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", 706 | "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", 707 | "dev": true, 708 | "dependencies": { 709 | "typewise-core": "^1.2" 710 | } 711 | }, 712 | "node_modules/earcut": { 713 | "version": "2.2.4", 714 | "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", 715 | "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", 716 | "dev": true 717 | }, 718 | "node_modules/esbuild": { 719 | "version": "0.19.12", 720 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", 721 | "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", 722 | "dev": true, 723 | "hasInstallScript": true, 724 | "bin": { 725 | "esbuild": "bin/esbuild" 726 | }, 727 | "engines": { 728 | "node": ">=12" 729 | }, 730 | "optionalDependencies": { 731 | "@esbuild/aix-ppc64": "0.19.12", 732 | "@esbuild/android-arm": "0.19.12", 733 | "@esbuild/android-arm64": "0.19.12", 734 | "@esbuild/android-x64": "0.19.12", 735 | "@esbuild/darwin-arm64": "0.19.12", 736 | "@esbuild/darwin-x64": "0.19.12", 737 | "@esbuild/freebsd-arm64": "0.19.12", 738 | "@esbuild/freebsd-x64": "0.19.12", 739 | "@esbuild/linux-arm": "0.19.12", 740 | "@esbuild/linux-arm64": "0.19.12", 741 | "@esbuild/linux-ia32": "0.19.12", 742 | "@esbuild/linux-loong64": "0.19.12", 743 | "@esbuild/linux-mips64el": "0.19.12", 744 | "@esbuild/linux-ppc64": "0.19.12", 745 | "@esbuild/linux-riscv64": "0.19.12", 746 | "@esbuild/linux-s390x": "0.19.12", 747 | "@esbuild/linux-x64": "0.19.12", 748 | "@esbuild/netbsd-x64": "0.19.12", 749 | "@esbuild/openbsd-x64": "0.19.12", 750 | "@esbuild/sunos-x64": "0.19.12", 751 | "@esbuild/win32-arm64": "0.19.12", 752 | "@esbuild/win32-ia32": "0.19.12", 753 | "@esbuild/win32-x64": "0.19.12" 754 | } 755 | }, 756 | "node_modules/extend-shallow": { 757 | "version": "2.0.1", 758 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 759 | "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", 760 | "dev": true, 761 | "dependencies": { 762 | "is-extendable": "^0.1.0" 763 | }, 764 | "engines": { 765 | "node": ">=0.10.0" 766 | } 767 | }, 768 | "node_modules/fflate": { 769 | "version": "0.8.2", 770 | "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", 771 | "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", 772 | "dev": true 773 | }, 774 | "node_modules/fsevents": { 775 | "version": "2.3.3", 776 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 777 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 778 | "dev": true, 779 | "hasInstallScript": true, 780 | "optional": true, 781 | "os": [ 782 | "darwin" 783 | ], 784 | "engines": { 785 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 786 | } 787 | }, 788 | "node_modules/geojson-vt": { 789 | "version": "3.2.1", 790 | "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", 791 | "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", 792 | "dev": true 793 | }, 794 | "node_modules/get-stream": { 795 | "version": "6.0.1", 796 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 797 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 798 | "dev": true, 799 | "engines": { 800 | "node": ">=10" 801 | }, 802 | "funding": { 803 | "url": "https://github.com/sponsors/sindresorhus" 804 | } 805 | }, 806 | "node_modules/get-value": { 807 | "version": "2.0.6", 808 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 809 | "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", 810 | "dev": true, 811 | "engines": { 812 | "node": ">=0.10.0" 813 | } 814 | }, 815 | "node_modules/gl-matrix": { 816 | "version": "3.4.3", 817 | "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", 818 | "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", 819 | "dev": true 820 | }, 821 | "node_modules/global-prefix": { 822 | "version": "3.0.0", 823 | "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", 824 | "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", 825 | "dev": true, 826 | "dependencies": { 827 | "ini": "^1.3.5", 828 | "kind-of": "^6.0.2", 829 | "which": "^1.3.1" 830 | }, 831 | "engines": { 832 | "node": ">=6" 833 | } 834 | }, 835 | "node_modules/ieee754": { 836 | "version": "1.2.1", 837 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 838 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 839 | "dev": true, 840 | "funding": [ 841 | { 842 | "type": "github", 843 | "url": "https://github.com/sponsors/feross" 844 | }, 845 | { 846 | "type": "patreon", 847 | "url": "https://www.patreon.com/feross" 848 | }, 849 | { 850 | "type": "consulting", 851 | "url": "https://feross.org/support" 852 | } 853 | ] 854 | }, 855 | "node_modules/ini": { 856 | "version": "1.3.8", 857 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 858 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 859 | "dev": true 860 | }, 861 | "node_modules/is-extendable": { 862 | "version": "0.1.1", 863 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 864 | "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", 865 | "dev": true, 866 | "engines": { 867 | "node": ">=0.10.0" 868 | } 869 | }, 870 | "node_modules/is-plain-object": { 871 | "version": "2.0.4", 872 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 873 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 874 | "dev": true, 875 | "dependencies": { 876 | "isobject": "^3.0.1" 877 | }, 878 | "engines": { 879 | "node": ">=0.10.0" 880 | } 881 | }, 882 | "node_modules/isexe": { 883 | "version": "2.0.0", 884 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 885 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 886 | "dev": true 887 | }, 888 | "node_modules/isobject": { 889 | "version": "3.0.1", 890 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 891 | "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", 892 | "dev": true, 893 | "engines": { 894 | "node": ">=0.10.0" 895 | } 896 | }, 897 | "node_modules/json-stringify-pretty-compact": { 898 | "version": "3.0.0", 899 | "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", 900 | "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==", 901 | "dev": true 902 | }, 903 | "node_modules/kdbush": { 904 | "version": "4.0.2", 905 | "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", 906 | "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", 907 | "dev": true 908 | }, 909 | "node_modules/kind-of": { 910 | "version": "6.0.3", 911 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 912 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 913 | "dev": true, 914 | "engines": { 915 | "node": ">=0.10.0" 916 | } 917 | }, 918 | "node_modules/maplibre-gl": { 919 | "version": "3.6.2", 920 | "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-3.6.2.tgz", 921 | "integrity": "sha512-krg2KFIdOpLPngONDhP6ixCoWl5kbdMINP0moMSJFVX7wX1Clm2M9hlNKXS8vBGlVWwR5R3ZfI6IPrYz7c+aCQ==", 922 | "dev": true, 923 | "dependencies": { 924 | "@mapbox/geojson-rewind": "^0.5.2", 925 | "@mapbox/jsonlint-lines-primitives": "^2.0.2", 926 | "@mapbox/point-geometry": "^0.1.0", 927 | "@mapbox/tiny-sdf": "^2.0.6", 928 | "@mapbox/unitbezier": "^0.0.1", 929 | "@mapbox/vector-tile": "^1.3.1", 930 | "@mapbox/whoots-js": "^3.1.0", 931 | "@maplibre/maplibre-gl-style-spec": "^19.3.3", 932 | "@types/geojson": "^7946.0.13", 933 | "@types/mapbox__point-geometry": "^0.1.4", 934 | "@types/mapbox__vector-tile": "^1.3.4", 935 | "@types/pbf": "^3.0.5", 936 | "@types/supercluster": "^7.1.3", 937 | "earcut": "^2.2.4", 938 | "geojson-vt": "^3.2.1", 939 | "gl-matrix": "^3.4.3", 940 | "global-prefix": "^3.0.0", 941 | "kdbush": "^4.0.2", 942 | "murmurhash-js": "^1.0.0", 943 | "pbf": "^3.2.1", 944 | "potpack": "^2.0.0", 945 | "quickselect": "^2.0.0", 946 | "supercluster": "^8.0.1", 947 | "tinyqueue": "^2.0.3", 948 | "vt-pbf": "^3.1.3" 949 | }, 950 | "engines": { 951 | "node": ">=16.14.0", 952 | "npm": ">=8.1.0" 953 | }, 954 | "funding": { 955 | "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" 956 | } 957 | }, 958 | "node_modules/minimist": { 959 | "version": "1.2.8", 960 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 961 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 962 | "dev": true, 963 | "funding": { 964 | "url": "https://github.com/sponsors/ljharb" 965 | } 966 | }, 967 | "node_modules/murmurhash-js": { 968 | "version": "1.0.0", 969 | "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", 970 | "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", 971 | "dev": true 972 | }, 973 | "node_modules/nanoid": { 974 | "version": "3.3.7", 975 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 976 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 977 | "dev": true, 978 | "funding": [ 979 | { 980 | "type": "github", 981 | "url": "https://github.com/sponsors/ai" 982 | } 983 | ], 984 | "bin": { 985 | "nanoid": "bin/nanoid.cjs" 986 | }, 987 | "engines": { 988 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 989 | } 990 | }, 991 | "node_modules/pbf": { 992 | "version": "3.2.1", 993 | "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", 994 | "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", 995 | "dev": true, 996 | "dependencies": { 997 | "ieee754": "^1.1.12", 998 | "resolve-protobuf-schema": "^2.1.0" 999 | }, 1000 | "bin": { 1001 | "pbf": "bin/pbf" 1002 | } 1003 | }, 1004 | "node_modules/picocolors": { 1005 | "version": "1.0.0", 1006 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1007 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1008 | "dev": true 1009 | }, 1010 | "node_modules/pmtiles": { 1011 | "version": "2.11.0", 1012 | "resolved": "https://registry.npmjs.org/pmtiles/-/pmtiles-2.11.0.tgz", 1013 | "integrity": "sha512-dU9SzzaqmCGpdEuTnIba6bDHT6j09ZJFIXxwGpvkiEnce3ZnBB1VKt6+EOmJGueriweaZLAMTUmKVElU2CBe0g==", 1014 | "dev": true, 1015 | "dependencies": { 1016 | "fflate": "^0.8.0" 1017 | } 1018 | }, 1019 | "node_modules/postcss": { 1020 | "version": "8.4.35", 1021 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", 1022 | "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", 1023 | "dev": true, 1024 | "funding": [ 1025 | { 1026 | "type": "opencollective", 1027 | "url": "https://opencollective.com/postcss/" 1028 | }, 1029 | { 1030 | "type": "tidelift", 1031 | "url": "https://tidelift.com/funding/github/npm/postcss" 1032 | }, 1033 | { 1034 | "type": "github", 1035 | "url": "https://github.com/sponsors/ai" 1036 | } 1037 | ], 1038 | "dependencies": { 1039 | "nanoid": "^3.3.7", 1040 | "picocolors": "^1.0.0", 1041 | "source-map-js": "^1.0.2" 1042 | }, 1043 | "engines": { 1044 | "node": "^10 || ^12 || >=14" 1045 | } 1046 | }, 1047 | "node_modules/potpack": { 1048 | "version": "2.0.0", 1049 | "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", 1050 | "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==", 1051 | "dev": true 1052 | }, 1053 | "node_modules/protocol-buffers-schema": { 1054 | "version": "3.6.0", 1055 | "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", 1056 | "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", 1057 | "dev": true 1058 | }, 1059 | "node_modules/protomaps-themes-base": { 1060 | "version": "2.0.0-alpha.5", 1061 | "resolved": "https://registry.npmjs.org/protomaps-themes-base/-/protomaps-themes-base-2.0.0-alpha.5.tgz", 1062 | "integrity": "sha512-IQ63JgClmJY89jyk+5qodvoTlpaAshmy8iJIze1UapPCo4Q+gEuErLrIqgsRWN1aXyL7pNm9CrhkKaNEUmWXBg==", 1063 | "dev": true 1064 | }, 1065 | "node_modules/quickselect": { 1066 | "version": "2.0.0", 1067 | "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", 1068 | "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", 1069 | "dev": true 1070 | }, 1071 | "node_modules/resolve-protobuf-schema": { 1072 | "version": "2.1.0", 1073 | "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", 1074 | "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", 1075 | "dev": true, 1076 | "dependencies": { 1077 | "protocol-buffers-schema": "^3.3.1" 1078 | } 1079 | }, 1080 | "node_modules/rollup": { 1081 | "version": "4.12.0", 1082 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", 1083 | "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==", 1084 | "dev": true, 1085 | "dependencies": { 1086 | "@types/estree": "1.0.5" 1087 | }, 1088 | "bin": { 1089 | "rollup": "dist/bin/rollup" 1090 | }, 1091 | "engines": { 1092 | "node": ">=18.0.0", 1093 | "npm": ">=8.0.0" 1094 | }, 1095 | "optionalDependencies": { 1096 | "@rollup/rollup-android-arm-eabi": "4.12.0", 1097 | "@rollup/rollup-android-arm64": "4.12.0", 1098 | "@rollup/rollup-darwin-arm64": "4.12.0", 1099 | "@rollup/rollup-darwin-x64": "4.12.0", 1100 | "@rollup/rollup-linux-arm-gnueabihf": "4.12.0", 1101 | "@rollup/rollup-linux-arm64-gnu": "4.12.0", 1102 | "@rollup/rollup-linux-arm64-musl": "4.12.0", 1103 | "@rollup/rollup-linux-riscv64-gnu": "4.12.0", 1104 | "@rollup/rollup-linux-x64-gnu": "4.12.0", 1105 | "@rollup/rollup-linux-x64-musl": "4.12.0", 1106 | "@rollup/rollup-win32-arm64-msvc": "4.12.0", 1107 | "@rollup/rollup-win32-ia32-msvc": "4.12.0", 1108 | "@rollup/rollup-win32-x64-msvc": "4.12.0", 1109 | "fsevents": "~2.3.2" 1110 | } 1111 | }, 1112 | "node_modules/rw": { 1113 | "version": "1.3.3", 1114 | "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", 1115 | "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", 1116 | "dev": true 1117 | }, 1118 | "node_modules/set-value": { 1119 | "version": "2.0.1", 1120 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", 1121 | "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", 1122 | "dev": true, 1123 | "dependencies": { 1124 | "extend-shallow": "^2.0.1", 1125 | "is-extendable": "^0.1.1", 1126 | "is-plain-object": "^2.0.3", 1127 | "split-string": "^3.0.1" 1128 | }, 1129 | "engines": { 1130 | "node": ">=0.10.0" 1131 | } 1132 | }, 1133 | "node_modules/sort-asc": { 1134 | "version": "0.2.0", 1135 | "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", 1136 | "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", 1137 | "dev": true, 1138 | "engines": { 1139 | "node": ">=0.10.0" 1140 | } 1141 | }, 1142 | "node_modules/sort-desc": { 1143 | "version": "0.2.0", 1144 | "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", 1145 | "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", 1146 | "dev": true, 1147 | "engines": { 1148 | "node": ">=0.10.0" 1149 | } 1150 | }, 1151 | "node_modules/sort-object": { 1152 | "version": "3.0.3", 1153 | "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", 1154 | "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", 1155 | "dev": true, 1156 | "dependencies": { 1157 | "bytewise": "^1.1.0", 1158 | "get-value": "^2.0.2", 1159 | "is-extendable": "^0.1.1", 1160 | "sort-asc": "^0.2.0", 1161 | "sort-desc": "^0.2.0", 1162 | "union-value": "^1.0.1" 1163 | }, 1164 | "engines": { 1165 | "node": ">=0.10.0" 1166 | } 1167 | }, 1168 | "node_modules/source-map-js": { 1169 | "version": "1.0.2", 1170 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1171 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1172 | "dev": true, 1173 | "engines": { 1174 | "node": ">=0.10.0" 1175 | } 1176 | }, 1177 | "node_modules/split-string": { 1178 | "version": "3.1.0", 1179 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 1180 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 1181 | "dev": true, 1182 | "dependencies": { 1183 | "extend-shallow": "^3.0.0" 1184 | }, 1185 | "engines": { 1186 | "node": ">=0.10.0" 1187 | } 1188 | }, 1189 | "node_modules/split-string/node_modules/extend-shallow": { 1190 | "version": "3.0.2", 1191 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 1192 | "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", 1193 | "dev": true, 1194 | "dependencies": { 1195 | "assign-symbols": "^1.0.0", 1196 | "is-extendable": "^1.0.1" 1197 | }, 1198 | "engines": { 1199 | "node": ">=0.10.0" 1200 | } 1201 | }, 1202 | "node_modules/split-string/node_modules/is-extendable": { 1203 | "version": "1.0.1", 1204 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 1205 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 1206 | "dev": true, 1207 | "dependencies": { 1208 | "is-plain-object": "^2.0.4" 1209 | }, 1210 | "engines": { 1211 | "node": ">=0.10.0" 1212 | } 1213 | }, 1214 | "node_modules/supercluster": { 1215 | "version": "8.0.1", 1216 | "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", 1217 | "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", 1218 | "dev": true, 1219 | "dependencies": { 1220 | "kdbush": "^4.0.2" 1221 | } 1222 | }, 1223 | "node_modules/tinyqueue": { 1224 | "version": "2.0.3", 1225 | "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", 1226 | "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", 1227 | "dev": true 1228 | }, 1229 | "node_modules/typewise": { 1230 | "version": "1.0.3", 1231 | "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", 1232 | "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", 1233 | "dev": true, 1234 | "dependencies": { 1235 | "typewise-core": "^1.2.0" 1236 | } 1237 | }, 1238 | "node_modules/typewise-core": { 1239 | "version": "1.2.0", 1240 | "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", 1241 | "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==", 1242 | "dev": true 1243 | }, 1244 | "node_modules/union-value": { 1245 | "version": "1.0.1", 1246 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", 1247 | "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", 1248 | "dev": true, 1249 | "dependencies": { 1250 | "arr-union": "^3.1.0", 1251 | "get-value": "^2.0.6", 1252 | "is-extendable": "^0.1.1", 1253 | "set-value": "^2.0.1" 1254 | }, 1255 | "engines": { 1256 | "node": ">=0.10.0" 1257 | } 1258 | }, 1259 | "node_modules/vite": { 1260 | "version": "5.1.4", 1261 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz", 1262 | "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==", 1263 | "dev": true, 1264 | "dependencies": { 1265 | "esbuild": "^0.19.3", 1266 | "postcss": "^8.4.35", 1267 | "rollup": "^4.2.0" 1268 | }, 1269 | "bin": { 1270 | "vite": "bin/vite.js" 1271 | }, 1272 | "engines": { 1273 | "node": "^18.0.0 || >=20.0.0" 1274 | }, 1275 | "funding": { 1276 | "url": "https://github.com/vitejs/vite?sponsor=1" 1277 | }, 1278 | "optionalDependencies": { 1279 | "fsevents": "~2.3.3" 1280 | }, 1281 | "peerDependencies": { 1282 | "@types/node": "^18.0.0 || >=20.0.0", 1283 | "less": "*", 1284 | "lightningcss": "^1.21.0", 1285 | "sass": "*", 1286 | "stylus": "*", 1287 | "sugarss": "*", 1288 | "terser": "^5.4.0" 1289 | }, 1290 | "peerDependenciesMeta": { 1291 | "@types/node": { 1292 | "optional": true 1293 | }, 1294 | "less": { 1295 | "optional": true 1296 | }, 1297 | "lightningcss": { 1298 | "optional": true 1299 | }, 1300 | "sass": { 1301 | "optional": true 1302 | }, 1303 | "stylus": { 1304 | "optional": true 1305 | }, 1306 | "sugarss": { 1307 | "optional": true 1308 | }, 1309 | "terser": { 1310 | "optional": true 1311 | } 1312 | } 1313 | }, 1314 | "node_modules/vt-pbf": { 1315 | "version": "3.1.3", 1316 | "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", 1317 | "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", 1318 | "dev": true, 1319 | "dependencies": { 1320 | "@mapbox/point-geometry": "0.1.0", 1321 | "@mapbox/vector-tile": "^1.3.1", 1322 | "pbf": "^3.2.1" 1323 | } 1324 | }, 1325 | "node_modules/which": { 1326 | "version": "1.3.1", 1327 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1328 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1329 | "dev": true, 1330 | "dependencies": { 1331 | "isexe": "^2.0.0" 1332 | }, 1333 | "bin": { 1334 | "which": "bin/which" 1335 | } 1336 | } 1337 | } 1338 | } 1339 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "self-hosted-maps", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite --host", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "devDependencies": { 12 | "maplibre-gl": "^3.6.2", 13 | "pmtiles": "^2.11.0", 14 | "protomaps-themes-base": "^2.0.0-alpha.4", 15 | "vite": "^5.1.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "aiofiles" 5 | version = "23.2.1" 6 | description = "File support for asyncio." 7 | optional = false 8 | python-versions = ">=3.7" 9 | files = [ 10 | {file = "aiofiles-23.2.1-py3-none-any.whl", hash = "sha256:19297512c647d4b27a2cf7c34caa7e405c0d60b5560618a29a9fe027b18b0107"}, 11 | {file = "aiofiles-23.2.1.tar.gz", hash = "sha256:84ec2218d8419404abcb9f0c02df3f34c6e0a68ed41072acfb1cef5cbc29051a"}, 12 | ] 13 | 14 | [[package]] 15 | name = "anyio" 16 | version = "4.3.0" 17 | description = "High level compatibility layer for multiple asynchronous event loop implementations" 18 | optional = false 19 | python-versions = ">=3.8" 20 | files = [ 21 | {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, 22 | {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, 23 | ] 24 | 25 | [package.dependencies] 26 | exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} 27 | idna = ">=2.8" 28 | sniffio = ">=1.1" 29 | typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} 30 | 31 | [package.extras] 32 | doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] 33 | test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] 34 | trio = ["trio (>=0.23)"] 35 | 36 | [[package]] 37 | name = "asgi-csrf" 38 | version = "0.9" 39 | description = "ASGI middleware for protecting against CSRF attacks" 40 | optional = false 41 | python-versions = "*" 42 | files = [ 43 | {file = "asgi-csrf-0.9.tar.gz", hash = "sha256:6e9d3bddaeac1a8fd33b188fe2abc8271f9085ab7be6e1a7f4d3c9df5d7f741a"}, 44 | {file = "asgi_csrf-0.9-py3-none-any.whl", hash = "sha256:e974cffb8a4ab84a28a0088acbf7a4ecc5be4a64f08dcbe19c60dea103da01c0"}, 45 | ] 46 | 47 | [package.dependencies] 48 | itsdangerous = "*" 49 | python-multipart = "*" 50 | 51 | [package.extras] 52 | test = ["asgi-lifespan", "httpx (>=0.16)", "pytest", "pytest-asyncio", "pytest-cov", "starlette"] 53 | 54 | [[package]] 55 | name = "asgiref" 56 | version = "3.7.2" 57 | description = "ASGI specs, helper code, and adapters" 58 | optional = false 59 | python-versions = ">=3.7" 60 | files = [ 61 | {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, 62 | {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, 63 | ] 64 | 65 | [package.dependencies] 66 | typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} 67 | 68 | [package.extras] 69 | tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] 70 | 71 | [[package]] 72 | name = "asttokens" 73 | version = "2.4.1" 74 | description = "Annotate AST trees with source code positions" 75 | optional = false 76 | python-versions = "*" 77 | files = [ 78 | {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, 79 | {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, 80 | ] 81 | 82 | [package.dependencies] 83 | six = ">=1.12.0" 84 | 85 | [package.extras] 86 | astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] 87 | test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] 88 | 89 | [[package]] 90 | name = "certifi" 91 | version = "2024.2.2" 92 | description = "Python package for providing Mozilla's CA Bundle." 93 | optional = false 94 | python-versions = ">=3.6" 95 | files = [ 96 | {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, 97 | {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, 98 | ] 99 | 100 | [[package]] 101 | name = "click" 102 | version = "8.1.7" 103 | description = "Composable command line interface toolkit" 104 | optional = false 105 | python-versions = ">=3.7" 106 | files = [ 107 | {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, 108 | {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, 109 | ] 110 | 111 | [package.dependencies] 112 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 113 | 114 | [[package]] 115 | name = "click-default-group" 116 | version = "1.2.4" 117 | description = "click_default_group" 118 | optional = false 119 | python-versions = ">=2.7" 120 | files = [ 121 | {file = "click_default_group-1.2.4-py2.py3-none-any.whl", hash = "sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f"}, 122 | {file = "click_default_group-1.2.4.tar.gz", hash = "sha256:eb3f3c99ec0d456ca6cd2a7f08f7d4e91771bef51b01bdd9580cc6450fe1251e"}, 123 | ] 124 | 125 | [package.dependencies] 126 | click = "*" 127 | 128 | [package.extras] 129 | test = ["pytest"] 130 | 131 | [[package]] 132 | name = "colorama" 133 | version = "0.4.6" 134 | description = "Cross-platform colored terminal text." 135 | optional = false 136 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 137 | files = [ 138 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 139 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 140 | ] 141 | 142 | [[package]] 143 | name = "datasette" 144 | version = "0.64.6" 145 | description = "An open source multi-tool for exploring and publishing data" 146 | optional = false 147 | python-versions = ">=3.7" 148 | files = [ 149 | {file = "datasette-0.64.6-py3-none-any.whl", hash = "sha256:158dbdfab1a4c613da7757518444a7664ecd39f54a617304edff4f119dd057df"}, 150 | {file = "datasette-0.64.6.tar.gz", hash = "sha256:85ca3aabca64fd9560052042aec27d3b32a1f85303853da3550434866d0fa539"}, 151 | ] 152 | 153 | [package.dependencies] 154 | aiofiles = ">=0.4" 155 | asgi-csrf = ">=0.9" 156 | asgiref = ">=3.2.10" 157 | click = ">=7.1.1" 158 | click-default-group = ">=1.2.3" 159 | httpx = ">=0.20" 160 | hupper = ">=1.9" 161 | itsdangerous = ">=1.1" 162 | janus = ">=0.6.2" 163 | Jinja2 = ">=2.10.3" 164 | mergedeep = ">=1.1.1" 165 | pint = ">=0.9" 166 | pip = "*" 167 | pluggy = ">=1.0" 168 | PyYAML = ">=5.3" 169 | setuptools = "*" 170 | uvicorn = ">=0.11" 171 | 172 | [package.extras] 173 | docs = ["blacken-docs", "codespell", "furo (==2022.9.29)", "sphinx-autobuild", "sphinx-copybutton"] 174 | rich = ["rich"] 175 | test = ["beautifulsoup4 (>=4.8.1)", "black (==22.10.0)", "blacken-docs (==1.12.1)", "cogapp (>=3.3.0)", "pytest (>=5.2.2)", "pytest-asyncio (>=0.17)", "pytest-timeout (>=1.4.2)", "pytest-xdist (>=2.2.1)", "trustme (>=0.7)"] 176 | 177 | [[package]] 178 | name = "datasette-geojson" 179 | version = "0.4.0" 180 | description = "Add GeoJSON as an output option" 181 | optional = false 182 | python-versions = ">=3.7" 183 | files = [ 184 | {file = "datasette-geojson-0.4.0.tar.gz", hash = "sha256:ecf7ca75b084b57d0a8007cfb9965cdae53fbb29fe8f0a41feffff941a23da8a"}, 185 | {file = "datasette_geojson-0.4.0-py3-none-any.whl", hash = "sha256:6de231185b40d1ea07775f0e09d15ac2d9879685b8b683a84442a96371b971f4"}, 186 | ] 187 | 188 | [package.dependencies] 189 | datasette = "*" 190 | geojson = "*" 191 | 192 | [package.extras] 193 | test = ["geojson-to-sqlite", "pytest", "pytest-asyncio"] 194 | 195 | [[package]] 196 | name = "datasette-geojson-map" 197 | version = "0.4.0" 198 | description = "Render a map for any query with a geometry column" 199 | optional = false 200 | python-versions = ">=3.6" 201 | files = [ 202 | {file = "datasette-geojson-map-0.4.0.tar.gz", hash = "sha256:858701f2bbd60363052b3683d2bbfe73b05ed575c51d3bee3e57690089cb663c"}, 203 | {file = "datasette_geojson_map-0.4.0-py3-none-any.whl", hash = "sha256:4035a5ae8e5d8caaad31c2ad68e388bbb14b34e3aa94e556fd34491a599c2c40"}, 204 | ] 205 | 206 | [package.dependencies] 207 | datasette = "*" 208 | datasette-geojson = "*" 209 | datasette-leaflet = "*" 210 | 211 | [package.extras] 212 | test = ["geojson-to-sqlite", "pytest", "pytest-asyncio"] 213 | 214 | [[package]] 215 | name = "datasette-leaflet" 216 | version = "0.2.2" 217 | description = "A plugin that bundles Leaflet.js for Datasette" 218 | optional = false 219 | python-versions = ">=3.6" 220 | files = [ 221 | {file = "datasette-leaflet-0.2.2.tar.gz", hash = "sha256:8fd4e634304be392ae6f7de770d4f22b95a37caecd676a35faeb6200da9423bc"}, 222 | {file = "datasette_leaflet-0.2.2-py3-none-any.whl", hash = "sha256:fd88c25666e7680b25b4c6e5546bd02c9f5836bbc0fee61042dbb6b93d4139f0"}, 223 | ] 224 | 225 | [package.dependencies] 226 | datasette = "*" 227 | 228 | [package.extras] 229 | test = ["pytest", "pytest-asyncio"] 230 | 231 | [[package]] 232 | name = "decorator" 233 | version = "5.1.1" 234 | description = "Decorators for Humans" 235 | optional = false 236 | python-versions = ">=3.5" 237 | files = [ 238 | {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, 239 | {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, 240 | ] 241 | 242 | [[package]] 243 | name = "exceptiongroup" 244 | version = "1.2.0" 245 | description = "Backport of PEP 654 (exception groups)" 246 | optional = false 247 | python-versions = ">=3.7" 248 | files = [ 249 | {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, 250 | {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, 251 | ] 252 | 253 | [package.extras] 254 | test = ["pytest (>=6)"] 255 | 256 | [[package]] 257 | name = "executing" 258 | version = "2.0.1" 259 | description = "Get the currently executing AST node of a frame, and other information" 260 | optional = false 261 | python-versions = ">=3.5" 262 | files = [ 263 | {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, 264 | {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, 265 | ] 266 | 267 | [package.extras] 268 | tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] 269 | 270 | [[package]] 271 | name = "geojson" 272 | version = "3.1.0" 273 | description = "Python bindings and utilities for GeoJSON" 274 | optional = false 275 | python-versions = ">=3.7" 276 | files = [ 277 | {file = "geojson-3.1.0-py3-none-any.whl", hash = "sha256:68a9771827237adb8c0c71f8527509c8f5bef61733aa434cefc9c9d4f0ebe8f3"}, 278 | {file = "geojson-3.1.0.tar.gz", hash = "sha256:58a7fa40727ea058efc28b0e9ff0099eadf6d0965e04690830208d3ef571adac"}, 279 | ] 280 | 281 | [[package]] 282 | name = "geojson-to-sqlite" 283 | version = "1.1.1" 284 | description = "CLI tool for converting GeoJSON to SQLite (optionally with SpatiaLite)" 285 | optional = false 286 | python-versions = "*" 287 | files = [ 288 | {file = "geojson-to-sqlite-1.1.1.tar.gz", hash = "sha256:c35611fe30e7dc01bb1823de7039653846a377b56db98313bc51c1b44089aec5"}, 289 | {file = "geojson_to_sqlite-1.1.1-py3-none-any.whl", hash = "sha256:583e25472bb9d6e5bb8eae4e231578bc2a82c0ddc282ac2c9c1d3055345688be"}, 290 | ] 291 | 292 | [package.dependencies] 293 | shapely = "*" 294 | sqlite-utils = ">=3.23" 295 | 296 | [package.extras] 297 | test = ["dirty-equals", "pytest"] 298 | 299 | [[package]] 300 | name = "h11" 301 | version = "0.14.0" 302 | description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" 303 | optional = false 304 | python-versions = ">=3.7" 305 | files = [ 306 | {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, 307 | {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, 308 | ] 309 | 310 | [[package]] 311 | name = "httpcore" 312 | version = "1.0.4" 313 | description = "A minimal low-level HTTP client." 314 | optional = false 315 | python-versions = ">=3.8" 316 | files = [ 317 | {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, 318 | {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, 319 | ] 320 | 321 | [package.dependencies] 322 | certifi = "*" 323 | h11 = ">=0.13,<0.15" 324 | 325 | [package.extras] 326 | asyncio = ["anyio (>=4.0,<5.0)"] 327 | http2 = ["h2 (>=3,<5)"] 328 | socks = ["socksio (==1.*)"] 329 | trio = ["trio (>=0.22.0,<0.25.0)"] 330 | 331 | [[package]] 332 | name = "httpx" 333 | version = "0.26.0" 334 | description = "The next generation HTTP client." 335 | optional = false 336 | python-versions = ">=3.8" 337 | files = [ 338 | {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"}, 339 | {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"}, 340 | ] 341 | 342 | [package.dependencies] 343 | anyio = "*" 344 | certifi = "*" 345 | httpcore = "==1.*" 346 | idna = "*" 347 | sniffio = "*" 348 | 349 | [package.extras] 350 | brotli = ["brotli", "brotlicffi"] 351 | cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] 352 | http2 = ["h2 (>=3,<5)"] 353 | socks = ["socksio (==1.*)"] 354 | 355 | [[package]] 356 | name = "hupper" 357 | version = "1.12.1" 358 | description = "Integrated process monitor for developing and reloading daemons." 359 | optional = false 360 | python-versions = ">=3.7" 361 | files = [ 362 | {file = "hupper-1.12.1-py3-none-any.whl", hash = "sha256:e872b959f09d90be5fb615bd2e62de89a0b57efc037bdf9637fb09cdf8552b19"}, 363 | {file = "hupper-1.12.1.tar.gz", hash = "sha256:06bf54170ff4ecf4c84ad5f188dee3901173ab449c2608ad05b9bfd6b13e32eb"}, 364 | ] 365 | 366 | [package.extras] 367 | docs = ["Sphinx", "pylons-sphinx-themes", "setuptools", "watchdog"] 368 | testing = ["mock", "pytest", "pytest-cov", "watchdog"] 369 | 370 | [[package]] 371 | name = "idna" 372 | version = "3.6" 373 | description = "Internationalized Domain Names in Applications (IDNA)" 374 | optional = false 375 | python-versions = ">=3.5" 376 | files = [ 377 | {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, 378 | {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, 379 | ] 380 | 381 | [[package]] 382 | name = "ipython" 383 | version = "8.22.1" 384 | description = "IPython: Productive Interactive Computing" 385 | optional = false 386 | python-versions = ">=3.10" 387 | files = [ 388 | {file = "ipython-8.22.1-py3-none-any.whl", hash = "sha256:869335e8cded62ffb6fac8928e5287a05433d6462e3ebaac25f4216474dd6bc4"}, 389 | {file = "ipython-8.22.1.tar.gz", hash = "sha256:39c6f9efc079fb19bfb0f17eee903978fe9a290b1b82d68196c641cecb76ea22"}, 390 | ] 391 | 392 | [package.dependencies] 393 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 394 | decorator = "*" 395 | exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} 396 | jedi = ">=0.16" 397 | matplotlib-inline = "*" 398 | pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} 399 | prompt-toolkit = ">=3.0.41,<3.1.0" 400 | pygments = ">=2.4.0" 401 | stack-data = "*" 402 | traitlets = ">=5.13.0" 403 | 404 | [package.extras] 405 | all = ["ipython[black,doc,kernel,nbconvert,nbformat,notebook,parallel,qtconsole,terminal]", "ipython[test,test-extra]"] 406 | black = ["black"] 407 | doc = ["docrepr", "exceptiongroup", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "stack-data", "typing-extensions"] 408 | kernel = ["ipykernel"] 409 | nbconvert = ["nbconvert"] 410 | nbformat = ["nbformat"] 411 | notebook = ["ipywidgets", "notebook"] 412 | parallel = ["ipyparallel"] 413 | qtconsole = ["qtconsole"] 414 | test = ["pickleshare", "pytest (<8)", "pytest-asyncio (<0.22)", "testpath"] 415 | test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] 416 | 417 | [[package]] 418 | name = "itsdangerous" 419 | version = "2.1.2" 420 | description = "Safely pass data to untrusted environments and back." 421 | optional = false 422 | python-versions = ">=3.7" 423 | files = [ 424 | {file = "itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, 425 | {file = "itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, 426 | ] 427 | 428 | [[package]] 429 | name = "janus" 430 | version = "1.0.0" 431 | description = "Mixed sync-async queue to interoperate between asyncio tasks and classic threads" 432 | optional = false 433 | python-versions = ">=3.7" 434 | files = [ 435 | {file = "janus-1.0.0-py3-none-any.whl", hash = "sha256:2596ea5482711c1ee3ef2df6c290aaf370a13c55a007826e8f7c32d696d1d00a"}, 436 | {file = "janus-1.0.0.tar.gz", hash = "sha256:df976f2cdcfb034b147a2d51edfc34ff6bfb12d4e2643d3ad0e10de058cb1612"}, 437 | ] 438 | 439 | [package.dependencies] 440 | typing-extensions = ">=3.7.4.3" 441 | 442 | [[package]] 443 | name = "jedi" 444 | version = "0.19.1" 445 | description = "An autocompletion tool for Python that can be used for text editors." 446 | optional = false 447 | python-versions = ">=3.6" 448 | files = [ 449 | {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, 450 | {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, 451 | ] 452 | 453 | [package.dependencies] 454 | parso = ">=0.8.3,<0.9.0" 455 | 456 | [package.extras] 457 | docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] 458 | qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] 459 | testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] 460 | 461 | [[package]] 462 | name = "jinja2" 463 | version = "3.1.3" 464 | description = "A very fast and expressive template engine." 465 | optional = false 466 | python-versions = ">=3.7" 467 | files = [ 468 | {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, 469 | {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, 470 | ] 471 | 472 | [package.dependencies] 473 | MarkupSafe = ">=2.0" 474 | 475 | [package.extras] 476 | i18n = ["Babel (>=2.7)"] 477 | 478 | [[package]] 479 | name = "markupsafe" 480 | version = "2.1.5" 481 | description = "Safely add untrusted strings to HTML/XML markup." 482 | optional = false 483 | python-versions = ">=3.7" 484 | files = [ 485 | {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, 486 | {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, 487 | {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, 488 | {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, 489 | {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, 490 | {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, 491 | {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, 492 | {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, 493 | {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, 494 | {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, 495 | {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, 496 | {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, 497 | {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, 498 | {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, 499 | {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, 500 | {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, 501 | {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, 502 | {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, 503 | {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, 504 | {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, 505 | {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, 506 | {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, 507 | {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, 508 | {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, 509 | {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, 510 | {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, 511 | {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, 512 | {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, 513 | {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, 514 | {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, 515 | {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, 516 | {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, 517 | {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, 518 | {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, 519 | {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, 520 | {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, 521 | {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, 522 | {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, 523 | {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, 524 | {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, 525 | {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, 526 | {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, 527 | {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, 528 | {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, 529 | {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, 530 | {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, 531 | {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, 532 | {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, 533 | {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, 534 | {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, 535 | {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, 536 | {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, 537 | {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, 538 | {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, 539 | {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, 540 | {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, 541 | {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, 542 | {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, 543 | {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, 544 | {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, 545 | ] 546 | 547 | [[package]] 548 | name = "matplotlib-inline" 549 | version = "0.1.6" 550 | description = "Inline Matplotlib backend for Jupyter" 551 | optional = false 552 | python-versions = ">=3.5" 553 | files = [ 554 | {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, 555 | {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, 556 | ] 557 | 558 | [package.dependencies] 559 | traitlets = "*" 560 | 561 | [[package]] 562 | name = "mergedeep" 563 | version = "1.3.4" 564 | description = "A deep merge function for 🐍." 565 | optional = false 566 | python-versions = ">=3.6" 567 | files = [ 568 | {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, 569 | {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, 570 | ] 571 | 572 | [[package]] 573 | name = "numpy" 574 | version = "1.26.4" 575 | description = "Fundamental package for array computing in Python" 576 | optional = false 577 | python-versions = ">=3.9" 578 | files = [ 579 | {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, 580 | {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, 581 | {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, 582 | {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, 583 | {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, 584 | {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, 585 | {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, 586 | {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, 587 | {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, 588 | {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, 589 | {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, 590 | {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, 591 | {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, 592 | {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, 593 | {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, 594 | {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, 595 | {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, 596 | {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, 597 | {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, 598 | {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, 599 | {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, 600 | {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, 601 | {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, 602 | {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, 603 | {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, 604 | {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, 605 | {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, 606 | {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, 607 | {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, 608 | {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, 609 | {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, 610 | {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, 611 | {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, 612 | {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, 613 | {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, 614 | {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, 615 | ] 616 | 617 | [[package]] 618 | name = "parso" 619 | version = "0.8.3" 620 | description = "A Python Parser" 621 | optional = false 622 | python-versions = ">=3.6" 623 | files = [ 624 | {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, 625 | {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, 626 | ] 627 | 628 | [package.extras] 629 | qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] 630 | testing = ["docopt", "pytest (<6.0.0)"] 631 | 632 | [[package]] 633 | name = "pexpect" 634 | version = "4.9.0" 635 | description = "Pexpect allows easy control of interactive console applications." 636 | optional = false 637 | python-versions = "*" 638 | files = [ 639 | {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, 640 | {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, 641 | ] 642 | 643 | [package.dependencies] 644 | ptyprocess = ">=0.5" 645 | 646 | [[package]] 647 | name = "pint" 648 | version = "0.23" 649 | description = "Physical quantities module" 650 | optional = false 651 | python-versions = ">=3.9" 652 | files = [ 653 | {file = "Pint-0.23-py3-none-any.whl", hash = "sha256:df79b6b5f1beb7ed0cd55d91a0766fc55f972f757a9364e844958c05e8eb66f9"}, 654 | {file = "Pint-0.23.tar.gz", hash = "sha256:e1509b91606dbc52527c600a4ef74ffac12fff70688aff20e9072409346ec9b4"}, 655 | ] 656 | 657 | [package.dependencies] 658 | typing-extensions = "*" 659 | 660 | [package.extras] 661 | babel = ["babel (<=2.8)"] 662 | bench = ["pytest", "pytest-codspeed"] 663 | dask = ["dask"] 664 | mip = ["mip (>=1.13)"] 665 | numpy = ["numpy (>=1.19.5)"] 666 | pandas = ["pint-pandas (>=0.3)"] 667 | test = ["pytest", "pytest-benchmark", "pytest-cov", "pytest-mpl", "pytest-subtests"] 668 | testbase = ["pytest", "pytest-benchmark", "pytest-cov", "pytest-subtests"] 669 | uncertainties = ["uncertainties (>=3.1.6)"] 670 | xarray = ["xarray"] 671 | 672 | [[package]] 673 | name = "pip" 674 | version = "24.0" 675 | description = "The PyPA recommended tool for installing Python packages." 676 | optional = false 677 | python-versions = ">=3.7" 678 | files = [ 679 | {file = "pip-24.0-py3-none-any.whl", hash = "sha256:ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc"}, 680 | {file = "pip-24.0.tar.gz", hash = "sha256:ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2"}, 681 | ] 682 | 683 | [[package]] 684 | name = "pluggy" 685 | version = "1.4.0" 686 | description = "plugin and hook calling mechanisms for python" 687 | optional = false 688 | python-versions = ">=3.8" 689 | files = [ 690 | {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, 691 | {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, 692 | ] 693 | 694 | [package.extras] 695 | dev = ["pre-commit", "tox"] 696 | testing = ["pytest", "pytest-benchmark"] 697 | 698 | [[package]] 699 | name = "prompt-toolkit" 700 | version = "3.0.43" 701 | description = "Library for building powerful interactive command lines in Python" 702 | optional = false 703 | python-versions = ">=3.7.0" 704 | files = [ 705 | {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, 706 | {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, 707 | ] 708 | 709 | [package.dependencies] 710 | wcwidth = "*" 711 | 712 | [[package]] 713 | name = "ptyprocess" 714 | version = "0.7.0" 715 | description = "Run a subprocess in a pseudo terminal" 716 | optional = false 717 | python-versions = "*" 718 | files = [ 719 | {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, 720 | {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, 721 | ] 722 | 723 | [[package]] 724 | name = "pure-eval" 725 | version = "0.2.2" 726 | description = "Safely evaluate AST nodes without side effects" 727 | optional = false 728 | python-versions = "*" 729 | files = [ 730 | {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, 731 | {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, 732 | ] 733 | 734 | [package.extras] 735 | tests = ["pytest"] 736 | 737 | [[package]] 738 | name = "pygments" 739 | version = "2.17.2" 740 | description = "Pygments is a syntax highlighting package written in Python." 741 | optional = false 742 | python-versions = ">=3.7" 743 | files = [ 744 | {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, 745 | {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, 746 | ] 747 | 748 | [package.extras] 749 | plugins = ["importlib-metadata"] 750 | windows-terminal = ["colorama (>=0.4.6)"] 751 | 752 | [[package]] 753 | name = "python-dateutil" 754 | version = "2.8.2" 755 | description = "Extensions to the standard Python datetime module" 756 | optional = false 757 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 758 | files = [ 759 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, 760 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, 761 | ] 762 | 763 | [package.dependencies] 764 | six = ">=1.5" 765 | 766 | [[package]] 767 | name = "python-multipart" 768 | version = "0.0.9" 769 | description = "A streaming multipart parser for Python" 770 | optional = false 771 | python-versions = ">=3.8" 772 | files = [ 773 | {file = "python_multipart-0.0.9-py3-none-any.whl", hash = "sha256:97ca7b8ea7b05f977dc3849c3ba99d51689822fab725c3703af7c866a0c2b215"}, 774 | {file = "python_multipart-0.0.9.tar.gz", hash = "sha256:03f54688c663f1b7977105f021043b0793151e4cb1c1a9d4a11fc13d622c4026"}, 775 | ] 776 | 777 | [package.extras] 778 | dev = ["atomicwrites (==1.4.1)", "attrs (==23.2.0)", "coverage (==7.4.1)", "hatch", "invoke (==2.2.0)", "more-itertools (==10.2.0)", "pbr (==6.0.0)", "pluggy (==1.4.0)", "py (==1.11.0)", "pytest (==8.0.0)", "pytest-cov (==4.1.0)", "pytest-timeout (==2.2.0)", "pyyaml (==6.0.1)", "ruff (==0.2.1)"] 779 | 780 | [[package]] 781 | name = "pyyaml" 782 | version = "6.0.1" 783 | description = "YAML parser and emitter for Python" 784 | optional = false 785 | python-versions = ">=3.6" 786 | files = [ 787 | {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, 788 | {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, 789 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, 790 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, 791 | {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, 792 | {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, 793 | {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, 794 | {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, 795 | {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, 796 | {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, 797 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, 798 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, 799 | {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, 800 | {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, 801 | {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, 802 | {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, 803 | {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, 804 | {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, 805 | {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, 806 | {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, 807 | {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, 808 | {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, 809 | {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, 810 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, 811 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, 812 | {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, 813 | {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, 814 | {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, 815 | {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, 816 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, 817 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, 818 | {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, 819 | {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, 820 | {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, 821 | {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, 822 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, 823 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, 824 | {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, 825 | {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, 826 | {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, 827 | {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, 828 | {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, 829 | {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, 830 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, 831 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, 832 | {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, 833 | {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, 834 | {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, 835 | {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, 836 | {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, 837 | ] 838 | 839 | [[package]] 840 | name = "setuptools" 841 | version = "69.1.1" 842 | description = "Easily download, build, install, upgrade, and uninstall Python packages" 843 | optional = false 844 | python-versions = ">=3.8" 845 | files = [ 846 | {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, 847 | {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, 848 | ] 849 | 850 | [package.extras] 851 | docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] 852 | testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] 853 | testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] 854 | 855 | [[package]] 856 | name = "shapely" 857 | version = "2.0.3" 858 | description = "Manipulation and analysis of geometric objects" 859 | optional = false 860 | python-versions = ">=3.7" 861 | files = [ 862 | {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:af7e9abe180b189431b0f490638281b43b84a33a960620e6b2e8d3e3458b61a1"}, 863 | {file = "shapely-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98040462b36ced9671e266b95c326b97f41290d9d17504a1ee4dc313a7667b9c"}, 864 | {file = "shapely-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71eb736ef2843f23473c6e37f6180f90f0a35d740ab284321548edf4e55d9a52"}, 865 | {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:881eb9dbbb4a6419667e91fcb20313bfc1e67f53dbb392c6840ff04793571ed1"}, 866 | {file = "shapely-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f10d2ccf0554fc0e39fad5886c839e47e207f99fdf09547bc687a2330efda35b"}, 867 | {file = "shapely-2.0.3-cp310-cp310-win32.whl", hash = "sha256:6dfdc077a6fcaf74d3eab23a1ace5abc50c8bce56ac7747d25eab582c5a2990e"}, 868 | {file = "shapely-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:64c5013dacd2d81b3bb12672098a0b2795c1bf8190cfc2980e380f5ef9d9e4d9"}, 869 | {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:56cee3e4e8159d6f2ce32e421445b8e23154fd02a0ac271d6a6c0b266a8e3cce"}, 870 | {file = "shapely-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:619232c8276fded09527d2a9fd91a7885ff95c0ff9ecd5e3cb1e34fbb676e2ae"}, 871 | {file = "shapely-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2a7d256db6f5b4b407dc0c98dd1b2fcf1c9c5814af9416e5498d0a2e4307a4b"}, 872 | {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45f0c8cd4583647db3216d965d49363e6548c300c23fd7e57ce17a03f824034"}, 873 | {file = "shapely-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13cb37d3826972a82748a450328fe02a931dcaed10e69a4d83cc20ba021bc85f"}, 874 | {file = "shapely-2.0.3-cp311-cp311-win32.whl", hash = "sha256:9302d7011e3e376d25acd30d2d9e70d315d93f03cc748784af19b00988fc30b1"}, 875 | {file = "shapely-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6b464f2666b13902835f201f50e835f2f153f37741db88f68c7f3b932d3505fa"}, 876 | {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e86e7cb8e331a4850e0c2a8b2d66dc08d7a7b301b8d1d34a13060e3a5b4b3b55"}, 877 | {file = "shapely-2.0.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c91981c99ade980fc49e41a544629751a0ccd769f39794ae913e53b07b2f78b9"}, 878 | {file = "shapely-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd45d456983dc60a42c4db437496d3f08a4201fbf662b69779f535eb969660af"}, 879 | {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:882fb1ffc7577e88c1194f4f1757e277dc484ba096a3b94844319873d14b0f2d"}, 880 | {file = "shapely-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9f2d93bff2ea52fa93245798cddb479766a18510ea9b93a4fb9755c79474889"}, 881 | {file = "shapely-2.0.3-cp312-cp312-win32.whl", hash = "sha256:99abad1fd1303b35d991703432c9481e3242b7b3a393c186cfb02373bf604004"}, 882 | {file = "shapely-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:6f555fe3304a1f40398977789bc4fe3c28a11173196df9ece1e15c5bc75a48db"}, 883 | {file = "shapely-2.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983cc418c1fa160b7d797cfef0e0c9f8c6d5871e83eae2c5793fce6a837fad9"}, 884 | {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18bddb8c327f392189a8d5d6b9a858945722d0bb95ccbd6a077b8e8fc4c7890d"}, 885 | {file = "shapely-2.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:442f4dcf1eb58c5a4e3428d88e988ae153f97ab69a9f24e07bf4af8038536325"}, 886 | {file = "shapely-2.0.3-cp37-cp37m-win32.whl", hash = "sha256:31a40b6e3ab00a4fd3a1d44efb2482278642572b8e0451abdc8e0634b787173e"}, 887 | {file = "shapely-2.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:59b16976c2473fec85ce65cc9239bef97d4205ab3acead4e6cdcc72aee535679"}, 888 | {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:705efbce1950a31a55b1daa9c6ae1c34f1296de71ca8427974ec2f27d57554e3"}, 889 | {file = "shapely-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:601c5c0058a6192df704cb889439f64994708563f57f99574798721e9777a44b"}, 890 | {file = "shapely-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f24ecbb90a45c962b3b60d8d9a387272ed50dc010bfe605f1d16dfc94772d8a1"}, 891 | {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8c2a2989222c6062f7a0656e16276c01bb308bc7e5d999e54bf4e294ce62e76"}, 892 | {file = "shapely-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42bceb9bceb3710a774ce04908fda0f28b291323da2688f928b3f213373b5aee"}, 893 | {file = "shapely-2.0.3-cp38-cp38-win32.whl", hash = "sha256:54d925c9a311e4d109ec25f6a54a8bd92cc03481a34ae1a6a92c1fe6729b7e01"}, 894 | {file = "shapely-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:300d203b480a4589adefff4c4af0b13919cd6d760ba3cbb1e56275210f96f654"}, 895 | {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:083d026e97b6c1f4a9bd2a9171c7692461092ed5375218170d91705550eecfd5"}, 896 | {file = "shapely-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:27b6e1910094d93e9627f2664121e0e35613262fc037051680a08270f6058daf"}, 897 | {file = "shapely-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:71b2de56a9e8c0e5920ae5ddb23b923490557ac50cb0b7fa752761bf4851acde"}, 898 | {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d279e56bbb68d218d63f3efc80c819cedcceef0e64efbf058a1df89dc57201b"}, 899 | {file = "shapely-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88566d01a30f0453f7d038db46bc83ce125e38e47c5f6bfd4c9c287010e9bf74"}, 900 | {file = "shapely-2.0.3-cp39-cp39-win32.whl", hash = "sha256:58afbba12c42c6ed44c4270bc0e22f3dadff5656d711b0ad335c315e02d04707"}, 901 | {file = "shapely-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:5026b30433a70911979d390009261b8c4021ff87c7c3cbd825e62bb2ffa181bc"}, 902 | {file = "shapely-2.0.3.tar.gz", hash = "sha256:4d65d0aa7910af71efa72fd6447e02a8e5dd44da81a983de9d736d6e6ccbe674"}, 903 | ] 904 | 905 | [package.dependencies] 906 | numpy = ">=1.14,<2" 907 | 908 | [package.extras] 909 | docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] 910 | test = ["pytest", "pytest-cov"] 911 | 912 | [[package]] 913 | name = "six" 914 | version = "1.16.0" 915 | description = "Python 2 and 3 compatibility utilities" 916 | optional = false 917 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 918 | files = [ 919 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 920 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 921 | ] 922 | 923 | [[package]] 924 | name = "sniffio" 925 | version = "1.3.0" 926 | description = "Sniff out which async library your code is running under" 927 | optional = false 928 | python-versions = ">=3.7" 929 | files = [ 930 | {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, 931 | {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, 932 | ] 933 | 934 | [[package]] 935 | name = "sqlite-colorbrewer" 936 | version = "0.2" 937 | description = "A custom function to use ColorBrewer scales in SQLite queries" 938 | optional = false 939 | python-versions = ">=3.6" 940 | files = [ 941 | {file = "sqlite-colorbrewer-0.2.tar.gz", hash = "sha256:80049cd65e94a3fd128284218baa3d71f76df70ffe41d38f3daacf0f857548ea"}, 942 | {file = "sqlite_colorbrewer-0.2-py3-none-any.whl", hash = "sha256:08b81d4288fcf29b03cd8c1c84b4a4425220a59d5cbd32b71818ab2eac945eaf"}, 943 | ] 944 | 945 | [package.extras] 946 | test = ["datasette", "pytest", "pytest-asyncio"] 947 | 948 | [[package]] 949 | name = "sqlite-fts4" 950 | version = "1.0.3" 951 | description = "Python functions for working with SQLite FTS4 search" 952 | optional = false 953 | python-versions = "*" 954 | files = [ 955 | {file = "sqlite-fts4-1.0.3.tar.gz", hash = "sha256:78b05eeaf6680e9dbed8986bde011e9c086a06cb0c931b3cf7da94c214e8930c"}, 956 | {file = "sqlite_fts4-1.0.3-py3-none-any.whl", hash = "sha256:0359edd8dea6fd73c848989e1e2b1f31a50fe5f9d7272299ff0e8dbaa62d035f"}, 957 | ] 958 | 959 | [package.extras] 960 | test = ["pytest"] 961 | 962 | [[package]] 963 | name = "sqlite-utils" 964 | version = "3.36" 965 | description = "CLI tool and Python library for manipulating SQLite databases" 966 | optional = false 967 | python-versions = ">=3.7" 968 | files = [ 969 | {file = "sqlite-utils-3.36.tar.gz", hash = "sha256:dcc311394fe86dc16f65037b0075e238efcfd2e12e65d53ed196954502996f3c"}, 970 | {file = "sqlite_utils-3.36-py3-none-any.whl", hash = "sha256:b71e829755c2efbdcd6931a31968dee4e8bd71b3c14f0fe648b22377027c5bec"}, 971 | ] 972 | 973 | [package.dependencies] 974 | click = "*" 975 | click-default-group = ">=1.2.3" 976 | pluggy = "*" 977 | python-dateutil = "*" 978 | sqlite-fts4 = "*" 979 | tabulate = "*" 980 | 981 | [package.extras] 982 | docs = ["beanbag-docutils (>=2.0)", "codespell", "furo", "pygments-csv-lexer", "sphinx-autobuild", "sphinx-copybutton"] 983 | flake8 = ["flake8"] 984 | mypy = ["data-science-types", "mypy", "types-click", "types-pluggy", "types-python-dateutil", "types-tabulate"] 985 | test = ["black", "cogapp", "hypothesis", "pytest"] 986 | tui = ["trogon"] 987 | 988 | [[package]] 989 | name = "stack-data" 990 | version = "0.6.3" 991 | description = "Extract data from python stack frames and tracebacks for informative displays" 992 | optional = false 993 | python-versions = "*" 994 | files = [ 995 | {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, 996 | {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, 997 | ] 998 | 999 | [package.dependencies] 1000 | asttokens = ">=2.1.0" 1001 | executing = ">=1.2.0" 1002 | pure-eval = "*" 1003 | 1004 | [package.extras] 1005 | tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] 1006 | 1007 | [[package]] 1008 | name = "tabulate" 1009 | version = "0.9.0" 1010 | description = "Pretty-print tabular data" 1011 | optional = false 1012 | python-versions = ">=3.7" 1013 | files = [ 1014 | {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, 1015 | {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, 1016 | ] 1017 | 1018 | [package.extras] 1019 | widechars = ["wcwidth"] 1020 | 1021 | [[package]] 1022 | name = "traitlets" 1023 | version = "5.14.1" 1024 | description = "Traitlets Python configuration system" 1025 | optional = false 1026 | python-versions = ">=3.8" 1027 | files = [ 1028 | {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, 1029 | {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, 1030 | ] 1031 | 1032 | [package.extras] 1033 | docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] 1034 | test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] 1035 | 1036 | [[package]] 1037 | name = "typing-extensions" 1038 | version = "4.9.0" 1039 | description = "Backported and Experimental Type Hints for Python 3.8+" 1040 | optional = false 1041 | python-versions = ">=3.8" 1042 | files = [ 1043 | {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, 1044 | {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, 1045 | ] 1046 | 1047 | [[package]] 1048 | name = "uvicorn" 1049 | version = "0.27.1" 1050 | description = "The lightning-fast ASGI server." 1051 | optional = false 1052 | python-versions = ">=3.8" 1053 | files = [ 1054 | {file = "uvicorn-0.27.1-py3-none-any.whl", hash = "sha256:5c89da2f3895767472a35556e539fd59f7edbe9b1e9c0e1c99eebeadc61838e4"}, 1055 | {file = "uvicorn-0.27.1.tar.gz", hash = "sha256:3d9a267296243532db80c83a959a3400502165ade2c1338dea4e67915fd4745a"}, 1056 | ] 1057 | 1058 | [package.dependencies] 1059 | click = ">=7.0" 1060 | h11 = ">=0.8" 1061 | typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} 1062 | 1063 | [package.extras] 1064 | standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] 1065 | 1066 | [[package]] 1067 | name = "wcwidth" 1068 | version = "0.2.13" 1069 | description = "Measures the displayed width of unicode strings in a terminal" 1070 | optional = false 1071 | python-versions = "*" 1072 | files = [ 1073 | {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, 1074 | {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, 1075 | ] 1076 | 1077 | [metadata] 1078 | lock-version = "2.0" 1079 | python-versions = "^3.10" 1080 | content-hash = "0f0f04852b551682964e19a72877425056fa58e830b8aa2c65651c5c17cb44bf" 1081 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "baltimore-trees" 3 | version = "0.1.0" 4 | description = "A demo project for NICAR24 in Baltimore" 5 | authors = ["Chris Amico "] 6 | readme = "README.md" 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.10" 10 | datasette = "^0.64.6" 11 | sqlite-utils = "^3.36" 12 | geojson-to-sqlite = "^1.1.1" 13 | datasette-geojson-map = "^0.4.0" 14 | sqlite-colorbrewer = "^0.2" 15 | httpx = "^0.26.0" 16 | 17 | 18 | [tool.poetry.group.dev.dependencies] 19 | ipython = "^8.21.0" 20 | 21 | [build-system] 22 | requires = ["poetry-core"] 23 | build-backend = "poetry.core.masonry.api" 24 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | } 15 | 16 | a { 17 | font-weight: 500; 18 | color: #646cff; 19 | text-decoration: inherit; 20 | } 21 | 22 | a:hover { 23 | color: #535bf2; 24 | } 25 | 26 | body { 27 | margin: 0; 28 | display: flex; 29 | place-items: center; 30 | min-width: 320px; 31 | min-height: 100vh; 32 | } 33 | 34 | h1 { 35 | font-size: 3.2em; 36 | line-height: 1.1; 37 | } 38 | 39 | @media (prefers-color-scheme: light) { 40 | :root { 41 | color: #213547; 42 | background-color: #ffffff; 43 | } 44 | a:hover { 45 | color: #747bff; 46 | } 47 | button { 48 | background-color: #f9f9f9; 49 | } 50 | } 51 | 52 | body, 53 | html { 54 | position: relative; 55 | width: 100%; 56 | } 57 | 58 | #map { 59 | position: absolute; 60 | top: 0; 61 | bottom: 0; 62 | width: 100%; 63 | } 64 | --------------------------------------------------------------------------------