diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index e565f8af..67a04701 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -19,9 +19,9 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: 3.12 - name: Install Linters run: | - pip install black isort -c stormpiper/requirements_test.txt + pip install -r stormpiper/requirements_test.txt - name: Run Linters run: make lint diff --git a/Dockerfile b/Dockerfile index 9c819dcd..077d302f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,12 @@ -FROM redis:6.2.12-alpine3.18 as redis +FROM redis:6.2.17-alpine3.21 AS redis COPY ./stormpiper/redis.conf /redis.conf CMD ["redis-server", "/redis.conf"] -FROM postgis/postgis:14-3.3 as postgis +FROM postgis/postgis:14-3.5 AS postgis -FROM node:18.16.0-bullseye as build-frontend +FROM node:24.10-trixie AS build-frontend WORKDIR /app COPY ./stormpiper/stormpiper/spa/package*.json /app/ RUN npm install @@ -14,7 +14,7 @@ COPY ./stormpiper/stormpiper/spa /app/ RUN npm run build -FROM python:3.11.4-slim-bullseye as core-runtime +FROM python:3.11.14-slim-trixie AS core-runtime RUN apt-get update -y \ && rm -rf /var/lib/apt/lists/* WORKDIR /stormpiper @@ -22,7 +22,7 @@ ENV PYTHONPATH=/stormpiper ENV PATH=/opt/venv/bin:$PATH -FROM core-runtime as base-app +FROM core-runtime AS base-app COPY ./stormpiper/scripts / COPY ./stormpiper/alembic.ini /stormpiper/alembic.ini COPY ./stormpiper/prestart.sh /stormpiper/prestart.sh @@ -32,13 +32,14 @@ COPY --from=build-frontend /app/build /stormpiper/stormpiper/spa/build RUN chmod +x /start.sh /start-pod.sh /start-reload.sh /start-test-container.sh -FROM python:3.11.4-bullseye as base-builder +FROM python:3.11.14-trixie AS base-builder RUN apt-get update -y \ && rm -rf /var/lib/apt/lists/* \ && apt-get clean \ && pip install -U pip wheel setuptools -FROM base-builder as builder + +FROM base-builder AS builder COPY ./stormpiper/requirements.txt /requirements.txt RUN mkdir /core \ && pip wheel \ @@ -47,10 +48,10 @@ RUN mkdir /core \ RUN mkdir /gunicorn \ && pip wheel \ --wheel-dir=/gunicorn \ - gunicorn==20.1.0 + gunicorn==23.0.0 -FROM python:3.11.4-slim-bullseye as core-env +FROM python:3.11.14-slim-trixie AS core-env RUN pip install -U pip wheel setuptools COPY --from=builder /core /core COPY ./stormpiper/requirements.txt /requirements.txt @@ -65,13 +66,13 @@ RUN pip install \ && rm -rf /core/* -FROM base-app as stormpiper-pod +FROM base-app AS stormpiper-pod COPY --from=core-env /opt/venv /opt/venv EXPOSE 80 CMD /start-pod.sh -FROM stormpiper-pod as stormpiper-test +FROM stormpiper-pod AS stormpiper-test COPY ./stormpiper/requirements_test.txt /requirements_test.txt COPY ./stormpiper/pytest.ini /stormpiper/pytest.ini COPY ./stormpiper/prestart-tests.sh /stormpiper/prestart-tests.sh @@ -81,7 +82,7 @@ COPY .coveragerc /stormpiper/.coveragerc CMD ["bash", "-c", "while true; do sleep 1; done"] -FROM core-runtime as bg_worker +FROM core-runtime AS bg_worker # Add a user with an explicit UID/GID and create necessary directories ENV IMG_USER=bg_worker RUN addgroup --gid 1000 ${IMG_USER} \ @@ -97,7 +98,7 @@ RUN chmod gu+x /run-worker.sh /run-beat.sh /stormpiper/prestart-worker.sh CMD ["/run-worker.sh"] -FROM core-env as server-env +FROM core-env AS server-env COPY --from=builder /gunicorn /gunicorn RUN pip install \ --no-index \ @@ -107,13 +108,13 @@ RUN pip install \ && rm -rf /gunicorn/* -FROM base-app as stormpiper +FROM base-app AS stormpiper COPY --from=server-env /opt/venv /opt/venv COPY ./stormpiper/gunicorn_conf.py /gunicorn_conf.py EXPOSE 80 -FROM base-builder as stormpiper-unpinned +FROM base-builder AS stormpiper-unpinned COPY ./stormpiper/requirements_unpinned.txt /requirements_unpinned.txt RUN pip install -r /requirements_unpinned.txt diff --git a/docker-compose.dev-environment-ci.yml b/docker-compose.dev-environment-ci.yml index d17fb518..19a25d4e 100644 --- a/docker-compose.dev-environment-ci.yml +++ b/docker-compose.dev-environment-ci.yml @@ -1,4 +1,3 @@ -version: '3.7' services: stormpiper-test: environment: diff --git a/docker-compose.dev-postgis.yml b/docker-compose.dev-postgis.yml index eee46299..85003f01 100644 --- a/docker-compose.dev-postgis.yml +++ b/docker-compose.dev-postgis.yml @@ -1,4 +1,3 @@ -version: '3.7' services: stormpiper-test: environment: @@ -35,9 +34,8 @@ services: max-size: 10m max-file: "3" ports: - - '5454:5432' + - "5454:5432" volumes: - postgres-data:/var/lib/postgresql/data volumes: postgres-data: - diff --git a/ipynb/EE_zonal_stats.ipynb b/ipynb/EE_zonal_stats.ipynb index 336b5b10..694e95d8 100644 --- a/ipynb/EE_zonal_stats.ipynb +++ b/ipynb/EE_zonal_stats.ipynb @@ -32,8 +32,10 @@ "import json\n", "import ee\n", "\n", - "service_account = 'tnc-data-v1@appspot.gserviceaccount.com'\n", - "credentials = ee.ServiceAccountCredentials(service_account, '/Users/christiannilsen/Documents/secrets/tncKey.json')## replace with local file or env \n", + "service_account = \"tnc-data-v1@appspot.gserviceaccount.com\"\n", + "credentials = ee.ServiceAccountCredentials(\n", + " service_account, \"/Users/christiannilsen/Documents/secrets/tncKey.json\"\n", + ") ## replace with local file or env\n", "ee.Initialize(credentials)" ] }, @@ -52,8 +54,12 @@ "metadata": {}, "outputs": [], "source": [ - "runoff = ee.Image('projects/ee-stormwaterheatmap/assets/production/Mean_Annual_Q_4_epochs')\n", - "concentrations = ee.Image('projects/ee-stormwaterheatmap/assets/production/coc_concentrations')" + "runoff = ee.Image(\n", + " \"projects/ee-stormwaterheatmap/assets/production/Mean_Annual_Q_4_epochs\"\n", + ")\n", + "concentrations = ee.Image(\n", + " \"projects/ee-stormwaterheatmap/assets/production/coc_concentrations\"\n", + ")" ] }, { @@ -94,7 +100,7 @@ "metadata": {}, "outputs": [], "source": [ - "print(json.dumps(q_dict.getInfo(),indent=4))" + "print(json.dumps(q_dict.getInfo(), indent=4))" ] }, { @@ -112,7 +118,7 @@ "metadata": {}, "outputs": [], "source": [ - "print(json.dumps(c_dict.getInfo(),indent=4))" + "print(json.dumps(c_dict.getInfo(), indent=4))" ] }, { @@ -130,7 +136,7 @@ "metadata": {}, "outputs": [], "source": [ - "#What bands are available from the runoff image?\n", + "# What bands are available from the runoff image?\n", "(runoff.bandNames().getInfo())" ] }, @@ -141,18 +147,20 @@ "metadata": {}, "outputs": [], "source": [ - "#Select the first epoch \n", + "# Select the first epoch\n", "Q = runoff.select(0)\n", "\n", - "#make a multiband image with unit pollutant loading\n", - "unit_loads = Q.multiply(concentrations).multiply(ee.Image(1e-9)) #units for this image are kg/m2/year\n", + "# make a multiband image with unit pollutant loading\n", + "unit_loads = Q.multiply(concentrations).multiply(\n", + " ee.Image(1e-9)\n", + ") # units for this image are kg/m2/year\n", "\n", - "#Use ee.PixelArea() to get the area for each pixel. This image will be in m2. Multiply it by the unit load image\n", + "# Use ee.PixelArea() to get the area for each pixel. This image will be in m2. Multiply it by the unit load image\n", "loads = unit_loads.multiply(ee.Image.pixelArea())\n", "\n", - "#Use the layer names to rename the bands to make it pretty\n", - "layer_names = c_dict.get('layer_names').getInfo().split(', ')\n", - "loads = loads.rename(layer_names) " + "# Use the layer names to rename the bands to make it pretty\n", + "layer_names = c_dict.get(\"layer_names\").getInfo().split(\", \")\n", + "loads = loads.rename(layer_names)" ] }, { @@ -162,7 +170,7 @@ "metadata": {}, "outputs": [], "source": [ - "#View layer names\n", + "# View layer names\n", "layer_names" ] }, @@ -181,8 +189,12 @@ "metadata": {}, "outputs": [], "source": [ - "#study area bounds \n", - "Tacoma = ee.FeatureCollection(\"projects/ee-tacoma-watershed/assets/vector/study_area\").union().geometry()" + "# study area bounds\n", + "Tacoma = (\n", + " ee.FeatureCollection(\"projects/ee-tacoma-watershed/assets/vector/study_area\")\n", + " .union()\n", + " .geometry()\n", + ")" ] }, { @@ -195,8 +207,13 @@ "from IPython.display import Image\n", "\n", "# Display a thumbnail of unit loads just to see.\n", - "Image(url = loads.select('Total Suspended Solids').clip(Tacoma).getThumbUrl({'min': 0, 'max': 100, 'dimensions': 512,\n", - " 'palette': ['#e4f1e1','#7c1d6f']}))" + "Image(\n", + " url=loads.select(\"Total Suspended Solids\")\n", + " .clip(Tacoma)\n", + " .getThumbUrl(\n", + " {\"min\": 0, \"max\": 100, \"dimensions\": 512, \"palette\": [\"#e4f1e1\", \"#7c1d6f\"]}\n", + " )\n", + ")" ] }, { @@ -214,11 +231,15 @@ "metadata": {}, "outputs": [], "source": [ - "#pull in some vectors \n", - "subwatersheds = ee.FeatureCollection(\"projects/ee-tacoma-watershed/assets/vector/Tacoma_SWPolys_swSubbasin\")\n", + "# pull in some vectors\n", + "subwatersheds = ee.FeatureCollection(\n", + " \"projects/ee-tacoma-watershed/assets/vector/Tacoma_SWPolys_swSubbasin\"\n", + ")\n", "\n", - "#calculate load per subwatershed \n", - "load_stats = loads.reduceRegions(collection=subwatersheds, reducer=ee.Reducer.sum(), scale=5) #sum of values for each feature. For mean values, use ee.Reducer.mean()" + "# calculate load per subwatershed\n", + "load_stats = loads.reduceRegions(\n", + " collection=subwatersheds, reducer=ee.Reducer.sum(), scale=5\n", + ") # sum of values for each feature. For mean values, use ee.Reducer.mean()" ] }, { @@ -238,15 +259,15 @@ "source": [ "import pandas as pd\n", "\n", - "#pull from server \n", - "load_stats_dict = load_stats.getInfo() \n", + "# pull from server\n", + "load_stats_dict = load_stats.getInfo()\n", "\n", - "#get data as a pandas dataframe \n", + "# get data as a pandas dataframe\n", "load_stats_df = pd.DataFrame()\n", - "for feat in load_stats_dict['features']:\n", - " df = pd.DataFrame([feat['properties']],columns=feat['properties'].keys())\n", - " load_stats_df = pd.concat([load_stats_df, df], sort=True, axis=0)\n", - " \n", + "for feat in load_stats_dict[\"features\"]:\n", + " df = pd.DataFrame([feat[\"properties\"]], columns=feat[\"properties\"].keys())\n", + " load_stats_df = pd.concat([load_stats_df, df], sort=True, axis=0)\n", + "\n", "load_stats_df" ] }, @@ -265,9 +286,10 @@ "metadata": {}, "outputs": [], "source": [ - "#as a geopandas df \n", + "# as a geopandas df\n", "import geopandas as gpd\n", - "gdf = gpd.GeoDataFrame.from_features(load_stats_dict.get('features'))\n", + "\n", + "gdf = gpd.GeoDataFrame.from_features(load_stats_dict.get(\"features\"))\n", "gdf" ] }, @@ -278,8 +300,8 @@ "metadata": {}, "outputs": [], "source": [ - "#Plot geodataframe\n", - "gdf.plot(column='Total Suspended Solids')" + "# Plot geodataframe\n", + "gdf.plot(column=\"Total Suspended Solids\")" ] }, { diff --git a/ipynb/Earth_Engine_tiles.ipynb b/ipynb/Earth_Engine_tiles.ipynb index 43096ab5..57b9757a 100644 --- a/ipynb/Earth_Engine_tiles.ipynb +++ b/ipynb/Earth_Engine_tiles.ipynb @@ -48,8 +48,9 @@ "source": [ "import json\n", "import ee\n", - "service_account = 'tnc-data-v1@appspot.gserviceaccount.com'\n", - "credentials = ee.ServiceAccountCredentials(service_account, '../.auth/tncKey.json')\n", + "\n", + "service_account = \"tnc-data-v1@appspot.gserviceaccount.com\"\n", + "credentials = ee.ServiceAccountCredentials(service_account, \"../.auth/tncKey.json\")\n", "ee.Initialize(credentials)" ] }, @@ -68,9 +69,9 @@ "metadata": {}, "outputs": [], "source": [ - "mt_rainer = ee.Geometry.Point([-121.756163642,46.85166326])\n", + "mt_rainer = ee.Geometry.Point([-121.756163642, 46.85166326])\n", "img = ee.Image(\"USGS/NED\")\n", - "elevation_meters = (img.reduceRegion(ee.Reducer.first(),mt_rainer))\n", + "elevation_meters = img.reduceRegion(ee.Reducer.first(), mt_rainer)\n", "print(elevation_meters.getInfo())" ] }, @@ -87,8 +88,7 @@ "metadata": {}, "outputs": [], "source": [ - "project_folder = \"projects/ee-tacoma-watershed/assets/Tacoma_watershed_assets/\"\n", - "\n" + "project_folder = \"projects/ee-tacoma-watershed/assets/Tacoma_watershed_assets/\"" ] }, { @@ -98,7 +98,9 @@ "outputs": [], "source": [ "##get info from raster dictionary\n", - "f = open(\"raster_dict.json\",) \n", + "f = open(\n", + " \"raster_dict.json\",\n", + ")\n", "layers = json.load(f)" ] }, @@ -109,7 +111,7 @@ "outputs": [], "source": [ "layer_names = layers.keys()\n", - "layer_names\n" + "layer_names" ] }, { @@ -158,13 +160,15 @@ "outputs": [], "source": [ "import pandas as pd\n", - "Tacoma_center = pd.DataFrame({\"lat\":47.25632945593931,\"lon\":-122.435107421875},index=[0])\n", - "import plotly \n", + "\n", + "Tacoma_center = pd.DataFrame(\n", + " {\"lat\": 47.25632945593931, \"lon\": -122.435107421875}, index=[0]\n", + ")\n", "import plotly.express as px\n", "\n", "fig = px.scatter_mapbox(Tacoma_center, lat=\"lat\", lon=\"lon\", zoom=8, height=300)\n", "\n", - " \n", + "\n", "# fig.update_layout(\n", "# mapbox_style=\"open-street-map\",\n", "# mapbox_layers=[\n", @@ -200,7 +204,7 @@ "metadata": {}, "outputs": [], "source": [ - "ee.data.listAssets({'parent': 'projects/ee-tacoma-watershed/assets/raster/'})" + "ee.data.listAssets({\"parent\": \"projects/ee-tacoma-watershed/assets/raster/\"})" ] }, { @@ -216,24 +220,24 @@ "metadata": {}, "outputs": [], "source": [ - "subwatersheds = ee.FeatureCollection(\"projects/ee-tacoma-watershed/assets/vector/Tacoma_SWPolys_swSubbasin\")\n", + "subwatersheds = ee.FeatureCollection(\n", + " \"projects/ee-tacoma-watershed/assets/vector/Tacoma_SWPolys_swSubbasin\"\n", + ")\n", "\n", - "map_id_dict = (subwatersheds.getMapId())\n", - "vectors=map_id_dict['tile_fetcher'].url_format\n", + "map_id_dict = subwatersheds.getMapId()\n", + "vectors = map_id_dict[\"tile_fetcher\"].url_format\n", "\n", "fig.update_layout(\n", - " \n", " mapbox_layers=[\n", " {\n", " \"sourcetype\": \"raster\",\n", " \"sourceattribution\": \"City of Tacoma\",\n", - " \"source\": [\n", - " vectors\n", - " ]\n", + " \"source\": [vectors],\n", " }\n", - " ])\n", + " ]\n", + ")\n", "\n", - "fig.show()\n" + "fig.show()" ] }, { @@ -274,7 +278,7 @@ "source": [ "TSS = ee.Image(\"projects/ee-tacoma-watershed/assets/raster/tnc_tss_ug_L\")\n", "Q = ee.Image(\"projects/ee-tacoma-watershed/assets/raster/tnc_runoff_mm\")\n", - "basin = subwatersheds.first()\n" + "basin = subwatersheds.first()" ] }, { @@ -283,8 +287,7 @@ "metadata": {}, "outputs": [], "source": [ - "\n", - "basin_geojson =basin.getInfo()\n", + "basin_geojson = basin.getInfo()\n", "\n", "basin_geojson" ] @@ -296,9 +299,7 @@ "outputs": [], "source": [ "tss_concentration = TSS.reduceRegion(\n", - "reducer=ee.Reducer.mean(),\n", - "geometry = basin.geometry(), \n", - "scale = 10\n", + " reducer=ee.Reducer.mean(), geometry=basin.geometry(), scale=10\n", ")\n", "\n", "print(tss_concentration.getInfo())" @@ -318,9 +319,7 @@ "outputs": [], "source": [ "avg_runoff = Q.reduceRegion(\n", - "reducer=ee.Reducer.mean(),\n", - "geometry = basin.geometry(), \n", - "scale = 10\n", + " reducer=ee.Reducer.mean(), geometry=basin.geometry(), scale=10\n", ")\n", "\n", "print(avg_runoff.getInfo())\n", @@ -333,14 +332,13 @@ "metadata": {}, "outputs": [], "source": [ - "#multiply by area to get volume \n", + "# multiply by area to get volume\n", "\n", - "#annual_volume = avg_runoff.Multiply(basin.area())\n", + "# annual_volume = avg_runoff.Multiply(basin.area())\n", "area = basin.geometry().area().getInfo()\n", - "annual_mm_val = avg_runoff.getInfo().get('mean_annual_runoff_mm')\n", - "runoff_volume = (annual_mm_val)*((area)) #mm/yr * m2 = L/yr\n", - "print(runoff_volume, 'liters')\n", - "\n" + "annual_mm_val = avg_runoff.getInfo().get(\"mean_annual_runoff_mm\")\n", + "runoff_volume = (annual_mm_val) * (area) # mm/yr * m2 = L/yr\n", + "print(runoff_volume, \"liters\")" ] } ], diff --git a/ipynb/attr_check/attrs.ipynb b/ipynb/attr_check/attrs.ipynb index c9ae810e..c7957c90 100644 --- a/ipynb/attr_check/attrs.ipynb +++ b/ipynb/attr_check/attrs.ipynb @@ -34,9 +34,12 @@ "outputs": [], "source": [ "TOKEN = get_token()\n", - "req = requests.get(\"http://localhost:8080/api/rest/tmnt_facility\", headers={'Authorization': f\"Bearer {TOKEN}\"})\n", + "req = requests.get(\n", + " \"http://localhost:8080/api/rest/tmnt_facility\",\n", + " headers={\"Authorization\": f\"Bearer {TOKEN}\"},\n", + ")\n", "df = pandas.read_json(req.text)\n", - "df.to_csv(\"facility_default_attributes.csv\")\n" + "df.to_csv(\"facility_default_attributes.csv\")" ] }, { diff --git a/ipynb/bigquery_results.ipynb b/ipynb/bigquery_results.ipynb index cb1a8121..3f412ef1 100644 --- a/ipynb/bigquery_results.ipynb +++ b/ipynb/bigquery_results.ipynb @@ -120,7 +120,7 @@ "outputs": [], "source": [ "## Install client libraries if needed\n", - "#!pip install --upgrade pandas-gbq " + "#!pip install --upgrade pandas-gbq" ] }, { @@ -129,11 +129,12 @@ "metadata": {}, "outputs": [], "source": [ - "#import library\n", + "# import library\n", "import pandas_gbq\n", - "#import tqdm - optional if you want to see a progress bar\n", - "#set project id\n", - "project_id = 'tacoma-app'\n" + "\n", + "# import tqdm - optional if you want to see a progress bar\n", + "# set project id\n", + "project_id = \"tacoma-app\"" ] }, { @@ -149,16 +150,16 @@ "metadata": {}, "outputs": [], "source": [ - "table = \"`tnc-data-v1.hydrology.gfdl`\" #table where results are \n", - "hru = \"hru000\" #hru code \n", - "year_0 = 1970 #beginning year \n", - "year_n = 1999 #ending year \n", - "comps = '(\"suro\", \"ifwo\")' #components \n", - " #- available options are: \n", - " #suro (surface runoff), \n", - " #ifwo (interflow), and \n", - " #agwo (groundwater outflow) - generally not used for stormwater results\n", - "grid = \"'ID15_V5'\" #WRF grid id " + "table = \"`tnc-data-v1.hydrology.gfdl`\" # table where results are\n", + "hru = \"hru000\" # hru code\n", + "year_0 = 1970 # beginning year\n", + "year_n = 1999 # ending year\n", + "comps = '(\"suro\", \"ifwo\")' # components\n", + "# - available options are:\n", + "# suro (surface runoff),\n", + "# ifwo (interflow), and\n", + "# agwo (groundwater outflow) - generally not used for stormwater results\n", + "grid = \"'ID15_V5'\" # WRF grid id" ] }, { @@ -182,7 +183,7 @@ " Datetime\n", "ORDER BY\n", " Datetime\n", - "\"\"\".format(hru,table,year_0,year_n,comps,grid)" + "\"\"\".format(hru, table, year_0, year_n, comps, grid)" ] }, { @@ -198,7 +199,7 @@ "metadata": {}, "outputs": [], "source": [ - "pandas_gbq.read_gbq(sql,project_id=project_id)\n" + "pandas_gbq.read_gbq(sql, project_id=project_id)" ] }, { diff --git a/ipynb/decision_support_example.ipynb b/ipynb/decision_support_example.ipynb index a03fbd2f..d9c1f87d 100644 --- a/ipynb/decision_support_example.ipynb +++ b/ipynb/decision_support_example.ipynb @@ -26,7 +26,7 @@ "metadata": {}, "outputs": [], "source": [ - "#Install pymcdm if not already installed\n", + "# Install pymcdm if not already installed\n", "#!pip install pymcdm" ] }, @@ -38,10 +38,8 @@ "source": [ "# Load Required Libraries\n", "import numpy as np\n", - "import urllib\n", "import pandas as pd\n", - "import geopandas as gp\n", - "from pymcdm.methods import promethee" + "import geopandas as gp" ] }, { @@ -57,8 +55,8 @@ "metadata": {}, "outputs": [], "source": [ - "#set the crs to psuedo mercator for accurate area calculations\n", - "crs = {'init': 'epsg:3857'}" + "# set the crs to psuedo mercator for accurate area calculations\n", + "crs = {\"init\": \"epsg:3857\"}" ] }, { @@ -74,10 +72,10 @@ "metadata": {}, "outputs": [], "source": [ - "#download the Equity Index geojson from the argis rest api \n", - "url = 'https://gis.cityoftacoma.org/arcgis/rest/services/General/Equity2020/MapServer/1/query?where=1%3D1&outFields=*&outSR=3857&f=geojson&returnGeometry=true'\n", - "df = gp.read_file(url,driver=\"GeoJSON\")\n", - "df.head() \n" + "# download the Equity Index geojson from the argis rest api\n", + "url = \"https://gis.cityoftacoma.org/arcgis/rest/services/General/Equity2020/MapServer/1/query?where=1%3D1&outFields=*&outSR=3857&f=geojson&returnGeometry=true\"\n", + "df = gp.read_file(url, driver=\"GeoJSON\")\n", + "df.head()" ] }, { @@ -93,17 +91,18 @@ "metadata": {}, "outputs": [], "source": [ - "#select columns pertinent to the major categories \n", - "equity_categories = ['Access',\n", - " 'Economic_Value',\n", - " 'Environmental_Value', \n", - " 'Livability_Value',\n", - " 'Opportunity_Value']\n", - " \n", - "equity_index = df.loc[:,equity_categories+['geometry']] \n", + "# select columns pertinent to the major categories\n", + "equity_categories = [\n", + " \"Access\",\n", + " \"Economic_Value\",\n", + " \"Environmental_Value\",\n", + " \"Livability_Value\",\n", + " \"Opportunity_Value\",\n", + "]\n", "\n", - "equity_index.head()\n", - "\n" + "equity_index = df.loc[:, equity_categories + [\"geometry\"]]\n", + "\n", + "equity_index.head()" ] }, { @@ -128,8 +127,8 @@ "metadata": {}, "outputs": [], "source": [ - "#Calculate the area of each polygon in square meters\n", - "equity_index['equity_index_area']=equity_index.area" + "# Calculate the area of each polygon in square meters\n", + "equity_index[\"equity_index_area\"] = equity_index.area" ] }, { @@ -145,14 +144,13 @@ "metadata": {}, "outputs": [], "source": [ - "#get subbsasins \n", - "url = 'https://gis.cityoftacoma.org/arcgis/rest/services/ES/SurfacewaterNetwork/MapServer/41/query?where=1%3D1&outFields=*&outSR=3857&f=geojson'\n", + "# get subbsasins\n", + "url = \"https://gis.cityoftacoma.org/arcgis/rest/services/ES/SurfacewaterNetwork/MapServer/41/query?where=1%3D1&outFields=*&outSR=3857&f=geojson\"\n", "subbasins = gp.read_file(url)\n", "\n", - "#add a couple of hypothetical pollutant columns using random numbers\n", - "subbasins['TSS_concentration'] = np.random.rand(subbasins.shape[0])\n", - "subbasins['TN_concentration'] = np.random.rand(subbasins.shape[0])\n", - "\n" + "# add a couple of hypothetical pollutant columns using random numbers\n", + "subbasins[\"TSS_concentration\"] = np.random.rand(subbasins.shape[0])\n", + "subbasins[\"TN_concentration\"] = np.random.rand(subbasins.shape[0])" ] }, { @@ -168,16 +166,18 @@ "metadata": {}, "outputs": [], "source": [ - "shp_tmp = subbasins.overlay(equity_index, how='intersection')\n", + "shp_tmp = subbasins.overlay(equity_index, how=\"intersection\")\n", "\n", - "#calculate area \n", - "shp_tmp['intersected_area'] = shp_tmp.area\n", - "shp_tmp['ratio'] = shp_tmp['intersected_area'] / shp_tmp['equity_index_area']\n", + "# calculate area\n", + "shp_tmp[\"intersected_area\"] = shp_tmp.area\n", + "shp_tmp[\"ratio\"] = shp_tmp[\"intersected_area\"] / shp_tmp[\"equity_index_area\"]\n", "\n", - "shp_tmp[equity_categories]=shp_tmp[equity_categories].multiply(shp_tmp[\"ratio\"], axis=\"index\")\n", + "shp_tmp[equity_categories] = shp_tmp[equity_categories].multiply(\n", + " shp_tmp[\"ratio\"], axis=\"index\"\n", + ")\n", "\n", "# sum over census blocks\n", - "df_weighted_avg = shp_tmp.groupby(['SUBBASIN'])[equity_categories].sum() \n" + "df_weighted_avg = shp_tmp.groupby([\"SUBBASIN\"])[equity_categories].sum()" ] }, { @@ -193,7 +193,7 @@ "metadata": {}, "outputs": [], "source": [ - "preference_table = subbasins.merge(df_weighted_avg, on='SUBBASIN')" + "preference_table = subbasins.merge(df_weighted_avg, on=\"SUBBASIN\")" ] }, { @@ -218,7 +218,15 @@ "metadata": {}, "outputs": [], "source": [ - "criteria_cols = ['Access','Economic_Value','Environmental_Value', 'Livability_Value','Opportunity_Value','TSS_concentration','TN_concentration']" + "criteria_cols = [\n", + " \"Access\",\n", + " \"Economic_Value\",\n", + " \"Environmental_Value\",\n", + " \"Livability_Value\",\n", + " \"Opportunity_Value\",\n", + " \"TSS_concentration\",\n", + " \"TN_concentration\",\n", + "]" ] }, { @@ -228,7 +236,7 @@ "outputs": [], "source": [ "pref_matrix = preference_table[criteria_cols]\n", - "subbasins_df = pd.DataFrame(preference_table['SUBBASIN'].drop(columns='geometry'))\n", + "subbasins_df = pd.DataFrame(preference_table[\"SUBBASIN\"].drop(columns=\"geometry\"))\n", "\n", "subbasins_df.head()" ] @@ -249,8 +257,8 @@ "outputs": [], "source": [ "# Get a weight for each criterion between 0 and 5\n", - "n = pref_matrix.shape[1] # number of criteria\n", - "weights = np.random.randint(0,5,n) # random weights" + "n = pref_matrix.shape[1] # number of criteria\n", + "weights = np.random.randint(0, 5, n) # random weights" ] }, { @@ -279,19 +287,18 @@ "metadata": {}, "outputs": [], "source": [ - "#User selects a scenario - either retrofit or restoration\n", - "retrofit = 1 # 1 for retrofit, 0 for restoration. User selected \n", + "# User selects a scenario - either retrofit or restoration\n", + "retrofit = 1 # 1 for retrofit, 0 for restoration. User selected\n", "\n", - "#number of pollutants\n", + "# number of pollutants\n", "n_pollutants = 2\n", "\n", "if retrofit == 1:\n", - " #retrofit\n", + " # retrofit\n", " pollutant_types = np.ones(n_pollutants)\n", "else:\n", - " #restoration\n", - " pollutant_types = np.ones(n_pollutants)*-1\n", - "\n" + " # restoration\n", + " pollutant_types = np.ones(n_pollutants) * -1" ] }, { @@ -308,9 +315,9 @@ "outputs": [], "source": [ "# Set the preference direction to negative for all equity criteria\n", - "equity_types = np.ones(len(equity_categories))*-1\n", + "equity_types = np.ones(len(equity_categories)) * -1\n", "# join the two types for input into the promethee function\n", - "types = np.concatenate((equity_types,pollutant_types))" + "types = np.concatenate((equity_types, pollutant_types))" ] }, { @@ -323,12 +330,12 @@ "# promethee has the ability to select different preference functions. For simplicity, we will use the usual linear preference function,\n", "# meaning that there are no thresholds for indifference or preference.\n", "\n", - "p_function = 'usual'\n", + "p_function = \"usual\"\n", "body = PROMETHEE_II(p_function)\n", - "matrix = pref_matrix.to_numpy()\n", + "matrix = pref_matrix.to_numpy()\n", "\n", "scores = [round(preference, 2) for preference in body(matrix, weights, types)]\n", - "scores = np.asarray(scores).reshape(-1, 1) # convert to numpy array\n" + "scores = np.asarray(scores).reshape(-1, 1) # convert to numpy array" ] }, { @@ -341,10 +348,7 @@ "from sklearn.preprocessing import MinMaxScaler\n", "\n", "mms = MinMaxScaler()\n", - "scaled_scores = mms.fit_transform(scores)*100\n", - "\n", - "\n", - "\n" + "scaled_scores = mms.fit_transform(scores) * 100" ] }, { @@ -353,7 +357,9 @@ "metadata": {}, "outputs": [], "source": [ - "score_df = pd.DataFrame({'SUBBASIN':subbasins_df['SUBBASIN'],'score':scaled_scores[:,0]}).sort_values(by='score',ascending=False)\n", + "score_df = pd.DataFrame(\n", + " {\"SUBBASIN\": subbasins_df[\"SUBBASIN\"], \"score\": scaled_scores[:, 0]}\n", + ").sort_values(by=\"score\", ascending=False)\n", "score_df.head()" ] }, @@ -370,8 +376,8 @@ "metadata": {}, "outputs": [], "source": [ - "#merge the scores with the subbasin polygons\n", - "subbasins_results = subbasins.merge(score_df, on='SUBBASIN').to_crs(\"EPSG:4326\")" + "# merge the scores with the subbasin polygons\n", + "subbasins_results = subbasins.merge(score_df, on=\"SUBBASIN\").to_crs(\"EPSG:4326\")" ] }, { @@ -380,42 +386,32 @@ "metadata": {}, "outputs": [], "source": [ - "import pydeck \n", - "import geopandas as gpd\n", + "import pydeck\n", "\n", "INITIAL_VIEW_STATE = pydeck.ViewState(\n", - " latitude=47.2529,\n", - " longitude=-122.4443,\n", - " zoom=10,\n", - " max_zoom=16,\n", - " pitch=60,\n", - " bearing=45\n", + " latitude=47.2529, longitude=-122.4443, zoom=10, max_zoom=16, pitch=60, bearing=45\n", ")\n", "\n", "geojson = pydeck.Layer(\n", - " 'GeoJsonLayer',\n", + " \"GeoJsonLayer\",\n", " data=subbasins_results,\n", " opacity=1,\n", " stroked=True,\n", " filled=True,\n", " extruded=True,\n", " wireframe=False,\n", - " get_elevation='score*2.5',\n", + " get_elevation=\"score*2.5\",\n", " elevation_scale=10,\n", - " get_fill_color='[200, score*2.5, 200]',\n", - " lineWidthScale = 200,\n", - " lineWidthMinPixels= 6,\n", - " get_line_color=[0,0,0],\n", - " pickable=True\n", + " get_fill_color=\"[200, score*2.5, 200]\",\n", + " lineWidthScale=200,\n", + " lineWidthMinPixels=6,\n", + " get_line_color=[0, 0, 0],\n", + " pickable=True,\n", ")\n", "\n", - "r = pydeck.Deck(\n", - " layers=[geojson],\n", - " initial_view_state=INITIAL_VIEW_STATE)\n", - "\n", - "r.to_html()\n", + "r = pydeck.Deck(layers=[geojson], initial_view_state=INITIAL_VIEW_STATE)\n", "\n", - "\n" + "r.to_html()" ] } ], diff --git a/ipynb/hspLite_Tacoma_Test.ipynb b/ipynb/hspLite_Tacoma_Test.ipynb index 26055e1f..2b076ee0 100644 --- a/ipynb/hspLite_Tacoma_Test.ipynb +++ b/ipynb/hspLite_Tacoma_Test.ipynb @@ -31,7 +31,8 @@ "from pandas import Series, date_range\n", "from pandas.tseries.offsets import Minute\n", "import numpy\n", - "from numpy import zeros, full, tile, float64\n", + "from numpy import tile, float64\n", + "\n", "# from numba import types\n", "# from numba.typed import Dict\n", "import matplotlib.pyplot as plt\n", @@ -112,16 +113,42 @@ "metadata": {}, "outputs": [], "source": [ - "ui_params_per = ['AGWETP', 'AGWS', 'BASETP', 'CEPS', 'GWVS', 'IFWS', 'INFEXP', 'INFILD', 'LSUR', 'LZS', 'SLSUR', 'SURS', 'UZS']\n", - "ui_params_imp = ['LSUR', 'RETS', 'SLSUR', 'SURS']\n", - " \n", - "ts_params = ['PETINP','PREC']\n", - "\n", - "ui_ts_params_per = ['AGWRC', 'CEPSC', 'DEEPFR', 'INFILT', 'INTFW', 'IRC', 'KVARY', 'LZETP', 'LZSN', 'NSUR', 'UZSN']\n", - "ui_ts_params_imp = ['NSUR', 'RETSC']\n", - "\n", - "opt_params_per = ['AGWLI', 'IFWLI', 'LZLI', 'SURLI', 'UZLI']\n", - "opt_params_imp = ['SURLI']" + "ui_params_per = [\n", + " \"AGWETP\",\n", + " \"AGWS\",\n", + " \"BASETP\",\n", + " \"CEPS\",\n", + " \"GWVS\",\n", + " \"IFWS\",\n", + " \"INFEXP\",\n", + " \"INFILD\",\n", + " \"LSUR\",\n", + " \"LZS\",\n", + " \"SLSUR\",\n", + " \"SURS\",\n", + " \"UZS\",\n", + "]\n", + "ui_params_imp = [\"LSUR\", \"RETS\", \"SLSUR\", \"SURS\"]\n", + "\n", + "ts_params = [\"PETINP\", \"PREC\"]\n", + "\n", + "ui_ts_params_per = [\n", + " \"AGWRC\",\n", + " \"CEPSC\",\n", + " \"DEEPFR\",\n", + " \"INFILT\",\n", + " \"INTFW\",\n", + " \"IRC\",\n", + " \"KVARY\",\n", + " \"LZETP\",\n", + " \"LZSN\",\n", + " \"NSUR\",\n", + " \"UZSN\",\n", + "]\n", + "ui_ts_params_imp = [\"NSUR\", \"RETSC\"]\n", + "\n", + "opt_params_per = [\"AGWLI\", \"IFWLI\", \"LZLI\", \"SURLI\", \"UZLI\"]\n", + "opt_params_imp = [\"SURLI\"]" ] }, { @@ -138,72 +165,72 @@ "outputs": [], "source": [ "def _pwater_(ui, ts):\n", - " ''' Simulate the water budget for a pervious land segment comprised of 1 acre of a single HRU.\n", - " \n", + " \"\"\"Simulate the water budget for a pervious land segment comprised of 1 acre of a single HRU.\n", + "\n", " Parameters\n", " ----------\n", - " ui: dictionary, contains constants including: 'errlen', 'delt' (timestep (mins)), 'steps' (number of timesteps), \n", + " ui: dictionary, contains constants including: 'errlen', 'delt' (timestep (mins)), 'steps' (number of timesteps),\n", " and select HRU parameters (see above)\n", - " \n", + "\n", " ts: dictionary, contains timeseries variables (1-D arrays) including: 'DAYFG', 'HRFG',\n", " and select HRU parameters (see above)\n", "\n", " Returns\n", " -------\n", " SURO: 1-D numpy array, contains surface runoff timeseries (in in-acre/timestep)\n", - "'''\n", - " errors = zeros(int(ui['errlen'])).astype(int64)\n", + " \"\"\"\n", + " errors = zeros(int(ui[\"errlen\"])).astype(int64)\n", "\n", - " if 'HWTFG' in ui:\n", - " if int(ui['HWTFG']):\n", + " if \"HWTFG\" in ui:\n", + " if int(ui[\"HWTFG\"]):\n", " errors[9] += 1\n", " return\n", "\n", - " delt60 = ui['delt'] / 60.0 # simulation interval in hours\n", - " steps = int(ui['steps'])\n", - " DAYFG = ts['DAYFG'].astype(int64)\n", - " HRFG = ts['HRFG'].astype(int64)\n", + " delt60 = ui[\"delt\"] / 60.0 # simulation interval in hours\n", + " steps = int(ui[\"steps\"])\n", + " DAYFG = ts[\"DAYFG\"].astype(int64)\n", + " HRFG = ts[\"HRFG\"].astype(int64)\n", "\n", " # table of coordinates for functions used to evaluate upper zone behavior\n", - " uzra = array([0.0, 1.25, 1.50, 1.75, 2.00, 2.10, 2.20, 2.25, 2.5, 4.0])\n", - " intgrl = array([0.0, 1.29, 1.58, 1.92, 2.36, 2.81, 3.41, 3.8, 7.1, 3478.])\n", + " uzra = array([0.0, 1.25, 1.50, 1.75, 2.00, 2.10, 2.20, 2.25, 2.5, 4.0])\n", + " intgrl = array([0.0, 1.29, 1.58, 1.92, 2.36, 2.81, 3.41, 3.8, 7.1, 3478.0])\n", "\n", " # like MATLAB, much faster to preinitialize variables. Store in ts Dict\n", - " AGWET = zeros(steps)\n", - " AGWI = zeros(steps)\n", - " AGWO = zeros(steps)\n", - " AGWS = zeros(steps)\n", - " BASET = zeros(steps)\n", - " CEPE = zeros(steps)\n", - " CEPS = zeros(steps)\n", - " GWVS = zeros(steps)\n", - " IFWI = zeros(steps)\n", - " IFWO = zeros(steps)\n", - " IFWS = zeros(steps)\n", - " IGWI = zeros(steps)\n", - " INFIL = zeros(steps)\n", - " LZET = zeros(steps)\n", - " LZI = zeros(steps)\n", - " LZS = zeros(steps)\n", - " PERC = zeros(steps)\n", - " PERO = zeros(steps)\n", - " PERS = zeros(steps)\n", - " PET = zeros(steps)\n", + " AGWET = zeros(steps)\n", + " AGWI = zeros(steps)\n", + " AGWO = zeros(steps)\n", + " AGWS = zeros(steps)\n", + " BASET = zeros(steps)\n", + " CEPE = zeros(steps)\n", + " CEPS = zeros(steps)\n", + " GWVS = zeros(steps)\n", + " IFWI = zeros(steps)\n", + " IFWO = zeros(steps)\n", + " IFWS = zeros(steps)\n", + " IGWI = zeros(steps)\n", + " INFIL = zeros(steps)\n", + " LZET = zeros(steps)\n", + " LZI = zeros(steps)\n", + " LZS = zeros(steps)\n", + " PERC = zeros(steps)\n", + " PERO = zeros(steps)\n", + " PERS = zeros(steps)\n", + " PET = zeros(steps)\n", " PETADJ = zeros(steps)\n", - " SUPY = zeros(steps)\n", - " SURI = zeros(steps)\n", - " SURO = zeros(steps)\n", - " SURS = zeros(steps)\n", - " TAET = zeros(steps)\n", - " TGWS = zeros(steps)\n", - " UZET = zeros(steps)\n", - " UZI = zeros(steps)\n", - " UZS = zeros(steps)\n", + " SUPY = zeros(steps)\n", + " SURI = zeros(steps)\n", + " SURO = zeros(steps)\n", + " SURS = zeros(steps)\n", + " TAET = zeros(steps)\n", + " TGWS = zeros(steps)\n", + " UZET = zeros(steps)\n", + " UZI = zeros(steps)\n", + " UZS = zeros(steps)\n", " INFFAC = ones(steps)\n", "\n", " irrappV = zeros(7)\n", - " irrcep = 0.0 # ????\n", - " #irdraw = zeros(3)\n", + " irrcep = 0.0 # ????\n", + " # irdraw = zeros(3)\n", "\n", " CSNOFG = 0\n", " ICEFG = 0\n", @@ -213,76 +240,76 @@ " UZFG = 0\n", " VLEFG = 0\n", "\n", - " if 'ICEFG' in ui:\n", - " ICEFG = int(ui['ICEFG'])\n", - "\n", - " if 'CSNOFG' in ui:\n", - " CSNOFG = int(ui['CSNOFG'])\n", - " IFFCFG = int(ui['IFFCFG'])\n", - " IFRDFG = int(ui['IFRDFG'])\n", - " RTOPFG = int(ui['RTOPFG'])\n", - " UZFG = int(ui['UZFG'])\n", - " VLEFG = int(ui['VLEFG'])\n", - "\n", - " agwetp = ui['AGWETP']\n", - " agws = ui['AGWS']\n", - " basetp = ui['BASETP']\n", - " ceps = ui['CEPS']\n", - " gwvs = ui['GWVS']\n", - " ifws = ui['IFWS']\n", - " infexp = ui['INFEXP']\n", - " infild = ui['INFILD']\n", - " lsur = ui['LSUR']\n", - " lzs = ui['LZS']\n", - " slsur = ui['SLSUR']\n", - " surs = ui['SURS']\n", - " uzs = ui['UZS']\n", - "# forest = ui['FOREST']\n", + " if \"ICEFG\" in ui:\n", + " ICEFG = int(ui[\"ICEFG\"])\n", + "\n", + " if \"CSNOFG\" in ui:\n", + " CSNOFG = int(ui[\"CSNOFG\"])\n", + " IFFCFG = int(ui[\"IFFCFG\"])\n", + " IFRDFG = int(ui[\"IFRDFG\"])\n", + " RTOPFG = int(ui[\"RTOPFG\"])\n", + " UZFG = int(ui[\"UZFG\"])\n", + " VLEFG = int(ui[\"VLEFG\"])\n", + "\n", + " agwetp = ui[\"AGWETP\"]\n", + " agws = ui[\"AGWS\"]\n", + " basetp = ui[\"BASETP\"]\n", + " ceps = ui[\"CEPS\"]\n", + " gwvs = ui[\"GWVS\"]\n", + " ifws = ui[\"IFWS\"]\n", + " infexp = ui[\"INFEXP\"]\n", + " infild = ui[\"INFILD\"]\n", + " lsur = ui[\"LSUR\"]\n", + " lzs = ui[\"LZS\"]\n", + " slsur = ui[\"SLSUR\"]\n", + " surs = ui[\"SURS\"]\n", + " uzs = ui[\"UZS\"]\n", + " # forest = ui['FOREST']\n", "\n", " if ICEFG:\n", - " fzg = ui['FZG']\n", - " fzgl = ui['FZGL']\n", - " \n", - " AGWLI = ts['AGWLI']\n", - " AGWRC = ts['AGWRC']\n", - "# AIRTMP = ts['AIRTMP']\n", - " CEPSC = ts['CEPSC']\n", - " DEEPFR = ts['DEEPFR']\n", - " IFWLI = ts['IFWLI']\n", - " INFILT = ts['INFILT'] * delt60\n", - " INTFW = ts['INTFW']\n", - " IRC = ts['IRC']\n", - " KVARY = ts['KVARY']\n", - "# LGTMP = ts['LGTMP']\n", - " LZETP = ts['LZETP']\n", - " LZLI = ts['LZLI']\n", - " LZSN = ts['LZSN']\n", - " NSUR = ts['NSUR']\n", - "# PACKI = ts['PACKI']\n", - " PETINP = ts['PETINP']\n", - "# PETMAX = ts['PETMAX']\n", - "# PETMIN = ts['PETMIN']\n", - " PREC = ts['PREC']\n", - "# RAINF = ts['RAINF']\n", - "# SNOCOV = ts['SNOCOV']\n", - " SURLI = ts['SURLI']\n", - " UZLI = ts['UZLI']\n", - " UZSN = ts['UZSN']\n", - "# WYIELD = ts['WYIELD']\n", + " fzg = ui[\"FZG\"]\n", + " fzgl = ui[\"FZGL\"]\n", + "\n", + " AGWLI = ts[\"AGWLI\"]\n", + " AGWRC = ts[\"AGWRC\"]\n", + " # AIRTMP = ts['AIRTMP']\n", + " CEPSC = ts[\"CEPSC\"]\n", + " DEEPFR = ts[\"DEEPFR\"]\n", + " IFWLI = ts[\"IFWLI\"]\n", + " INFILT = ts[\"INFILT\"] * delt60\n", + " INTFW = ts[\"INTFW\"]\n", + " IRC = ts[\"IRC\"]\n", + " KVARY = ts[\"KVARY\"]\n", + " # LGTMP = ts['LGTMP']\n", + " LZETP = ts[\"LZETP\"]\n", + " LZLI = ts[\"LZLI\"]\n", + " LZSN = ts[\"LZSN\"]\n", + " NSUR = ts[\"NSUR\"]\n", + " # PACKI = ts['PACKI']\n", + " PETINP = ts[\"PETINP\"]\n", + " # PETMAX = ts['PETMAX']\n", + " # PETMIN = ts['PETMIN']\n", + " PREC = ts[\"PREC\"]\n", + " # RAINF = ts['RAINF']\n", + " # SNOCOV = ts['SNOCOV']\n", + " SURLI = ts[\"SURLI\"]\n", + " UZLI = ts[\"UZLI\"]\n", + " UZSN = ts[\"UZSN\"]\n", + " # WYIELD = ts['WYIELD']\n", "\n", " # initialize variables\n", - " kgwV = 1.0 - AGWRC**(delt60/24.0) # groundwater recession parameter\n", - " rlzrat = -1.0E30\n", - " lzfrac = -1.0E30\n", - " rparm = -1.0E30\n", - " if agws < 0.0: # no gw storage is active\n", + " kgwV = 1.0 - AGWRC ** (delt60 / 24.0) # groundwater recession parameter\n", + " rlzrat = -1.0e30\n", + " lzfrac = -1.0e30\n", + " rparm = -1.0e30\n", + " if agws < 0.0: # no gw storage is active\n", " agws = 0.0\n", " TGWS[0] = agws\n", "\n", " msupy = 0.0\n", - " dec = nan\n", - " src = nan\n", - " kifw = nan\n", + " dec = nan\n", + " src = nan\n", + " kifw = nan\n", " ifwk2 = nan\n", " ifwk1 = nan\n", "\n", @@ -290,18 +317,18 @@ " for step in range(steps):\n", " oldmsupy = msupy\n", "\n", - " dayfg = int(DAYFG[step])\n", - " hrfg = int(HRFG[step])\n", + " dayfg = int(DAYFG[step])\n", + " hrfg = int(HRFG[step])\n", " inffac = INFFAC[step]\n", - " kgw = kgwV[step]\n", + " kgw = kgwV[step]\n", "\n", " # These lines allow constant parameters to be replaced by timeseries\n", - " lzetp = LZETP[step]\n", - " cepsc = CEPSC[step]\n", - " uzsn = UZSN[step]\n", + " lzetp = LZETP[step]\n", + " cepsc = CEPSC[step]\n", + " uzsn = UZSN[step]\n", " infilt = INFILT[step]\n", - " kvary = KVARY[step]\n", - " lzsn = LZSN[step]\n", + " kvary = KVARY[step]\n", + " lzsn = LZSN[step]\n", "\n", " # PWATRX\n", " petinp = PETINP[step]\n", @@ -319,7 +346,7 @@ " petadj = 0.0\n", " PETADJ[step] = petadj\n", " PET[step] = petinp * petadj\n", - " if ICEFG: # calculate factor to reduce infiltration and percolation to account for frozen ground\n", + " if ICEFG: # calculate factor to reduce infiltration and percolation to account for frozen ground\n", " inffac = max(fzgl, 1.0 - fzg * PACKI[step])\n", " else:\n", " SUPY[step] = PREC[step]\n", @@ -330,8 +357,8 @@ " inffac = fzgl if LGTMP[step] <= 0.0 else 1.0\n", "\n", " # ICEPT\n", - " ''' Simulate the interception of moisture by vegetal or other ground cover'''\n", - " ceps = ceps + SUPY[step] + irrcep # add to interception storage\n", + " \"\"\" Simulate the interception of moisture by vegetal or other ground cover\"\"\"\n", + " ceps = ceps + SUPY[step] + irrcep # add to interception storage\n", " cepo = 0.0\n", " if ceps > cepsc:\n", " cepo = ceps - cepsc\n", @@ -339,45 +366,49 @@ " # END ICEPT\n", "\n", " # in PWATRX\n", - " suri = cepo + SURLI[step] # surface inflow\n", + " suri = cepo + SURLI[step] # surface inflow\n", " msupy = suri + surs + irrappV[2]\n", - " lzrat = lzs / lzsn # determine the current value of the lower zone storage ratio\n", + " lzrat = (\n", + " lzs / lzsn\n", + " ) # determine the current value of the lower zone storage ratio\n", "\n", " if msupy <= 0.0:\n", - " surs = 0.0\n", - " suro = 0.0\n", - " ifwi = 0.0\n", + " surs = 0.0\n", + " suro = 0.0\n", + " ifwi = 0.0\n", " infil = 0.0\n", - " uzi = 0.0\n", + " uzi = 0.0\n", " else:\n", " # SURFAC\n", - " ''' Distribute the water available for infiltration and runoff - units of fluxes are in./ivl'''\n", - " ''' establish locations of sloping lines on infiltration/inflow/sur runoff\n", + " \"\"\" Distribute the water available for infiltration and runoff - units of fluxes are in./ivl\"\"\"\n", + " \"\"\" establish locations of sloping lines on infiltration/inflow/sur runoff\n", " figure. prefix \"i\" refers to \"infiltration\" line, ibar is the mean\n", - " infiltration capacity over the segment, internal units of infilt are inches/ivl'''\n", + " infiltration capacity over the segment, internal units of infilt are inches/ivl\"\"\"\n", "\n", " ibar = infilt / (lzrat**infexp)\n", " if inffac < 1.0:\n", " ibar = ibar * inffac\n", - " imax = ibar * infild # infild is an input parameter - ratio of maximum to mean infiltration capacity\n", + " imax = (\n", + " ibar * infild\n", + " ) # infild is an input parameter - ratio of maximum to mean infiltration capacity\n", " imin = ibar - (imax - ibar)\n", "\n", - " if dayfg or oldmsupy==0.0:\n", + " if dayfg or oldmsupy == 0.0:\n", " dummy = NSUR[step] * lsur\n", - " dec = 0.00982 * (dummy / sqrt(slsur))**0.6\n", - " src = 1020.0 * (sqrt(slsur) / dummy)\n", + " dec = 0.00982 * (dummy / sqrt(slsur)) ** 0.6\n", + " src = 1020.0 * (sqrt(slsur) / dummy)\n", "\n", " ratio = max(1.0001, INTFW[step] * 2.0**lzrat)\n", " # DISPOSE\n", " # DIVISN\n", - " if msupy <= imin: # msupy line is entirely below other line\n", + " if msupy <= imin: # msupy line is entirely below other line\n", " under = msupy\n", - " over = 0.0\n", - " elif msupy > imax: # msupy line is entirely above other line\n", + " over = 0.0\n", + " elif msupy > imax: # msupy line is entirely above other line\n", " under = (imin + imax) * 0.5\n", " over = msupy - under\n", - " else: # msupy line crosses other line\n", - " over = ((msupy - imin)**2) * 0.5 / (imax - imin)\n", + " else: # msupy line crosses other line\n", + " over = ((msupy - imin) ** 2) * 0.5 / (imax - imin)\n", " under = msupy - over\n", " # END DIVISN\n", " infil = under\n", @@ -385,50 +416,58 @@ " surs = 0.0\n", " suro = 0.0\n", " ifwi = 0.0\n", - " uzi = 0.0\n", + " uzi = 0.0\n", " else: # there is potential interflow inflow and surface detention/outflow -- the is potential direct runoff\n", " pdro = over\n", "\n", " # determine how much of this potential direct runoff will be taken by the upper zone\n", " if UZFG:\n", " # $UZINF2 -- HSPX, ARM, NPS type calculation\n", - " '''Compute inflow to upper zone during this interval, using \"fully forward\"\n", + " \"\"\"Compute inflow to upper zone during this interval, using \"fully forward\"\n", " type algorithm as used in HSPX,ARM and NPS. Note: although this method\n", " should give results closer to those produced by HSPX, etc., its output will\n", - " be more sensitive to delt than that given by subroutine uzinf'''\n", + " be more sensitive to delt than that given by subroutine uzinf\"\"\"\n", " uzrat = uzs / uzsn\n", " if uzrat < 2.0:\n", " k1 = 3.0 - uzrat\n", - " uzfrac = 1.0 - (uzrat * 0.5) * ((1.0/(1.0 + k1))**k1)\n", + " uzfrac = 1.0 - (uzrat * 0.5) * ((1.0 / (1.0 + k1)) ** k1)\n", " else:\n", " k2 = (2.0 * uzrat) - 3.0\n", - " uzfrac = (1.0/(1.0 + k2))**k2\n", + " uzfrac = (1.0 / (1.0 + k2)) ** k2\n", " uzi = pdro * uzfrac\n", " else:\n", " # UZINF\n", - " ''' Compute the inflow to the upper zone during this time interval. Do this\n", + " \"\"\" Compute the inflow to the upper zone during this time interval. Do this\n", " using a table look-up to handle the non-analytic integral given in\n", - " supporting documentation.'''\n", + " supporting documentation.\"\"\"\n", "\n", " # find the value of the integral at initial uzra\n", - " uzraa = uzs / uzsn\n", - " kk = argmax(uzraa < uzra)-1 # uzra[kk] < uzraa <= uzra[kk+1]\n", + " uzraa = uzs / uzsn\n", + " kk = argmax(uzraa < uzra) - 1 # uzra[kk] < uzraa <= uzra[kk+1]\n", " if kk == -1:\n", " kk = 8\n", - " errors[1] += 1 # ERRMSG1: UZRAA exceeds UZRA array bounds\n", - " intga = intgrl[kk] + (intgrl[kk+1] - intgrl[kk]) * (uzraa - uzra[kk]) / (uzra[kk+1] - uzra[kk])\n", + " errors[1] += 1 # ERRMSG1: UZRAA exceeds UZRA array bounds\n", + " intga = intgrl[kk] + (intgrl[kk + 1] - intgrl[kk]) * (\n", + " uzraa - uzra[kk]\n", + " ) / (uzra[kk + 1] - uzra[kk])\n", " intgb = (pdro / uzsn) + intga\n", "\n", - " kk = argmax(intgb < intgrl)-1 # intgrl[kk] <= intgb < intgrl[kk+1]\n", + " kk = (\n", + " argmax(intgb < intgrl) - 1\n", + " ) # intgrl[kk] <= intgb < intgrl[kk+1]\n", " if kk == -1:\n", - " errors[2] += 1 # ERRMSG2: INTGB exceeds INTGRL array bounds\n", - " kk = 8\n", + " errors[2] += 1 # ERRMSG2: INTGB exceeds INTGRL array bounds\n", + " kk = 8\n", "\n", - " uzrab = uzra[kk] + (uzra[kk+1] - uzra[kk]) * (intgb - intgrl[kk]) / (intgrl[kk+1] - intgrl[kk])\n", + " uzrab = uzra[kk] + (uzra[kk + 1] - uzra[kk]) * (\n", + " intgb - intgrl[kk]\n", + " ) / (intgrl[kk + 1] - intgrl[kk])\n", " uzi = (uzrab - uzraa) * uzsn\n", " if uzi < -1.0e-3:\n", - " errors[7] += 1 # UZI highly negative\n", - " uzi = max(0.0, uzi) # negative inflow shouldn't happen, but does for extremely small pdro\n", + " errors[7] += 1 # UZI highly negative\n", + " uzi = max(\n", + " 0.0, uzi\n", + " ) # negative inflow shouldn't happen, but does for extremely small pdro\n", "\n", " if uzi > pdro:\n", " uzi = pdro\n", @@ -439,18 +478,18 @@ " iimax = imax * ratio\n", "\n", " # DIVISN\n", - " if msupy <= iimin: # msupy line is entirely below other line\n", + " if msupy <= iimin: # msupy line is entirely below other line\n", " over2 = 0.0\n", - " elif msupy > iimax: # msupy line is entirely above other line\n", + " elif msupy > iimax: # msupy line is entirely above other line\n", " over2 = msupy - (iimin + iimax) * 0.5\n", - " else: # msupy line crosses other line\n", - " over2 = ((msupy - iimin)**2) * 0.5 / (iimax - iimin)\n", - " #END DIVISN\n", + " else: # msupy line crosses other line\n", + " over2 = ((msupy - iimin) ** 2) * 0.5 / (iimax - iimin)\n", + " # END DIVISN\n", "\n", " # psur is potential surface detention/runoff\n", " psur = over2\n", - " pifwi = pdro - psur # pifwi is potential interflow inflow\n", - " ifwi = pifwi * (1.0 - uzfrac)\n", + " pifwi = pdro - psur # pifwi is potential interflow inflow\n", + " ifwi = pifwi * (1.0 - uzfrac)\n", "\n", " if psur <= 0.0:\n", " surs = 0.0\n", @@ -466,12 +505,12 @@ "\n", " # INTFLW to simulate interflow, irc only daily interpolation????\n", " if dayfg:\n", - " kifw = -log(IRC[step]) / (24.0 / delt60)\n", + " kifw = -log(IRC[step]) / (24.0 / delt60)\n", " ifwk2 = 1.0 - exp(-kifw)\n", " ifwk1 = 1.0 - (ifwk2 / kifw)\n", "\n", " # surface and near-surface zones of the land segment have not been subdivided into blocks\n", - " inflo = ifwi + IFWLI[step]\n", + " inflo = ifwi + IFWLI[step]\n", " value = inflo + ifws\n", " if value > 0.00002:\n", " ifwo = (ifwk1 * inflo) + (ifwk2 * ifws)\n", @@ -479,37 +518,47 @@ " else:\n", " ifwo = 0.0\n", " ifws = 0.0\n", - " uzs = uzs + value # nothing worth routing-dump back to uzs\n", + " uzs = uzs + value # nothing worth routing-dump back to uzs\n", "\n", " # UZONE\n", " uzrat = uzs / uzsn\n", - " uzs = uzs + uzi + UZLI[step] + irrappV[3] # add inflow to uzs\n", + " uzs = uzs + uzi + UZLI[step] + irrappV[3] # add inflow to uzs\n", " perc = 0.0\n", " if uzrat - lzrat > 0.01:\n", " # simulate percolation\n", - " perc = 0.1 * infilt * inffac * uzsn * (uzrat - lzrat)**3\n", - " if perc > uzs: # computed value is too high so merely empty storage\n", + " perc = 0.1 * infilt * inffac * uzsn * (uzrat - lzrat) ** 3\n", + " if perc > uzs: # computed value is too high so merely empty storage\n", " perc = uzs\n", " uzs = 0.0\n", " else:\n", " uzs -= perc\n", "\n", " # back to pwatrx\n", - " iperc = perc + infil + LZLI[step] # collect inflows to lower zone and groundwater\n", + " iperc = (\n", + " perc + infil + LZLI[step]\n", + " ) # collect inflows to lower zone and groundwater\n", "\n", " # LZONE\n", " lperc = iperc + irrappV[4]\n", " lzi = 0.0\n", - " if lperc > 0.0: # if necessary, recalculate the fraction of infiltration + percolation to be taken by lower zone\n", - " if abs(lzrat - rlzrat) > 0.02 or IFRDFG: # it is time to recalculate\n", + " if (\n", + " lperc > 0.0\n", + " ): # if necessary, recalculate the fraction of infiltration + percolation to be taken by lower zone\n", + " if abs(lzrat - rlzrat) > 0.02 or IFRDFG: # it is time to recalculate\n", " rlzrat = lzrat\n", " if lzrat <= 1.0:\n", " indx = 2.5 - 1.5 * lzrat\n", - " lzfrac = 1.0 if IFRDFG else 1.0 - lzrat * (1.0 / (1.0 + indx))**indx\n", + " lzfrac = (\n", + " 1.0 if IFRDFG else 1.0 - lzrat * (1.0 / (1.0 + indx)) ** indx\n", + " )\n", " else:\n", - " indx = 1.5 * lzrat - 0.5\n", + " indx = 1.5 * lzrat - 0.5\n", " exfact = -1.0 * IFRDFG\n", - " lzfrac = exp(exfact * (lzrat-1.0)) if IFRDFG else (1.0 / (1.0 + indx))**indx\n", + " lzfrac = (\n", + " exp(exfact * (lzrat - 1.0))\n", + " if IFRDFG\n", + " else (1.0 / (1.0 + indx)) ** indx\n", + " )\n", " lzi = lzfrac * lperc\n", " lzs += lzi\n", "\n", @@ -520,9 +569,11 @@ " igwi = 0.0\n", " agwi = 0.0\n", " if gwi > 0.0:\n", - " igwi = DEEPFR[step] * gwi\n", + " igwi = DEEPFR[step] * gwi\n", " agwi = gwi - igwi\n", - " ainflo = agwi + AGWLI[step] + irrappV[5] # active groundwater total inflow includes lateral inflow #$3466\n", + " ainflo = (\n", + " agwi + AGWLI[step] + irrappV[5]\n", + " ) # active groundwater total inflow includes lateral inflow #$3466\n", " agwo = 0.0\n", "\n", " # evaluate groundwater recharge parameter\n", @@ -538,7 +589,7 @@ " agwo = kgw * (1.0 + kvary * gwvs) * agws\n", " avail = ainflo + agws\n", " if agwo > avail:\n", - " errors[3] += 1 # ERRMSG3: Reduced AGWO value to available\n", + " errors[3] += 1 # ERRMSG3: Reduced AGWO value to available\n", " agwo = avail\n", " elif agws > 1.0e-20:\n", " agwo = kgw * agws # enough water to have outflow\n", @@ -551,61 +602,63 @@ " # values for agws should show up inthe output timeseries\n", " agws = agws + (ainflo - agwo)\n", " if agws < 0.0:\n", - " errors[8] += 1 #ERRMSG8: Reset AGWS to zero\n", + " errors[8] += 1 # ERRMSG8: Reset AGWS to zero\n", " agws = 0.0\n", "\n", - " ''' # check removed - now total PERLND agreement with HSPF\n", + " \"\"\" # check removed - now total PERLND agreement with HSPF\n", " if abs(kvary) > 0.0 and gwvs > agws:\n", " errors[4] += 1 # ERRMSG4: Reduced GWVS to AGWS\n", " gwvs = agws\n", - " '''\n", + " \"\"\"\n", "\n", " # back in #$PWATRX\n", " TGWS[step] = agws\n", "\n", " # EVAPT to simulate evapotranspiration\n", " rempet = PET[step] # rempet is remaining potential et - inches/ivl\n", - " taet = 0.0 # taet is total actual et - inches/ivlc\n", + " taet = 0.0 # taet is total actual et - inches/ivlc\n", " baset = 0.0\n", " if rempet > 0.0 and basetp > 0.0:\n", " # in section #$etbase there is et from baseflow\n", " baspet = basetp * rempet\n", " if baspet > agwo:\n", " baset = agwo\n", - " agwo = 0.0\n", + " agwo = 0.0\n", " else:\n", " baset = baspet\n", " agwo -= baset\n", - " taet += baset\n", + " taet += baset\n", " rempet -= baset\n", "\n", - " cepe = 0.0\n", + " cepe = 0.0\n", " if rempet > 0.0 and ceps > 0.0:\n", " # EVICEP\n", " if rempet > ceps:\n", " cepe = ceps\n", " ceps = 0.0\n", " else:\n", - " cepe = rempet\n", + " cepe = rempet\n", " ceps -= cepe\n", - " taet += cepe\n", + " taet += cepe\n", " rempet -= cepe\n", "\n", - " uzet = 0.0\n", + " uzet = 0.0\n", " if rempet > 0.0:\n", " # ETUZON\n", " # ETUZS\n", - " if uzs > 0.001: # there is et from the upper zone estimate the uzet opportunity\n", + " if (\n", + " uzs > 0.001\n", + " ): # there is et from the upper zone estimate the uzet opportunity\n", " uzrat = uzs / uzsn\n", - " uzpet = rempet if uzrat > 2.0 else 0.5 * uzrat * rempet\n", + " uzpet = rempet if uzrat > 2.0 else 0.5 * uzrat * rempet\n", " if uzpet > uzs:\n", " uzet = uzs\n", - " uzs = 0.0\n", + " uzs = 0.0\n", " else:\n", " uzet = uzpet\n", " uzs -= uzet\n", " # END UTUZA\n", - " taet += uzet # these lines return to ETUZON\n", + " taet += uzet # these lines return to ETUZON\n", " rempet -= uzet\n", " # END ETUZON\n", "\n", @@ -615,17 +668,17 @@ " gwpet = rempet * agwetp\n", " if gwpet > agws:\n", " agwet = agws\n", - " agws = 0.0\n", + " agws = 0.0\n", " else:\n", " agwet = gwpet\n", " agws -= agwet\n", "\n", " if abs(kvary) > 0.0:\n", - " gwvs -= agwet # update variable storage\n", + " gwvs -= agwet # update variable storage\n", " if gwvs < -0.02:\n", - " errors[5] += 1.0 # ERRMSG5: GWVS < -0.02, set to zero\n", + " errors[5] += 1.0 # ERRMSG5: GWVS < -0.02, set to zero\n", " gwvs = 0.0\n", - " taet += agwet\n", + " taet += agwet\n", " rempet -= agwet\n", "\n", " # et from lower zone is handled here because it must be called every interval to make sure that seasonal variation in\n", @@ -633,21 +686,37 @@ " # note: thj made changes in some release to the original HSPF, check carefully\n", " # ETLZON\n", " if dayfg:\n", - " lzrat = lzs / lzsn # it is time to recalculate et opportunity parameter rparm is max et opportunity - inches/ivl\n", - " rparm = 0.25/(1.0-lzetp)*lzrat*delt60/24.0 if lzetp <= 0.99999 else 1.0e10\n", - " lzet = 0.0\n", - " if rempet > 0.0 and lzs > 0.02: # assume et can take place\n", - " if lzetp >= 0.99999: # special case - will try to draw et from whole land segment at remaining potential rate\n", + " lzrat = (\n", + " lzs / lzsn\n", + " ) # it is time to recalculate et opportunity parameter rparm is max et opportunity - inches/ivl\n", + " rparm = (\n", + " 0.25 / (1.0 - lzetp) * lzrat * delt60 / 24.0\n", + " if lzetp <= 0.99999\n", + " else 1.0e10\n", + " )\n", + " lzet = 0.0\n", + " if rempet > 0.0 and lzs > 0.02: # assume et can take place\n", + " if (\n", + " lzetp >= 0.99999\n", + " ): # special case - will try to draw et from whole land segment at remaining potential rate\n", " lzpet = rempet * lzetp\n", - " elif VLEFG <= 1: # usual case - desired et will vary over the whole land seg\n", - " lzpet = 0.5*rparm if rempet > rparm else rempet*(1.0-rempet/(2.0*rparm))\n", + " elif (\n", + " VLEFG <= 1\n", + " ): # usual case - desired et will vary over the whole land seg\n", + " lzpet = (\n", + " 0.5 * rparm\n", + " if rempet > rparm\n", + " else rempet * (1.0 - rempet / (2.0 * rparm))\n", + " )\n", " if lzetp < 0.5:\n", - " lzpet = lzpet * 2.0 * lzetp # reduce the et to account for area devoid of vegetation\n", - " else: # VLEFG >= 2: # et constant over whole land seg\n", - " lzpet = lzetp*lzrat*rempet if lzrat < 1.0 else lzetp*rempet\n", + " lzpet = (\n", + " lzpet * 2.0 * lzetp\n", + " ) # reduce the et to account for area devoid of vegetation\n", + " else: # VLEFG >= 2: # et constant over whole land seg\n", + " lzpet = lzetp * lzrat * rempet if lzrat < 1.0 else lzetp * rempet\n", " lzet = lzpet if lzpet < (lzs - 0.02) else lzs - 0.02\n", - " lzs -= lzet\n", - " taet += lzet\n", + " lzs -= lzet\n", + " taet += lzet\n", " rempet -= lzet\n", " # END ETLZON\n", " # END EVAPT\n", @@ -657,37 +726,39 @@ "\n", " # return to PWATRX\n", " AGWET[step] = agwet\n", - " AGWI[step] = agwi\n", - " AGWO[step] = agwo\n", - " AGWS[step] = agws\n", + " AGWI[step] = agwi\n", + " AGWO[step] = agwo\n", + " AGWS[step] = agws\n", " BASET[step] = baset\n", - " CEPE[step] = cepe\n", - " CEPS[step] = ceps\n", - " GWVS[step] = gwvs\n", - " IFWI[step] = ifwi\n", - " IFWO[step] = ifwo\n", - " IFWS[step] = ifws\n", - " IGWI[step] = igwi\n", - " INFFAC[step]= inffac\n", + " CEPE[step] = cepe\n", + " CEPS[step] = ceps\n", + " GWVS[step] = gwvs\n", + " IFWI[step] = ifwi\n", + " IFWO[step] = ifwo\n", + " IFWS[step] = ifws\n", + " IGWI[step] = igwi\n", + " INFFAC[step] = inffac\n", " INFIL[step] = infil\n", - " LZET[step] = lzet\n", - " LZI[step] = lzi\n", - " LZS[step] = lzs\n", - " PERC[step] = perc\n", - " PERO[step] = suro + ifwo + agwo\n", - " PERS[step] = ceps + surs + ifws + uzs + lzs + TGWS[step]\n", - " SURI[step] = suri\n", - " SURO[step] = suro\n", - " SURS[step] = surs\n", - " TAET[step] = taet\n", - " UZET[step] = uzet\n", - " UZI[step] = uzi\n", - " UZS[step] = uzs\n", + " LZET[step] = lzet\n", + " LZI[step] = lzi\n", + " LZS[step] = lzs\n", + " PERC[step] = perc\n", + " PERO[step] = suro + ifwo + agwo\n", + " PERS[step] = ceps + surs + ifws + uzs + lzs + TGWS[step]\n", + " SURI[step] = suri\n", + " SURO[step] = suro\n", + " SURS[step] = surs\n", + " TAET[step] = taet\n", + " UZET[step] = uzet\n", + " UZI[step] = uzi\n", + " UZS[step] = uzs\n", " # done with MASTER step\n", - " #WATIN = SUPY + SURLI + UZLI + IFWLI + LZLI + AGWLI+ irrapp[6] # total input of water to the pervious land segment\n", - " #WATDIF = WATIN - (PERO + IGWI + TAET + irdraw[2]) # net input of water to the pervious land segment\n", - " \n", - " return SURO # IFWO # SURO # AGWO \n", + " # WATIN = SUPY + SURLI + UZLI + IFWLI + LZLI + AGWLI+ irrapp[6] # total input of water to the pervious land segment\n", + " # WATDIF = WATIN - (PERO + IGWI + TAET + irdraw[2]) # net input of water to the pervious land segment\n", + "\n", + " return SURO # IFWO # SURO # AGWO\n", + "\n", + "\n", "# TODO: make default output all params but allow specify" ] }, @@ -698,38 +769,40 @@ "outputs": [], "source": [ "def proute(psur, RTOPFG, delt60, dec, src, surs, errors):\n", - " ''' Determine how much potential surface detention (PSUR) runs off in one simulation interval.'''\n", + " \"\"\"Determine how much potential surface detention (PSUR) runs off in one simulation interval.\"\"\"\n", " if psur > 0.0002:\n", " # something is worth routing on the surface\n", " if RTOPFG != 1:\n", " # do routing the new way, estimate the rate of supply to the overland flow surface - inches/hour\n", " ssupr = (psur - surs) / delt60\n", - " surse = dec * ssupr**0.6 if ssupr > 0.0 else 0.0 # determine equilibrium depth for this supply rate\n", + " surse = (\n", + " dec * ssupr**0.6 if ssupr > 0.0 else 0.0\n", + " ) # determine equilibrium depth for this supply rate\n", "\n", " # determine runoff by iteration - newton's method, estimate the new surface storage\n", " sursnw = psur\n", - " suro = 0.0\n", + " suro = 0.0\n", " for count in range(MAXLOOPS):\n", " if ssupr > 0.0:\n", " ratio = sursnw / surse\n", " fact = 1.0 + 0.6 * ratio**3 if ratio <= 1.0 else 1.6\n", " else:\n", - " ratio = 1.0e30\n", - " fact = 1.6\n", + " ratio = 1.0e30\n", + " fact = 1.6\n", "\n", " # coefficient in outflow equation\n", - " ffact = (delt60 * src * fact**1.667) * (sursnw**1.667)\n", - " fsuro = ffact - suro\n", - " dfact = -1.667 * ffact\n", + " ffact = (delt60 * src * fact**1.667) * (sursnw**1.667)\n", + " fsuro = ffact - suro\n", + " dfact = -1.667 * ffact\n", "\n", " dfsuro = dfact / sursnw - 1.0\n", - " if ratio <= 1.0: # additional term required in derivative wrt suro\n", - " dterm = dfact / (fact * surse) * 1.8 * ratio**2\n", + " if ratio <= 1.0: # additional term required in derivative wrt suro\n", + " dterm = dfact / (fact * surse) * 1.8 * ratio**2\n", " dfsuro = dfsuro + dterm\n", " dsuro = fsuro / dfsuro\n", "\n", - " suro = suro - dsuro\n", - " if suro <= 1.0e-10: # boundary condition- don't let suro go negative\n", + " suro = suro - dsuro\n", + " if suro <= 1.0e-10: # boundary condition- don't let suro go negative\n", " suro = 0.0\n", "\n", " sursnw = psur - suro\n", @@ -739,7 +812,7 @@ " if change < 0.01:\n", " break\n", " else:\n", - " errors[6] += 1 # ERRMSG6: Proute runoff did not converge\n", + " errors[6] += 1 # ERRMSG6: Proute runoff did not converge\n", " surs = sursnw\n", " else:\n", " # do routing the way it is done in arm, nps, and hspx estimate the rate of supply to the overland flow surface - inches/ivl\n", @@ -751,23 +824,25 @@ " # preliminary estimate of surse\n", " dummy = dec * ssupr**0.6\n", " if dummy > sursm:\n", - " surse = dummy # flow is increasing\n", - " dummy = sursm * (1.0 + 0.6 * (sursm/surse)**3)\n", + " surse = dummy # flow is increasing\n", + " dummy = sursm * (1.0 + 0.6 * (sursm / surse) ** 3)\n", " else:\n", " dummy = sursm * 1.6 # flow on surface is at equilibrium or receding\n", " else:\n", - " dummy = sursm * 1.6 # flow on the surface is receding - equilibrium detention is assumed equal to actual detention\n", + " dummy = (\n", + " sursm * 1.6\n", + " ) # flow on the surface is receding - equilibrium detention is assumed equal to actual detention\n", "\n", " # check the temporary calculation of surface outflow\n", " tsuro = delt60 * src * dummy**1.667\n", - " suro = psur if tsuro > psur else tsuro\n", - " surs = 0.0 if tsuro > psur else psur - suro\n", + " suro = psur if tsuro > psur else tsuro\n", + " surs = 0.0 if tsuro > psur else psur - suro\n", " else:\n", " # send what is on the overland flow plane straight to the channel\n", " suro = psur\n", " surs = 0.0\n", " if suro <= 1.0e-10:\n", - " suro = 0.0 # fix bug in on pc - underflow leads to \"not a number\"\n", + " suro = 0.0 # fix bug in on pc - underflow leads to \"not a number\"\n", "\n", " return suro, surs" ] @@ -786,95 +861,99 @@ "outputs": [], "source": [ "def _iwater_(ui, ts):\n", - " ''' Simulate the water budget for an impervious land segment comprised of 1 acre of a single HRU.\n", - " \n", + " \"\"\"Simulate the water budget for an impervious land segment comprised of 1 acre of a single HRU.\n", + "\n", " Parameters\n", " ----------\n", - " ui: dictionary, contains constants including: 'errlen', 'delt' (timestep (mins)), 'steps' (number of timesteps), \n", + " ui: dictionary, contains constants including: 'errlen', 'delt' (timestep (mins)), 'steps' (number of timesteps),\n", " and select HRU parameters (see above)\n", - " \n", + "\n", " ts: dictionary, contains timeseries variables (1-D arrays) including: 'HR1FG', 'HRFG',\n", " and select HRU parameters (see above)\n", "\n", " Returns\n", " -------\n", " SURO: 1-D numpy array, contains surface runoff timeseries (in in-acre/timestep)\n", - "'''\n", - " errors = zeros(int(ui['errlen'])).astype(int64)\n", + " \"\"\"\n", + " errors = zeros(int(ui[\"errlen\"])).astype(int64)\n", "\n", - " if 'HWTFG' in ui:\n", - " if int(ui['HWTFG']):\n", + " if \"HWTFG\" in ui:\n", + " if int(ui[\"HWTFG\"]):\n", " errors[9] += 1\n", " return\n", - " \n", + "\n", " # get simulation timestep and duration information from ui and ts\n", - " delt60 = ui['delt'] / 60.0 # simulation interval in hours\n", - " steps = int(ui['steps'])\n", - " HRFG = ts['HRFG'].astype(int64) # True the first time and at every hour of simulation\n", - " HR1FG = ts['HR1FG'].astype(int64) # True the first time and at 1am every day of simulation. \n", - "# TODO: look into why HR1FG not DAYFG\n", + " delt60 = ui[\"delt\"] / 60.0 # simulation interval in hours\n", + " steps = int(ui[\"steps\"])\n", + " HRFG = ts[\"HRFG\"].astype(\n", + " int64\n", + " ) # True the first time and at every hour of simulation\n", + " HR1FG = ts[\"HR1FG\"].astype(\n", + " int64\n", + " ) # True the first time and at 1am every day of simulation.\n", + " # TODO: look into why HR1FG not DAYFG\n", "\n", " # like MATLAB, much faster to preinitialize variables. Store in ts Dict\n", - " IMPEV = zeros(steps, dtype=float64) # evaporation from retention storage\n", - " PET = zeros(steps) # potential ET\n", - " PETADJ = zeros(steps) # adjustment factor for potential ET\n", - " RETS = zeros(steps) # retention storage\n", - " SUPY = zeros(steps) # water supply to \n", - " SURI = zeros(steps)\n", - " SURO = zeros(steps)\n", - " SURS = zeros(steps)\n", + " IMPEV = zeros(steps, dtype=float64) # evaporation from retention storage\n", + " PET = zeros(steps) # potential ET\n", + " PETADJ = zeros(steps) # adjustment factor for potential ET\n", + " RETS = zeros(steps) # retention storage\n", + " SUPY = zeros(steps) # water supply to\n", + " SURI = zeros(steps)\n", + " SURO = zeros(steps)\n", + " SURS = zeros(steps)\n", "\n", " # get constant surface parameters from ui\n", - " lsur = ui['LSUR'] # length of flow path\n", - " slsur = ui['SLSUR'] # slope of land surface\n", - " rets = ui['RETS'] # initial retention storage\n", - " surs = ui['SURS'] # initial surface overland storage\n", - " \n", + " lsur = ui[\"LSUR\"] # length of flow path\n", + " slsur = ui[\"SLSUR\"] # slope of land surface\n", + " rets = ui[\"RETS\"] # initial retention storage\n", + " surs = ui[\"SURS\"] # initial surface overland storage\n", + "\n", " # set flag values\n", - " RTLIFG = 0 # flag to retain lateral surface inflow\n", - " if 'RTLIFG' in ui:\n", - " RTLIFG = int(ui['RTLIFG'])\n", - " CSNOFG = 0 # flag to consider snow\n", - " if 'CSNOFG' in ui:\n", - " CSNOFG = int(ui['CSNOFG'])\n", - " RTOPFG = 0 # flag to select the algorithm for computing overland flow\n", - " if 'RTOPFG' in ui:\n", - " RTOPFG = int(ui['RTOPFG'])\n", - " \n", + " RTLIFG = 0 # flag to retain lateral surface inflow\n", + " if \"RTLIFG\" in ui:\n", + " RTLIFG = int(ui[\"RTLIFG\"])\n", + " CSNOFG = 0 # flag to consider snow\n", + " if \"CSNOFG\" in ui:\n", + " CSNOFG = int(ui[\"CSNOFG\"])\n", + " RTOPFG = 0 # flag to select the algorithm for computing overland flow\n", + " if \"RTOPFG\" in ui:\n", + " RTOPFG = int(ui[\"RTOPFG\"])\n", + "\n", " # get timeseries parameters from ts\n", - " RETSC = ts['RETSC'] # retention capacity of surface\n", - " NSUR = ts['NSUR'] # Manning's N\n", - " PETINP = ts['PETINP'] # evap\n", - " PREC = ts['PREC'] # precip\n", - " SURLI = ts['SURLI'] # surface lateral inflow\n", - "# AIRTMP = ts['AIRTMP']\n", - "# PETMAX = ts['PETMAX']\n", - "# PETMIN = ts['PETMIN']\n", - "# SNOCOV = ts['SNOCOV']\n", - "# RAINF = ts['RAINF']\n", - "# WYIELD = ts['WYIELD']\n", + " RETSC = ts[\"RETSC\"] # retention capacity of surface\n", + " NSUR = ts[\"NSUR\"] # Manning's N\n", + " PETINP = ts[\"PETINP\"] # evap\n", + " PREC = ts[\"PREC\"] # precip\n", + " SURLI = ts[\"SURLI\"] # surface lateral inflow\n", + " # AIRTMP = ts['AIRTMP']\n", + " # PETMAX = ts['PETMAX']\n", + " # PETMIN = ts['PETMIN']\n", + " # SNOCOV = ts['SNOCOV']\n", + " # RAINF = ts['RAINF']\n", + " # WYIELD = ts['WYIELD']\n", "\n", " # initialize other variables\n", - " msupy = surs # initial moisture supply = initial surface storage\n", - " dec = nan \n", - " src = nan\n", + " msupy = surs # initial moisture supply = initial surface storage\n", + " dec = nan\n", + " src = nan\n", " surse = nan\n", " ssupr = nan\n", " dummy = nan\n", - " d = nan\n", - " supy = 0.0 # moisture applied to land segment\n", + " d = nan\n", + " supy = 0.0 # moisture applied to land segment\n", "\n", " # MASTER lOOP\n", " for step in range(steps):\n", - " oldmsupy = msupy # store original moisture supply value\n", + " oldmsupy = msupy # store original moisture supply value\n", + "\n", + " hr1fg = int(HR1FG[step]) # set timestep flags\n", + " hrfg = int(HRFG[step])\n", "\n", - " hr1fg = int(HR1FG[step]) # set timestep flags\n", - " hrfg = int(HRFG[step])\n", - " \n", " # IWATRX\n", - " petinp = PETINP[step] # set potential evap\n", - " retsc = RETSC[step] # set retention capacity\n", - " if CSNOFG: # snow is not considered, so evaluates as False. Skip to else\n", + " petinp = PETINP[step] # set potential evap\n", + " retsc = RETSC[step] # set retention capacity\n", + " if CSNOFG: # snow is not considered, so evaluates as False. Skip to else\n", " airtmp = AIRTMP[step]\n", " petmax = PETMAX[step]\n", " petmin = PETMIN[step]\n", @@ -882,7 +961,7 @@ " SUPY[step] = RAINF[step] * (1.0 - snocov) + WYIELD[step]\n", " if hrfg:\n", " petadj = 1.0 - snocov\n", - " if airtmp < petmax: \n", + " if airtmp < petmax:\n", " if petadj > 0.5:\n", " petadj = 0.5\n", " if airtmp < petmin:\n", @@ -890,15 +969,15 @@ " PETADJ[step] = petadj\n", " PET[step] = petinp * petadj\n", " else:\n", - " supy = PREC[step] # snow not considered, so moisture supply = rainfall\n", - " pet = petinp \n", - " PET[step] = pet # record evap in timeseries\n", - " SUPY[step] = supy # record supply in timeseries\n", - "\n", - " surli = SURLI[step] # set surface lateral inflow\n", - " retsc = RETSC[step] # set retention capacity\n", - " \n", - " if RTLIFG: # no lateral surface inflow (and no retention thereof), so evaluates as False. Skip to else\n", + " supy = PREC[step] # snow not considered, so moisture supply = rainfall\n", + " pet = petinp\n", + " PET[step] = pet # record evap in timeseries\n", + " SUPY[step] = supy # record supply in timeseries\n", + "\n", + " surli = SURLI[step] # set surface lateral inflow\n", + " retsc = RETSC[step] # set retention capacity\n", + "\n", + " if RTLIFG: # no lateral surface inflow (and no retention thereof), so evaluates as False. Skip to else\n", " reti = supy + surli\n", "\n", " # RETN\n", @@ -910,64 +989,72 @@ " reto = 0.0\n", " suri = reto\n", " else:\n", - " reti = supy # inflow to impervious retention storage = moisture supply = precipitation\n", + " reti = supy # inflow to impervious retention storage = moisture supply = precipitation\n", "\n", " # RETN\n", - " rets += reti # add the retention storage inflow to the impervious retention storage\n", - " if rets > retsc: # if the retention storage is greater than the parameter value (often evaluates as True)\n", - " reto = rets - retsc # send the difference out as outflow from retention storage \n", - " rets = retsc # leave the rest in retention storage\n", + " rets += reti # add the retention storage inflow to the impervious retention storage\n", + " if (\n", + " rets > retsc\n", + " ): # if the retention storage is greater than the parameter value (often evaluates as True)\n", + " reto = (\n", + " rets - retsc\n", + " ) # send the difference out as outflow from retention storage\n", + " rets = retsc # leave the rest in retention storage\n", " else:\n", " reto = 0.0\n", - " suri = reto + surli # no surface lateral inflow, so surface detention inflow = outflow from retention storage\n", + " suri = (\n", + " reto + surli\n", + " ) # no surface lateral inflow, so surface detention inflow = outflow from retention storage\n", " # IWATER\n", - " msupy = suri + surs # no intial surface detention storage, so water supply = surface detention inflow\n", - " \n", - " suro = 0.0 \n", - " if msupy > 0.0002: # initial water supply is 0, so skip all of this\n", - " if RTOPFG: \n", + " msupy = (\n", + " suri + surs\n", + " ) # no intial surface detention storage, so water supply = surface detention inflow\n", + "\n", + " suro = 0.0\n", + " if msupy > 0.0002: # initial water supply is 0, so skip all of this\n", + " if RTOPFG:\n", " # IROUTE for RTOPFG==True, the way it is done in arm, nps, and hspx\n", - " if oldmsupy == 0.0 or hr1fg: # Time to recompute\n", - " dummy = NSUR[step] * lsur\n", - " dec = 0.00982 * (dummy/sqrt(slsur))**0.6\n", - " src = 1020.0 * sqrt(slsur)/dummy\n", + " if oldmsupy == 0.0 or hr1fg: # Time to recompute\n", + " dummy = NSUR[step] * lsur\n", + " dec = 0.00982 * (dummy / sqrt(slsur)) ** 0.6\n", + " src = 1020.0 * sqrt(slsur) / dummy\n", "\n", " sursm = (surs + msupy) * 0.5\n", " dummy = sursm * 1.6\n", " if suri > 0.0:\n", - " d = dec*suri**0.6\n", + " d = dec * suri**0.6\n", " if d > sursm:\n", " surse = d\n", - " dummy = sursm * (1.0 + 0.6 * (sursm / surse)**3)\n", + " dummy = sursm * (1.0 + 0.6 * (sursm / surse) ** 3)\n", " tsuro = delt60 * src * dummy**1.67\n", - " suro = msupy if tsuro > msupy else tsuro\n", - " surs = 0.0 if tsuro > msupy else msupy - suro\n", + " suro = msupy if tsuro > msupy else tsuro\n", + " surs = 0.0 if tsuro > msupy else msupy - suro\n", " else:\n", " # IROUTE for RTOPFG==False\n", - " if oldmsupy == 0.0 or hr1fg: # Time to recompute\n", + " if oldmsupy == 0.0 or hr1fg: # Time to recompute\n", " dummy = NSUR[step] * lsur\n", - " dec = 0.00982 * (dummy/sqrt(slsur))**0.6\n", - " src = 1020.0 * sqrt(slsur)/dummy\n", - " ssupr = suri / delt60\n", - " surse = dec * ssupr**0.6 if ssupr > 0.0 else 0.0\n", + " dec = 0.00982 * (dummy / sqrt(slsur)) ** 0.6\n", + " src = 1020.0 * sqrt(slsur) / dummy\n", + " ssupr = suri / delt60\n", + " surse = dec * ssupr**0.6 if ssupr > 0.0 else 0.0\n", " sursnw = msupy\n", - " suro = 0.0\n", + " suro = 0.0\n", "\n", " for count in range(MAXLOOPS):\n", " if ssupr > 0.0:\n", " ratio = sursnw / surse\n", - " fact = 1.0 + 0.6 * ratio**3 if ratio <= 1.0 else 1.6\n", + " fact = 1.0 + 0.6 * ratio**3 if ratio <= 1.0 else 1.6\n", " else:\n", - " fact = 1.6\n", + " fact = 1.6\n", " ratio = 1e30\n", "\n", - " ffact = (delt60 * src * fact**1.667) * (sursnw**1.667)\n", - " fsuro = ffact - suro\n", - " dfact = -1.667 * ffact\n", + " ffact = (delt60 * src * fact**1.667) * (sursnw**1.667)\n", + " fsuro = ffact - suro\n", + " dfact = -1.667 * ffact\n", "\n", - " dfsuro = dfact/sursnw - 1.0\n", + " dfsuro = dfact / sursnw - 1.0\n", " if ratio <= 1.0:\n", - " dfsuro += (dfact/(fact * surse)) * 1.8 * ratio**2\n", + " dfsuro += (dfact / (fact * surse)) * 1.8 * ratio**2\n", " dsuro = fsuro / dfsuro\n", "\n", " suro = suro - dsuro\n", @@ -986,7 +1073,7 @@ " if rets > 0.0:\n", " if pet > rets:\n", " impev = rets\n", - " rets = 0.0\n", + " rets = 0.0\n", " else:\n", " impev = pet\n", " rets -= impev\n", @@ -995,13 +1082,15 @@ " IMPEV[step] = impev\n", "\n", " # return to IWATRX\n", - " RETS[step] = rets\n", - " SURI[step] = suri\n", - " SURO[step] = suro\n", - " SURS[step] = surs\n", + " RETS[step] = rets\n", + " SURI[step] = suri\n", + " SURO[step] = suro\n", + " SURS[step] = surs\n", "\n", " # done with MASTER step\n", - " return SURO \n", + " return SURO\n", + "\n", + "\n", "# TODO: make default output all params but allow specify" ] }, @@ -1012,42 +1101,44 @@ "outputs": [], "source": [ "def initm(siminfo, ui, flag, monthly, default):\n", - " ''' initialize timeseries with HSPF interpolation of monthly array or with fixed value'''\n", + " \"\"\"initialize timeseries with HSPF interpolation of monthly array or with fixed value\"\"\"\n", " if flag and monthly in ui:\n", " month = ui[monthly].values()\n", " return dayval(siminfo, list(month))\n", " else:\n", - " return full(siminfo['steps'], default)\n", - " \n", - " \n", + " return full(siminfo[\"steps\"], default)\n", + "\n", + "\n", "def hourflag(siminfo, hourfg, dofirst=False):\n", - " '''timeseries with 1 at desired hour and zero otherwise'''\n", + " \"\"\"timeseries with 1 at desired hour and zero otherwise\"\"\"\n", " hours24 = zeros(24)\n", " hours24[hourfg] = 1.0\n", " return hoursval(siminfo, hours24, dofirst)\n", "\n", "\n", "def hoursval(siminfo, hours24, dofirst=False, lapselike=False):\n", - " '''create hours flags, flag on the hour or lapse table over full simulation'''\n", - " start = siminfo['start']\n", - " stop = siminfo['stop']\n", - " freq = Minute(siminfo['delt'])\n", - "\n", - " dr = date_range(start=f'{start.year}-01-01', end=f'{stop.year}-12-31', freq=Minute(60))\n", + " \"\"\"create hours flags, flag on the hour or lapse table over full simulation\"\"\"\n", + " start = siminfo[\"start\"]\n", + " stop = siminfo[\"stop\"]\n", + " freq = Minute(siminfo[\"delt\"])\n", + "\n", + " dr = date_range(\n", + " start=f\"{start.year}-01-01\", end=f\"{stop.year}-12-31\", freq=Minute(60)\n", + " )\n", " hours = tile(hours24, (len(dr) + 23) // 24).astype(float)\n", " if dofirst:\n", " hours[0] = 1\n", "\n", - " ts = Series(hours[0:len(dr)], dr)\n", + " ts = Series(hours[0 : len(dr)], dr)\n", " if lapselike:\n", - " if ts.index.freq > freq: # upsample\n", + " if ts.index.freq > freq: # upsample\n", " ts = ts.resample(freq).asfreq().ffill()\n", - " elif ts.index.freq < freq: # downsample\n", + " elif ts.index.freq < freq: # downsample\n", " ts = ts.resample(freq).mean()\n", " else:\n", - " if ts.index.freq > freq: # upsample\n", + " if ts.index.freq > freq: # upsample\n", " ts = ts.resample(freq).asfreq().fillna(0.0)\n", - " elif ts.index.freq < freq: # downsample\n", + " elif ts.index.freq < freq: # downsample\n", " ts = ts.resample(freq).max()\n", " return ts.truncate(start, stop).to_numpy()" ] @@ -1126,7 +1217,7 @@ "# .assign(DateTime = lambda df: pd.to_datetime(df['Month']+'/'+df['Day']+'/'+df['Year']+' '+df['Time']))\n", "# .set_index('DateTime')\n", "# [['1-in']]\n", - "# .resample('15min').ffill() #Convert from 24hr to 15min record \n", + "# .resample('15min').ffill() #Convert from 24hr to 15min record\n", "# .loc[siminfo['start']:siminfo['stop']]\n", "# .to_numpy().flatten()/(1440/15)*et_factor #Convert from units of in/day to in/15min and apply et factor\n", "# )" @@ -1202,20 +1293,20 @@ "\n", "# for hru in hrus:\n", "# hru_str = hru.replace('/','').replace(', ','')\n", - " \n", + "\n", "# ui = {}\n", "# ui['errlen'] = 10 # errlen sets the length of the error array, which is indexed up to 9, so let's just set to 10\n", - "# ui['delt'] = siminfo['delt'] \n", - "# ui['steps'] = siminfo['steps'] \n", - " \n", + "# ui['delt'] = siminfo['delt']\n", + "# ui['steps'] = siminfo['steps']\n", + "\n", "# ts = {}\n", "# ts['DAYFG'] = hourflag(siminfo, 0, dofirst = True) # true the first time and at start of every day of simulation\n", "# ts['HRFG'] = hoursval(siminfo, ones(24), dofirst=True) # true the first time and at every hour of simulation\n", "# ts['HR1FG'] = hourflag(siminfo, 1, dofirst=True) # true the first time and at 1am every day of simulation\n", - " \n", + "\n", "# for param in ts_params:\n", "# ts[param] = wwhm_ts[param]\n", - " \n", + "\n", "# if hru_cat == 'per':\n", "# for param in ui_params_per:\n", "# ui[param] = wwhm_params_per.loc[hru][param]\n", @@ -1223,9 +1314,9 @@ "# ts[param] = numpy.full(siminfo['steps'], wwhm_params_per.loc[hru][param])\n", "# for param in opt_params_per:\n", "# ts[param] = numpy.zeros(siminfo['steps'])\n", - " \n", - "# hru_suro = _pwater_(ui, ts) * CONV_FACTOR # convert from in-acre/timestep to cfs \n", - " \n", + "\n", + "# hru_suro = _pwater_(ui, ts) * CONV_FACTOR # convert from in-acre/timestep to cfs\n", + "\n", "# if hru_cat == 'imp':\n", "# for param in ui_params_imp:\n", "# ui[param] = wwhm_params_imp.loc[hru][param]\n", @@ -1233,12 +1324,12 @@ "# ts[param] = numpy.full(siminfo['steps'], wwhm_params_imp.loc[hru][param])\n", "# for param in opt_params_imp:\n", "# ts[param] = numpy.zeros(siminfo['steps'])\n", - " \n", + "\n", "# hru_suro = _iwater_(ui, ts) * CONV_FACTOR # convert from in-acre/timestep to cfs\n", - " \n", + "\n", "# hspLite_suro[hru_str] = hru_suro\n", - " \n", - "# hru_df = pd.DataFrame(hru_suro, columns = [hru_str+'_cfs'], \n", + "\n", + "# hru_df = pd.DataFrame(hru_suro, columns = [hru_str+'_cfs'],\n", "# index = pd.date_range(start=siminfo['start'], periods=siminfo['steps'], freq='15min'))\n", "# hru_df.to_csv('timeseries\\hspLite\\SURO_'+hru_str+'.csv')" ] @@ -1358,9 +1449,13 @@ "metadata": {}, "outputs": [], "source": [ - "siminfo = {'start':pd.to_datetime('1980-01-01'), 'stop':pd.to_datetime('2000-12-31'), 'delt':60}\n", - "steps = (siminfo['stop']-siminfo['start']).days*(1440/siminfo['delt'])\n", - "siminfo['steps'] = int(steps)\n", + "siminfo = {\n", + " \"start\": pd.to_datetime(\"1980-01-01\"),\n", + " \"stop\": pd.to_datetime(\"2000-12-31\"),\n", + " \"delt\": 60,\n", + "}\n", + "steps = (siminfo[\"stop\"] - siminfo[\"start\"]).days * (1440 / siminfo[\"delt\"])\n", + "siminfo[\"steps\"] = int(steps)\n", "siminfo" ] }, @@ -1377,14 +1472,21 @@ "metadata": {}, "outputs": [], "source": [ - "precip = (pd.read_csv('timeseries\\compare_to_prev\\CIG_GFDL_tacoma_precip_mm.csv')\n", - " .assign(DateTime = lambda df: pd.to_datetime('1970-01-01')+pd.to_timedelta(df['times'], unit = 'hour'))\n", - " .set_index('DateTime')\n", - " .loc[siminfo['start']:siminfo['stop']]\n", - " .resample('1h').asfreq().fillna(0) #fill leap days with 0 since not in timeseries\n", - " [['PREC']]\n", - " .to_numpy().flatten()*0.0393701 #convert to inches\n", - " )" + "precip = (\n", + " pd.read_csv(\"timeseries\\compare_to_prev\\CIG_GFDL_tacoma_precip_mm.csv\")\n", + " .assign(\n", + " DateTime=lambda df: pd.to_datetime(\"1970-01-01\")\n", + " + pd.to_timedelta(df[\"times\"], unit=\"hour\")\n", + " )\n", + " .set_index(\"DateTime\")\n", + " .loc[siminfo[\"start\"] : siminfo[\"stop\"]]\n", + " .resample(\"1h\")\n", + " .asfreq()\n", + " .fillna(0)[[\"PREC\"]] # fill leap days with 0 since not in timeseries\n", + " .to_numpy()\n", + " .flatten()\n", + " * 0.0393701 # convert to inches\n", + ")" ] }, { @@ -1415,19 +1517,30 @@ "# .to_numpy().flatten()*et_factor*0.0393701 #convert to inches\n", "# )\n", "\n", - "_wwhm_evap = (pd.read_csv('timeseries\\compare_to_prev\\Evap_wwhm_40inEast_24hr.txt', sep = '\\s+')\n", - " .assign(Month = lambda df: df['Date'].str[5:7])\n", - " .groupby('Month').mean()\n", - " )\n", - "wwhm_evap = (pd.concat([_wwhm_evap]*22, ignore_index = True)\n", - " [['1-in']]\n", - " .assign(datetime = pd.date_range(start=siminfo['start']-pd.Timedelta(days=365), periods=12*22, freq='M'))\n", - " .set_index('datetime')\n", - " .resample('1D').bfill() #Convert from monthly to daily frequency\n", - " .resample('1h').ffill() #Convert from daily to hourly frequency\n", - " .loc[siminfo['start']:siminfo['stop']]#*25.4\n", - " .to_numpy().flatten()/(1440/60)*et_factor #Convert from units of in/day to in/hr and apply et factor\n", - " )" + "_wwhm_evap = (\n", + " pd.read_csv(\"timeseries\\compare_to_prev\\Evap_wwhm_40inEast_24hr.txt\", sep=\"\\s+\")\n", + " .assign(Month=lambda df: df[\"Date\"].str[5:7])\n", + " .groupby(\"Month\")\n", + " .mean()\n", + ")\n", + "wwhm_evap = (\n", + " pd.concat([_wwhm_evap] * 22, ignore_index=True)[[\"1-in\"]]\n", + " .assign(\n", + " datetime=pd.date_range(\n", + " start=siminfo[\"start\"] - pd.Timedelta(days=365), periods=12 * 22, freq=\"M\"\n", + " )\n", + " )\n", + " .set_index(\"datetime\")\n", + " .resample(\"1D\")\n", + " .bfill() # Convert from monthly to daily frequency\n", + " .resample(\"1h\")\n", + " .ffill() # Convert from daily to hourly frequency\n", + " .loc[siminfo[\"start\"] : siminfo[\"stop\"]] # *25.4\n", + " .to_numpy()\n", + " .flatten()\n", + " / (1440 / 60)\n", + " * et_factor # Convert from units of in/day to in/hr and apply et factor\n", + ")" ] }, { @@ -1454,7 +1567,7 @@ "metadata": {}, "outputs": [], "source": [ - "test_ts = {'PREC':precip, 'PETINP':wwhm_evap}\n", + "test_ts = {\"PREC\": precip, \"PETINP\": wwhm_evap}\n", "test_ts" ] }, @@ -1471,7 +1584,7 @@ "metadata": {}, "outputs": [], "source": [ - "wwhm_params_imp = pd.read_csv('wwhm\\WWHM_IMPLNDS.csv', index_col=0)\n", + "wwhm_params_imp = pd.read_csv(\"wwhm\\WWHM_IMPLNDS.csv\", index_col=0)\n", "wwhm_params_imp" ] }, @@ -1481,7 +1594,7 @@ "metadata": {}, "outputs": [], "source": [ - "wwhm_params_per = pd.read_csv('wwhm\\WWHM_PERLNDS.csv', index_col=0)\n", + "wwhm_params_per = pd.read_csv(\"wwhm\\WWHM_PERLNDS.csv\", index_col=0)\n", "wwhm_params_per" ] }, @@ -1498,59 +1611,76 @@ "metadata": {}, "outputs": [], "source": [ - "MAXLOOPS = 100 # newton method max loops\n", - "TOLERANCE = 0.01 # newton method exit tolerance\n", - "CONV_FACTOR = 25.4 # convert from in/timestep to mm/timestep #(1/12)*43560*(1/(15*60)) # convert from in-acre/timestep/acre to cfs/acre\n", + "MAXLOOPS = 100 # newton method max loops\n", + "TOLERANCE = 0.01 # newton method exit tolerance\n", + "CONV_FACTOR = 25.4 # convert from in/timestep to mm/timestep #(1/12)*43560*(1/(15*60)) # convert from in-acre/timestep/acre to cfs/acre\n", "\n", "hspLite_suro = {}\n", "\n", - "hrus = ['Roads/Flat','A/B, Pasture, Flat']\n", - "hru_cats = ['imp','per']\n", + "hrus = [\"Roads/Flat\", \"A/B, Pasture, Flat\"]\n", + "hru_cats = [\"imp\", \"per\"]\n", "i = 0\n", "\n", "for hru in hrus:\n", " hru_cat = hru_cats[i]\n", " i = i + 1\n", - " hru_str = hru.replace('/','').replace(', ','')\n", - " \n", + " hru_str = hru.replace(\"/\", \"\").replace(\", \", \"\")\n", + "\n", " ui = {}\n", - " ui['errlen'] = 10 # errlen sets the length of the error array, which is indexed up to 9, so let's just set to 10\n", - " ui['delt'] = siminfo['delt'] \n", - " ui['steps'] = siminfo['steps'] \n", - " \n", + " ui[\"errlen\"] = (\n", + " 10 # errlen sets the length of the error array, which is indexed up to 9, so let's just set to 10\n", + " )\n", + " ui[\"delt\"] = siminfo[\"delt\"]\n", + " ui[\"steps\"] = siminfo[\"steps\"]\n", + "\n", " ts = {}\n", - " ts['DAYFG'] = hourflag(siminfo, 0, dofirst = True) # true the first time and at start of every day of simulation\n", - " ts['HRFG'] = hoursval(siminfo, ones(24), dofirst=True) # true the first time and at every hour of simulation\n", - " ts['HR1FG'] = hourflag(siminfo, 1, dofirst=True) # true the first time and at 1am every day of simulation\n", - " \n", + " ts[\"DAYFG\"] = hourflag(\n", + " siminfo, 0, dofirst=True\n", + " ) # true the first time and at start of every day of simulation\n", + " ts[\"HRFG\"] = hoursval(\n", + " siminfo, ones(24), dofirst=True\n", + " ) # true the first time and at every hour of simulation\n", + " ts[\"HR1FG\"] = hourflag(\n", + " siminfo, 1, dofirst=True\n", + " ) # true the first time and at 1am every day of simulation\n", + "\n", " for param in ts_params:\n", " ts[param] = test_ts[param]\n", - " \n", - " if hru_cat == 'per':\n", + "\n", + " if hru_cat == \"per\":\n", " for param in ui_params_per:\n", " ui[param] = wwhm_params_per.loc[hru][param]\n", " for param in ui_ts_params_per:\n", - " ts[param] = numpy.full(siminfo['steps'], wwhm_params_per.loc[hru][param])\n", + " ts[param] = numpy.full(siminfo[\"steps\"], wwhm_params_per.loc[hru][param])\n", " for param in opt_params_per:\n", - " ts[param] = numpy.zeros(siminfo['steps'])\n", - " \n", - " hru_suro = _pwater_(ui, ts) * CONV_FACTOR # convert from in/timestep to mm/timestep # convert from in-acre/timestep/acre to cfs/acre\n", - " \n", - " if hru_cat == 'imp':\n", + " ts[param] = numpy.zeros(siminfo[\"steps\"])\n", + "\n", + " hru_suro = (\n", + " _pwater_(ui, ts) * CONV_FACTOR\n", + " ) # convert from in/timestep to mm/timestep # convert from in-acre/timestep/acre to cfs/acre\n", + "\n", + " if hru_cat == \"imp\":\n", " for param in ui_params_imp:\n", " ui[param] = wwhm_params_imp.loc[hru][param]\n", " for param in ui_ts_params_imp:\n", - " ts[param] = numpy.full(siminfo['steps'], wwhm_params_imp.loc[hru][param])\n", + " ts[param] = numpy.full(siminfo[\"steps\"], wwhm_params_imp.loc[hru][param])\n", " for param in opt_params_imp:\n", - " ts[param] = numpy.zeros(siminfo['steps'])\n", - " \n", - " hru_suro = _iwater_(ui, ts) * CONV_FACTOR # convert from in/timestep to mm/timestep # convert from in-acre/timestep/acre to cfs/acre\n", - " \n", + " ts[param] = numpy.zeros(siminfo[\"steps\"])\n", + "\n", + " hru_suro = (\n", + " _iwater_(ui, ts) * CONV_FACTOR\n", + " ) # convert from in/timestep to mm/timestep # convert from in-acre/timestep/acre to cfs/acre\n", + "\n", " hspLite_suro[hru_str] = hru_suro\n", - " \n", - " hru_df = pd.DataFrame(hru_suro, columns = [hru_str+'_mm'],#+'_cfs'], \n", - " index = pd.date_range(start=siminfo['start'], periods=siminfo['steps'], freq='60min'))\n", - " hru_df.to_csv('timeseries\\compare_to_prev\\hspLite_results\\SURO_'+hru_str+'.csv')" + "\n", + " hru_df = pd.DataFrame(\n", + " hru_suro,\n", + " columns=[hru_str + \"_mm\"], # +'_cfs'],\n", + " index=pd.date_range(\n", + " start=siminfo[\"start\"], periods=siminfo[\"steps\"], freq=\"60min\"\n", + " ),\n", + " )\n", + " hru_df.to_csv(\"timeseries\\compare_to_prev\\hspLite_results\\SURO_\" + hru_str + \".csv\")" ] }, { @@ -1577,8 +1707,8 @@ "metadata": {}, "outputs": [], "source": [ - "prev_hru = 'hru010'#'hru250'\n", - "new_hru = 'ABPastureFlat'#'RoadsFlat' " + "prev_hru = \"hru010\" #'hru250'\n", + "new_hru = \"ABPastureFlat\" #'RoadsFlat'" ] }, { @@ -1587,12 +1717,19 @@ "metadata": {}, "outputs": [], "source": [ - "prev_suro = (pd.read_csv(os.path.join('timeseries\\compare_to_prev\\previous_results','15V5_'+prev_hru+'_suro.csv'), parse_dates = ['datetime'])\n", - " .assign(datetime = lambda df: df['datetime'].dt.tz_localize(None))\n", - " .set_index('datetime')\n", - " .loc[siminfo['start']:siminfo['stop']]\n", - " .rename(columns = {prev_hru:prev_hru+'_mm'})\n", - " )\n", + "prev_suro = (\n", + " pd.read_csv(\n", + " os.path.join(\n", + " \"timeseries\\compare_to_prev\\previous_results\",\n", + " \"15V5_\" + prev_hru + \"_suro.csv\",\n", + " ),\n", + " parse_dates=[\"datetime\"],\n", + " )\n", + " .assign(datetime=lambda df: df[\"datetime\"].dt.tz_localize(None))\n", + " .set_index(\"datetime\")\n", + " .loc[siminfo[\"start\"] : siminfo[\"stop\"]]\n", + " .rename(columns={prev_hru: prev_hru + \"_mm\"})\n", + ")\n", "prev_suro" ] }, @@ -1602,7 +1739,11 @@ "metadata": {}, "outputs": [], "source": [ - "hsp_suro = pd.read_csv('timeseries\\compare_to_prev\\hspLite_results\\SURO_'+new_hru+'.csv', index_col = 0, parse_dates = True)\n", + "hsp_suro = pd.read_csv(\n", + " \"timeseries\\compare_to_prev\\hspLite_results\\SURO_\" + new_hru + \".csv\",\n", + " index_col=0,\n", + " parse_dates=True,\n", + ")\n", "hsp_suro" ] }, @@ -1612,11 +1753,12 @@ "metadata": {}, "outputs": [], "source": [ - "compare_df = (prev_suro.resample('D').sum()\n", - " .join(hsp_suro.resample('D').sum(), \n", - " how = 'left')\n", - " .assign(Diff = lambda df: df[prev_hru+'_mm'] - df[new_hru+'_mm'])\n", - " )\n", + "compare_df = (\n", + " prev_suro.resample(\"D\")\n", + " .sum()\n", + " .join(hsp_suro.resample(\"D\").sum(), how=\"left\")\n", + " .assign(Diff=lambda df: df[prev_hru + \"_mm\"] - df[new_hru + \"_mm\"])\n", + ")\n", "compare_df" ] }, @@ -1626,23 +1768,29 @@ "metadata": {}, "outputs": [], "source": [ - "fig = plt.figure(figsize = (16,8))\n", + "fig = plt.figure(figsize=(16, 8))\n", "ax = fig.add_subplot(211)\n", - "ax.plot(compare_df[prev_hru+'_mm'], label = 'Prev')\n", - "ax.plot(compare_df[new_hru+'_mm'], label = 'hspLite')\n", + "ax.plot(compare_df[prev_hru + \"_mm\"], label=\"Prev\")\n", + "ax.plot(compare_df[new_hru + \"_mm\"], label=\"hspLite\")\n", "ax.legend()\n", - "ax.set_xlabel('Simulation Period')\n", - "ax.set_ylabel('Surface Runoff (mm)')\n", - "ax.set_title('SURO From 1 Acre')\n", + "ax.set_xlabel(\"Simulation Period\")\n", + "ax.set_ylabel(\"Surface Runoff (mm)\")\n", + "ax.set_title(\"SURO From 1 Acre\")\n", "\n", "ax2 = fig.add_subplot(212)\n", - "ax2.plot(compare_df['Diff'])\n", - "ax2.set_xlabel('Simulation Period')\n", - "ax2.set_ylabel('Difference (mm)')\n", - "ax2.set_title('Difference between Prev and hspLite')\n", - "\n", - "fig.subplots_adjust(hspace = 0.3)\n", - "fig.savefig('timeseries\\compare_to_prev\\SURO_'+prev_hru+'_'+new_hru+'_Comparison_wwhmEvap.png')" + "ax2.plot(compare_df[\"Diff\"])\n", + "ax2.set_xlabel(\"Simulation Period\")\n", + "ax2.set_ylabel(\"Difference (mm)\")\n", + "ax2.set_title(\"Difference between Prev and hspLite\")\n", + "\n", + "fig.subplots_adjust(hspace=0.3)\n", + "fig.savefig(\n", + " \"timeseries\\compare_to_prev\\SURO_\"\n", + " + prev_hru\n", + " + \"_\"\n", + " + new_hru\n", + " + \"_Comparison_wwhmEvap.png\"\n", + ")" ] }, { diff --git a/ipynb/kc_cost_table/kc_cost_tables.ipynb b/ipynb/kc_cost_table/kc_cost_tables.ipynb index 65d834ff..931e3d4d 100644 --- a/ipynb/kc_cost_table/kc_cost_tables.ipynb +++ b/ipynb/kc_cost_table/kc_cost_tables.ipynb @@ -221,7 +221,9 @@ } ], "source": [ - "df = pandas.read_excel(\"./kc_cost_tables.xlsx\", sheet_name=0).rename(columns=lambda c: c.replace(\" \", \"_\").lower())\n", + "df = pandas.read_excel(\"./kc_cost_tables.xlsx\", sheet_name=0).rename(\n", + " columns=lambda c: c.replace(\" \", \"_\").lower()\n", + ")\n", "df.head()" ] }, @@ -231,7 +233,17 @@ "metadata": {}, "outputs": [], "source": [ - "cols = [\"description\",\t\"code\",\t\"tacoma_type\", \"sizing_method\", \"sizing_unit\", \"tdcc_cpu\",\t\"tincc_cpu\",\t\"totalcapital_cpu\",\t\"om_cpu\"]" + "cols = [\n", + " \"description\",\n", + " \"code\",\n", + " \"tacoma_type\",\n", + " \"sizing_method\",\n", + " \"sizing_unit\",\n", + " \"tdcc_cpu\",\n", + " \"tincc_cpu\",\n", + " \"totalcapital_cpu\",\n", + " \"om_cpu\",\n", + "]" ] }, { @@ -240,7 +252,9 @@ "metadata": {}, "outputs": [], "source": [ - "df[cols].round(2).reset_index().to_json('kc_cost_table.json', orient='records', indent=2)" + "df[cols].round(2).reset_index().to_json(\n", + " \"kc_cost_table.json\", orient=\"records\", indent=2\n", + ")" ] }, { diff --git a/ipynb/nomographs/01-build_volume_nomos.ipynb b/ipynb/nomographs/01-build_volume_nomos.ipynb index 51ae5e2e..697d252d 100644 --- a/ipynb/nomographs/01-build_volume_nomos.ipynb +++ b/ipynb/nomographs/01-build_volume_nomos.ipynb @@ -11,7 +11,7 @@ "from pathlib import Path\n", "import pandas\n", "import numpy\n", - "import matplotlib.pyplot as plt\n" + "import matplotlib.pyplot as plt" ] }, { @@ -46,7 +46,7 @@ } ], "source": [ - "volume_paths = sorted((Path(\"./data/volume\").glob('*.csv')))\n", + "volume_paths = sorted((Path(\"./data/volume\").glob(\"*.csv\")))\n", "volume_paths" ] }, @@ -64,7 +64,6 @@ "outputs": [], "source": [ "def create_met_dataframe() -> pandas.DataFrame:\n", - "\n", " string = \"\"\"\n", "epoch\tmean_annual_precip_depth_inches\tdesign_storm_precip_depth_inches\tro_coeff\n", "1980s\t35.539\t0.652\t0.450\n", @@ -77,15 +76,17 @@ "\n", " return df\n", "\n", + "\n", "met = (\n", " create_met_dataframe()\n", - " .assign(area_acres = 50) # per jamie feldman and sarah welsh\n", - " .assign(design_storm_volume_cuft = lambda df: (\n", - "\n", - " df['ro_coeff'] \n", - " * df['area_acres'] * 43560 # acres to sqft\n", - " * df['design_storm_precip_depth_inches'] / 12 # inches to ft\n", - " \n", + " .assign(area_acres=50) # per jamie feldman and sarah welsh\n", + " .assign(\n", + " design_storm_volume_cuft=lambda df: (\n", + " df[\"ro_coeff\"]\n", + " * df[\"area_acres\"]\n", + " * 43560 # acres to sqft\n", + " * df[\"design_storm_precip_depth_inches\"]\n", + " / 12 # inches to ft\n", " )\n", " )\n", ")" @@ -239,52 +240,55 @@ "for f, (_, row) in zip(volume_paths, met.iterrows()):\n", " df = pandas.read_csv(f)\n", " epoch = f.stem.split(\"_\")[0]\n", - " assert epoch == row.epoch, (row,f, epoch)\n", + " assert epoch == row.epoch, (row, f, epoch)\n", "\n", - " df['design_storm_volume_cuft'] = row.design_storm_volume_cuft\n", - " df['vol_cuft'] = df['Vol_cf']\n", - " df['size_fraction'] = df['vol_cuft'] / df['design_storm_volume_cuft']\n", - " df['ddt_hr'] = df['DDT_hr']\n", - " df['capture_fraction'] = numpy.clip( df['Capture_Efficiency_%'] / 100, 0, 1.0) \n", - " nulls = df['ddt_hr'].drop_duplicates().to_frame()\n", - " nulls['size_fraction'] = 0\n", - " nulls['capture_fraction'] = 0\n", - " nulls['vol_cuft'] = 0.0\n", + " df[\"design_storm_volume_cuft\"] = row.design_storm_volume_cuft\n", + " df[\"vol_cuft\"] = df[\"Vol_cf\"]\n", + " df[\"size_fraction\"] = df[\"vol_cuft\"] / df[\"design_storm_volume_cuft\"]\n", + " df[\"ddt_hr\"] = df[\"DDT_hr\"]\n", + " df[\"capture_fraction\"] = numpy.clip(df[\"Capture_Efficiency_%\"] / 100, 0, 1.0)\n", + " nulls = df[\"ddt_hr\"].drop_duplicates().to_frame()\n", + " nulls[\"size_fraction\"] = 0\n", + " nulls[\"capture_fraction\"] = 0\n", + " nulls[\"vol_cuft\"] = 0.0\n", "\n", " df = pandas.concat([df, nulls], ignore_index=True)\n", "\n", " ls = []\n", " max_s = df.size_fraction.max()\n", " max_v = df.vol_cuft.max()\n", - " for j, gp in df.groupby(['ddt_hr'], as_index=False):\n", + " for j, gp in df.groupby([\"ddt_hr\"], as_index=False):\n", " if gp.size_fraction.max() < max_s:\n", - " dct = {\"size_fraction\": max_s, 'ddt_hr':j[0], 'vol_cuft': max_v}\n", + " dct = {\"size_fraction\": max_s, \"ddt_hr\": j[0], \"vol_cuft\": max_v}\n", " ls.append(dct)\n", "\n", - " df = pandas.concat([df, pandas.DataFrame(ls)]).sort_values(['ddt_hr', 'size_fraction']).fillna(method='ffill')\n", + " df = (\n", + " pandas.concat([df, pandas.DataFrame(ls)])\n", + " .sort_values([\"ddt_hr\", \"size_fraction\"])\n", + " .fillna(method=\"ffill\")\n", + " )\n", "\n", - " out = df.reindex(columns=[\"vol_cuft\", \"size_fraction\", \"ddt_hr\", \"capture_fraction\"]).round(4)\n", + " out = df.reindex(\n", + " columns=[\"vol_cuft\", \"size_fraction\", \"ddt_hr\", \"capture_fraction\"]\n", + " ).round(4)\n", " out.to_csv(outdir / (row.epoch + \".csv\"), index=False)\n", "\n", " df.to_csv(outdirqa / (row.epoch + \".csv\"), index=False)\n", "\n", " fig, ax = plt.subplots()\n", "\n", - " for i, df in out.groupby('ddt_hr'):\n", + " for i, df in out.groupby(\"ddt_hr\"):\n", " ax.plot(\n", - " df['size_fraction'], \n", - " df['capture_fraction'] * 100, \n", - " marker='o', ms=3, \n", - " label=i\n", + " df[\"size_fraction\"], df[\"capture_fraction\"] * 100, marker=\"o\", ms=3, label=i\n", " )\n", "\n", - " ax.set_xlim(-.2,6)\n", - " ax.set_ylabel('capture %')\n", - " ax.set_xlabel('bmp volume as fraction of 91st percentile design volume')\n", + " ax.set_xlim(-0.2, 6)\n", + " ax.set_ylabel(\"capture %\")\n", + " ax.set_xlabel(\"bmp volume as fraction of 91st percentile design volume\")\n", "\n", - " fig.legend(loc='center right', bbox_to_anchor=(1.05, 0.5))\n", + " fig.legend(loc=\"center right\", bbox_to_anchor=(1.05, 0.5))\n", "\n", - " fig.savefig(outdirqa / (row.epoch + \".png\"), dpi=300, bbox_inches='tight')\n" + " fig.savefig(outdirqa / (row.epoch + \".png\"), dpi=300, bbox_inches=\"tight\")" ] } ], diff --git a/ipynb/nomographs/02-build_flow_nomos.ipynb b/ipynb/nomographs/02-build_flow_nomos.ipynb index db3d3cc8..63c4a883 100644 --- a/ipynb/nomographs/02-build_flow_nomos.ipynb +++ b/ipynb/nomographs/02-build_flow_nomos.ipynb @@ -14,6 +14,7 @@ "import matplotlib.pyplot as plt\n", "\n", "import pint\n", + "\n", "ureg = pint.UnitRegistry()" ] }, @@ -35,8 +36,8 @@ ], "source": [ "CFS_per_ACRE_to_INHR = (\n", - " (ureg(\"cubic_feet / second\") / ureg(\"acres\")).to(\"inches / hr\").magnitude\n", - " )\n", + " (ureg(\"cubic_feet / second\") / ureg(\"acres\")).to(\"inches / hr\").magnitude\n", + ")\n", "CFS_per_ACRE_to_INHR" ] }, @@ -72,7 +73,7 @@ } ], "source": [ - "flow_paths = list(Path(\"./data/flow\").glob('*.csv'))\n", + "flow_paths = list(Path(\"./data/flow\").glob(\"*.csv\"))\n", "flow_paths" ] }, @@ -90,7 +91,6 @@ "outputs": [], "source": [ "def create_met_dataframe() -> pandas.DataFrame:\n", - "\n", " string = \"\"\"\n", "epoch\tmean_annual_precip_depth_inches\tdesign_storm_precip_depth_inches\tro_coeff\n", "1980s\t35.539\t0.652\t0.450\n", @@ -103,10 +103,9 @@ "\n", " return df\n", "\n", + "\n", "met = (\n", - " create_met_dataframe()\n", - " .assign(area_acres = 1) # per jamie feldman and sarah welsh\n", - " \n", + " create_met_dataframe().assign(area_acres=1) # per jamie feldman and sarah welsh\n", ")" ] }, @@ -264,44 +263,46 @@ "\n", " eff_area = row.area_acres * row.ro_coeff\n", "\n", - " \n", - " df['flowrate_cfs'] = df[\"CutoffQ_cfs\"]\n", - " df['tc_minutes'] = df[\"Tc_min\"]\n", - " df['intensity_inhr'] = (df[\"flowrate_cfs\"] / eff_area) * CFS_per_ACRE_to_INHR\n", - " df['capture_fraction'] = numpy.clip( df['Capture_Efficiency_%'] / 100, 0, 1.0) \n", - " \n", - " nulls = df['tc_minutes'].drop_duplicates().to_frame()\n", - " nulls['intensity_inhr'] = 0\n", - " nulls['capture_fraction'] = 0\n", + " df[\"flowrate_cfs\"] = df[\"CutoffQ_cfs\"]\n", + " df[\"tc_minutes\"] = df[\"Tc_min\"]\n", + " df[\"intensity_inhr\"] = (df[\"flowrate_cfs\"] / eff_area) * CFS_per_ACRE_to_INHR\n", + " df[\"capture_fraction\"] = numpy.clip(df[\"Capture_Efficiency_%\"] / 100, 0, 1.0)\n", + "\n", + " nulls = df[\"tc_minutes\"].drop_duplicates().to_frame()\n", + " nulls[\"intensity_inhr\"] = 0\n", + " nulls[\"capture_fraction\"] = 0\n", "\n", - " df = pandas.concat([df, nulls], ignore_index=True).sort_values(['tc_minutes', 'intensity_inhr'])\n", + " df = pandas.concat([df, nulls], ignore_index=True).sort_values(\n", + " [\"tc_minutes\", \"intensity_inhr\"]\n", + " )\n", "\n", - " out = df.reindex(columns=[\"flowrate_cfs\", \"intensity_inhr\", \"tc_minutes\", \"capture_fraction\"]).round(4)\n", + " out = df.reindex(\n", + " columns=[\"flowrate_cfs\", \"intensity_inhr\", \"tc_minutes\", \"capture_fraction\"]\n", + " ).round(4)\n", "\n", " out.to_csv(outdir / (row.epoch + \".csv\"), index=False)\n", " df.to_csv(outdirqa / (row.epoch + \".csv\"), index=False)\n", "\n", " fig, ax = plt.subplots()\n", "\n", - " for i, df in out.groupby('tc_minutes'):\n", + " for i, df in out.groupby(\"tc_minutes\"):\n", " ax.plot(\n", - " df['intensity_inhr'], \n", - " df['capture_fraction'] * 100, \n", - " marker='o', ms=3, \n", - " label=i\n", + " df[\"intensity_inhr\"],\n", + " df[\"capture_fraction\"] * 100,\n", + " marker=\"o\",\n", + " ms=3,\n", + " label=i,\n", " )\n", "\n", - " ax.set_title(f'flow-based capture for {row.epoch}')\n", + " ax.set_title(f\"flow-based capture for {row.epoch}\")\n", "\n", - " ax.set_xlim(-.02,1)\n", - " ax.set_ylabel('capture %')\n", - " ax.set_xlabel('bmp design intensity (in/hr)')\n", + " ax.set_xlim(-0.02, 1)\n", + " ax.set_ylabel(\"capture %\")\n", + " ax.set_xlabel(\"bmp design intensity (in/hr)\")\n", "\n", - " fig.legend(loc='center right', bbox_to_anchor=(1.1, 0.5))\n", + " fig.legend(loc=\"center right\", bbox_to_anchor=(1.1, 0.5))\n", "\n", - " \n", - " # fig.savefig(outdirqa / (row.epoch + \".png\"), dpi=300, bbox_inches='tight')\n", - "\n" + " # fig.savefig(outdirqa / (row.epoch + \".png\"), dpi=300, bbox_inches='tight')" ] }, { diff --git a/ipynb/nomographs/03-build_met_config.ipynb b/ipynb/nomographs/03-build_met_config.ipynb index b1070fba..bca78a72 100644 --- a/ipynb/nomographs/03-build_met_config.ipynb +++ b/ipynb/nomographs/03-build_met_config.ipynb @@ -8,10 +8,7 @@ "source": [ "from io import StringIO\n", "\n", - "from pathlib import Path\n", - "import pandas\n", - "\n", - "import json" + "import pandas" ] }, { @@ -21,7 +18,6 @@ "outputs": [], "source": [ "def create_nomo_dataframe() -> pandas.DataFrame:\n", - "\n", " string = \"\"\"\n", "epoch\tvolume_nomograph\tflow_nomograph\n", "1980s\tnomographs/volume/1980s.csv\tnomographs/flow/1980s.csv\n", @@ -34,12 +30,11 @@ "\n", " return df\n", "\n", - "met = (\n", - " create_nomo_dataframe()\n", - ")\n", "\n", - "with open('nomo.json', 'w') as f:\n", - " f.write(met.to_json(orient='table', indent=2, index=False))" + "met = create_nomo_dataframe()\n", + "\n", + "with open(\"nomo.json\", \"w\") as f:\n", + " f.write(met.to_json(orient=\"table\", indent=2, index=False))" ] }, { diff --git a/ipynb/static_metrics/reports_data_cleanup.ipynb b/ipynb/static_metrics/reports_data_cleanup.ipynb index 2c4e9fe4..c76f184b 100644 --- a/ipynb/static_metrics/reports_data_cleanup.ipynb +++ b/ipynb/static_metrics/reports_data_cleanup.ipynb @@ -7,8 +7,8 @@ "outputs": [], "source": [ "import sys\n", - "sys.path.append(\"../../stormpiper/\")\n", - "import stormpiper" + "\n", + "sys.path.append(\"../../stormpiper/\")" ] }, { @@ -27,9 +27,8 @@ "outputs": [], "source": [ "import pandas\n", - "import json\n", "from datetime import datetime\n", - "from sqlalchemy import create_engine\n" + "from sqlalchemy import create_engine" ] }, { @@ -38,7 +37,7 @@ "metadata": {}, "outputs": [], "source": [ - "conn_str=\"postgresql+psycopg2://stormpiper:supersafety@localhost:5432/stormpiper\"\n", + "conn_str = \"postgresql+psycopg2://stormpiper:supersafety@localhost:5432/stormpiper\"\n", "engine = create_engine(conn_str)" ] }, @@ -67,17 +66,10 @@ "metadata": {}, "outputs": [], "source": [ - "result_fields = [\n", - " {\n", - " 'field':c\n", - " }\n", - " for c in list(subbasin_info.columns)\n", - "]\n", + "result_fields = [{\"field\": c} for c in list(subbasin_info.columns)]\n", "\n", - "result_fields_df = (\n", - " pandas.DataFrame(result_fields)\n", - ")\n", - "# result_fields_df.to_csv(f'result_fields_{datetime.utcnow().strftime(\"%Y%m%d-%H%M%S\")}.csv') " + "result_fields_df = pandas.DataFrame(result_fields)\n", + "# result_fields_df.to_csv(f'result_fields_{datetime.utcnow().strftime(\"%Y%m%d-%H%M%S\")}.csv')" ] }, { @@ -96,11 +88,23 @@ "metadata": {}, "outputs": [], "source": [ - "results = pandas.read_csv(\"./static_subbasin_metrics.csv\").rename(columns={\"SUBBASIN\": \"subbasin\"}).set_index('subbasin')\n", "results = (\n", - " results\n", - " .drop(columns=[c for c in results.columns if 'unnamed' in c.lower()])\n", - " .join(equity_ix.set_index('subbasin')[[\"access\",\t\"economic_value\",\t\"environmental_value\",\t\"livability_value\",\t\"opportunity_value\"]])\n", + " pandas.read_csv(\"./static_subbasin_metrics.csv\")\n", + " .rename(columns={\"SUBBASIN\": \"subbasin\"})\n", + " .set_index(\"subbasin\")\n", + ")\n", + "results = results.drop(\n", + " columns=[c for c in results.columns if \"unnamed\" in c.lower()]\n", + ").join(\n", + " equity_ix.set_index(\"subbasin\")[\n", + " [\n", + " \"access\",\n", + " \"economic_value\",\n", + " \"environmental_value\",\n", + " \"livability_value\",\n", + " \"opportunity_value\",\n", + " ]\n", + " ]\n", ")\n", "results.head()" ] @@ -141,7 +145,7 @@ " # growth centers\n", " \"Landuse Tacoma Mall Regional Growth Center\": \"RGCTM\",\n", " \"Landuse Downtown Regional Growth Center\": \"RGCD\",\n", - "}\n" + "}" ] }, { @@ -154,46 +158,53 @@ " {\n", " \"long_name\": c,\n", " \"prefix\": \"lu\"\n", - " if \"landuse\" in c.lower()\n", - " else \"lc\"\n", - " if \"landcover\" in c.lower()\n", - " else \"\",\n", + " if \"landuse\" in c.lower()\n", + " else \"lc\"\n", + " if \"landcover\" in c.lower()\n", + " else \"\",\n", " \"code\": lu_map.get(c, \"\"),\n", " \"field_base\": lu_map.get(c, c.lower())\n", " .lower()\n", - " .replace(\" \", \"_\").replace(\"-\", \"_\")\n", + " .replace(\" \", \"_\")\n", + " .replace(\"-\", \"_\")\n", " .replace(\"landuse_\", \"\")\n", " .replace(\"landcover_\", \"\")\n", " .replace(\"impervious\", \"imp\"),\n", " \"units\": \"score\"\n", - " if \"age\" in c.lower()\n", - " else \"count\"\n", - " if \"discharge_points\" in c.lower()\n", - " else \"score\"\n", - " if \"pavement\" in c.lower()\n", - " else \"degC\"\n", - " if \"urban_heat\" in c.lower()\n", - " else \"pct\" \n", - " if any(k in c.lower() for k in ['landcover', \"landuse\", \"biodiversity\"])\n", - " else \"\",\n", + " if \"age\" in c.lower()\n", + " else \"count\"\n", + " if \"discharge_points\" in c.lower()\n", + " else \"score\"\n", + " if \"pavement\" in c.lower()\n", + " else \"degC\"\n", + " if \"urban_heat\" in c.lower()\n", + " else \"pct\"\n", + " if any(k in c.lower() for k in [\"landcover\", \"landuse\", \"biodiversity\"])\n", + " else \"\",\n", " }\n", " for c in list(results.columns)\n", "]\n", "\n", "cleaned_fields_df = (\n", " pandas.DataFrame(cleaned_fields)\n", - " .assign(field=lambda df: (df['prefix'] + \"_\" + df[\"field_base\"] + \"_\" + df[\"units\"]).str.strip(\"_\"))\n", - " .assign(description='')\n", - " .assign(results_group_short_name='')\n", - " .assign(results_group_display_name='')\n", - " .assign(priority_group_short_name='')\n", - " .assign(priority_group_display_name='')\n", + " .assign(\n", + " field=lambda df: (\n", + " df[\"prefix\"] + \"_\" + df[\"field_base\"] + \"_\" + df[\"units\"]\n", + " ).str.strip(\"_\")\n", + " )\n", + " .assign(description=\"\")\n", + " .assign(results_group_short_name=\"\")\n", + " .assign(results_group_display_name=\"\")\n", + " .assign(priority_group_short_name=\"\")\n", + " .assign(priority_group_display_name=\"\")\n", ")\n", "\n", "cleaned_fields = cleaned_fields_df.to_dict(\"records\")\n", "\n", "# print(json.dumps(cleaned_fields, indent=2))\n", - "cleaned_fields_df.to_csv(f'field_manifest_{datetime.utcnow().strftime(\"%Y%m%d-%H%M%S\")}.csv')" + "cleaned_fields_df.to_csv(\n", + " f\"field_manifest_{datetime.utcnow().strftime('%Y%m%d-%H%M%S')}.csv\"\n", + ")" ] }, { @@ -202,8 +213,12 @@ "metadata": {}, "outputs": [], "source": [ - "clean_results = results.reset_index().rename(columns={m['long_name']:m['field'] for m in cleaned_fields})\n", - "clean_results.to_csv(f'clean_static_subbasin_metrics_{datetime.utcnow().strftime(\"%Y%m%d-%H%M%S\")}.csv')\n", + "clean_results = results.reset_index().rename(\n", + " columns={m[\"long_name\"]: m[\"field\"] for m in cleaned_fields}\n", + ")\n", + "clean_results.to_csv(\n", + " f\"clean_static_subbasin_metrics_{datetime.utcnow().strftime('%Y%m%d-%H%M%S')}.csv\"\n", + ")\n", "clean_results.head()" ] }, @@ -213,7 +228,9 @@ "metadata": {}, "outputs": [], "source": [ - "clean_results[[c for c in clean_results if 'lu_' in c]].assign(_check_sum=lambda df: df.sum(axis=1))" + "clean_results[[c for c in clean_results if \"lu_\" in c]].assign(\n", + " _check_sum=lambda df: df.sum(axis=1)\n", + ")" ] } ], diff --git a/scripts/bump_deps.sh b/scripts/bump_deps.sh new file mode 100644 index 00000000..30ab77a5 --- /dev/null +++ b/scripts/bump_deps.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +set -e + +pip install -U "uv>=0.9,<0.10" + +# dev +uv pip compile stormpiper/requirements_unpinned.txt > stormpiper/requirements.txt + +# nereid +uv pip compile stormpiper/requirements_test_unpinned.txt > stormpiper/requirements_test.txt + diff --git a/scripts/lint.sh b/scripts/lint.sh index e65e7923..e6a41577 100644 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -3,7 +3,8 @@ set -e set -x -black . --check --diff -isort . --check --diff +ruff format ./stormpiper --check --diff +ruff check ./stormpiper --diff + # mkdir -p .mypy_cache # mypy stormpiper/stormpiper --install-types --non-interactive diff --git a/setup.cfg b/setup.cfg index 47b2a5f6..ea862de2 100644 --- a/setup.cfg +++ b/setup.cfg @@ -11,6 +11,16 @@ filterwarnings = ignore:distutils Version classes are deprecated:DeprecationWarning ignore:Using or importing the ABCs from:DeprecationWarning +[tool.ruff.lint] +select = [ + "E", # pycodestyle errors + "W", # pycodestyle warnings + "F", # pyflakes + "I", # isort + "C", # flake8-comprehensions + "B", # flake8-bugbear + "PERF", # Perflint +] [mypy] plugins = pydantic.mypy,sqlmypy diff --git a/stormpiper/alembic/env.py b/stormpiper/alembic/env.py index 857f9565..da7a66f9 100644 --- a/stormpiper/alembic/env.py +++ b/stormpiper/alembic/env.py @@ -6,6 +6,10 @@ from stormpiper.core.config import settings +# add your model's MetaData object here +# for 'autogenerate' support +from stormpiper.database.schemas.base import Base + # this is the Alembic Config object, which provides # access to the values within the .ini file in use. config = context.config @@ -19,10 +23,6 @@ if config.config_file_name is not None: fileConfig(config.config_file_name) -# add your model's MetaData object here -# for 'autogenerate' support -from stormpiper.database.schemas.base import Base - # target_metadata = mymodel.Base.metadata target_metadata: MetaData = Base.metadata # type: ignore diff --git a/stormpiper/alembic/script.py.mako b/stormpiper/alembic/script.py.mako index 9b2edbb6..471e1de5 100644 --- a/stormpiper/alembic/script.py.mako +++ b/stormpiper/alembic/script.py.mako @@ -5,6 +5,7 @@ Revises: ${down_revision | comma,n} Create Date: ${create_date} """ + import sqlalchemy as sa from alembic import op ${imports if imports else ""} diff --git a/stormpiper/alembic/versions/0001-b990f0108dd5_added_users_table.py b/stormpiper/alembic/versions/0001-b990f0108dd5_added_users_table.py index 04e456b9..5f00f819 100644 --- a/stormpiper/alembic/versions/0001-b990f0108dd5_added_users_table.py +++ b/stormpiper/alembic/versions/0001-b990f0108dd5_added_users_table.py @@ -5,6 +5,7 @@ Create Date: 2022-05-17 20:31:47.647161 """ + import sqlalchemy as sa from alembic import op from sqlalchemy.dialects.postgresql import UUID diff --git a/stormpiper/alembic/versions/0002-2e742609bbf1_add_tmnt_tables.py b/stormpiper/alembic/versions/0002-2e742609bbf1_add_tmnt_tables.py index c38de1a6..a59821a6 100644 --- a/stormpiper/alembic/versions/0002-2e742609bbf1_add_tmnt_tables.py +++ b/stormpiper/alembic/versions/0002-2e742609bbf1_add_tmnt_tables.py @@ -5,6 +5,7 @@ Create Date: 2022-05-18 15:29:56.190157 """ + import geoalchemy2 import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0003-508290ea6fd4_patch_tmnt_v_geom_type.py b/stormpiper/alembic/versions/0003-508290ea6fd4_patch_tmnt_v_geom_type.py index a12a2260..0874b80b 100644 --- a/stormpiper/alembic/versions/0003-508290ea6fd4_patch_tmnt_v_geom_type.py +++ b/stormpiper/alembic/versions/0003-508290ea6fd4_patch_tmnt_v_geom_type.py @@ -5,6 +5,7 @@ Create Date: 2022-05-31 17:00:50.287075 """ + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0004-2986f1ba081a_add_subbasins_table.py b/stormpiper/alembic/versions/0004-2986f1ba081a_add_subbasins_table.py index 667ff448..6a2fe6e1 100644 --- a/stormpiper/alembic/versions/0004-2986f1ba081a_add_subbasins_table.py +++ b/stormpiper/alembic/versions/0004-2986f1ba081a_add_subbasins_table.py @@ -5,6 +5,7 @@ Create Date: 2022-06-01 11:07:45.175609 """ + import geoalchemy2 import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0005-2e72fb6d5867_add_delineation_relid_column.py b/stormpiper/alembic/versions/0005-2e72fb6d5867_add_delineation_relid_column.py index 3bca0181..fdc3b822 100644 --- a/stormpiper/alembic/versions/0005-2e72fb6d5867_add_delineation_relid_column.py +++ b/stormpiper/alembic/versions/0005-2e72fb6d5867_add_delineation_relid_column.py @@ -5,6 +5,7 @@ Create Date: 2022-06-01 11:13:09.731554 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0006-e225ccb368e1_default_users_role.py b/stormpiper/alembic/versions/0006-e225ccb368e1_default_users_role.py index 0cd4a474..c9f6dbb7 100644 --- a/stormpiper/alembic/versions/0006-e225ccb368e1_default_users_role.py +++ b/stormpiper/alembic/versions/0006-e225ccb368e1_default_users_role.py @@ -5,7 +5,7 @@ Create Date: 2022-06-06 16:32:43.359063 """ -import sqlalchemy as sa + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0007-a7a5adc4b191_rename_users_table_to_user.py b/stormpiper/alembic/versions/0007-a7a5adc4b191_rename_users_table_to_user.py index c208ac96..64fa619f 100644 --- a/stormpiper/alembic/versions/0007-a7a5adc4b191_rename_users_table_to_user.py +++ b/stormpiper/alembic/versions/0007-a7a5adc4b191_rename_users_table_to_user.py @@ -5,6 +5,7 @@ Create Date: 2022-06-06 18:02:36.812329 """ + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0008-45d7df351282_add_fields_to_tmnt_view.py b/stormpiper/alembic/versions/0008-45d7df351282_add_fields_to_tmnt_view.py index 84ccd70e..118357da 100644 --- a/stormpiper/alembic/versions/0008-45d7df351282_add_fields_to_tmnt_view.py +++ b/stormpiper/alembic/versions/0008-45d7df351282_add_fields_to_tmnt_view.py @@ -5,6 +5,7 @@ Create Date: 2022-06-28 20:57:43.937847 """ + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0009-8d81894d08e1_add_basin_to_tmnt_attrs.py b/stormpiper/alembic/versions/0009-8d81894d08e1_add_basin_to_tmnt_attrs.py index c0486f9c..6d2d8ce0 100644 --- a/stormpiper/alembic/versions/0009-8d81894d08e1_add_basin_to_tmnt_attrs.py +++ b/stormpiper/alembic/versions/0009-8d81894d08e1_add_basin_to_tmnt_attrs.py @@ -5,6 +5,7 @@ Create Date: 2022-06-30 17:03:36.256131 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0010-1fe92446764f_add_lgu_tables.py b/stormpiper/alembic/versions/0010-1fe92446764f_add_lgu_tables.py index 56c74eb3..613f6339 100644 --- a/stormpiper/alembic/versions/0010-1fe92446764f_add_lgu_tables.py +++ b/stormpiper/alembic/versions/0010-1fe92446764f_add_lgu_tables.py @@ -5,6 +5,7 @@ Create Date: 2022-07-01 15:33:51.841602 """ + import sqlalchemy as sa from alembic import op from geoalchemy2 import Geometry diff --git a/stormpiper/alembic/versions/0011-83958c8b9c2a_add_source_controls_table.py b/stormpiper/alembic/versions/0011-83958c8b9c2a_add_source_controls_table.py index 4531a70f..597d29c2 100644 --- a/stormpiper/alembic/versions/0011-83958c8b9c2a_add_source_controls_table.py +++ b/stormpiper/alembic/versions/0011-83958c8b9c2a_add_source_controls_table.py @@ -5,6 +5,7 @@ Create Date: 2022-07-06 17:43:14.453898 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0012-264be46bf23a_add_graph_and_result_blob_table.py b/stormpiper/alembic/versions/0012-264be46bf23a_add_graph_and_result_blob_table.py index 6a960a42..c324e40b 100644 --- a/stormpiper/alembic/versions/0012-264be46bf23a_add_graph_and_result_blob_table.py +++ b/stormpiper/alembic/versions/0012-264be46bf23a_add_graph_and_result_blob_table.py @@ -5,6 +5,7 @@ Create Date: 2022-07-12 22:00:55.580931 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0013-1e4880ca4cb7_results_view_init.py b/stormpiper/alembic/versions/0013-1e4880ca4cb7_results_view_init.py index 61a5876f..4ec979a2 100644 --- a/stormpiper/alembic/versions/0013-1e4880ca4cb7_results_view_init.py +++ b/stormpiper/alembic/versions/0013-1e4880ca4cb7_results_view_init.py @@ -5,7 +5,7 @@ Create Date: 2022-07-13 11:12:22.357535 """ -import sqlalchemy as sa + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0014-37f1d46e5dc3_add_met_table.py b/stormpiper/alembic/versions/0014-37f1d46e5dc3_add_met_table.py index b7887765..9f46f8eb 100644 --- a/stormpiper/alembic/versions/0014-37f1d46e5dc3_add_met_table.py +++ b/stormpiper/alembic/versions/0014-37f1d46e5dc3_add_met_table.py @@ -5,6 +5,7 @@ Create Date: 2022-07-13 13:46:25.001962 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0015-6ecd49718577_add_lgu_units.py b/stormpiper/alembic/versions/0015-6ecd49718577_add_lgu_units.py index 344a2114..8505e86b 100644 --- a/stormpiper/alembic/versions/0015-6ecd49718577_add_lgu_units.py +++ b/stormpiper/alembic/versions/0015-6ecd49718577_add_lgu_units.py @@ -5,6 +5,7 @@ Create Date: 2022-07-14 15:15:43.337088 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0016-9213ee854365_update_tracked_table_changes.py b/stormpiper/alembic/versions/0016-9213ee854365_update_tracked_table_changes.py index 5db60dba..39b39bf7 100644 --- a/stormpiper/alembic/versions/0016-9213ee854365_update_tracked_table_changes.py +++ b/stormpiper/alembic/versions/0016-9213ee854365_update_tracked_table_changes.py @@ -5,6 +5,7 @@ Create Date: 2022-08-01 17:33:10.645886 """ + import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql diff --git a/stormpiper/alembic/versions/0017-175b76dedf85_create_change_log.py b/stormpiper/alembic/versions/0017-175b76dedf85_create_change_log.py index 5e33ab3c..5739a9b1 100644 --- a/stormpiper/alembic/versions/0017-175b76dedf85_create_change_log.py +++ b/stormpiper/alembic/versions/0017-175b76dedf85_create_change_log.py @@ -5,6 +5,7 @@ Create Date: 2022-08-01 18:00:02.005391 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0018-5609bfd21d8d_add_src_ctrl_load_reduction_tables.py b/stormpiper/alembic/versions/0018-5609bfd21d8d_add_src_ctrl_load_reduction_tables.py index 08906e22..8b8eb1dd 100644 --- a/stormpiper/alembic/versions/0018-5609bfd21d8d_add_src_ctrl_load_reduction_tables.py +++ b/stormpiper/alembic/versions/0018-5609bfd21d8d_add_src_ctrl_load_reduction_tables.py @@ -5,6 +5,7 @@ Create Date: 2022-08-29 18:55:16.478649 """ + import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql diff --git a/stormpiper/alembic/versions/0019-c2304484111d_add_equity_fields_to_subbasin.py b/stormpiper/alembic/versions/0019-c2304484111d_add_equity_fields_to_subbasin.py index 71bd7e6f..6f795c11 100644 --- a/stormpiper/alembic/versions/0019-c2304484111d_add_equity_fields_to_subbasin.py +++ b/stormpiper/alembic/versions/0019-c2304484111d_add_equity_fields_to_subbasin.py @@ -5,6 +5,7 @@ Create Date: 2022-11-01 09:30:08.635467 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0020-281db95cd456_add_virtual_pocs_to_results.py b/stormpiper/alembic/versions/0020-281db95cd456_add_virtual_pocs_to_results.py index 00335480..0821fc7e 100644 --- a/stormpiper/alembic/versions/0020-281db95cd456_add_virtual_pocs_to_results.py +++ b/stormpiper/alembic/versions/0020-281db95cd456_add_virtual_pocs_to_results.py @@ -5,7 +5,7 @@ Create Date: 2022-12-27 13:54:03.834773 """ -import sqlalchemy as sa + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0021-19efa2dbe9a9_add_subbasin_result_table.py b/stormpiper/alembic/versions/0021-19efa2dbe9a9_add_subbasin_result_table.py index eb0b9563..977dd83f 100644 --- a/stormpiper/alembic/versions/0021-19efa2dbe9a9_add_subbasin_result_table.py +++ b/stormpiper/alembic/versions/0021-19efa2dbe9a9_add_subbasin_result_table.py @@ -5,6 +5,7 @@ Create Date: 2022-12-28 12:14:40.495574 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0022-880c6f2e655b_refactor_result_blob_drop_result_view.py b/stormpiper/alembic/versions/0022-880c6f2e655b_refactor_result_blob_drop_result_view.py index 1a107099..b0d478df 100644 --- a/stormpiper/alembic/versions/0022-880c6f2e655b_refactor_result_blob_drop_result_view.py +++ b/stormpiper/alembic/versions/0022-880c6f2e655b_refactor_result_blob_drop_result_view.py @@ -5,6 +5,7 @@ Create Date: 2022-12-28 16:08:23.664249 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0023-284ba7ee9104_add_subbasin_results_view.py b/stormpiper/alembic/versions/0023-284ba7ee9104_add_subbasin_results_view.py index 5cbd12fd..c9c92326 100644 --- a/stormpiper/alembic/versions/0023-284ba7ee9104_add_subbasin_results_view.py +++ b/stormpiper/alembic/versions/0023-284ba7ee9104_add_subbasin_results_view.py @@ -5,6 +5,7 @@ Create Date: 2022-12-29 15:28:28.050899 """ + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0024-4177bec7971e_add_access_tokens_to_users.py b/stormpiper/alembic/versions/0024-4177bec7971e_add_access_tokens_to_users.py index c472e341..9768926c 100644 --- a/stormpiper/alembic/versions/0024-4177bec7971e_add_access_tokens_to_users.py +++ b/stormpiper/alembic/versions/0024-4177bec7971e_add_access_tokens_to_users.py @@ -5,6 +5,7 @@ Create Date: 2022-12-30 13:00:38.159577 """ + import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql diff --git a/stormpiper/alembic/versions/0025-6af42fb28180_add_globals_table.py b/stormpiper/alembic/versions/0025-6af42fb28180_add_globals_table.py index 301ce2c6..05a7ea36 100644 --- a/stormpiper/alembic/versions/0025-6af42fb28180_add_globals_table.py +++ b/stormpiper/alembic/versions/0025-6af42fb28180_add_globals_table.py @@ -5,6 +5,7 @@ Create Date: 2022-12-31 13:33:33.363410 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0026-47e1f95064c8_add_cost_columns_to_tmnt_attrs.py b/stormpiper/alembic/versions/0026-47e1f95064c8_add_cost_columns_to_tmnt_attrs.py index db2f3a07..9fc25e94 100644 --- a/stormpiper/alembic/versions/0026-47e1f95064c8_add_cost_columns_to_tmnt_attrs.py +++ b/stormpiper/alembic/versions/0026-47e1f95064c8_add_cost_columns_to_tmnt_attrs.py @@ -5,6 +5,7 @@ Create Date: 2022-12-31 23:07:42.656511 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0027-d7eb9f21a208_update_tmnt_attrs.py b/stormpiper/alembic/versions/0027-d7eb9f21a208_update_tmnt_attrs.py index 287e1a1b..f077ca23 100644 --- a/stormpiper/alembic/versions/0027-d7eb9f21a208_update_tmnt_attrs.py +++ b/stormpiper/alembic/versions/0027-d7eb9f21a208_update_tmnt_attrs.py @@ -5,6 +5,7 @@ Create Date: 2023-01-02 23:20:25.581537 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0028-61a221884a60_update_role_type.py b/stormpiper/alembic/versions/0028-61a221884a60_update_role_type.py index 6e8cee02..6ba51cbb 100644 --- a/stormpiper/alembic/versions/0028-61a221884a60_update_role_type.py +++ b/stormpiper/alembic/versions/0028-61a221884a60_update_role_type.py @@ -5,6 +5,7 @@ Create Date: 2023-01-07 14:22:35.420414 """ + import sqlalchemy as sa from alembic import op @@ -45,7 +46,7 @@ def downgrade(): # Convert 'output_limit_exceeded' status into 'timed_out' op.execute(tcr.update().where(tcr.c.role == "user_admin").values(role="editor")) op.execute(tcr.update().where(tcr.c.role == "reader").values(role="public")) - op.execute(tcr.update().where(tcr.c.role == None).values(role="none")) + op.execute(tcr.update().where(tcr.c.role == None).values(role="none")) # noqa op.execute(f"ALTER TYPE {name} RENAME TO {tmp_name}") diff --git a/stormpiper/alembic/versions/0029-95dce7183719_rename_access_token_to_readonly_token_.py b/stormpiper/alembic/versions/0029-95dce7183719_rename_access_token_to_readonly_token_.py index d116680f..4932a470 100644 --- a/stormpiper/alembic/versions/0029-95dce7183719_rename_access_token_to_readonly_token_.py +++ b/stormpiper/alembic/versions/0029-95dce7183719_rename_access_token_to_readonly_token_.py @@ -5,6 +5,7 @@ Create Date: 2023-01-08 11:41:18.143517 """ + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0030-dad2431afc66_update_subbasin_results_view_with_.py b/stormpiper/alembic/versions/0030-dad2431afc66_update_subbasin_results_view_with_.py index 3e284cbe..40b297f8 100644 --- a/stormpiper/alembic/versions/0030-dad2431afc66_update_subbasin_results_view_with_.py +++ b/stormpiper/alembic/versions/0030-dad2431afc66_update_subbasin_results_view_with_.py @@ -5,6 +5,7 @@ Create Date: 2023-01-11 23:52:56.826551 """ + from alembic import op # revision identifiers, used by Alembic. diff --git a/stormpiper/alembic/versions/0031-f4bc4f04ff46_refactor_npv_tables.py b/stormpiper/alembic/versions/0031-f4bc4f04ff46_refactor_npv_tables.py index 48dc00f5..9430c2ac 100644 --- a/stormpiper/alembic/versions/0031-f4bc4f04ff46_refactor_npv_tables.py +++ b/stormpiper/alembic/versions/0031-f4bc4f04ff46_refactor_npv_tables.py @@ -5,6 +5,7 @@ Create Date: 2023-01-27 10:29:20.078876 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0032-25bcfdb42a6f_add_scenario_table.py b/stormpiper/alembic/versions/0032-25bcfdb42a6f_add_scenario_table.py index 1c1ba3f2..aef1490c 100644 --- a/stormpiper/alembic/versions/0032-25bcfdb42a6f_add_scenario_table.py +++ b/stormpiper/alembic/versions/0032-25bcfdb42a6f_add_scenario_table.py @@ -5,6 +5,7 @@ Create Date: 2023-02-08 22:17:17.396439 """ + import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql diff --git a/stormpiper/alembic/versions/0033-c720aa363fc0_more_subbasin_results.py b/stormpiper/alembic/versions/0033-c720aa363fc0_more_subbasin_results.py index 1f1d76ea..a73a743c 100644 --- a/stormpiper/alembic/versions/0033-c720aa363fc0_more_subbasin_results.py +++ b/stormpiper/alembic/versions/0033-c720aa363fc0_more_subbasin_results.py @@ -5,6 +5,7 @@ Create Date: 2023-04-06 10:34:42.187459 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0034-c7101f4e13d9_update_cost_attrs.py b/stormpiper/alembic/versions/0034-c7101f4e13d9_update_cost_attrs.py index 037af5ef..8468416c 100644 --- a/stormpiper/alembic/versions/0034-c7101f4e13d9_update_cost_attrs.py +++ b/stormpiper/alembic/versions/0034-c7101f4e13d9_update_cost_attrs.py @@ -5,6 +5,7 @@ Create Date: 2023-04-07 23:34:43.700172 """ + import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql diff --git a/stormpiper/alembic/versions/0035-d3c78c83dde8_isolate_cost_globals.py b/stormpiper/alembic/versions/0035-d3c78c83dde8_isolate_cost_globals.py index a8eb2828..9aa101d1 100644 --- a/stormpiper/alembic/versions/0035-d3c78c83dde8_isolate_cost_globals.py +++ b/stormpiper/alembic/versions/0035-d3c78c83dde8_isolate_cost_globals.py @@ -5,6 +5,7 @@ Create Date: 2023-04-10 14:09:03.857923 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0036-0048dc98eed1_add_ntype_to_results.py b/stormpiper/alembic/versions/0036-0048dc98eed1_add_ntype_to_results.py index 8ab49ac0..184121d6 100644 --- a/stormpiper/alembic/versions/0036-0048dc98eed1_add_ntype_to_results.py +++ b/stormpiper/alembic/versions/0036-0048dc98eed1_add_ntype_to_results.py @@ -5,6 +5,7 @@ Create Date: 2023-04-14 14:43:34.094514 """ + import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql diff --git a/stormpiper/alembic/versions/0037-50490f40801d_cost_charts.py b/stormpiper/alembic/versions/0037-50490f40801d_cost_charts.py index a54fef87..10758f68 100644 --- a/stormpiper/alembic/versions/0037-50490f40801d_cost_charts.py +++ b/stormpiper/alembic/versions/0037-50490f40801d_cost_charts.py @@ -5,6 +5,7 @@ Create Date: 2023-04-19 10:13:00.968839 """ + import sqlalchemy as sa from alembic import op from sqlalchemy.dialects import postgresql diff --git a/stormpiper/alembic/versions/0038-413970fe67a0_add_cost_globals_to_tmnt_cost_table.py b/stormpiper/alembic/versions/0038-413970fe67a0_add_cost_globals_to_tmnt_cost_table.py index e698257e..38eacfe2 100644 --- a/stormpiper/alembic/versions/0038-413970fe67a0_add_cost_globals_to_tmnt_cost_table.py +++ b/stormpiper/alembic/versions/0038-413970fe67a0_add_cost_globals_to_tmnt_cost_table.py @@ -5,6 +5,7 @@ Create Date: 2023-05-17 11:33:18.276106 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0039-fe5b9391ee82_update_results_blob.py b/stormpiper/alembic/versions/0039-fe5b9391ee82_update_results_blob.py index b56b8f36..15398642 100644 --- a/stormpiper/alembic/versions/0039-fe5b9391ee82_update_results_blob.py +++ b/stormpiper/alembic/versions/0039-fe5b9391ee82_update_results_blob.py @@ -5,6 +5,7 @@ Create Date: 2023-06-08 13:20:44.446756 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0040-a659aaed47b9_add_subbasin_fields.py b/stormpiper/alembic/versions/0040-a659aaed47b9_add_subbasin_fields.py index bb93e721..856e7150 100644 --- a/stormpiper/alembic/versions/0040-a659aaed47b9_add_subbasin_fields.py +++ b/stormpiper/alembic/versions/0040-a659aaed47b9_add_subbasin_fields.py @@ -5,6 +5,7 @@ Create Date: 2023-06-13 11:45:37.716609 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0041-452744bc099f_add_capacity_rank_to_subbasins.py b/stormpiper/alembic/versions/0041-452744bc099f_add_capacity_rank_to_subbasins.py index 6c644c4b..7bc5b24b 100644 --- a/stormpiper/alembic/versions/0041-452744bc099f_add_capacity_rank_to_subbasins.py +++ b/stormpiper/alembic/versions/0041-452744bc099f_add_capacity_rank_to_subbasins.py @@ -5,6 +5,7 @@ Create Date: 2023-07-25 15:28:14.718344 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/alembic/versions/0042-4c54e753599b_add_ddt_to_tmnt_attr.py b/stormpiper/alembic/versions/0042-4c54e753599b_add_ddt_to_tmnt_attr.py index 7dd2f19f..f855d0d9 100644 --- a/stormpiper/alembic/versions/0042-4c54e753599b_add_ddt_to_tmnt_attr.py +++ b/stormpiper/alembic/versions/0042-4c54e753599b_add_ddt_to_tmnt_attr.py @@ -5,6 +5,7 @@ Create Date: 2023-08-18 22:57:02.394645 """ + import sqlalchemy as sa from alembic import op diff --git a/stormpiper/gunicorn_conf.py b/stormpiper/gunicorn_conf.py index d3dc7dd3..dd5fe27d 100644 --- a/stormpiper/gunicorn_conf.py +++ b/stormpiper/gunicorn_conf.py @@ -1,6 +1,7 @@ """ ref: https://github.com/tiangolo/uvicorn-gunicorn-docker/blob/master/docker-images/gunicorn_conf.py """ + import json import multiprocessing import os diff --git a/stormpiper/requirements.txt b/stormpiper/requirements.txt index ec467caf..abf2b1e7 100644 --- a/stormpiper/requirements.txt +++ b/stormpiper/requirements.txt @@ -1,118 +1,427 @@ -aiofiles==23.1.0 -aiohttp==3.8.5 -aiosignal==1.3.1 -aiosqlite==0.19.0 -alembic==1.11.1 -altair==5.0.1 -amqp==5.1.1 -anyio==3.7.1 +# This file was autogenerated by uv via the following command: +# uv pip compile stormpiper/requirements_unpinned.txt +aiofiles==25.1.0 + # via -r stormpiper/requirements_unpinned.txt +aiohappyeyeballs==2.6.1 + # via aiohttp +aiohttp==3.13.2 + # via -r stormpiper/requirements_unpinned.txt +aiosignal==1.4.0 + # via aiohttp +aiosqlite==0.21.0 + # via -r stormpiper/requirements_unpinned.txt +alembic==1.17.2 + # via -r stormpiper/requirements_unpinned.txt +altair==6.0.0 + # via -r stormpiper/requirements_unpinned.txt +amqp==5.3.1 + # via kombu +annotated-doc==0.0.4 + # via fastapi +annotated-types==0.7.0 + # via pydantic +anyio==4.12.0 + # via + # httpx + # starlette + # watchfiles +argon2-cffi==23.1.0 + # via pwdlib +argon2-cffi-bindings==25.1.0 + # via argon2-cffi asgi-ratelimit==0.10.0 -async-timeout==4.0.2 -asyncpg==0.28.0 -attrs==23.1.0 -bcrypt==4.0.1 -billiard==4.1.0 -Brotli==1.0.9 -brotli-asgi==1.4.0 -cachetools==5.3.1 -celery==5.3.1 -certifi==2023.7.22 -cffi==1.15.1 -charset-normalizer==3.2.0 -click==8.1.6 -click-didyoumean==0.3.0 -click-plugins==1.1.1 + # via -r stormpiper/requirements_unpinned.txt +asyncpg==0.31.0 + # via -r stormpiper/requirements_unpinned.txt +attrs==25.4.0 + # via + # aiohttp + # fiona + # jsonschema + # referencing +bcrypt==4.3.0 + # via pwdlib +billiard==4.2.4 + # via celery +brotli==1.2.0 + # via + # -r stormpiper/requirements_unpinned.txt + # brotli-asgi +brotli-asgi==1.5.0 + # via -r stormpiper/requirements_unpinned.txt +cachetools==6.2.2 + # via google-auth +celery==5.6.0 + # via -r stormpiper/requirements_unpinned.txt +certifi==2025.11.12 + # via + # fiona + # httpcore + # httpx + # pyogrio + # pyproj + # requests +cffi==2.0.0 + # via + # argon2-cffi-bindings + # cryptography +charset-normalizer==3.4.4 + # via requests +click==8.3.1 + # via + # celery + # click-didyoumean + # click-plugins + # click-repl + # cligj + # fiona + # uvicorn +click-didyoumean==0.3.1 + # via celery +click-plugins==1.1.1.2 + # via + # celery + # fiona click-repl==0.3.0 + # via celery cligj==0.7.2 -contourpy==1.1.0 -cryptography==41.0.2 -cycler==0.11.0 -dnspython==2.4.1 -earthengine-api==0.1.361 -email-validator==2.0.0.post2 -fastapi==0.98.0 -fastapi-users==12.1.0 -fastapi-users-db-sqlalchemy==6.0.0 -Fiona==1.9.3 -fonttools==4.41.1 -frozenlist==1.4.0 -GeoAlchemy2==0.14.1 -geojson-pydantic==0.6.3 -geopandas==0.13.2 -google-api-core==2.11.1 -google-api-python-client==2.95.0 -google-auth==2.22.0 -google-auth-httplib2==0.1.0 -google-cloud-core==2.3.3 -google-cloud-storage==2.10.0 -google-crc32c==1.5.0 -google-resumable-media==2.5.0 -googleapis-common-protos==1.59.1 -graphviz==0.20.1 -greenlet==2.0.2 -h11==0.14.0 -httpcore==0.17.3 -httplib2==0.22.0 -httpx==0.24.1 -idna==3.4 -Jinja2==3.1.2 -jsonschema==4.18.4 -jsonschema-specifications==2023.7.1 -kiwisolver==1.4.4 -kombu==5.3.1 -makefun==1.15.1 -Mako==1.2.4 -MarkupSafe==2.1.3 -matplotlib==3.7.2 -multidict==6.0.4 -nereid-engine @ https://github.com/Geosyntec/nereid/archive/v0.9.3.zip -networkx==3.1 -numpy==1.25.1 -orjson==3.9.2 -packaging==23.1 -pandas==2.0.3 -passlib==1.7.4 -Pillow==10.0.0 -Pint==0.22 -prompt-toolkit==3.0.39 -protobuf==4.23.4 -psycopg2-binary==2.9.6 -pyasn1==0.5.0 -pyasn1-modules==0.3.0 -pycparser==2.21 -pydantic==1.10.12 -pydot==1.4.2 -PyJWT==2.7.0 -pymcdm==1.1.0 -pyparsing==3.0.9 -pyproj==3.6.0 -python-dateutil==2.8.2 -python-dotenv==1.0.0 -python-multipart==0.0.6 -pytz==2023.3 -PyYAML==6.0.1 -redis==4.6.0 -referencing==0.30.0 -requests==2.31.0 -rpds-py==0.9.2 -rsa==4.9 -Rtree==1.0.1 -scipy==1.11.1 -setuptools==68.0.0 -shapely==2.0.1 -six==1.16.0 -sniffio==1.3.0 -SQLAlchemy==2.0.19 -starlette==0.27.0 -tenacity==8.2.2 -toolz==0.12.0 -typing_extensions==4.7.1 -tzdata==2023.3 -uritemplate==4.1.1 -urllib3==1.26.16 -uvicorn==0.23.1 -vine==5.0.0 -watchfiles==0.19.0 -wcwidth==0.2.6 -wheel==0.41.0 -yarl==1.9.2 + # via fiona +contourpy==1.3.3 + # via matplotlib +cryptography==46.0.3 + # via pyjwt +cycler==0.12.1 + # via matplotlib +dnspython==2.8.0 + # via email-validator +earthengine-api==1.7.3 + # via -r stormpiper/requirements_unpinned.txt +email-validator==2.3.0 + # via + # -r stormpiper/requirements_unpinned.txt + # fastapi-users +exceptiongroup==1.3.1 + # via celery +fastapi==0.123.10 + # via + # -r stormpiper/requirements_unpinned.txt + # fastapi-users +fastapi-users==15.0.1 + # via + # -r stormpiper/requirements_unpinned.txt + # fastapi-users-db-sqlalchemy +fastapi-users-db-sqlalchemy==7.0.0 + # via -r stormpiper/requirements_unpinned.txt +fiona==1.10.1 + # via -r stormpiper/requirements_unpinned.txt +flexcache==0.3 + # via pint +flexparser==0.4 + # via pint +fonttools==4.61.0 + # via matplotlib +frozenlist==1.8.0 + # via + # aiohttp + # aiosignal +geoalchemy2==0.18.1 + # via -r stormpiper/requirements_unpinned.txt +geojson-pydantic==2.1.0 + # via -r stormpiper/requirements_unpinned.txt +geopandas==1.1.1 + # via -r stormpiper/requirements_unpinned.txt +google-api-core==2.28.1 + # via + # google-api-python-client + # google-cloud-core + # google-cloud-storage +google-api-python-client==2.187.0 + # via earthengine-api +google-auth==2.43.0 + # via + # earthengine-api + # google-api-core + # google-api-python-client + # google-auth-httplib2 + # google-cloud-core + # google-cloud-storage +google-auth-httplib2==0.2.1 + # via + # earthengine-api + # google-api-python-client +google-cloud-core==2.5.0 + # via google-cloud-storage +google-cloud-storage==3.6.0 + # via earthengine-api +google-crc32c==1.7.1 + # via + # google-cloud-storage + # google-resumable-media +google-resumable-media==2.8.0 + # via google-cloud-storage +googleapis-common-protos==1.72.0 + # via google-api-core +greenlet==3.3.0 + # via sqlalchemy +h11==0.16.0 + # via + # httpcore + # uvicorn +httpcore==1.0.9 + # via httpx +httplib2==0.31.0 + # via + # earthengine-api + # google-api-python-client + # google-auth-httplib2 +httpx==0.28.1 + # via -r stormpiper/requirements_unpinned.txt +idna==3.11 + # via + # anyio + # email-validator + # httpx + # requests + # yarl +jinja2==3.1.6 + # via + # -r stormpiper/requirements_unpinned.txt + # altair +jsonschema==4.25.1 + # via altair +jsonschema-specifications==2025.9.1 + # via jsonschema +kiwisolver==1.4.9 + # via matplotlib +kombu==5.6.1 + # via celery +makefun==1.16.0 + # via fastapi-users +mako==1.3.10 + # via alembic +markupsafe==3.0.3 + # via + # jinja2 + # mako +matplotlib==3.10.7 + # via + # -r stormpiper/requirements_unpinned.txt + # pymcdm +multidict==6.7.0 + # via + # aiohttp + # yarl +narwhals==2.13.0 + # via altair +nereid-engine @ https://github.com/Geosyntec/nereid/archive/v0.11.0.zip + # via -r stormpiper/requirements_unpinned.txt +networkx==3.4.2 + # via + # -r stormpiper/requirements_unpinned.txt + # nereid-engine +numpy==2.3.5 + # via + # -r stormpiper/requirements_unpinned.txt + # contourpy + # geopandas + # matplotlib + # pandas + # pymcdm + # pyogrio + # scipy + # shapely +orjson==3.11.4 + # via + # -r stormpiper/requirements_unpinned.txt + # nereid-engine +packaging==25.0 + # via + # altair + # geoalchemy2 + # geopandas + # kombu + # matplotlib + # pyogrio +pandas==2.3.3 + # via + # -r stormpiper/requirements_unpinned.txt + # geopandas + # nereid-engine + # pymcdm +pillow==12.0.0 + # via matplotlib +pint==0.25.2 + # via + # -r stormpiper/requirements_unpinned.txt + # nereid-engine +platformdirs==4.5.1 + # via pint +prompt-toolkit==3.0.52 + # via click-repl +propcache==0.4.1 + # via + # aiohttp + # yarl +proto-plus==1.26.1 + # via google-api-core +protobuf==6.33.2 + # via + # google-api-core + # googleapis-common-protos + # proto-plus +psycopg2-binary==2.9.11 + # via -r stormpiper/requirements_unpinned.txt +pwdlib==0.2.1 + # via + # -r stormpiper/requirements_unpinned.txt + # fastapi-users +pyasn1==0.6.1 + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.4.2 + # via google-auth +pycparser==2.23 + # via cffi +pydantic==2.12.5 + # via + # -r stormpiper/requirements_unpinned.txt + # fastapi + # geojson-pydantic + # nereid-engine + # pydantic-settings +pydantic-core==2.41.5 + # via pydantic +pydantic-settings==2.12.0 + # via nereid-engine +pyjwt==2.10.1 + # via fastapi-users +pymcdm==1.3.1 + # via -r stormpiper/requirements_unpinned.txt +pyogrio==0.12.1 + # via geopandas +pyparsing==3.2.5 + # via + # httplib2 + # matplotlib +pyproj==3.7.2 + # via + # -r stormpiper/requirements_unpinned.txt + # geopandas +python-dateutil==2.9.0.post0 + # via + # celery + # matplotlib + # pandas +python-dotenv==1.2.1 + # via + # -r stormpiper/requirements_unpinned.txt + # nereid-engine + # pydantic-settings +python-multipart==0.0.20 + # via + # -r stormpiper/requirements_unpinned.txt + # fastapi-users +pytz==2025.2 + # via + # nereid-engine + # pandas +pyyaml==6.0.3 + # via + # -r stormpiper/requirements_unpinned.txt + # nereid-engine +redis==6.4.0 + # via kombu +referencing==0.37.0 + # via + # jsonschema + # jsonschema-specifications +requests==2.32.5 + # via + # -r stormpiper/requirements_unpinned.txt + # earthengine-api + # google-api-core + # google-cloud-storage +rpds-py==0.30.0 + # via + # jsonschema + # referencing +rsa==4.9.1 + # via google-auth +rtree==1.4.1 + # via -r stormpiper/requirements_unpinned.txt +scipy==1.16.3 + # via + # -r stormpiper/requirements_unpinned.txt + # nereid-engine + # pymcdm +setuptools==80.9.0 + # via -r stormpiper/requirements_unpinned.txt +shapely==2.1.2 + # via + # -r stormpiper/requirements_unpinned.txt + # geopandas +six==1.17.0 + # via python-dateutil +sqlalchemy==2.0.44 + # via + # -r stormpiper/requirements_unpinned.txt + # alembic + # fastapi-users-db-sqlalchemy + # geoalchemy2 +starlette==0.50.0 + # via + # -r stormpiper/requirements_unpinned.txt + # brotli-asgi + # fastapi +tabulate==0.9.0 + # via pymcdm +tenacity==9.1.2 + # via -r stormpiper/requirements_unpinned.txt +typing-extensions==4.15.0 + # via + # aiosignal + # aiosqlite + # alembic + # altair + # anyio + # exceptiongroup + # fastapi + # flexcache + # flexparser + # pint + # pydantic + # pydantic-core + # referencing + # sqlalchemy + # starlette + # typing-inspection +typing-inspection==0.4.2 + # via + # pydantic + # pydantic-settings +tzdata==2025.2 + # via + # kombu + # pandas +tzlocal==5.3.1 + # via celery +uritemplate==4.2.0 + # via google-api-python-client +urllib3==2.6.0 + # via requests +uvicorn==0.38.0 + # via -r stormpiper/requirements_unpinned.txt +vine==5.1.0 + # via + # amqp + # celery + # kombu +watchfiles==1.1.1 + # via -r stormpiper/requirements_unpinned.txt +wcwidth==0.2.14 + # via prompt-toolkit +wheel==0.45.1 + # via -r stormpiper/requirements_unpinned.txt +yarl==1.22.0 + # via aiohttp diff --git a/stormpiper/requirements_test.txt b/stormpiper/requirements_test.txt index def15134..a35391a7 100644 --- a/stormpiper/requirements_test.txt +++ b/stormpiper/requirements_test.txt @@ -1,7 +1,22 @@ -pytest==7.3.1 -pytest-asyncio==0.21.0 -coverage==7.2.5 -mypy==1.3.0 -black==23.3.0 -isort==5.12.0 -sqlalchemy-stubs==0.4 +# This file was autogenerated by uv via the following command: +# uv pip compile stormpiper/requirements_test_unpinned.txt +coverage==7.12.0 + # via -r stormpiper/requirements_test_unpinned.txt +iniconfig==2.3.0 + # via pytest +packaging==25.0 + # via pytest +pluggy==1.6.0 + # via pytest +pygments==2.19.2 + # via pytest +pytest==9.0.1 + # via + # -r stormpiper/requirements_test_unpinned.txt + # pytest-asyncio +pytest-asyncio==1.3.0 + # via -r stormpiper/requirements_test_unpinned.txt +ruff==0.14.8 + # via -r stormpiper/requirements_test_unpinned.txt +typing-extensions==4.15.0 + # via pytest-asyncio diff --git a/stormpiper/requirements_test_unpinned.txt b/stormpiper/requirements_test_unpinned.txt new file mode 100644 index 00000000..92162895 --- /dev/null +++ b/stormpiper/requirements_test_unpinned.txt @@ -0,0 +1,4 @@ +pytest +pytest-asyncio +coverage +ruff diff --git a/stormpiper/requirements_unpinned.txt b/stormpiper/requirements_unpinned.txt index ee93712e..1c021c37 100644 --- a/stormpiper/requirements_unpinned.txt +++ b/stormpiper/requirements_unpinned.txt @@ -24,8 +24,8 @@ geojson-pydantic pyproj rtree -pydot -graphviz +# pydot +# graphviz networkx scipy @@ -33,16 +33,17 @@ numpy pandas matplotlib -passlib[bcrypt] +pwdlib +# passlib[bcrypt] psycopg2-binary SQLAlchemy alembic celery[redis] -fastapi<0.99.0 +fastapi #<0.99.0 starlette -pydantic<2.0.0 +pydantic httpx orjson uvicorn @@ -52,7 +53,7 @@ watchfiles asgi-ratelimit pint -nereid-engine @ https://github.com/Geosyntec/nereid/archive/v0.9.3.zip +nereid-engine @ https://github.com/Geosyntec/nereid/archive/v0.11.0.zip setuptools wheel diff --git a/stormpiper/stormpiper/api/__init__.py b/stormpiper/stormpiper/api/__init__.py index a7a1012e..e69de29b 100644 --- a/stormpiper/stormpiper/api/__init__.py +++ b/stormpiper/stormpiper/api/__init__.py @@ -1,58 +0,0 @@ -from fastapi import APIRouter - -from stormpiper.api.endpoints import ( - bg_worker, - chart, - globals, - npv, - prom, - reference, - results, - scenario, - spatial, - subbasin, - table, - tileserver, - tmnt_attr, - tmnt_delineation, - tmnt_facility, - tmnt_source_control, - users, -) - -api_router = APIRouter(prefix="/api/rest") -api_router.include_router(tmnt_attr.router, prefix="/tmnt_attr", tags=["tmnt_attr"]) -api_router.include_router( - tmnt_facility.router, prefix="/tmnt_facility", tags=["tmnt_facility"] -) -api_router.include_router( - results.router, - prefix="/results", - tags=["tmnt_facility", "results"], -) -api_router.include_router(scenario.router, prefix="/scenario", tags=["scenario"]) -api_router.include_router(subbasin.router, prefix="/subbasin", tags=["subbasin"]) -api_router.include_router( - tmnt_delineation.router, prefix="/tmnt_delineation", tags=["tmnt_delineation"] -) -api_router.include_router( - tmnt_source_control.router, - prefix="/tmnt_source_control", - tags=["tmnt_source_control"], -) -api_router.include_router(users.router, prefix="/users", tags=["users"]) -api_router.include_router(globals.router, prefix="/global_setting", tags=["globals"]) -api_router.include_router(table.router, prefix="/table", tags=["table"]) -api_router.include_router(reference.router, prefix="/reference", tags=["reference"]) -api_router.include_router(bg_worker.router, prefix="/tasks", tags=["bg"]) -api_router.include_router(tileserver.router, prefix="/tileserver", tags=["spatial"]) -api_router.include_router(spatial.router, prefix="/spatial", tags=["spatial"]) -api_router.include_router(chart.router, prefix="/chart", tags=["chart"]) - - -rpc_router = APIRouter(prefix="/api/rpc") -rpc_router.include_router(bg_worker.rpc_router, tags=["bg"]) -rpc_router.include_router(bg_worker.rpc_router_admin, tags=["bg", "admin"]) -rpc_router.include_router(scenario.rpc_router, tags=["scenario"]) -rpc_router.include_router(prom.rpc_router, tags=["subbasin", "promethee"]) -rpc_router.include_router(npv.rpc_router, tags=["costs", "pva"]) diff --git a/stormpiper/stormpiper/api/depends.py b/stormpiper/stormpiper/api/depends.py index 6439a00e..723ecb45 100644 --- a/stormpiper/stormpiper/api/depends.py +++ b/stormpiper/stormpiper/api/depends.py @@ -1,3 +1,8 @@ -from stormpiper.apps.supersafe.db import UserDB -from stormpiper.apps.supersafe.users import Admin, Editor, Reader, UserAdmin -from stormpiper.database.connection import AsyncSessionDB +from stormpiper.apps.supersafe.db import UserDB as UserDB +from stormpiper.apps.supersafe.users import ( + Admin as Admin, + Editor as Editor, + Reader as Reader, + UserAdmin as UserAdmin, +) +from stormpiper.database.connection import AsyncSessionDB as AsyncSessionDB diff --git a/stormpiper/stormpiper/api/docs.py b/stormpiper/stormpiper/api/docs.py index 55722def..14294973 100644 --- a/stormpiper/stormpiper/api/docs.py +++ b/stormpiper/stormpiper/api/docs.py @@ -5,7 +5,10 @@ # Swagger UI includes a supermassive curl div that is not height constrained. # Not sure how this hasn't been fixed, but this patches it for this project. def get_better_swagger_ui_html(*args, **kwargs) -> HTMLResponse: - body_lines = get_swagger_ui_html(**kwargs).body.decode().split("\n") + body = get_swagger_ui_html(**kwargs).body + if isinstance(body, memoryview): # pragma: no cover + body = body.tobytes() + body_lines = body.decode().split("\n") ix = 4 for i, line in enumerate(body_lines): if 'type="text/css" rel="stylesheet"' in line: diff --git a/stormpiper/stormpiper/api/endpoints/chart.py b/stormpiper/stormpiper/api/endpoints/chart.py index 52d22c14..138d6848 100644 --- a/stormpiper/stormpiper/api/endpoints/chart.py +++ b/stormpiper/stormpiper/api/endpoints/chart.py @@ -40,11 +40,11 @@ async def get_chart_cost_timeseries( async def get_chart_cost_timeseries_data(node_id: str, db: AsyncSessionDB): if node_id == "null": # pragma: no cover raise HTTPException( - status_code=404, detail=f"Null record requested. No data available." + status_code=404, detail="Null record requested. No data available." ) result = await db.execute( - select(tmnt.TMNT_View).where(tmnt.TMNT_View.node_id == node_id) + select(tmnt.TMNT_View).where(tmnt.TMNT_View.node_id == node_id) # type: ignore ) scalar = result.scalars().first() diff --git a/stormpiper/stormpiper/api/endpoints/globals.py b/stormpiper/stormpiper/api/endpoints/globals.py index 20070d48..ffe635a1 100644 --- a/stormpiper/stormpiper/api/endpoints/globals.py +++ b/stormpiper/stormpiper/api/endpoints/globals.py @@ -59,8 +59,8 @@ async def patch_cost_global( status_code=404, detail=f"Record not found for variable={variable}" ) - _setting = GlobalSettingUpdate.construct( - **setting.dict(exclude_unset=True), updated_by=user.email + _setting = GlobalSettingUpdate.model_construct( + **setting.model_dump(exclude_unset=True), updated_by=user.email ) attr = await crud.global_cost_setting.update(db=db, id=variable, new_obj=_setting) @@ -120,8 +120,8 @@ async def patch_global( status_code=404, detail=f"Record not found for variable={variable}" ) - _setting = GlobalSettingUpdate.construct( - **setting.dict(exclude_unset=True), updated_by=user.email + _setting = GlobalSettingUpdate.model_construct( + **setting.model_dump(exclude_unset=True), updated_by=user.email ) attr = await crud.global_setting.update(db=db, id=variable, new_obj=_setting) @@ -141,7 +141,8 @@ async def create_global_setting( user: UserAdmin, ): new_obj = GlobalSettingCreate( - **setting.dict(exclude_unset=True, exclude_none=True), updated_by=user.email + **setting.model_dump(exclude_unset=True, exclude_none=True), + updated_by=user.email, ) try: diff --git a/stormpiper/stormpiper/api/endpoints/npv.py b/stormpiper/stormpiper/api/endpoints/npv.py index a1ee6f56..53c4666c 100644 --- a/stormpiper/stormpiper/api/endpoints/npv.py +++ b/stormpiper/stormpiper/api/endpoints/npv.py @@ -16,7 +16,7 @@ @rpc_router.post("/calculate_present_cost", tags=["rpc"]) async def calculate_npv(pv: PVRequest): - cost_results = await run_in_threadpool(compute_bmp_pv, **pv.dict()) + cost_results = await run_in_threadpool(compute_bmp_pv, **pv.model_dump()) return cost_results @@ -52,11 +52,13 @@ async def refresh_pv_for_all_existing_tmnt(db: AsyncSessionDB): attrs = await crud.tmnt_cost.get_all(db=db) if not attrs: - raise HTTPException(status_code=404, detail=f"Records not found.") + raise HTTPException(status_code=404, detail="Records not found.") for attr in attrs: try: - _ = await calculate_pv_for_existing_tmnt_in_db(db=db, node_id=attr.node_id) + _ = await calculate_pv_for_existing_tmnt_in_db( + db=db, node_id=str(attr.node_id) + ) except RecordNotFound as e: raise HTTPException(status_code=404, detail=f"{e}") diff --git a/stormpiper/stormpiper/api/endpoints/prom.py b/stormpiper/stormpiper/api/endpoints/prom.py index d47c68c0..52745429 100644 --- a/stormpiper/stormpiper/api/endpoints/prom.py +++ b/stormpiper/stormpiper/api/endpoints/prom.py @@ -16,6 +16,6 @@ ) async def calculate_subbasin_promethee_prioritization(prom: PromRequest): task = bg.calculate_subbasin_promethee_prioritization.apply_async( - kwargs={"data": prom.dict()} + kwargs={"data": prom.model_dump()} ) return await generate_task_response(task=task, timeout=15) diff --git a/stormpiper/stormpiper/api/endpoints/results.py b/stormpiper/stormpiper/api/endpoints/results.py index 7f8f09db..b90d5a71 100644 --- a/stormpiper/stormpiper/api/endpoints/results.py +++ b/stormpiper/stormpiper/api/endpoints/results.py @@ -25,18 +25,18 @@ ) async def get_all_results( db: AsyncSessionDB, - ntype: NType | None = None, # type: ignore + ntype: NType | None = None, limit: int | None = Query(int(1e6)), offset: int | None = Query(0), - epoch: Epoch | None = Query("1980s", example="1980s"), # type: ignore + epoch: Epoch | None = Query("1980s"), ): q = select(results.ResultBlob) - epoch = epoch or "1980s" + epoch = epoch or "1980s" # type: ignore if epoch != "all": - q = q.where(results.ResultBlob.epoch == epoch) + q = q.where(results.ResultBlob.epoch == epoch) # type: ignore if ntype is not None: - q = q.where(results.ResultBlob.ntype == ntype) + q = q.where(results.ResultBlob.ntype == ntype) # type: ignore q = q.offset(offset).limit(limit) @@ -72,14 +72,18 @@ async def get_result_is_dirty(db: AsyncSessionDB): ) async def get_result( db: AsyncSessionDB, - node_id: str = Path(..., title="node id or altid", example="SWFA-100002"), - epoch: Epoch | None = Query("1980s", example="1980s"), # type: ignore + node_id: str = Path( + ..., + title="node id or altid", + openapi_examples={"t": {"summary": "t", "value": "SWFA-100002"}}, + ), + epoch: Epoch | None = Query("1980s"), ): - q = select(results.ResultBlob).where(results.ResultBlob.node_id == node_id) + q = select(results.ResultBlob).where(results.ResultBlob.node_id == node_id) # type: ignore - epoch = epoch or "1980s" + epoch = epoch or "1980s" # type: ignore if epoch != "all": - q = q.where(results.ResultBlob.epoch == epoch) + q = q.where(results.ResultBlob.epoch == epoch) # type: ignore result = await db.execute(q) scalar = result.scalars().all() diff --git a/stormpiper/stormpiper/api/endpoints/scenario.py b/stormpiper/stormpiper/api/endpoints/scenario.py index 2a5de0b3..f2dc5ec8 100644 --- a/stormpiper/stormpiper/api/endpoints/scenario.py +++ b/stormpiper/stormpiper/api/endpoints/scenario.py @@ -40,11 +40,14 @@ async def validate_scenario( request: Request, user: Editor, db: AsyncSessionDB, - scenario: ScenarioPost | dict[str, Any] = Body(..., examples=SCENARIO_EXAMPLES), + scenario: ScenarioPost | dict[str, Any] = Body( + ..., + openapi_examples=SCENARIO_EXAMPLES, # type: ignore + ), ) -> ScenarioUpdate: context = request.state.context if isinstance(scenario, BaseModel): # pragma: no branch - scenario = scenario.dict(exclude_unset=True) + scenario = scenario.model_dump(exclude_unset=True) scenario["updated_by"] = user.email try: @@ -126,7 +129,7 @@ async def update_scenario( if not attr: # pragma: no cover raise HTTPException(status_code=404, detail=f"Record not found for id={id}") - data = scenario.dict(exclude_unset=True) + data = scenario.model_dump(exclude_unset=True) if "input" in data: loading_hash = scenario.loading_hash @@ -137,14 +140,14 @@ async def update_scenario( recalculate_loading = attr.loading_hash != loading_hash recalculate_wq = attr.input_hash != input_hash - if recalculate_loading: + if recalculate_loading: # type: ignore logger.info("SCENARIO: Clearing prev scenario loading results.") data["lgu_boundary"] = None data["lgu_load"] = None data["delin_load"] = None - if recalculate_wq: + if recalculate_wq: # type: ignore logger.info("SCENARIO: Clearing scenario wq results") data["graph_edge"] = None data["structural_tmnt_result"] = None @@ -192,7 +195,9 @@ async def create_scenario( user: Editor, data: ScenarioUpdate = Depends(validate_scenario), ): - scenario = ScenarioCreate(**data.dict(exclude_unset=True), created_by=user.email) + scenario = ScenarioCreate( + **data.model_dump(exclude_unset=True), created_by=user.email + ) try: attr = await crud.scenario.create(db=db, new_obj=scenario) except Exception as e: # pragma: no cover @@ -220,7 +225,7 @@ async def solve_single_scenario( if not attr: # pragma: no cover raise HTTPException(status_code=404, detail=f"Record not found for id={id}") - data = ScenarioSolve(**utils.orm_to_dict(attr)).dict(exclude_unset=True) + data = ScenarioSolve(**utils.orm_to_dict(attr)).model_dump(exclude_unset=True) task = bg.update_scenario_results.apply_async(kwargs={"data": data, "force": force}) @@ -239,7 +244,7 @@ async def solve_all_scenarios( raise HTTPException(status_code=404, detail="Scenario records not found.") data_list = [ - ScenarioSolve(**utils.orm_to_dict(attr)).dict(exclude_unset=True) + ScenarioSolve(**utils.orm_to_dict(attr)).model_dump(exclude_unset=True) for attr in attrs ] @@ -255,7 +260,7 @@ async def solve_scenario( scenario: ScenarioCreate = Depends(validate_scenario), ): """Stateless solves of scenarios with identical logic as the stateful variant.""" - data = scenario.dict(exclude_unset=True) + data = scenario.model_dump(exclude_unset=True) task = bg.compute_scenario_results.apply_async(kwargs={"data": data}) return await generate_task_response(task=task) @@ -270,6 +275,6 @@ async def solve_scenario_foreground( scenario: ScenarioCreate = Depends(validate_scenario), ): """Stateless solves of scenarios with identical logic as the stateful variant.""" - data = scenario.dict(exclude_unset=True) + data = scenario.model_dump(exclude_unset=True) response = solve_scenario_data(data=data) return response diff --git a/stormpiper/stormpiper/api/endpoints/spatial.py b/stormpiper/stormpiper/api/endpoints/spatial.py index 288f9fae..0753437a 100644 --- a/stormpiper/stormpiper/api/endpoints/spatial.py +++ b/stormpiper/stormpiper/api/endpoints/spatial.py @@ -30,6 +30,6 @@ async def get_ee_assets() -> dict[str, Any]: # pragma: no cover rsp = await run_in_threadpool(ee.assets) if not rsp: # pragma: no cover - raise HTTPException(status_code=404, detail=f"not found") + raise HTTPException(status_code=404, detail="not found") return rsp diff --git a/stormpiper/stormpiper/api/endpoints/subbasin.py b/stormpiper/stormpiper/api/endpoints/subbasin.py index 6c49faea..63e42839 100644 --- a/stormpiper/stormpiper/api/endpoints/subbasin.py +++ b/stormpiper/stormpiper/api/endpoints/subbasin.py @@ -31,14 +31,14 @@ async def get_subbasin_wq( subbasin_id: str, db: AsyncSessionDB, - epoch: Epoch | None = Query("1980s", example="1980s"), # type: ignore + epoch: Epoch | None = Query("1980s"), ): q = select(SubbasinWQResult_View).where( - SubbasinWQResult_View.subbasin == subbasin_id + SubbasinWQResult_View.subbasin == subbasin_id # type: ignore ) - epoch = epoch or "1980s" + epoch = epoch or "1980s" # type: ignore if epoch != "all": - q = q.where(SubbasinWQResult_View.epoch == epoch) + q = q.where(SubbasinWQResult_View.epoch == epoch) # type: ignore result = await db.execute(q) scalar = result.scalars().first() @@ -64,13 +64,13 @@ async def get_all_subbasins_wq( db: AsyncSessionDB, limit: int | None = Query(int(1e6)), offset: int | None = Query(0), - epoch: Epoch | None = Query("1980s", example="1980s"), # type: ignore + epoch: Epoch | None = Query("1980s"), ): q = select(SubbasinWQResult_View) - epoch = epoch or "1980s" + epoch = epoch or "1980s" # type: ignore if epoch != "all": - q = q.where(SubbasinWQResult_View.epoch == epoch) + q = q.where(SubbasinWQResult_View.epoch == epoch) # type: ignore q = q.offset(offset).limit(limit) @@ -96,7 +96,7 @@ async def get_subbasin_info( subbasin_id: str, db: AsyncSessionDB, ): - q = select(SubbasinInfo_View).where(SubbasinInfo_View.subbasin == subbasin_id) + q = select(SubbasinInfo_View).where(SubbasinInfo_View.subbasin == subbasin_id) # type: ignore result = await db.execute(q) scalar = result.scalars().first() @@ -132,7 +132,7 @@ async def get_all_subbasins_info( if f == "geojson" and scalars: # TODO: cache this server-side - content = await run_in_threadpool(scalars_to_gdf_to_geojson, scalars) + content = await run_in_threadpool(scalars_to_gdf_to_geojson, scalars) # type: ignore return Response( content=content, diff --git a/stormpiper/stormpiper/api/endpoints/tmnt_attr.py b/stormpiper/stormpiper/api/endpoints/tmnt_attr.py index 9292fa2b..82b3093d 100644 --- a/stormpiper/stormpiper/api/endpoints/tmnt_attr.py +++ b/stormpiper/stormpiper/api/endpoints/tmnt_attr.py @@ -3,7 +3,7 @@ from fastapi import APIRouter, Body, Depends, Path, Query, Request, status from fastapi.concurrency import run_in_threadpool from fastapi.exceptions import HTTPException -from nereid.api.api_v1.models.treatment_facility_models import STRUCTURAL_FACILITY_TYPE +from nereid.models.treatment_facility_models import STRUCTURAL_FACILITY_TYPE from pydantic import BaseModel from sqlalchemy import select @@ -32,7 +32,7 @@ ) async def get_tmnt_attr(node_id: str, db: AsyncSessionDB): result = await db.execute( - select(tmnt.TMNT_View).where(tmnt.TMNT_View.node_id == node_id) + select(tmnt.TMNT_View).where(tmnt.TMNT_View.node_id == node_id) # type: ignore ) if not result: # pragma: no cover @@ -68,7 +68,7 @@ async def validate_tmnt_update( ), ) -> TMNTUpdate: if isinstance(tmnt_patch, BaseModel): # pragma: no cover - tmnt_patch = tmnt_patch.dict(exclude_unset=True) + tmnt_patch = tmnt_patch.model_dump(exclude_unset=True) tmnt_patch["updated_by"] = user.email context = request.state.context @@ -118,7 +118,7 @@ async def patch_tmnt_attr( ) result = await db.execute( - select(tmnt.TMNT_View).where(tmnt.TMNT_View.node_id == node_id) + select(tmnt.TMNT_View).where(tmnt.TMNT_View.node_id == node_id) # type: ignore ) return result.scalars().first() diff --git a/stormpiper/stormpiper/api/endpoints/tmnt_delineation.py b/stormpiper/stormpiper/api/endpoints/tmnt_delineation.py index ce026aca..b100552f 100644 --- a/stormpiper/stormpiper/api/endpoints/tmnt_delineation.py +++ b/stormpiper/stormpiper/api/endpoints/tmnt_delineation.py @@ -30,8 +30,6 @@ async def get_tmnt_delineations( altid: str, f: str = Query("json"), ): - """Returns a list because more than one delineation can be associated with a facility""" - q = select(tmnt.TMNTFacilityDelineation).where( tmnt.TMNTFacilityDelineation.altid == altid ) @@ -39,7 +37,8 @@ async def get_tmnt_delineations( if f == "geojson": content = await run_in_threadpool( - scalars_to_gdf_to_geojson, result.scalars().all() + scalars_to_gdf_to_geojson, + result.scalars().all(), # type: ignore ) return Response( content=content, @@ -81,7 +80,7 @@ async def get_all_tmnt_delineations( if f == "geojson" and scalars: # TODO: cache this server-side - content = await run_in_threadpool(scalars_to_gdf_to_geojson, scalars) + content = await run_in_threadpool(scalars_to_gdf_to_geojson, scalars) # type: ignore return Response( content=content, diff --git a/stormpiper/stormpiper/api/endpoints/tmnt_facility.py b/stormpiper/stormpiper/api/endpoints/tmnt_facility.py index defe8909..ecfd02cb 100644 --- a/stormpiper/stormpiper/api/endpoints/tmnt_facility.py +++ b/stormpiper/stormpiper/api/endpoints/tmnt_facility.py @@ -35,16 +35,16 @@ async def get_all_tmnt( ): q = select(tmnt.TMNT_View).offset(offset).limit(limit) if altid is not None: - q = q.where(tmnt.TMNT_View.altid == altid) + q = q.where(tmnt.TMNT_View.altid == altid) # type: ignore if node_id is not None: - q = q.where(tmnt.TMNT_View.node_id == node_id) + q = q.where(tmnt.TMNT_View.node_id == node_id) # type: ignore result = await db.execute(q) scalars = result.scalars().all() if f == "geojson" and scalars: # TODO: cache this server-side - content = await run_in_threadpool(scalars_to_gdf_to_geojson, scalars) + content = await run_in_threadpool(scalars_to_gdf_to_geojson, scalars) # type: ignore return Response( content=content, @@ -69,7 +69,7 @@ async def get_all_tmnt( ) async def get_tmnt(node_id: str, db: AsyncSessionDB): result = await db.execute( - select(tmnt.TMNT_View).where(tmnt.TMNT_View.node_id == node_id) + select(tmnt.TMNT_View).where(tmnt.TMNT_View.node_id == node_id) # type: ignore ) scalar = result.scalars().first() diff --git a/stormpiper/stormpiper/api/endpoints/tmnt_source_control.py b/stormpiper/stormpiper/api/endpoints/tmnt_source_control.py index 60ec595e..42c9f09f 100644 --- a/stormpiper/stormpiper/api/endpoints/tmnt_source_control.py +++ b/stormpiper/stormpiper/api/endpoints/tmnt_source_control.py @@ -1,5 +1,4 @@ from fastapi import APIRouter, Depends, HTTPException, Query, status -from fastapi.exceptions import HTTPException from sqlalchemy import select from stormpiper.apps.supersafe.users import user_role_ge_editor, user_role_ge_reader @@ -53,7 +52,8 @@ async def patch_tmnt_source_control( raise HTTPException(status_code=404, detail=f"Record not found for id={id}") new_obj = TMNTSourceControlUpdate( - **tmnt_attr.dict(exclude_unset=True, exclude_none=True), updated_by=user.email + **tmnt_attr.model_dump(exclude_unset=True, exclude_none=True), + updated_by=user.email, ) try: @@ -79,7 +79,8 @@ async def create_tmnt_source_control( tmnt_attr: TMNTSourceControlPost, ): new_obj = TMNTSourceControlCreate( - **tmnt_attr.dict(exclude_unset=True, exclude_none=True), updated_by=user.email + **tmnt_attr.model_dump(exclude_unset=True, exclude_none=True), + updated_by=user.email, ) try: @@ -104,7 +105,7 @@ async def delete_tmnt_source_control( id: int, ): try: - attr = await crud.tmnt_source_control.remove(db=db, id=id) + _ = await crud.tmnt_source_control.remove(db=db, id=id) except Exception as e: # pragma: no cover raise HTTPException( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, diff --git a/stormpiper/stormpiper/api/endpoints/users.py b/stormpiper/stormpiper/api/endpoints/users.py index 62c22676..1960d91e 100644 --- a/stormpiper/stormpiper/api/endpoints/users.py +++ b/stormpiper/stormpiper/api/endpoints/users.py @@ -1,6 +1,7 @@ from uuid import uuid4 from fastapi import APIRouter, Depends +from pydantic import ConfigDict from sqlalchemy import select from stormpiper.apps.supersafe import models @@ -16,8 +17,7 @@ class UserResponse(models.UserRead): - class Config: - orm_mode = True + model_config = ConfigDict(from_attributes=True) router = APIRouter() @@ -33,7 +33,7 @@ async def get_readonly_token( user: Reader, user_db: UserDB, ): - if user.readonly_token: + if user.readonly_token: # type: ignore return user user_ = await user_db.update(user, {"readonly_token": str(uuid4())}) diff --git a/stormpiper/stormpiper/api/router.py b/stormpiper/stormpiper/api/router.py new file mode 100644 index 00000000..a7a1012e --- /dev/null +++ b/stormpiper/stormpiper/api/router.py @@ -0,0 +1,58 @@ +from fastapi import APIRouter + +from stormpiper.api.endpoints import ( + bg_worker, + chart, + globals, + npv, + prom, + reference, + results, + scenario, + spatial, + subbasin, + table, + tileserver, + tmnt_attr, + tmnt_delineation, + tmnt_facility, + tmnt_source_control, + users, +) + +api_router = APIRouter(prefix="/api/rest") +api_router.include_router(tmnt_attr.router, prefix="/tmnt_attr", tags=["tmnt_attr"]) +api_router.include_router( + tmnt_facility.router, prefix="/tmnt_facility", tags=["tmnt_facility"] +) +api_router.include_router( + results.router, + prefix="/results", + tags=["tmnt_facility", "results"], +) +api_router.include_router(scenario.router, prefix="/scenario", tags=["scenario"]) +api_router.include_router(subbasin.router, prefix="/subbasin", tags=["subbasin"]) +api_router.include_router( + tmnt_delineation.router, prefix="/tmnt_delineation", tags=["tmnt_delineation"] +) +api_router.include_router( + tmnt_source_control.router, + prefix="/tmnt_source_control", + tags=["tmnt_source_control"], +) +api_router.include_router(users.router, prefix="/users", tags=["users"]) +api_router.include_router(globals.router, prefix="/global_setting", tags=["globals"]) +api_router.include_router(table.router, prefix="/table", tags=["table"]) +api_router.include_router(reference.router, prefix="/reference", tags=["reference"]) +api_router.include_router(bg_worker.router, prefix="/tasks", tags=["bg"]) +api_router.include_router(tileserver.router, prefix="/tileserver", tags=["spatial"]) +api_router.include_router(spatial.router, prefix="/spatial", tags=["spatial"]) +api_router.include_router(chart.router, prefix="/chart", tags=["chart"]) + + +rpc_router = APIRouter(prefix="/api/rpc") +rpc_router.include_router(bg_worker.rpc_router, tags=["bg"]) +rpc_router.include_router(bg_worker.rpc_router_admin, tags=["bg", "admin"]) +rpc_router.include_router(scenario.rpc_router, tags=["scenario"]) +rpc_router.include_router(prom.rpc_router, tags=["subbasin", "promethee"]) +rpc_router.include_router(npv.rpc_router, tags=["costs", "pva"]) diff --git a/stormpiper/stormpiper/apps/supersafe/init_users.py b/stormpiper/stormpiper/apps/supersafe/init_users.py index c840c661..1beb951e 100644 --- a/stormpiper/stormpiper/apps/supersafe/init_users.py +++ b/stormpiper/stormpiper/apps/supersafe/init_users.py @@ -30,7 +30,8 @@ async def create_user( user = await user_manager.user_db.get_by_email(email) if user is not None and force_set_password: await user_manager.update( - UserUpdate(password=password), user # type: ignore + UserUpdate(password=password), + user, # type: ignore ) user = await user_manager.create( diff --git a/stormpiper/stormpiper/apps/supersafe/models.py b/stormpiper/stormpiper/apps/supersafe/models.py index 905d0b4c..b638eff7 100644 --- a/stormpiper/stormpiper/apps/supersafe/models.py +++ b/stormpiper/stormpiper/apps/supersafe/models.py @@ -36,8 +36,7 @@ class UserRead(UserExtras, schemas.BaseUser[uuid.UUID]): readonly_token: uuid.UUID | None = None -class UserRegister(UserExtras, schemas.BaseUserCreate): - ... +class UserRegister(UserExtras, schemas.BaseUserCreate): ... class UserCreate(UserExtras, schemas.BaseUserCreate): diff --git a/stormpiper/stormpiper/apps/supersafe/users.py b/stormpiper/stormpiper/apps/supersafe/users.py index e36876ab..d85a343e 100644 --- a/stormpiper/stormpiper/apps/supersafe/users.py +++ b/stormpiper/stormpiper/apps/supersafe/users.py @@ -21,7 +21,7 @@ from stormpiper.email_helper import email from .db import AsyncSessionDB, User, UserDB -from .models import Role, UserCreate, UserRead, UserUpdate +from .models import Role, UserCreate as UserCreate, UserRead as UserRead, UserUpdate logging.basicConfig(level=settings.LOGLEVEL) logger = logging.getLogger(__name__) @@ -220,7 +220,7 @@ async def _check_protected_user_patch( current_user=Depends(current_active_user), id: Any = None, ) -> UserUpdate: - data = user_update.dict(exclude_unset=True) + data = user_update.model_dump(exclude_unset=True) if field not in data: return user_update diff --git a/stormpiper/stormpiper/bg_utils/__init__.py b/stormpiper/stormpiper/bg_utils/__init__.py index 463af695..80f4c3cd 100644 --- a/stormpiper/stormpiper/bg_utils/__init__.py +++ b/stormpiper/stormpiper/bg_utils/__init__.py @@ -1,10 +1,10 @@ +# ruff: noqa """ Reference --------- https://github.com/steinitzu/celery-singleton """ - from .exceptions import DuplicateTaskError from .singleton import Singleton, clear_locks diff --git a/stormpiper/stormpiper/bg_utils/backends/redis.py b/stormpiper/stormpiper/bg_utils/backends/redis.py index d1a46a65..fc957b61 100644 --- a/stormpiper/stormpiper/bg_utils/backends/redis.py +++ b/stormpiper/stormpiper/bg_utils/backends/redis.py @@ -22,7 +22,7 @@ def get(self, lock): def clear(self, key_prefix): cursor = 0 while True: - cursor, keys = self.redis.scan(cursor=cursor, match=key_prefix + "*") + cursor, keys = self.redis.scan(cursor=cursor, match=key_prefix + "*") # type: ignore for k in keys: self.redis.delete(k) if cursor == 0: diff --git a/stormpiper/stormpiper/bg_utils/singleton.py b/stormpiper/stormpiper/bg_utils/singleton.py index 8101bbf6..e2b9fbc0 100644 --- a/stormpiper/stormpiper/bg_utils/singleton.py +++ b/stormpiper/stormpiper/bg_utils/singleton.py @@ -89,7 +89,7 @@ def apply_async( link=None, link_error=None, shadow=None, - **options + **options, ): args = args or [] kwargs = kwargs or {} @@ -105,7 +105,7 @@ def apply_async( link=link, link_error=link_error, shadow=shadow, - **options + **options, ) task = self.lock_and_run(**run_args) diff --git a/stormpiper/stormpiper/bg_worker.py b/stormpiper/stormpiper/bg_worker.py index 09083245..48fe681f 100644 --- a/stormpiper/stormpiper/bg_worker.py +++ b/stormpiper/stormpiper/bg_worker.py @@ -40,7 +40,7 @@ def run_in_chain(func, *args, **kwargs): logger.info(f"background {func.__name__} has started running.") continue_chain = kwargs.pop("continue_chain", True) if not continue_chain: - raise IncompleteChainError(f"A task failed and broke the chain.") + raise IncompleteChainError("A task failed and broke the chain.") try: func(*args, **kwargs) except Exception as e: @@ -51,8 +51,7 @@ def run_in_chain(func, *args, **kwargs): return True -class IncompleteChainError(Exception): - ... +class IncompleteChainError(Exception): ... @celery_app.task(acks_late=True, track_started=True) diff --git a/stormpiper/stormpiper/connections/arcgis.py b/stormpiper/stormpiper/connections/arcgis.py index 7382aa26..ae21c49d 100644 --- a/stormpiper/stormpiper/connections/arcgis.py +++ b/stormpiper/stormpiper/connections/arcgis.py @@ -1,6 +1,8 @@ import asyncio import base64 import logging +from concurrent.futures import ThreadPoolExecutor, as_completed +from typing import cast import geopandas import pandas @@ -13,17 +15,66 @@ logger = logging.getLogger(__name__) -def get_features(url: str | bytes) -> list: - response = requests.get(url) - js = response.json() +def get_urls_parallel(urls, getter=requests.get, max_workers=None): + completed = [] + with ThreadPoolExecutor(max_workers) as executor: + futures = [executor.submit(getter, url=url) for i, url in enumerate(urls)] + + for future in as_completed(futures): + res = future.result() + completed.append(res) + logger.info(f"result status: {res.status_code} {res.url}") + + return completed + + +def build_esri_geojson_urls( + *, + url: str | bytes, + chunksize: int = 500, + fields: tuple[str, ...] | str = "*", + max_records: int | None = None, +): + url_base = str(url).split("/query?")[0] + total_records = ( + requests.get(url_base + "/query?where=1%3D1&returnCountOnly=true&f=json") + .json() + .get("count") + ) - features = js.get("features", None) - return [] if features is None else features + max_records = min(total_records, max_records or total_records) + if not max_records: # pragma: no cover + raise ValueError(f"No Data to Process at {url_base}") + + q = ( + "/query?where=1%3D1&outFields={fields}&returnGeometry=true&" + "resultOffset={offset}&resultRecordCount={chunksize}&f=geojson" + ) + urls = [ + url_base + q.format(offset=offset, chunksize=chunksize, fields=",".join(fields)) + for offset in [i * chunksize for i in range(0, max_records // chunksize + 1)] + ] + + return urls + + +def get_features(url: str | bytes) -> list: + urls = build_esri_geojson_urls(url=url) + responses = get_urls_parallel(urls=urls) + features = [] + for r in responses: + try: + js = r.json() + except Exception as e: + print(r.content) + raise e + features.extend(js.get("features", [])) + return features def _get_tmnt_facility_type_codes(*, url: str | bytes | None = None) -> dict[str, str]: if url is None: # pragma: no branch - url = external_resources.get("tmnt_facility_codes", {}).get("url", "") + url = str(external_resources.get("tmnt_facility_codes", {}).get("url", "")) r = requests.get(url) data = r.json() @@ -39,11 +90,10 @@ def _get_tmnt_facility_type_codes(*, url: str | bytes | None = None) -> dict[str def _get_tmnt_facilities(*, url: str | bytes | None = None) -> geopandas.GeoDataFrame: if url is None: # pragma: no branch - url = external_resources.get("tmnt_facilities", {}).get("url", "") + url = str(external_resources.get("tmnt_facilities", {}).get("url", "")) features = get_features(url=url) gdf = geopandas.GeoDataFrame.from_features(features=features, crs=4326) - return gdf @@ -131,7 +181,7 @@ def get_tmnt_facilities( # ref: database.schemas.tmnt ) - duplicate_altids = gdf.loc[gdf["altid"].duplicated()] + duplicate_altids = gdf.loc[gdf["altid"].duplicated()] # type: ignore if len(duplicate_altids) > 0 and with_warning: # pragma: no cover # send email to maintainers @@ -155,7 +205,7 @@ def get_tmnt_facility_delineations(*, url=None): delineations = ( geopandas.GeoDataFrame.from_features(features=features, crs=4326) .to_crs(settings.TACOMA_EPSG) - .reset_index(drop=True) + .reset_index(drop=True) # type: ignore .rename(columns=lambda c: c.lower()) .assign(relid=lambda df: df.rel_id) .dropna(subset="relid") @@ -185,7 +235,7 @@ def get_subbasins(*, url=None, cols=None): subbasins = ( geopandas.GeoDataFrame.from_features(features=features, crs=4326, columns=cols) .to_crs(settings.TACOMA_EPSG) - .rename(columns=lambda c: c.lower()) + .rename(columns=lambda c: c.lower()) # type: ignore .loc[lambda df: ~df.geometry.is_empty] .drop_duplicates() .assign(area_acres=lambda df: df.geometry.area / 43560) @@ -205,7 +255,7 @@ def get_equity_index_deprecated(*, url=None, cols=None): # pragma: no cover equity_index = ( geopandas.GeoDataFrame.from_features(features=features, crs=4326, columns=cols) .to_crs(settings.TACOMA_EPSG) - .rename(columns=lambda c: c.lower()) + .rename(columns=lambda c: c.lower()) # type: ignore .loc[lambda df: ~df.geometry.is_empty] .drop_duplicates() ) @@ -229,8 +279,9 @@ def get_subbasins_with_equity_ix_deprecated( make_valid=True, ).assign(ratio=lambda df: df.geometry.area / df["equity_ix_area_sqft"]) - subbasins_eq_ix[equity_index_cols] = subbasins_eq_ix[equity_index_cols].multiply( - subbasins_eq_ix["ratio"], axis=0 + subbasins_eq_ix[equity_index_cols] = subbasins_eq_ix[equity_index_cols].multiply( # type:ignore + subbasins_eq_ix["ratio"], # type:ignore + axis=0, ) # sum over census blocks @@ -244,7 +295,7 @@ def get_subbasin_metrics(*, url=None): if url is None: # pragma: no branch url = external_resources["subbasin_metrics"]["url"] - features = [f.get("attributes", {}) for f in get_features(url)] + features = [f.get("properties", {}) for f in get_features(url)] df = ( pandas.DataFrame(features) .rename(columns=lambda c: c.lower()) @@ -267,9 +318,14 @@ def get_subbasin_metrics(*, url=None): return df -def get_subbasins_with_metrics(*, url=None, cols=None, subbasin_metrics_url=None): +def get_subbasins_with_metrics( + *, url=None, cols=None, subbasin_metrics_url=None +) -> geopandas.GeoDataFrame: subbasins_raw = get_subbasins(url=url, cols=cols) subbasin_metrics = get_subbasin_metrics(url=subbasin_metrics_url) - subbasins = subbasins_raw.merge(subbasin_metrics, on="subbasin", how="left") + subbasins = cast( + geopandas.GeoDataFrame, + subbasins_raw.merge(subbasin_metrics, on="subbasin", how="left"), + ) return subbasins diff --git a/stormpiper/stormpiper/core/config.py b/stormpiper/stormpiper/core/config.py index 24906707..7377b5b2 100644 --- a/stormpiper/stormpiper/core/config.py +++ b/stormpiper/stormpiper/core/config.py @@ -3,15 +3,16 @@ from pathlib import Path from typing import Literal -from pydantic import AnyHttpUrl, BaseSettings, validator +from pydantic import AnyHttpUrl, field_validator +from pydantic_settings import BaseSettings, SettingsConfigDict -import stormpiper +from stormpiper import __version__ # type: ignore stormpiper_path = Path(__file__).parent.parent.resolve() class Settings(BaseSettings): - VERSION: str = stormpiper.__version__ # type: ignore + VERSION: str = __version__ # type: ignore ENVIRONMENT: str = "development" SECRET_KEY: str = secrets.token_urlsafe(32) @@ -25,7 +26,7 @@ class Settings(BaseSettings): ALLOW_CORS_ORIGIN_REGEX: str | None = None TRUSTED_HOSTS: list[str] | str = "127.0.0.1" - @validator("ALLOW_CORS_ORIGINS", pre=True) # pragma: no cover + @field_validator("ALLOW_CORS_ORIGINS", mode="before") # pragma: no cover def assemble_cors_origins(cls, v: str | list[str]) -> str | list[str]: if isinstance(v, str) and not v.startswith("["): return [i.strip() for i in v.split(",")] @@ -39,10 +40,13 @@ def assemble_cors_origins(cls, v: str | list[str]) -> str | list[str]: EE_PROJECT_DIRECTORY: str = "" EE_JSON_BASE64: str = "" EE_LOGIN_INTERVAL_SECONDS: int = 3600 * 4 # every four hours - EE_RUNOFF_PATH = ( + EE_RUNOFF_PATH: str = ( "projects/ee-stormwaterheatmap/assets/production/Mean_Annual_Q_4_epochs" ) - EE_COC_PATH = "projects/ee-tacoma-watershed/assets/production/coc_concentrations" + + EE_COC_PATH: str = ( + "projects/ee-tacoma-watershed/assets/production/coc_concentrations" + ) # Database ADMIN_ACCOUNT_PASSWORD: str = "change me with an env variable" @@ -74,7 +78,7 @@ def assemble_cors_origins(cls, v: str | list[str]) -> str | list[str]: EMAIL_API_SECRET: str = "" MAINTAINER_EMAIL_LIST: str | list[str] = "" - @validator("MAINTAINER_EMAIL_LIST", pre=True) # pragma: no cover + @field_validator("MAINTAINER_EMAIL_LIST", mode="before") # pragma: no cover def assemble_maintainer_emails(cls, v: str | list[str]) -> str | list[str]: if isinstance(v, str) and not v.startswith("["): return [i.strip() for i in v.split(",")] @@ -82,7 +86,7 @@ def assemble_maintainer_emails(cls, v: str | list[str]) -> str | list[str]: return v raise ValueError(v) - @validator("EMAIL_SEND_URL", pre=True) # pragma: no cover + @field_validator("EMAIL_SEND_URL", mode="before") # pragma: no cover def assure_valid_url(cls, v: str) -> str: if not v or v.strip() == "": return "http://example.com" @@ -94,18 +98,19 @@ def assure_valid_url(cls, v: str) -> str: # AGOL TACOMA_EPSG: int = 2927 - class Config: - extra = "allow" - env_prefix = "STP_" - try: - env_file = ".env" - except FileNotFoundError: # pragma: no cover - pass - def update(self, other: dict) -> None: # pragma: no cover for key, value in other.items(): setattr(self, key, value) + model_config = SettingsConfigDict( + extra="allow", + env_prefix="STP_", + # try: + env_file=".env", + # except FileNotFoundError: # pragma: no cover + # pass + ) + settings = Settings() diff --git a/stormpiper/stormpiper/core/exceptions.py b/stormpiper/stormpiper/core/exceptions.py index 0120aef6..64967941 100644 --- a/stormpiper/stormpiper/core/exceptions.py +++ b/stormpiper/stormpiper/core/exceptions.py @@ -1,2 +1 @@ -class RecordNotFound(Exception): - ... +class RecordNotFound(Exception): ... diff --git a/stormpiper/stormpiper/core/external_resources.json b/stormpiper/stormpiper/core/external_resources.json index 03e1928b..5e80da78 100644 --- a/stormpiper/stormpiper/core/external_resources.json +++ b/stormpiper/stormpiper/core/external_resources.json @@ -1,9 +1,9 @@ { "tmnt_facility_codes": { - "url": "https://services3.arcgis.com/SCwJH1pD8WSn5T5y/arcgis/rest/services/swFacilities/FeatureServer/0/query?where=1%3D1&outFields=*&returnQueryGeometry=false&resultRecordCount=1&f=pjson" + "url": "https://services3.arcgis.com/SCwJH1pD8WSn5T5y/arcgis/rest/services/swFacilities/FeatureServer/0/query?where=1%3D1&outFields=*&returnGeometry=false&resultRecordCount=1&f=json" }, "tmnt_facilities": { - "url": "https://services3.arcgis.com/SCwJH1pD8WSn5T5y/arcgis/rest/services/swFacilities/FeatureServer/0/query?where=1%3D1&outFields=*&returnGeometry=true&f=geojson", + "url": "https://services3.arcgis.com/SCwJH1pD8WSn5T5y/arcgis/rest/services/swFacilities/FeatureServer/0", "old_url": "https://gis.cityoftacoma.org/arcgis/rest/services/ES/SurfacewaterNetwork/MapServer/21/query?where=1%3D1&outFields=*&returnGeometry=true&f=pjson", "columns": [ "ALTID", @@ -19,15 +19,15 @@ ] }, "tmnt_facility_delineations": { - "url": "https://services3.arcgis.com/SCwJH1pD8WSn5T5y/arcgis/rest/services/swFacilitiesContAreas/FeatureServer/1/query?where=1%3D1&outFields=*&returnGeometry=true&f=geojson", + "url": "https://services3.arcgis.com/SCwJH1pD8WSn5T5y/arcgis/rest/services/swFacilitiesContAreas/FeatureServer/1", "old_url": "error unknown Url" }, "subbasins": { - "url": "https://gis.cityoftacoma.org/arcgis/rest/services/ES/SurfacewaterNetwork/MapServer/41/query?where=1%3D1&outFields=*&returnGeometry=true&f=geojson", + "url": "https://gis.cityoftacoma.org/arcgis/rest/services/ES/SurfacewaterNetwork/MapServer/41", "columns": ["BASINNAME", "SUBBASIN", "geometry"] }, "equity_index": { - "url": "https://gis.cityoftacoma.org/arcgis/rest/services/General/Equity2020/MapServer/1/query?where=1%3D1&outFields=*&f=geojson&returnGeometry=true", + "url": "https://gis.cityoftacoma.org/arcgis/rest/services/General/Equity2020/MapServer/1", "columns": [ "Access", "Economic_Value", @@ -38,6 +38,6 @@ ] }, "subbasin_metrics": { - "url": "https://services3.arcgis.com/SCwJH1pD8WSn5T5y/arcgis/rest/services/swSubbasinMetrics/FeatureServer/56/query?f=pjson&where=1%3D1&outFields=*" + "url": "https://services3.arcgis.com/SCwJH1pD8WSn5T5y/arcgis/rest/services/swSubbasinMetrics/FeatureServer/56" } } diff --git a/stormpiper/stormpiper/core/utils.py b/stormpiper/stormpiper/core/utils.py index 28429dcf..0504c8aa 100644 --- a/stormpiper/stormpiper/core/utils.py +++ b/stormpiper/stormpiper/core/utils.py @@ -31,7 +31,7 @@ def datetime_to_isoformat( if not inplace: df = df.copy() - df[cols] = df[cols].applymap(lambda x: x.isoformat()) + df[cols] = df[cols].map(lambda x: x.isoformat()) # type: ignore return df @@ -67,7 +67,7 @@ async def generate_task_response( _ = await wait_a_sec_and_see_if_we_can_return_some_data( task, timeout=timeout, exp=exp ) - response = dict(task_id=task.task_id, status=task.status) + response = {"task_id": task.task_id, "status": task.status} if task.successful(): response["result"] = task.result return response diff --git a/stormpiper/stormpiper/data/project_data/wa/tac/bmp_params_2025.json b/stormpiper/stormpiper/data/project_data/wa/tac/bmp_params_2025.json new file mode 100644 index 00000000..ab39cd94 --- /dev/null +++ b/stormpiper/stormpiper/data/project_data/wa/tac/bmp_params_2025.json @@ -0,0 +1,1357 @@ +{ + "schema": { + "fields": [ + { "name": "bmp", "type": "string" }, + { "name": "pollutant", "type": "string" }, + { "name": "unit", "type": "string" }, + { "name": "N", "type": "integer" }, + { "name": "ND_infl", "type": "integer" }, + { "name": "ND_effl", "type": "integer" }, + { "name": "dl", "type": "number" }, + { "name": "A", "type": "number" }, + { "name": "B", "type": "number" }, + { "name": "e1", "type": "number" }, + { "name": "C", "type": "number" }, + { "name": "D", "type": "number" }, + { "name": "E", "type": "number" }, + { "name": "e2", "type": "number" }, + { "name": "Low_Slope", "type": "number" }, + { "name": "High_Slope", "type": "number" }, + { "name": "MAD", "type": "number" }, + { "name": "fit_type", "type": "string" }, + { "name": "wilcoxon_stat", "type": "number" }, + { "name": "wilcoxon_pvalue", "type": "number" }, + { "name": "kendalltau_stat", "type": "number" }, + { "name": "kendalltau_pvalue", "type": "number" }, + { "name": "censored_basic_count", "type": "boolean" } + ], + "pandas_version": "1.4.0" + }, + "data": [ + { + "bmp": "BR", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 372, + "ND_infl": 2, + "ND_effl": 12, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 2.7350019777, + "E": 0.3893547779, + "e2": 1.2844258791, + "Low_Slope": 0.341956315, + "High_Slope": 0.4340904687, + "MAD": 1.5973462851, + "fit_type": "loglog", + "wilcoxon_stat": 12164.5, + "wilcoxon_pvalue": 1.790059428e-25, + "kendalltau_stat": 0.4037854246, + "kendalltau_pvalue": 5.486218582e-31, + "censored_basic_count": false + }, + { + "bmp": "DB", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 254, + "ND_infl": 17, + "ND_effl": 35, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.1817569098, + "E": 0.8264117157, + "e2": 1.0179599036, + "Low_Slope": 0.7657755353, + "High_Slope": 0.8838212008, + "MAD": 1.3633760854, + "fit_type": "loglog", + "wilcoxon_stat": 3582.5, + "wilcoxon_pvalue": 4.757787962e-22, + "kendalltau_stat": 0.6863099249, + "kendalltau_pvalue": 6.368150046e-59, + "censored_basic_count": false + }, + { + "bmp": "BS", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 262, + "ND_infl": 28, + "ND_effl": 32, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.5308328159, + "E": 0.7302324021, + "e2": 0.9987425959, + "Low_Slope": 0.6477447685, + "High_Slope": 0.8100290039, + "MAD": 1.3887977641, + "fit_type": "loglog", + "wilcoxon_stat": 6924.0, + "wilcoxon_pvalue": 0.0, + "kendalltau_stat": 0.5501706475, + "kendalltau_pvalue": 8.571258681e-40, + "censored_basic_count": false + }, + { + "bmp": "HRBF", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 48, + "ND_infl": 1, + "ND_effl": 3, + "dl": 0.05, + "A": 1.0334003435, + "B": 0.363999939, + "e1": -0.0168416973, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.2857144317, + "High_Slope": 0.4245809907, + "MAD": 0.7497999794, + "fit_type": "linear", + "wilcoxon_stat": 87.0, + "wilcoxon_pvalue": 0.0000004471, + "kendalltau_stat": 0.684865552, + "kendalltau_pvalue": 0.0, + "censored_basic_count": false + }, + { + "bmp": "HRMF", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 322, + "ND_infl": 6, + "ND_effl": 16, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.3544762145, + "E": 0.7268591864, + "e2": 1.0568419782, + "Low_Slope": 0.6724837817, + "High_Slope": 0.7770563086, + "MAD": 1.3378311771, + "fit_type": "loglog", + "wilcoxon_stat": 3548.5, + "wilcoxon_pvalue": 7.408521923e-35, + "kendalltau_stat": 0.6002925966, + "kendalltau_pvalue": 1.449979743e-56, + "censored_basic_count": false + }, + { + "bmp": "HDS", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 208, + "ND_infl": 1, + "ND_effl": 2, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.1254936864, + "E": 0.9035015616, + "e2": 1.068273153, + "Low_Slope": 0.8444794577, + "High_Slope": 0.9613191474, + "MAD": 1.2015697113, + "fit_type": "loglog", + "wilcoxon_stat": 6032.5, + "wilcoxon_pvalue": 0.0000034571, + "kendalltau_stat": 0.725031517, + "kendalltau_pvalue": 5.013927436e-54, + "censored_basic_count": false + }, + { + "bmp": "MF", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 309, + "ND_infl": 18, + "ND_effl": 28, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.3864951981, + "E": 0.6806394166, + "e2": 1.0424733413, + "Low_Slope": 0.5959220692, + "High_Slope": 0.7627354698, + "MAD": 1.5086742712, + "fit_type": "loglog", + "wilcoxon_stat": 4989.5, + "wilcoxon_pvalue": 1.916177016e-26, + "kendalltau_stat": 0.4833148275, + "kendalltau_pvalue": 2.981582814e-36, + "censored_basic_count": false + }, + { + "bmp": "OGS", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 90, + "ND_infl": 0, + "ND_effl": 1, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 0.7422855862, + "E": 0.8766508286, + "e2": 1.4506589454, + "Low_Slope": 0.7821039041, + "High_Slope": 0.9637296472, + "MAD": 1.5799295131, + "fit_type": "loglog", + "wilcoxon_stat": 580.0, + "wilcoxon_pvalue": 0.0000000164, + "kendalltau_stat": 0.7145368038, + "kendalltau_pvalue": 3.344261683e-23, + "censored_basic_count": false + }, + { + "bmp": "PP", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 139, + "ND_infl": 4, + "ND_effl": 5, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 2.2621399723, + "E": 0.5485705131, + "e2": 1.240270091, + "Low_Slope": 0.3325768189, + "High_Slope": 0.742353693, + "MAD": 1.4958140905, + "fit_type": "loglog", + "wilcoxon_stat": 2616.0, + "wilcoxon_pvalue": 0.0114109154, + "kendalltau_stat": 0.3301611496, + "kendalltau_pvalue": 0.0000000149, + "censored_basic_count": false + }, + { + "bmp": "RP", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 1186, + "ND_infl": 126, + "ND_effl": 204, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.5218499489, + "E": 0.5655404572, + "e2": 1.2359772561, + "Low_Slope": 0.5195205656, + "High_Slope": 0.6114626451, + "MAD": 1.7197870095, + "fit_type": "loglog", + "wilcoxon_stat": 57520.0, + "wilcoxon_pvalue": 1.857670549e-103, + "kendalltau_stat": 0.4404708349, + "kendalltau_pvalue": 2.704528034e-110, + "censored_basic_count": false + }, + { + "bmp": "WB", + "pollutant": "Total Copper", + "unit": "ug/L", + "N": 348, + "ND_infl": 38, + "ND_effl": 76, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 0.9885579192, + "E": 0.7597762362, + "e2": 1.2492734589, + "Low_Slope": 0.6623004397, + "High_Slope": 0.8664316743, + "MAD": 1.5682468425, + "fit_type": "loglog", + "wilcoxon_stat": 7978.0, + "wilcoxon_pvalue": 1.804685477e-24, + "kendalltau_stat": 0.4534488608, + "kendalltau_pvalue": 1.510082045e-34, + "censored_basic_count": false + }, + { + "bmp": "BR", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 298, + "ND_infl": 0, + "ND_effl": 1, + "dl": 0.0052, + "A": 0.4029075736, + "B": 0.5309103024, + "e1": -0.0232072099, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.4405594648, + "High_Slope": 0.6178637072, + "MAD": 0.3937200794, + "fit_type": "linear", + "wilcoxon_stat": 16689.5, + "wilcoxon_pvalue": 0.0004556063, + "kendalltau_stat": 0.4171941022, + "kendalltau_pvalue": 8.277988277e-27, + "censored_basic_count": false + }, + { + "bmp": "DB", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 272, + "ND_infl": 0, + "ND_effl": 0, + "dl": 0.0052, + "A": 0.2138618578, + "B": 0.7283983364, + "e1": 0.0326380427, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.6621397281, + "High_Slope": 0.7934960913, + "MAD": 0.2990141211, + "fit_type": "linear", + "wilcoxon_stat": 12619.0, + "wilcoxon_pvalue": 0.0000099779, + "kendalltau_stat": 0.6029074424, + "kendalltau_pvalue": 1.225241803e-49, + "censored_basic_count": false + }, + { + "bmp": "HRBF", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 37, + "ND_infl": 0, + "ND_effl": 0, + "dl": 0.0052, + "A": 0.0761704429, + "B": 0.4281410877, + "e1": 0.1007836879, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.2500000207, + "High_Slope": 0.6319444899, + "MAD": 0.1668846508, + "fit_type": "linear", + "wilcoxon_stat": 42.0, + "wilcoxon_pvalue": 0.0000001654, + "kendalltau_stat": 0.4538624657, + "kendalltau_pvalue": 0.000085926, + "censored_basic_count": false + }, + { + "bmp": "HRMF", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 110, + "ND_infl": 0, + "ND_effl": 0, + "dl": 0.0052, + "A": -0.0685061925, + "B": 0.6084831195, + "e1": 0.2840011824, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.511627878, + "High_Slope": 0.7108109471, + "MAD": 0.3512955266, + "fit_type": "linear", + "wilcoxon_stat": 415.5, + "wilcoxon_pvalue": 0.0, + "kendalltau_stat": 0.6721569438, + "kendalltau_pvalue": 3.318058807e-24, + "censored_basic_count": false + }, + { + "bmp": "HDS", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 161, + "ND_infl": 0, + "ND_effl": 0, + "dl": 0.0052, + "A": -0.098488681, + "B": 0.8967825403, + "e1": 0.2898948575, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.8244161151, + "High_Slope": 0.9720586141, + "MAD": 0.4016392764, + "fit_type": "linear", + "wilcoxon_stat": 5246.0, + "wilcoxon_pvalue": 0.0725122454, + "kendalltau_stat": 0.6581166691, + "kendalltau_pvalue": 3.458966911e-35, + "censored_basic_count": false + }, + { + "bmp": "MF", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 281, + "ND_infl": 0, + "ND_effl": 0, + "dl": 0.0052, + "A": 0.2621539685, + "B": 0.6050000283, + "e1": 0.0229008646, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.5432196277, + "High_Slope": 0.666666468, + "MAD": 0.2766037574, + "fit_type": "linear", + "wilcoxon_stat": 11104.0, + "wilcoxon_pvalue": 0.0000000004, + "kendalltau_stat": 0.6383968961, + "kendalltau_pvalue": 3.024892662e-57, + "censored_basic_count": false + }, + { + "bmp": "OGS", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 55, + "ND_infl": 0, + "ND_effl": 0, + "dl": 0.0052, + "A": 0.27573453, + "B": 0.8031324124, + "e1": 0.053404376, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.6222374664, + "High_Slope": 0.9090429215, + "MAD": 0.3977567259, + "fit_type": "linear", + "wilcoxon_stat": 487.0, + "wilcoxon_pvalue": 0.0278132315, + "kendalltau_stat": 0.6579124579, + "kendalltau_pvalue": 0.0, + "censored_basic_count": false + }, + { + "bmp": "RP", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 1492, + "ND_infl": 0, + "ND_effl": 0, + "dl": 0.0052, + "A": 0.9967770625, + "B": null, + "e1": 0.1249379749, + "C": 0.7232631996, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.6607389305, + "High_Slope": 0.7894340922, + "MAD": 0.4030311004, + "fit_type": "logx", + "wilcoxon_stat": 227308.0, + "wilcoxon_pvalue": 5.704565622e-86, + "kendalltau_stat": 0.4131968239, + "kendalltau_pvalue": 1.113928185e-125, + "censored_basic_count": false + }, + { + "bmp": "WB", + "pollutant": "Total Nitrogen", + "unit": "mg/L", + "N": 1160, + "ND_infl": 0, + "ND_effl": 24, + "dl": 0.0052, + "A": 1.140201711, + "B": null, + "e1": 0.0340276128, + "C": 0.6253789472, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.5572987986, + "High_Slope": 0.6906270994, + "MAD": 0.3316729921, + "fit_type": "logx", + "wilcoxon_stat": 254766.0, + "wilcoxon_pvalue": 0.0, + "kendalltau_stat": 0.3828151364, + "kendalltau_pvalue": 1.595490532e-84, + "censored_basic_count": false + }, + { + "bmp": "BR", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 546, + "ND_infl": 29, + "ND_effl": 20, + "dl": 0.0025, + "A": 0.3942752243, + "B": null, + "e1": 0.052072307, + "C": 0.0880043931, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.0685878219, + "High_Slope": 0.1098419111, + "MAD": 0.1394884096, + "fit_type": "logx", + "wilcoxon_stat": 48133.5, + "wilcoxon_pvalue": 0.0000000851, + "kendalltau_stat": 0.276729153, + "kendalltau_pvalue": 8.475896198e-22, + "censored_basic_count": false + }, + { + "bmp": "DB", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 433, + "ND_infl": 8, + "ND_effl": 7, + "dl": 0.0025, + "A": 0.3761204889, + "B": null, + "e1": 0.0225109745, + "C": 0.1274465943, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.112287699, + "High_Slope": 0.1436902933, + "MAD": 0.0633459731, + "fit_type": "logx", + "wilcoxon_stat": 26846.0, + "wilcoxon_pvalue": 0.0, + "kendalltau_stat": 0.5156433704, + "kendalltau_pvalue": 1.407265088e-57, + "censored_basic_count": false + }, + { + "bmp": "BS", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 450, + "ND_infl": 2, + "ND_effl": 2, + "dl": 0.0025, + "A": 0.0884218035, + "B": 0.7165532989, + "e1": -0.0010986567, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.6238650961, + "High_Slope": 0.8010989118, + "MAD": 0.0738481064, + "fit_type": "linear", + "wilcoxon_stat": 24032.5, + "wilcoxon_pvalue": 1.206730024e-19, + "kendalltau_stat": 0.431939998, + "kendalltau_pvalue": 6.335541081e-42, + "censored_basic_count": false + }, + { + "bmp": "HRBF", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 100, + "ND_infl": 0, + "ND_effl": 8, + "dl": 0.0025, + "A": 0.0104000128, + "B": 0.3999998808, + "e1": 0.0030296094, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.2652174262, + "High_Slope": 0.5306121937, + "MAD": 0.0151300074, + "fit_type": "linear", + "wilcoxon_stat": 200.5, + "wilcoxon_pvalue": 0.0, + "kendalltau_stat": 0.4876773013, + "kendalltau_pvalue": 0.0, + "censored_basic_count": false + }, + { + "bmp": "HRMF", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 393, + "ND_infl": 6, + "ND_effl": 11, + "dl": 0.0025, + "A": 0.0084285723, + "B": 0.5714285738, + "e1": 0.0002516372, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.5310007918, + "High_Slope": 0.6278196529, + "MAD": 0.0272857153, + "fit_type": "linear", + "wilcoxon_stat": 6855.0, + "wilcoxon_pvalue": 3.197013735e-37, + "kendalltau_stat": 0.6721369776, + "kendalltau_pvalue": 1.604739403e-86, + "censored_basic_count": false + }, + { + "bmp": "HDS", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 299, + "ND_infl": 1, + "ND_effl": 5, + "dl": 0.0025, + "A": -0.0182892352, + "B": 0.8830874392, + "e1": 0.0323487884, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.8374270083, + "High_Slope": 0.923856042, + "MAD": 0.0493334874, + "fit_type": "linear", + "wilcoxon_stat": 14599.5, + "wilcoxon_pvalue": 0.0000079013, + "kendalltau_stat": 0.6891751048, + "kendalltau_pvalue": 3.752024227e-70, + "censored_basic_count": false + }, + { + "bmp": "MF", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 335, + "ND_infl": 7, + "ND_effl": 25, + "dl": 0.0025, + "A": 0.1859657895, + "B": null, + "e1": 0.0094580732, + "C": 0.0518207742, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.0456909283, + "High_Slope": 0.0582187931, + "MAD": 0.0301608767, + "fit_type": "logx", + "wilcoxon_stat": 5232.0, + "wilcoxon_pvalue": 5.845759547e-34, + "kendalltau_stat": 0.5415319962, + "kendalltau_pvalue": 9.185799616e-49, + "censored_basic_count": false + }, + { + "bmp": "OGS", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 100, + "ND_infl": 7, + "ND_effl": 8, + "dl": 0.0025, + "A": -0.0364871017, + "B": 0.8764540653, + "e1": 0.0492975917, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.7727271988, + "High_Slope": 0.9477786144, + "MAD": 0.0841796419, + "fit_type": "linear", + "wilcoxon_stat": 1121.5, + "wilcoxon_pvalue": 0.0000170632, + "kendalltau_stat": 0.7834730588, + "kendalltau_pvalue": 2.582689231e-30, + "censored_basic_count": false + }, + { + "bmp": "PP", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 288, + "ND_infl": 2, + "ND_effl": 2, + "dl": 0.0025, + "A": 0.0676130493, + "B": 0.2553430824, + "e1": -0.0063098806, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.1999999404, + "High_Slope": 0.3119266086, + "MAD": 0.0375641183, + "fit_type": "linear", + "wilcoxon_stat": 7944.5, + "wilcoxon_pvalue": 4.334338798e-19, + "kendalltau_stat": 0.3323019042, + "kendalltau_pvalue": 6.784848205e-17, + "censored_basic_count": false + }, + { + "bmp": "RP", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 1576, + "ND_infl": 16, + "ND_effl": 42, + "dl": 0.0025, + "A": 0.0572192053, + "B": 0.2910111527, + "e1": -0.0013794948, + "C": null, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.2664907688, + "High_Slope": 0.3148160316, + "MAD": 0.0721915376, + "fit_type": "linear", + "wilcoxon_stat": 127288.0, + "wilcoxon_pvalue": 1.875330133e-157, + "kendalltau_stat": 0.4767742491, + "kendalltau_pvalue": 1.234450115e-175, + "censored_basic_count": false + }, + { + "bmp": "WB", + "pollutant": "Total Phosphorus", + "unit": "mg/L", + "N": 1084, + "ND_infl": 2, + "ND_effl": 8, + "dl": 0.0025, + "A": 0.2965956142, + "B": null, + "e1": 0.0169604672, + "C": 0.0973493033, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.0896548331, + "High_Slope": 0.1053162751, + "MAD": 0.0492250505, + "fit_type": "logx", + "wilcoxon_stat": 105266.0, + "wilcoxon_pvalue": 1.037387407e-72, + "kendalltau_stat": 0.4540742941, + "kendalltau_pvalue": 2.407567994e-110, + "censored_basic_count": false + }, + { + "bmp": "BR", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 537, + "ND_infl": 0, + "ND_effl": 22, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 6.9186187639, + "E": 0.097285847, + "e2": 1.7102665861, + "Low_Slope": 0.0171226036, + "High_Slope": 0.1721721106, + "MAD": 2.0125703396, + "fit_type": "loglog", + "wilcoxon_stat": 13347.5, + "wilcoxon_pvalue": 3.550194937e-59, + "kendalltau_stat": 0.0815540724, + "kendalltau_pvalue": 0.0052113261, + "censored_basic_count": false + }, + { + "bmp": "DB", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 448, + "ND_infl": 3, + "ND_effl": 3, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.762972673, + "E": 0.6400218467, + "e2": 1.5167559161, + "Low_Slope": 0.5709109099, + "High_Slope": 0.7073662829, + "MAD": 1.5992951857, + "fit_type": "loglog", + "wilcoxon_stat": 13668.5, + "wilcoxon_pvalue": 1.811671753e-40, + "kendalltau_stat": 0.456331901, + "kendalltau_pvalue": 4.914046533e-47, + "censored_basic_count": false + }, + { + "bmp": "BS", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 449, + "ND_infl": 1, + "ND_effl": 2, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 3.1266849028, + "E": 0.5415230869, + "e2": 1.4735729885, + "Low_Slope": 0.4631347957, + "High_Slope": 0.6188997559, + "MAD": 1.7222031179, + "fit_type": "loglog", + "wilcoxon_stat": 33173.0, + "wilcoxon_pvalue": 0.0000000132, + "kendalltau_stat": 0.3750094372, + "kendalltau_pvalue": 3.617690742e-32, + "censored_basic_count": false + }, + { + "bmp": "HRBF", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 104, + "ND_infl": 0, + "ND_effl": 1, + "dl": 0.02, + "A": -0.353659818, + "B": null, + "e1": 0.3080719279, + "C": 1.2119769299, + "D": null, + "E": null, + "e2": null, + "Low_Slope": 0.7389535598, + "High_Slope": 1.7359216262, + "MAD": 1.3557130218, + "fit_type": "logx", + "wilcoxon_stat": 19.0, + "wilcoxon_pvalue": 1.478962078e-18, + "kendalltau_stat": 0.3774749166, + "kendalltau_pvalue": 0.0000000198, + "censored_basic_count": false + }, + { + "bmp": "HRMF", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 436, + "ND_infl": 3, + "ND_effl": 23, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 2.2543495683, + "E": 0.5178723638, + "e2": 1.2717071825, + "Low_Slope": 0.4514645144, + "High_Slope": 0.5869808259, + "MAD": 1.7517334903, + "fit_type": "loglog", + "wilcoxon_stat": 4446.5, + "wilcoxon_pvalue": 9.140015615e-59, + "kendalltau_stat": 0.4199309108, + "kendalltau_pvalue": 1.107903294e-38, + "censored_basic_count": false + }, + { + "bmp": "HDS", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 450, + "ND_infl": 2, + "ND_effl": 5, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.5050959462, + "E": 0.7867792434, + "e2": 1.2422000833, + "Low_Slope": 0.7421192942, + "High_Slope": 0.8318281262, + "MAD": 1.516302444, + "fit_type": "loglog", + "wilcoxon_stat": 16182.0, + "wilcoxon_pvalue": 1.117181397e-32, + "kendalltau_stat": 0.6223181185, + "kendalltau_pvalue": 2.905276064e-86, + "censored_basic_count": false + }, + { + "bmp": "MF", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 365, + "ND_infl": 2, + "ND_effl": 43, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 0.5984055598, + "E": 0.6675590349, + "e2": 1.9340640421, + "Low_Slope": 0.5680599556, + "High_Slope": 0.7705158359, + "MAD": 2.3805302094, + "fit_type": "loglog", + "wilcoxon_stat": 1666.0, + "wilcoxon_pvalue": 3.197534427e-55, + "kendalltau_stat": 0.3995549948, + "kendalltau_pvalue": 1.58182023e-29, + "censored_basic_count": false + }, + { + "bmp": "OGS", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 177, + "ND_infl": 0, + "ND_effl": 2, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.0538777019, + "E": 0.8479279988, + "e2": 1.2404614757, + "Low_Slope": 0.7730154808, + "High_Slope": 0.9178833598, + "MAD": 1.4663094527, + "fit_type": "loglog", + "wilcoxon_stat": 2612.5, + "wilcoxon_pvalue": 0.0, + "kendalltau_stat": 0.6358396555, + "kendalltau_pvalue": 5.335298393e-36, + "censored_basic_count": false + }, + { + "bmp": "PP", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 302, + "ND_infl": 2, + "ND_effl": 7, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 3.4305005602, + "E": 0.4331417034, + "e2": 1.4268525485, + "Low_Slope": 0.3494710028, + "High_Slope": 0.5201485656, + "MAD": 1.801306475, + "fit_type": "loglog", + "wilcoxon_stat": 3948.0, + "wilcoxon_pvalue": 1.910921551e-35, + "kendalltau_stat": 0.3661925826, + "kendalltau_pvalue": 5.915327085e-21, + "censored_basic_count": false + }, + { + "bmp": "RP", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 1658, + "ND_infl": 10, + "ND_effl": 52, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 2.4955357447, + "E": 0.4235950999, + "e2": 2.3479333833, + "Low_Slope": 0.3803850727, + "High_Slope": 0.4682630943, + "MAD": 2.3060277986, + "fit_type": "loglog", + "wilcoxon_stat": 141902.0, + "wilcoxon_pvalue": 1.260353355e-168, + "kendalltau_stat": 0.2988220846, + "kendalltau_pvalue": 1.225688256e-73, + "censored_basic_count": false + }, + { + "bmp": "WB", + "pollutant": "Total Suspended Solids", + "unit": "mg/L", + "N": 880, + "ND_infl": 0, + "ND_effl": 24, + "dl": 0.02, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.014590933, + "E": 0.763512948, + "e2": 1.469055906, + "Low_Slope": 0.7078122572, + "High_Slope": 0.8172105146, + "MAD": 2.0150607334, + "fit_type": "loglog", + "wilcoxon_stat": 49244.0, + "wilcoxon_pvalue": 1.815705503e-81, + "kendalltau_stat": 0.481262423, + "kendalltau_pvalue": 6.168443284e-101, + "censored_basic_count": false + }, + { + "bmp": "BR", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 361, + "ND_infl": 5, + "ND_effl": 58, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 5.4887791138, + "E": 0.2322210007, + "e2": 1.3608656153, + "Low_Slope": 0.1443557113, + "High_Slope": 0.3161912831, + "MAD": 1.7428741101, + "fit_type": "loglog", + "wilcoxon_stat": 2371.5, + "wilcoxon_pvalue": 2.370208563e-51, + "kendalltau_stat": 0.1893943228, + "kendalltau_pvalue": 0.000000109, + "censored_basic_count": false + }, + { + "bmp": "DB", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 284, + "ND_infl": 17, + "ND_effl": 31, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.8486708745, + "E": 0.7271881062, + "e2": 1.221105391, + "Low_Slope": 0.6582056634, + "High_Slope": 0.7968647329, + "MAD": 1.6022393462, + "fit_type": "loglog", + "wilcoxon_stat": 4989.5, + "wilcoxon_pvalue": 6.327554599e-25, + "kendalltau_stat": 0.5518388212, + "kendalltau_pvalue": 2.037559463e-43, + "censored_basic_count": false + }, + { + "bmp": "BS", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 309, + "ND_infl": 36, + "ND_effl": 32, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 4.0056880268, + "E": 0.5332583112, + "e2": 1.2403686703, + "Low_Slope": 0.476148513, + "High_Slope": 0.5868834759, + "MAD": 1.3986303819, + "fit_type": "loglog", + "wilcoxon_stat": 8723.0, + "wilcoxon_pvalue": 0.0, + "kendalltau_stat": 0.5245571587, + "kendalltau_pvalue": 3.45454253e-42, + "censored_basic_count": false + }, + { + "bmp": "HRBF", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 54, + "ND_infl": 0, + "ND_effl": 6, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 0.3760271007, + "E": 0.979143041, + "e2": 1.258075765, + "Low_Slope": 0.8660056517, + "High_Slope": 1.1194542965, + "MAD": 1.4487202091, + "fit_type": "loglog", + "wilcoxon_stat": 15.5, + "wilcoxon_pvalue": 0.0000000006, + "kendalltau_stat": 0.7473881862, + "kendalltau_pvalue": 0.0, + "censored_basic_count": false + }, + { + "bmp": "HRMF", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 388, + "ND_infl": 7, + "ND_effl": 9, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 2.0247905567, + "E": 0.7019546929, + "e2": 1.2036542609, + "Low_Slope": 0.6535779622, + "High_Slope": 0.7487234928, + "MAD": 1.4541521711, + "fit_type": "loglog", + "wilcoxon_stat": 7615.0, + "wilcoxon_pvalue": 3.631184451e-40, + "kendalltau_stat": 0.5799076693, + "kendalltau_pvalue": 1.181273352e-64, + "censored_basic_count": false + }, + { + "bmp": "HDS", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 262, + "ND_infl": 0, + "ND_effl": 5, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.3564175441, + "E": 0.877462362, + "e2": 1.0983828139, + "Low_Slope": 0.8219882615, + "High_Slope": 0.9330645018, + "MAD": 1.2359952154, + "fit_type": "loglog", + "wilcoxon_stat": 6876.5, + "wilcoxon_pvalue": 0.0, + "kendalltau_stat": 0.7065428676, + "kendalltau_pvalue": 1.253476516e-64, + "censored_basic_count": false + }, + { + "bmp": "MF", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 335, + "ND_infl": 5, + "ND_effl": 41, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.421353268, + "E": 0.5422182897, + "e2": 1.5284905057, + "Low_Slope": 0.4425070493, + "High_Slope": 0.6423794546, + "MAD": 2.2110813615, + "fit_type": "loglog", + "wilcoxon_stat": 1789.5, + "wilcoxon_pvalue": 1.52063212e-49, + "kendalltau_stat": 0.3564586015, + "kendalltau_pvalue": 3.012983724e-22, + "censored_basic_count": false + }, + { + "bmp": "OGS", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 88, + "ND_infl": 0, + "ND_effl": 0, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.8564336365, + "E": 0.8553788575, + "e2": 0.910977286, + "Low_Slope": 0.7023186684, + "High_Slope": 0.9902134659, + "MAD": 1.5466271753, + "fit_type": "loglog", + "wilcoxon_stat": 1201.0, + "wilcoxon_pvalue": 0.0025467493, + "kendalltau_stat": 0.5740572806, + "kendalltau_pvalue": 0.0, + "censored_basic_count": false + }, + { + "bmp": "PP", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 159, + "ND_infl": 18, + "ND_effl": 60, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 1.5017273938, + "E": 0.4974864193, + "e2": 2.5535691126, + "Low_Slope": 0.2446505421, + "High_Slope": 0.7028036883, + "MAD": 2.117983038, + "fit_type": "loglog", + "wilcoxon_stat": 904.5, + "wilcoxon_pvalue": 1.959234125e-17, + "kendalltau_stat": 0.3242882337, + "kendalltau_pvalue": 0.0000000118, + "censored_basic_count": false + }, + { + "bmp": "RP", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 1386, + "ND_infl": 82, + "ND_effl": 166, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 3.3975003113, + "E": 0.4633054932, + "e2": 1.3761036593, + "Low_Slope": 0.4136977087, + "High_Slope": 0.5142511548, + "MAD": 1.7571597549, + "fit_type": "loglog", + "wilcoxon_stat": 78646.0, + "wilcoxon_pvalue": 3.196938841e-144, + "kendalltau_stat": 0.3181912628, + "kendalltau_pvalue": 4.328970691e-69, + "censored_basic_count": false + }, + { + "bmp": "WB", + "pollutant": "Total Zinc", + "unit": "ug/L", + "N": 412, + "ND_infl": 4, + "ND_effl": 38, + "dl": 0.05, + "A": null, + "B": null, + "e1": null, + "C": null, + "D": 2.0039778146, + "E": 0.6334621132, + "e2": 1.369186559, + "Low_Slope": 0.5222428957, + "High_Slope": 0.742121928, + "MAD": 1.6968588514, + "fit_type": "loglog", + "wilcoxon_stat": 7438.0, + "wilcoxon_pvalue": 4.448742489e-46, + "kendalltau_stat": 0.3378860224, + "kendalltau_pvalue": 3.265539953e-24, + "censored_basic_count": false + } + ] +} diff --git a/stormpiper/stormpiper/data/project_data/wa/tac/config.yml b/stormpiper/stormpiper/data/project_data/wa/tac/config.yml index 5b151542..cf4b9879 100644 --- a/stormpiper/stormpiper/data/project_data/wa/tac/config.yml +++ b/stormpiper/stormpiper/data/project_data/wa/tac/config.yml @@ -27,221 +27,271 @@ api_recognize: lined: 1.0e-6 facility_type: - # Default is No Treatment - no_treatment: - validator: NTFacility + bioretention_hrbf_media_with_no_infiltration: + label: Bioretention with High Rate Media and No Infiltration + tmnt_performance_facility_type: HRBF + validation_fallback: NTFacility + validator: TmntFacility + bioretention_hrbf_media_with_no_infiltration_simple: + label: Bioretention with High Rate Media and No Infiltration (simple) + tmnt_performance_facility_type: HRBF + validation_fallback: NTFacility + validator: SimpleTmntFacility + bioretention_hrbf_media_with_partial_infiltration: + label: Bioretention with High Rate Media and Partial Infiltration + tmnt_performance_facility_type: HRBF + validation_fallback: NTFacility + validator: BioInfFacility + bioretention_hrbf_media_with_partial_infiltration_simple: + label: Bioretention with High Rate Media and Partial Infiltration (simple) + tmnt_performance_facility_type: HRBF validation_fallback: NTFacility + validator: SimpleFacility + bioretention_with_full_infiltration: + label: Bioretention with Full Infiltration tmnt_performance_facility_type: ¯\_(ツ)_/¯ - label: No Treatment - - # Infiltration BMPs - - infiltration: + validation_fallback: NTFacility validator: RetentionFacility + bioretention_with_full_infiltration_simple: + label: Bioretention with Full Infiltration (simple) + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # wq improvement via retention only - label: Infiltration Basin/Trench - - infiltration_simple: validator: SimpleRetFacility + bioretention_with_no_infiltration: + label: Bioretention with No Infiltration + tmnt_performance_facility_type: BR validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # wq improvement via retention only - label: Infiltration Basin/Trench (simple) - - dispersion_area: - validator: RetentionFacility + validator: TmntFacility + bioretention_with_no_infiltration_simple: + label: Bioretention with No Infiltration (simple) + tmnt_performance_facility_type: BR + validation_fallback: NTFacility + validator: SimpleTmntFacility + bioretention_with_partial_infiltration: + label: Bioretention with Partial Infiltration + tmnt_performance_facility_type: BR + validation_fallback: NTFacility + validator: BioInfFacility + bioretention_with_partial_infiltration_simple: + label: Bioretention with Partial Infiltration (simple) + tmnt_performance_facility_type: BR + validation_fallback: NTFacility + validator: SimpleFacility + cartridge_media_filter: + label: Cartridge Media Filter + tmnt_performance_facility_type: HRMF + validation_fallback: NTFacility + validator: TmntFacility + cartridge_media_filter_simple: + label: Cartridge Media Filter (simple) + tmnt_performance_facility_type: HRMF validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # wq improvement via retention only + validator: SimpleTmntFacility + detention_pond: + label: Detention Pond + tmnt_performance_facility_type: DB + validation_fallback: NTFacility + validator: RetAndTmntFacility + detention_pond_simple: + label: Detention Pond (simple) + tmnt_performance_facility_type: DB + validation_fallback: NTFacility + validator: SimpleFacility + dispersion_area: label: Dispersion Area - - dispersion_area_simple: - validator: SimpleRetFacility + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # wq improvement via retention only - label: Dispersion Area (simple) - - pervious_pavement: validator: RetentionFacility + dispersion_area_simple: + label: Dispersion Area (simple) + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # wq improvement via retention only - label: Pervious Pavement - - pervious_pavement_simple: validator: SimpleRetFacility + dry_extended_detention: + label: Dry Extended Detention Basin/Tank + tmnt_performance_facility_type: DB validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # wq improvement via retention only - label: Pervious Pavement (simple) - - # Bioretention BMPs - bioretention_with_full_infiltration: # aka infiltration - validator: RetentionFacility + validator: RetAndTmntFacility + dry_extended_detention_simple: + label: Dry Extended Detention Basin/Tank (simple) + tmnt_performance_facility_type: DB + validation_fallback: NTFacility + validator: SimpleFacility + drywell: + label: Drywell + tmnt_performance_facility_type: ¯\_(ツ)_/¯ + validation_fallback: NTFacility + validator: DryWellFacilityFlowOrVolume + drywell_simple: + label: Drywell (simple) + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # wq improvement via retention only - label: Bioretention with Full Infiltration - - bioretention_with_full_infiltration_simple: # aka infiltration validator: SimpleRetFacility + flow_duration_control_tank: + label: Flow Duration Control Tank + tmnt_performance_facility_type: DB validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # wq improvement via retention only - label: Bioretention with Full Infiltration (simple) - - bioretention_with_partial_infiltration: # aka bioinfiltration or bioretention - validator: BioInfFacility + validator: RetAndTmntFacility + flow_duration_control_tank_simple: + label: Flow Duration Control Tank (simple) + tmnt_performance_facility_type: DB validation_fallback: NTFacility - tmnt_performance_facility_type: Biofiltration/Bioretention - label: Bioretention with Partial Infiltration - - bioretention_with_partial_infiltration_simple: # aka bioinfiltration or bioretention validator: SimpleFacility + hydrodynamic_separator: + label: Hydrodynamic Separator + tmnt_performance_facility_type: HDS validation_fallback: NTFacility - tmnt_performance_facility_type: Biofiltration/Bioretention - label: Bioretention with Partial Infiltration (simple) - - bioretention_with_no_infiltration: # aka biofiltration - validator: TmntFacility + validator: FlowFacility + hydrodynamic_separator_simple: + label: Hydrodynamic Separator (simple) + tmnt_performance_facility_type: HDS validation_fallback: NTFacility - tmnt_performance_facility_type: Biofiltration/Bioretention - label: Bioretention with No Infiltration - - bioretention_with_no_infiltration_simple: # aka biofiltration validator: SimpleTmntFacility + infiltration: + label: Infiltration Basin/Trench + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: Biofiltration/Bioretention - label: Bioretention with No Infiltration (simple) - - sand_filter: - validator: TmntFacility + validator: RetentionFacility + infiltration_pond: + label: Infiltration Pond + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: Sand Filter - label: Sand Filter - - sand_filter_simple: - validator: SimpleTmntFacility + validator: RetentionFacility + infiltration_pond_simple: + label: Infiltration Pond (simple) + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: Sand Filter - label: Sand Filter (simple) - + validator: SimpleRetFacility + infiltration_simple: + label: Infiltration Basin/Trench (simple) + tmnt_performance_facility_type: ¯\_(ツ)_/¯ + validation_fallback: NTFacility + validator: SimpleRetFacility media_filter: - validator: TmntFacility + label: Media Filter High Rate + tmnt_performance_facility_type: HRMF validation_fallback: NTFacility - tmnt_performance_facility_type: Biofiltration/Bioretention - label: Media Filter - + validator: TmntFacility media_filter_simple: + label: Media Filter High Rate (simple) + tmnt_performance_facility_type: HRMF + validation_fallback: NTFacility validator: SimpleTmntFacility + no_treatment: + label: No Treatment + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: Biofiltration/Bioretention - label: Media Filter (simple) - - wet_pond: - validator: PermPoolFacility + validator: NTFacility + oil_water_separator: + label: Oil-Water Separator + tmnt_performance_facility_type: OGS + validation_fallback: NTFacility + validator: FlowFacility + oil_water_separator_simple: + label: Oil-Water Separator (simple) + tmnt_performance_facility_type: OGS validation_fallback: NTFacility - tmnt_performance_facility_type: Wet Pond - label: Wet Pond - - wet_pond_simple: validator: SimpleTmntFacility + pervious_pavement_with_full_infiltration: + label: Pervious Pavement with Full Infiltration + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: Wet Pond - label: Wet Pond (simple) - - dry_extended_detention: - validator: RetAndTmntFacility + validator: RetentionFacility + pervious_pavement_with_full_infiltration_simple: + label: Pervious Pavement with Full Infiltration (simple) + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: Detention Basin - label: Dry Extended Detention Basin/Tank - - dry_extended_detention_simple: - validator: SimpleFacility + validator: SimpleRetFacility + pervious_pavement_with_partial_infiltration: + label: Pervious Pavement with Partial Infiltration + tmnt_performance_facility_type: PP validation_fallback: NTFacility - tmnt_performance_facility_type: Detention Basin - label: Dry Extended Detention Basin/Tank (simple) - - flow_duration_control_tank: validator: RetAndTmntFacility + pervious_pavement_with_partial_infiltration_simple: + label: Pervious Pavement with Partial Infiltration (simple) + tmnt_performance_facility_type: PP validation_fallback: NTFacility - tmnt_performance_facility_type: Detention Basin - label: Flow Duration Control Tank - - flow_duration_control_tank_simple: validator: SimpleFacility + sand_filter: + label: Sand Filter + tmnt_performance_facility_type: MF + validation_fallback: NTFacility + validator: TmntFacility + sand_filter_simple: + label: Sand Filter (simple) + tmnt_performance_facility_type: MF + validation_fallback: NTFacility + validator: SimpleTmntFacility + vault: + label: Vault + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: Detention Basin - label: Flow Duration Control Tank (simple) - - hydrodynamic_separator: validator: FlowFacility + vault_simple: + label: Vault (simple) + tmnt_performance_facility_type: ¯\_(ツ)_/¯ validation_fallback: NTFacility - tmnt_performance_facility_type: Hydrodynamic Separator - label: Hydrodynamic Separator - - hydrodynamic_separator_simple: validator: SimpleTmntFacility + vegetated_box: + label: Filterra/Vegetated Box + tmnt_performance_facility_type: BR validation_fallback: NTFacility - tmnt_performance_facility_type: Hydrodynamic Separator - label: Hydrodynamic Separator (simple) - - oil_water_separator: validator: FlowFacility + vegetated_box_hrbf: + label: Filterra/Vegetated Box High Rate + tmnt_performance_facility_type: HRBF + validation_fallback: NTFacility + validator: FlowFacility + vegetated_box_hrbf_simple: + label: Filterra/Vegetated Box High Rate (simple) + tmnt_performance_facility_type: HRBF validation_fallback: NTFacility - tmnt_performance_facility_type: Hydrodynamic Separator - label: Oil-Water Separator - - oil_water_separator_simple: validator: SimpleTmntFacility + vegetated_box_simple: + label: Filterra/Vegetated Box (simple) + tmnt_performance_facility_type: BR validation_fallback: NTFacility - tmnt_performance_facility_type: Hydrodynamic Separator - label: Oil-Water Separator (simple) - + validator: SimpleTmntFacility vegetated_swale: - validator: FlowAndRetFacility - validation_fallback: NTFacility - tmnt_performance_facility_type: Vegetated Swale label: Vegetated Swale - + tmnt_performance_facility_type: BS + validation_fallback: NTFacility + validator: FlowAndRetFacility vegetated_swale_simple: + label: Vegetated Swale (simple) + tmnt_performance_facility_type: BS + validation_fallback: NTFacility validator: SimpleFacility + wet_pond: + label: Wet Pond + tmnt_performance_facility_type: RP validation_fallback: NTFacility - tmnt_performance_facility_type: Vegetated Swale - label: Vegetated Swale (simple) - - vegetated_box: - validator: FlowFacility + validator: PermPoolFacility + wet_pond_simple: + label: Wet Pond (simple) + tmnt_performance_facility_type: RP validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # no data yet for performance curves - label: Filterra/Vegetated Box - - vegetated_box_simple: validator: SimpleTmntFacility + wet_vault: + label: Wet Vault + tmnt_performance_facility_type: RP validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # no data yet for performance curves - label: Filterra/Vegetated Box (simple) - - # Other BMPs - - drywell: - validator: DryWellFacilityFlowOrVolume + validator: RetAndTmntFacility + wet_vault_simple: + label: Wet Vault (simple) + tmnt_performance_facility_type: RP validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ - label: Drywell - - drywell_simple: - validator: SimpleRetFacility + validator: SimpleFacility + wetland_pond: + label: Wetland Pond + tmnt_performance_facility_type: WB validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ - label: Drywell (simple) - - vault: - validator: FlowFacility + validator: PermPoolFacility + wetland_pond_simple: + label: Wetland Pond (simple) + tmnt_performance_facility_type: WB validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # no data yet for performance curves - label: Vault - - vault_simple: validator: SimpleTmntFacility - validation_fallback: NTFacility - tmnt_performance_facility_type: ¯\_(ツ)_/¯ # no data yet for performance curves - label: Vault (simple) project_reference_data: met_table: @@ -271,7 +321,7 @@ project_reference_data: y_col: capture_fraction tmnt_performance_table: - file: bmp_params_20220103_1443.json + file: bmp_params_2025.json facility_column: bmp pollutant_column: pollutant diff --git a/stormpiper/stormpiper/database/changelog.py b/stormpiper/stormpiper/database/changelog.py index 90672527..3b4626bf 100644 --- a/stormpiper/stormpiper/database/changelog.py +++ b/stormpiper/stormpiper/database/changelog.py @@ -7,22 +7,25 @@ def sync_log( - *, tablename: str, db: Session, changelog: TableChangeLog = TableChangeLog + *, + tablename: str, + db: Session, + changelog: TableChangeLog = TableChangeLog, # type: ignore ) -> None: - result = db.execute(sa.select(changelog).where(changelog.tablename == tablename)) + result = db.execute(sa.select(changelog).where(changelog.tablename == tablename)) # type: ignore ls = result.scalars().all() exists = len(ls) >= 1 ts = utils.datetime_now() if exists: q = ( - sa.update(changelog) + sa.update(changelog) # type: ignore .where(changelog.tablename == tablename) .values(last_updated=ts) ) else: - q = sa.insert(changelog).values(tablename=tablename) + q = sa.insert(changelog).values(tablename=tablename) # type: ignore db.execute(q) @@ -30,10 +33,13 @@ def sync_log( async def async_log( - *, tablename: str, db: AsyncSession, changelog: TableChangeLog = TableChangeLog + *, + tablename: str, + db: AsyncSession, + changelog: TableChangeLog = TableChangeLog, # type: ignore ) -> None: result = await db.execute( - sa.select(changelog).where(changelog.tablename == tablename) + sa.select(changelog).where(changelog.tablename == tablename) # type: ignore ) ls = result.scalars().all() exists = len(ls) >= 1 @@ -41,12 +47,12 @@ async def async_log( if exists: q = ( - sa.update(changelog) + sa.update(changelog) # type: ignore .where(changelog.tablename == tablename) .values(last_updated=ts) ) else: - q = sa.insert(changelog).values(tablename=tablename) + q = sa.insert(changelog).values(tablename=tablename) # type: ignore await db.execute(q) await db.commit() diff --git a/stormpiper/stormpiper/database/connection.py b/stormpiper/stormpiper/database/connection.py index 6895e09a..7bac89ed 100644 --- a/stormpiper/stormpiper/database/connection.py +++ b/stormpiper/stormpiper/database/connection.py @@ -1,15 +1,15 @@ import logging -from typing import Annotated, AsyncIterator +from typing import Annotated, AsyncIterator, TypeAlias from fastapi import Depends from sqlalchemy import create_engine, text from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.orm import sessionmaker -from tenacity import after_log # type: ignore -from tenacity import before_log # type: ignore -from tenacity import stop_after_attempt # type: ignore -from tenacity import wait_fixed # type: ignore from tenacity import retry +from tenacity.after import after_log +from tenacity.before import before_log +from tenacity.stop import stop_after_attempt +from tenacity.wait import wait_fixed from stormpiper.core.config import settings @@ -22,7 +22,6 @@ # Temporarily exceeds the set pool_size if no connections are available. "max_overflow": 2, "pool_timeout": 10 * 60, # seconds - "pool_recycle": 6 * 3600, # seconds "pool_pre_ping": True, } @@ -38,16 +37,18 @@ async_session_maker = sessionmaker( - async_engine, class_=AsyncSession, expire_on_commit=False + async_engine, # type: ignore + class_=AsyncSession, + expire_on_commit=False, ) async def get_async_session() -> AsyncIterator[AsyncSession]: - async with async_session_maker() as session: + async with async_session_maker() as session: # type: ignore yield session -AsyncSessionDB = Annotated[AsyncSession, Depends(get_async_session)] +AsyncSessionDB: TypeAlias = Annotated[AsyncSession, Depends(get_async_session)] def get_session(engine=engine): diff --git a/stormpiper/stormpiper/database/crud/__init__.py b/stormpiper/stormpiper/database/crud/__init__.py index d94772d8..3f16acfc 100644 --- a/stormpiper/stormpiper/database/crud/__init__.py +++ b/stormpiper/stormpiper/database/crud/__init__.py @@ -1,3 +1,5 @@ +# ruff: noqa +# type: ignore from .crud_globals import global_cost_setting, global_setting from .crud_scenario import scenario from .crud_tmnt_attr import tmnt_attr, tmnt_cost diff --git a/stormpiper/stormpiper/database/crud/base.py b/stormpiper/stormpiper/database/crud/base.py index 546fa306..e2ba7d30 100644 --- a/stormpiper/stormpiper/database/crud/base.py +++ b/stormpiper/stormpiper/database/crud/base.py @@ -46,13 +46,13 @@ async def get_all( ) -> list[SchemaType] | None: q = sa.select(self.base).offset(offset).limit(limit) result = await db.execute(q) - return result.scalars().all() + return result.scalars().all() # type: ignore async def on_after_create(self, *, db: AsyncSession, obj: SchemaType) -> None: return None async def create(self, db: AsyncSession, *, new_obj: CreateModelType) -> SchemaType: - db_obj = self.base(**new_obj.dict(exclude_unset=True)) + db_obj = self.base(**new_obj.model_dump(exclude_unset=True)) db.add(db_obj) await db.commit() @@ -80,7 +80,7 @@ async def update( if isinstance(new_obj, dict): update_data = new_obj else: - update_data = new_obj.dict(exclude_unset=True) + update_data = new_obj.model_dump(exclude_unset=True) update_data[self.id] = id @@ -99,7 +99,7 @@ async def update( return obj async def log(self, db: AsyncSession): - await async_log(tablename=self.tablename, db=db, changelog=self.changelog) + await async_log(tablename=self.tablename, db=db, changelog=self.changelog) # type: ignore async def remove(self, db: AsyncSession, *, id: Any) -> None: q = sa.delete(self.base).where(getattr(self.base, self.id) == id) diff --git a/stormpiper/stormpiper/database/crud/crud_globals.py b/stormpiper/stormpiper/database/crud/crud_globals.py index c7c0f80f..0612513d 100644 --- a/stormpiper/stormpiper/database/crud/crud_globals.py +++ b/stormpiper/stormpiper/database/crud/crud_globals.py @@ -6,8 +6,7 @@ class CRUDGlobalSetting( CRUDBase[GlobalSetting, GlobalSettingCreate, GlobalSettingUpdate] -): - ... +): ... class CRUDGlobalCostSetting( diff --git a/stormpiper/stormpiper/database/crud/crud_tmnt_attr.py b/stormpiper/stormpiper/database/crud/crud_tmnt_attr.py index fed1812e..650f58bd 100644 --- a/stormpiper/stormpiper/database/crud/crud_tmnt_attr.py +++ b/stormpiper/stormpiper/database/crud/crud_tmnt_attr.py @@ -16,8 +16,7 @@ class CRUDTMNTFacilityAttr( CRUDBase[TMNTFacilityAttr, TMNTFacilityAttrCreate, TMNTFacilityAttrUpdate] -): - ... +): ... class CRUDTMNTFacilityCost( @@ -33,7 +32,7 @@ async def upsert( if isinstance(new_obj, dict): update_data = new_obj else: - update_data = new_obj.dict(exclude_unset=True) + update_data = new_obj.model_dump(exclude_unset=True) obj = await self.get(db=db, id=id) diff --git a/stormpiper/stormpiper/database/crud/crud_tmnt_source_control.py b/stormpiper/stormpiper/database/crud/crud_tmnt_source_control.py index 9bbfb86d..f44ce3c3 100644 --- a/stormpiper/stormpiper/database/crud/crud_tmnt_source_control.py +++ b/stormpiper/stormpiper/database/crud/crud_tmnt_source_control.py @@ -9,8 +9,7 @@ class CRUDTMNTSourceControl( CRUDBase[TMNTSourceControl, TMNTSourceControlCreate, TMNTSourceControlUpdate] -): - ... +): ... tmnt_source_control = CRUDTMNTSourceControl(TMNTSourceControl) diff --git a/stormpiper/stormpiper/database/hacks.py b/stormpiper/stormpiper/database/hacks.py index f4c1ea94..de88d22a 100644 --- a/stormpiper/stormpiper/database/hacks.py +++ b/stormpiper/stormpiper/database/hacks.py @@ -53,7 +53,9 @@ def view(name, metadata, selectable): # pragma: no cover CreateView(name, selectable).execute_if(callable_=view_doesnt_exist), # type: ignore ) event.listen( - metadata, "before_drop", DropView(name).execute_if(callable_=view_exists) # type: ignore + metadata, + "before_drop", + DropView(name).execute_if(callable_=view_exists), # type: ignore ) return t diff --git a/stormpiper/stormpiper/database/schemas/base.py b/stormpiper/stormpiper/database/schemas/base.py index 3d76a17c..3aab122c 100644 --- a/stormpiper/stormpiper/database/schemas/base.py +++ b/stormpiper/stormpiper/database/schemas/base.py @@ -1,3 +1,5 @@ +# ruff: noqa +# type: ignore """This module is imported by alembic only""" from stormpiper.apps.supersafe.db import User diff --git a/stormpiper/stormpiper/database/schemas/base_class.py b/stormpiper/stormpiper/database/schemas/base_class.py index c9a12883..76b32b39 100644 --- a/stormpiper/stormpiper/database/schemas/base_class.py +++ b/stormpiper/stormpiper/database/schemas/base_class.py @@ -2,8 +2,7 @@ from sqlalchemy.orm import DeclarativeBase # type: ignore ; pylance import bug. -class Base(DeclarativeBase): - ... +class Base(DeclarativeBase): ... class TrackedTable: diff --git a/stormpiper/stormpiper/database/schemas/graph.py b/stormpiper/stormpiper/database/schemas/graph.py index c9a1bbe7..2bbd15fc 100644 --- a/stormpiper/stormpiper/database/schemas/graph.py +++ b/stormpiper/stormpiper/database/schemas/graph.py @@ -1,7 +1,5 @@ from sqlalchemy import Column, Integer, String -from stormpiper.core.config import settings - from .base_class import Base diff --git a/stormpiper/stormpiper/database/schemas/views.py b/stormpiper/stormpiper/database/schemas/views.py index f89ae5f7..0b10e8c1 100644 --- a/stormpiper/stormpiper/database/schemas/views.py +++ b/stormpiper/stormpiper/database/schemas/views.py @@ -1,5 +1,6 @@ from sqlalchemy import inspect, text +from .results import ResultBlob from .subbasin import Subbasin, SubbasinResult from .tmnt import TMNTFacility, TMNTFacilityAttr from .tmnt_cost import TMNTFacilityCost @@ -215,6 +216,16 @@ def build_tmnt_v(): if k not in ["node_id"] + t_cols + ta_cols + ts_cols ] + r_cols = [ + k + for k in ResultBlob.__table__.columns.keys() + if k + not in ["node_id", "design_intensity_inhr", "design_volume_cuft_cumul"] + + t_cols + + ta_cols + + ts_cols + ] + tcols = [f"""\tt."{s}" """ for s in t_cols] tatscols = [f"""\tta."{s}" as "modeling_attr_{s}" """ for s in ts_cols] @@ -222,12 +233,15 @@ def build_tmnt_v(): tctscols = [f"""\ttc."{s}" as "cost_attr_{s}" """ for s in ts_cols] tccols = [f"""\ttc."{s}" """ for s in tc_cols] + rcols = [f"""\tr."{s}" """ for s in r_cols] costploadcols = [ f"""tc.present_value_total_cost / nullif(COALESCE(nullif(sign(r."{poc}_removed"),-1),0)*r."{poc}_removed", 0) AS "{poc.split("_")[0]}_total_cost_dollars_per_load_lbs_removed" """ for poc in load_cols ] - block = ",\n".join(tcols + tatscols + tacols + tctscols + tccols + costploadcols) + block = ",\n".join( + tcols + tatscols + tacols + tctscols + tccols + rcols + costploadcols + ) view_template = f""" CREATE OR REPLACE VIEW tmnt_v AS @@ -236,7 +250,7 @@ def build_tmnt_v(): from tmnt_facility as t LEFT JOIN tmnt_facility_attribute as ta on t.node_id = ta.node_id LEFT JOIN tmnt_facility_cost as tc on t.node_id = tc.node_id - LEFT JOIN (SELECT * from result_blob where epoch = '1980s') as r ON t.node_id = r.node_id + LEFT JOIN (SELECT * from result_blob where epoch = '1980s') as r on t.node_id = r.node_id """ return view_template diff --git a/stormpiper/stormpiper/earth_engine/__init__.py b/stormpiper/stormpiper/earth_engine/__init__.py index c88c7431..041bbc93 100644 --- a/stormpiper/stormpiper/earth_engine/__init__.py +++ b/stormpiper/stormpiper/earth_engine/__init__.py @@ -1,6 +1,6 @@ from .assets import assets as assets from .elevation import get_elevation as get_elevation -from .layers import get_layers, get_tile_registry +from .layers import get_layers as get_layers, get_tile_registry as get_tile_registry from .login import async_login as async_login from .login import ee_continuous_login as ee_continuous_login from .login import login as login diff --git a/stormpiper/stormpiper/earth_engine/assets.py b/stormpiper/stormpiper/earth_engine/assets.py index b2173620..ad8c0066 100644 --- a/stormpiper/stormpiper/earth_engine/assets.py +++ b/stormpiper/stormpiper/earth_engine/assets.py @@ -5,4 +5,4 @@ def assets(): # pragma: no cover project_folder = settings.EE_PROJECT_DIRECTORY - return ee.data.listAssets({"parent": project_folder}) + return ee.data.listAssets({"parent": project_folder}) # type: ignore diff --git a/stormpiper/stormpiper/earth_engine/ee.py b/stormpiper/stormpiper/earth_engine/ee.py index c53e1890..fa7253c3 100644 --- a/stormpiper/stormpiper/earth_engine/ee.py +++ b/stormpiper/stormpiper/earth_engine/ee.py @@ -1,13 +1,17 @@ +# type: ignore from typing import TYPE_CHECKING, Any -import ee -from ee import FeatureCollection as FeatureCollection -from ee import Geometry, Initialize, ServiceAccountCredentials +import ee as ee +from ee import ( + FeatureCollection as FeatureCollection, + Geometry as Geometry, + Initialize as Initialize, + ServiceAccountCredentials as ServiceAccountCredentials, +) if TYPE_CHECKING: # pragma: no cover - class Image(Any): - ... + class Image(Any): ... else: - from ee import Image + from ee import Image as Image diff --git a/stormpiper/stormpiper/earth_engine/elevation.py b/stormpiper/stormpiper/earth_engine/elevation.py index c3be9a55..23959cac 100644 --- a/stormpiper/stormpiper/earth_engine/elevation.py +++ b/stormpiper/stormpiper/earth_engine/elevation.py @@ -1,6 +1,6 @@ import ee -from .ee import Geometry, Image +from .ee import Geometry, Image # type: ignore def get_elevation(long: float, lat: float) -> dict[str, float]: diff --git a/stormpiper/stormpiper/earth_engine/layers.py b/stormpiper/stormpiper/earth_engine/layers.py index be16cf37..9651f3f7 100644 --- a/stormpiper/stormpiper/earth_engine/layers.py +++ b/stormpiper/stormpiper/earth_engine/layers.py @@ -175,12 +175,12 @@ def _init_tile_registry(): # pragma: no cover tile_registry = {} - tile_registry[ - "esri" - ] = "https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}" - tile_registry[ - "carto-db" - ] = "https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png" + tile_registry["esri"] = ( + "https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}" + ) + tile_registry["carto-db"] = ( + "https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png" + ) layers = _init_layers() diff --git a/stormpiper/stormpiper/earth_engine/loading.py b/stormpiper/stormpiper/earth_engine/loading.py index c103ea74..0edec97c 100644 --- a/stormpiper/stormpiper/earth_engine/loading.py +++ b/stormpiper/stormpiper/earth_engine/loading.py @@ -7,7 +7,7 @@ from stormpiper.core.config import settings -from .ee import FeatureCollection, Image +from .ee import FeatureCollection, Image # type: ignore logging.basicConfig(level=settings.LOGLEVEL) logger = logging.getLogger(__name__) @@ -94,10 +94,13 @@ def zonal_stats( runoff = Image(runoff_path) ro_bands = get_runoff_bands(runoff_path) ro_units = runoff.toDictionary().get("units").getInfo() - logger.info(f"Calculating zonal stats for the runoff") - ro_dct = get_loading_zonal_stats( - runoff.multiply(Image.pixelArea()), zones=zones_fc - ).getInfo() + logger.info("Calculating zonal stats for the runoff") + ro_dct = ( + get_loading_zonal_stats( + runoff.multiply(Image.pixelArea()), zones=zones_fc + ).getInfo() + or {} + ) df = ( get_loading_zonal_stats_df(ro_dct) .melt( @@ -113,8 +116,8 @@ def zonal_stats( for epoch in ro_bands: logger.info(f"Calculating zonal stats for the {epoch} epoch") loadingImage = get_poc_loading_Image(runoff_path, concentration_path, epoch) - c_band = loadingImage.bandNames().getInfo() - poc_dct = get_loading_zonal_stats(loadingImage, zones=zones_fc).getInfo() + c_band = loadingImage.bandNames().getInfo() or [] + poc_dct = get_loading_zonal_stats(loadingImage, zones=zones_fc).getInfo() or {} poc_df = ( get_loading_zonal_stats_df(poc_dct) diff --git a/stormpiper/stormpiper/earth_engine/login.py b/stormpiper/stormpiper/earth_engine/login.py index d26f6d17..1831e73c 100644 --- a/stormpiper/stormpiper/earth_engine/login.py +++ b/stormpiper/stormpiper/earth_engine/login.py @@ -36,7 +36,7 @@ def base_login(**kwargs): credentials = _build_credentials(**kwargs) ee.Initialize( credentials=credentials, # type: ignore ; the ee library has set incorrect type hints/constraints on the ee.Initialize function. - opt_url="https://earthengine-highvolume.googleapis.com", + opt_url="https://earthengine.googleapis.com", # high volume is slow ) logger.info("Login to earth engine succeeded.") return True @@ -48,7 +48,7 @@ async def base_async_login(**kwargs): await run_in_threadpool( ee.Initialize, credentials=credentials, # type: ignore ; the ee library has set incorrect type hints/constraints on the ee.Initialize function. - opt_url="https://earthengine-highvolume.googleapis.com", + opt_url="https://earthengine.googleapis.com", # high volume is slow ) logger.info("Login to earth engine succeeded.") return True diff --git a/stormpiper/stormpiper/email_helper/email_templates.py b/stormpiper/stormpiper/email_helper/email_templates.py index 98602f0d..948c6711 100644 --- a/stormpiper/stormpiper/email_helper/email_templates.py +++ b/stormpiper/stormpiper/email_helper/email_templates.py @@ -12,7 +12,7 @@ def reset_password(*, email, token, name=None, reset_url="", **kwargs): "Name": "Tacoma Watersheds Administrators", }, "To": [{"Email": email, "Name": name}], - "Subject": f"Password Reset Requested for Tacoma Watersheds", + "Subject": "Password Reset Requested for Tacoma Watersheds", "TextPart": f"Hello {name},\nYour reset link is:\n{reset_url}", "HTMLPart": f"""
Hello {name},
@@ -37,7 +37,7 @@ def request_verify(*, email, token, name=None, verify_url="", **kwargs): "Name": "Tacoma Watersheds Administrators", }, "To": [{"Email": email, "Name": name}], - "Subject": f"Email Verification Code for Tacoma Watersheds", + "Subject": "Email Verification Code for Tacoma Watersheds", "TextPart": f"Hello {name},\nYour verification link is:\n{verify_url}", "HTMLPart": f"""Hello {name},
@@ -62,7 +62,7 @@ def welcome_verify(*, email, token, name=None, verify_url="", **kwargs): "Name": "Tacoma Watersheds Administrators", }, "To": [{"Email": email, "Name": name}], - "Subject": f"Welcome to Tacoma Watersheds", + "Subject": "Welcome to Tacoma Watersheds", "TextPart": dedent( f"""Welcome {name}, Thank you for registering for access to the Tacoma Watersheds Application. @@ -96,7 +96,7 @@ def error_message(*, email_dict_list, content, attachments=None, **kwargs): "Name": "Tacoma Watersheds Administrators", }, "To": email_dict_list, - "Subject": f"Error from Tacoma Watersheds", + "Subject": "Error from Tacoma Watersheds", "TextPart": content, "Attachments": attachments or [], } diff --git a/stormpiper/stormpiper/factory.py b/stormpiper/stormpiper/factory.py index 3250eba3..b77bd2ea 100644 --- a/stormpiper/stormpiper/factory.py +++ b/stormpiper/stormpiper/factory.py @@ -5,7 +5,7 @@ import aiohttp from brotli_asgi import BrotliMiddleware -from fastapi import Depends, FastAPI, Request, Response +from fastapi import Depends, FastAPI, HTTPException, Request, Response from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import RedirectResponse from fastapi.staticfiles import StaticFiles @@ -15,18 +15,15 @@ from ratelimit.backends.redis import RedisBackend from redis.asyncio import StrictRedis -from stormpiper.api import api_router, rpc_router +import stormpiper.bg_worker as bg +from stormpiper.api.router import api_router, rpc_router from stormpiper.api.docs import get_better_swagger_ui_html from stormpiper.apps import ratelimiter from stormpiper.apps import supersafe as ss from stormpiper.apps.supersafe.users import user_role_ge_admin, user_role_ge_reader from stormpiper.core.config import settings -from stormpiper.core.context import get_context +from stormpiper.core.context import get_context, context from stormpiper.earth_engine import ee_continuous_login -from stormpiper.site import site_router - -# from starlette.middleware.httpsredirect import HTTPSRedirectMiddleware -# from uvicorn.middleware.proxy_headers import ProxyHeadersMiddleware ss_router = ss.create_router() @@ -39,7 +36,9 @@ async def lifespan(app: FastAPI): asyncio.create_task(ee_continuous_login(_settings.EE_LOGIN_INTERVAL_SECONDS)) state = {} - state["context"] = get_context() + ctx = get_context() + ctx["_is_valid"] = context.validate_request_context(ctx) + state["context"] = ctx async with ( aiohttp.ClientSession() as tileserver_session, aiohttp.ClientSession() as user_email_session, @@ -59,7 +58,7 @@ def create_app( settings_override: dict[str, Any] | None = None, app_kwargs: dict[str, Any] | None = None, ) -> FastAPI: - _settings = settings.copy(deep=True) + _settings = settings.model_copy(deep=True) if settings_override is not None: # pragma: no branch _settings.update(settings_override) @@ -81,7 +80,8 @@ def create_app( app.add_middleware(BrotliMiddleware) app.add_middleware( CORSMiddleware, - allow_origins=_settings.ALLOW_CORS_ORIGINS, + allow_origins=["127.0.0.1", "localhost"] + + [str(o) for o in _settings.ALLOW_CORS_ORIGINS], allow_origin_regex=_settings.ALLOW_CORS_ORIGIN_REGEX, allow_credentials=False, allow_methods=["GET", "OPTIONS", "POST", "PATCH", "DELETE"], @@ -106,56 +106,46 @@ def create_app( app.include_router(api_router) app.include_router(rpc_router) - app.include_router(site_router) app.include_router(ss_router) @app.get("/ping", name="ping") async def ping( request: Request, ) -> dict: + task = bg.ping.apply_async().get() + if not task: + raise HTTPException( + status_code=406, detail="cannot connect to background worker." + ) + msg = { "message": "welcome home.", "version": _settings.VERSION, "environment": _settings.ENVIRONMENT, - "redirect_url_path_for": request.scope["router"].url_path_for( - "login:get_login" - ), - "redirect_url_for": str(request.url_for("login:get_login")), + "has_worker": task, } return msg - app.mount( - "/site/static", - StaticFiles(directory="stormpiper/site/static"), - name="site/static", - ) + pkg_path = Path(__file__).parent app.mount( "/app/assets", - StaticFiles(directory="stormpiper/spa/build/assets"), + StaticFiles(directory=pkg_path / "spa/build/assets"), name="app", ) nereid_app = create_nereid_app( settings_override={ "ASYNC_MODE": "add", - "DATA_DIRECTORY": Path(__file__).parent / "data" / "project_data", + "DATA_DIRECTORY": pkg_path / "data" / "project_data", }, - app_kwargs={"docs_url": "", "dependencies": [Depends(user_role_ge_admin)]}, + app_kwargs={"dependencies": [Depends(user_role_ge_admin)]}, ) - @nereid_app.get("/docs", include_in_schema=False) - async def nereid_custom_swagger_ui_html(): - resp = get_better_swagger_ui_html( - openapi_url="/api/nereid" + str(nereid_app.openapi_url), - title=nereid_app.title + " - Swagger UI", - ) - return resp - app.mount("/api/nereid", nereid_app, name="nereid") - templates = Jinja2Templates(directory="stormpiper/spa/build") + templates = Jinja2Templates(directory=pkg_path / "spa/build") @app.get( "/api/docs", include_in_schema=False, dependencies=[Depends(user_role_ge_admin)] @@ -170,7 +160,7 @@ async def custom_swagger_ui_html(): @app.get("/app", name="home") @app.get("/app/{fullpath:path}") async def serve_spa(request: Request, fullpath: str | None = None) -> Response: - return templates.TemplateResponse("index.html", {"request": request}) + return templates.TemplateResponse(request, "index.html") @app.get("/") async def home(request: Request) -> Response: diff --git a/stormpiper/stormpiper/models/base.py b/stormpiper/stormpiper/models/base.py index a8d800b5..552116ef 100644 --- a/stormpiper/stormpiper/models/base.py +++ b/stormpiper/stormpiper/models/base.py @@ -1,18 +1,18 @@ from enum import Enum -from pydantic import BaseModel as BASE +from pydantic import BaseModel as BASE, ConfigDict class BaseModel(BASE): @classmethod def get_fields(cls, by_alias=False): - return list(cls.schema(by_alias=by_alias).get("properties", {}).keys()) + return list( + cls.model_json_schema(by_alias=by_alias).get("properties", {}).keys() + ) class BaseORM(BaseModel): - class Config: - orm_mode = True + model_config = ConfigDict(from_attributes=True) -class StrEnum(str, Enum): - ... +class StrEnum(str, Enum): ... diff --git a/stormpiper/stormpiper/models/globals.py b/stormpiper/stormpiper/models/globals.py index be51cffa..81b73a22 100644 --- a/stormpiper/stormpiper/models/globals.py +++ b/stormpiper/stormpiper/models/globals.py @@ -10,17 +10,14 @@ class GlobalSettingBase(BaseModel): value: str -class GlobalSettingResponse(BaseORM, GlobalSettingBase): - ... +class GlobalSettingResponse(BaseORM, GlobalSettingBase): ... -class GlobalSettingPost(GlobalSettingBase): - ... +class GlobalSettingPost(GlobalSettingBase): ... class GlobalSettingUpdate(GlobalSettingBase): updated_by: None | str = None -class GlobalSettingCreate(GlobalSettingUpdate): - ... +class GlobalSettingCreate(GlobalSettingUpdate): ... diff --git a/stormpiper/stormpiper/models/npv.py b/stormpiper/stormpiper/models/npv.py index c5d17f21..ec1f5087 100644 --- a/stormpiper/stormpiper/models/npv.py +++ b/stormpiper/stormpiper/models/npv.py @@ -1,3 +1,5 @@ +from pydantic import ConfigDict + from stormpiper.models.base import BaseModel EXAMPLE_PV = dict( @@ -18,10 +20,10 @@ class PVRequest(BaseModel): capital_cost: float - capital_cost_basis_year: int | float | None + capital_cost_basis_year: int | float | None = None om_cost_per_yr: float - om_cost_basis_year: int | float | None - install_year: int | float | None + om_cost_basis_year: int | float | None = None + install_year: int | float | None = None replacement_cost: None | float = None lifespan_yrs: float | int | None = None # globals @@ -30,5 +32,4 @@ class PVRequest(BaseModel): planning_horizon_yrs: float | int cost_basis_year: float | int - class Config: - schema_extra = {"example": EXAMPLE_PV} + model_config = ConfigDict(json_schema_extra={"example": EXAMPLE_PV}) # type: ignore diff --git a/stormpiper/stormpiper/models/prom.py b/stormpiper/stormpiper/models/prom.py index 8fc1f893..4547ecf2 100644 --- a/stormpiper/stormpiper/models/prom.py +++ b/stormpiper/stormpiper/models/prom.py @@ -1,9 +1,9 @@ from typing import Literal -from pydantic import Field, validator +from pydantic import Field, field_validator from stormpiper.database.schemas import views -from stormpiper.src.decision_support import prom +from stormpiper.src.decision_support import prom as prom from .base import BaseModel @@ -19,7 +19,7 @@ class PromRequestCriteria(BaseModel): criteria: Literal[tuple(VALID_CRITERIA)] # type: ignore direction: int = Field(1, ge=-1, le=1) - @validator("direction", pre=True, always=True) + @field_validator("direction", mode="before") def set_direction(cls, v): assert v in [-1, 1], "direction must be either -1 or 1" return v diff --git a/stormpiper/stormpiper/models/result_view.py b/stormpiper/stormpiper/models/result_view.py index 210a797a..c5507ff7 100644 --- a/stormpiper/stormpiper/models/result_view.py +++ b/stormpiper/stormpiper/models/result_view.py @@ -18,30 +18,30 @@ "rankcriteria", ] -ResultView = create_model( +ResultView = create_model( # type: ignore "ResultView", __base__=BaseORM, - **{ + **{ # type: ignore str(c): (Optional[str] if c in strings else Optional[float], ...) for c in set(["node_id", "epoch"] + results.COLS) if not c.startswith("_") }, ) -SubbasinWQResultView = create_model( +SubbasinWQResultView = create_model( # type: ignore "SubbasinWQResultView", __base__=BaseORM, - **{ + **{ # type: ignore str(c): (Optional[str] if c in strings else Optional[float], ...) for c in set(["subbasin", "basinname", "epoch"] + views.WQ_COLS) if not any([c.startswith("_"), c == "geom"]) }, ) -SubbasinInfoView = create_model( +SubbasinInfoView = create_model( # type: ignore "SubbasinInfoView", __base__=BaseORM, - **{ + **{ # type: ignore str(c): (Optional[str] if c in strings else Optional[float], ...) for c in set(["subbasin", "basinname", "epoch"] + views.INFO_COLS) if not any([c.startswith("_"), c == "geom"]) diff --git a/stormpiper/stormpiper/models/scenario.py b/stormpiper/stormpiper/models/scenario.py index 83e37fa5..84962769 100644 --- a/stormpiper/stormpiper/models/scenario.py +++ b/stormpiper/stormpiper/models/scenario.py @@ -2,9 +2,9 @@ from typing import Any from uuid import UUID -from geojson_pydantic import FeatureCollection, Point, Polygon -from nereid.api.api_v1.models.treatment_facility_models import STRUCTURAL_FACILITY_TYPE -from pydantic import Field, validator +from geojson_pydantic import Feature, FeatureCollection, Point, Polygon +from nereid.models.treatment_facility_models import STRUCTURAL_FACILITY_TYPE +from pydantic import Field, field_validator from .base import BaseModel, BaseORM from .tmnt_attr import TMNTFacilityPatch @@ -38,7 +38,7 @@ def lower_precision(data: list, precision=5) -> None: class LowResPolygon(Polygon): - @validator("coordinates", pre=True, always=True) + @field_validator("coordinates", mode="before") def low_precision(cls, coordinates: list) -> list: """limit polygon precision.""" for ele in coordinates: @@ -47,7 +47,7 @@ def low_precision(cls, coordinates: list) -> list: class LowResPoint(Point): - @validator("coordinates", pre=True, always=True) + @field_validator("coordinates", mode="before") def low_precision(cls, coordinates: list) -> list: """limit point precision.""" coordinates = list(coordinates) @@ -56,13 +56,15 @@ def low_precision(cls, coordinates: list) -> list: return coordinates -DelineationFeatureCollection = FeatureCollection[LowResPolygon, DelineationProps] +DelineationFeatureCollection = FeatureCollection[ + Feature[LowResPolygon, DelineationProps] +] DelineationFeatureCollectionUpdate = FeatureCollection[ - LowResPolygon, DelineationPropsUpdate + Feature[LowResPolygon, DelineationPropsUpdate] ] StructuralFacilityFeatureCollection = FeatureCollection[ - LowResPoint, dict[str, Any] | TMNTFacilityPatch | STRUCTURAL_FACILITY_TYPE + Feature[LowResPoint, dict[str, Any] | TMNTFacilityPatch | STRUCTURAL_FACILITY_TYPE] ] DELIN_BBOX_COORD_01 = [ @@ -216,12 +218,10 @@ class ScenarioBase(BaseModel): input: ScenarioInput | None = None -class ScenarioPost(ScenarioBase): - ... +class ScenarioPost(ScenarioBase): ... -class ScenarioPatch(ScenarioBase): - ... +class ScenarioPatch(ScenarioBase): ... class ScenarioUpdate(ScenarioPatch): @@ -262,5 +262,4 @@ class ScenarioInDBBase(BaseORM, ScenarioUpdate): # Properties to return to client -class Scenario(ScenarioInDBBase): - ... +class Scenario(ScenarioInDBBase): ... diff --git a/stormpiper/stormpiper/models/scenario_validator.py b/stormpiper/stormpiper/models/scenario_validator.py index eaffcc3c..b6639fb5 100644 --- a/stormpiper/stormpiper/models/scenario_validator.py +++ b/stormpiper/stormpiper/models/scenario_validator.py @@ -22,8 +22,8 @@ def scenario_delin_uid(ix: int, geom: str, name: None | str, relid: None | str) def validate_delineation_collection(delineation_collection_geojson: str) -> str: delin = ( geopandas.read_file(delineation_collection_geojson) - .to_crs(epsg=settings.TACOMA_EPSG) - .assign( + .to_crs(epsg=settings.TACOMA_EPSG) # type: ignore + .assign( # type: ignore altid=lambda df: df.apply( lambda r: scenario_delin_uid( r.name, # r.name is the index @@ -39,7 +39,7 @@ def validate_delineation_collection(delineation_collection_geojson: str) -> str: .to_crs(epsg=4326) ) - delin_json = delin.to_json() + delin_json = delin.to_json() # type: ignore return delin_json @@ -77,9 +77,9 @@ def scenario_validator( ) new_props = deepcopy(props) if tmnt_update.tmnt_attr: - new_props.update(**tmnt_update.tmnt_attr.dict()) + new_props.update(**tmnt_update.tmnt_attr.model_dump()) if tmnt_update.tmnt_cost: - new_props.update(**tmnt_update.tmnt_cost.dict()) + new_props.update(**tmnt_update.tmnt_cost.model_dump()) structural_tmnt.append(new_props) diff --git a/stormpiper/stormpiper/models/tmnt_attr.py b/stormpiper/stormpiper/models/tmnt_attr.py index fcc2b756..11234d19 100644 --- a/stormpiper/stormpiper/models/tmnt_attr.py +++ b/stormpiper/stormpiper/models/tmnt_attr.py @@ -31,18 +31,16 @@ class TMNTFacilityAttrBase(BaseModel): # Properties to receive on update -class TMNTFacilityAttrPatch(TMNTFacilityAttrBase): - ... +class TMNTFacilityAttrPatch(TMNTFacilityAttrBase): ... # Properties to send on update class TMNTFacilityAttrUpdate(TMNTFacilityAttrPatch): - updated_by: None | str + updated_by: None | str = None # Properties to receive on creation -class TMNTFacilityAttrCreate(TMNTFacilityAttrUpdate): - ... +class TMNTFacilityAttrCreate(TMNTFacilityAttrUpdate): ... # Properties shared by models stored in DB @@ -54,13 +52,11 @@ class TMNTFacilityAttrInDBBase(BaseORM, TMNTFacilityAttrBase): # Properties to return to client -class TMNTFacilityAttr(TMNTFacilityAttrInDBBase): - ... +class TMNTFacilityAttr(TMNTFacilityAttrInDBBase): ... # Properties properties stored in DB -class TMNTFacilityAttrInDB(TMNTFacilityAttrInDBBase): - ... +class TMNTFacilityAttrInDB(TMNTFacilityAttrInDBBase): ... # TMNT Cost related attributes @@ -79,8 +75,7 @@ class TMNTFacilityCostBase(BaseModel): # Properties to receive on update -class TMNTFacilityCostPatch(TMNTFacilityCostBase): - ... +class TMNTFacilityCostPatch(TMNTFacilityCostBase): ... # Properties to send to DB on update @@ -125,8 +120,7 @@ class TMNTFacilityCostInDBBase(BaseORM, TMNTFacilityCostBase): # Properties to return to client -class TMNTFacilityCost(TMNTFacilityCostInDBBase): - ... +class TMNTFacilityCost(TMNTFacilityCostInDBBase): ... class TMNTUpdate(BaseModel): @@ -134,9 +128,7 @@ class TMNTUpdate(BaseModel): tmnt_cost: None | TMNTFacilityCostUpdate = None -class TMNTFacilityPatch(TMNTFacilityCostPatch, TMNTFacilityAttrPatch): - ... +class TMNTFacilityPatch(TMNTFacilityCostPatch, TMNTFacilityAttrPatch): ... -class InvalidModel(Exception): - ... +class InvalidModel(Exception): ... diff --git a/stormpiper/stormpiper/models/tmnt_attr_validator.py b/stormpiper/stormpiper/models/tmnt_attr_validator.py index 3b7067b4..b004c9a3 100644 --- a/stormpiper/stormpiper/models/tmnt_attr_validator.py +++ b/stormpiper/stormpiper/models/tmnt_attr_validator.py @@ -2,8 +2,8 @@ from copy import deepcopy from typing import Any -from nereid.api.api_v1.models import treatment_facility_models -from nereid.api.api_v1.models.treatment_facility_models import ( +from nereid.models import treatment_facility_models +from nereid.models.treatment_facility_models import ( STRUCTURAL_FACILITY_TYPE, TREATMENT_FACILITY_MODELS, ) @@ -65,7 +65,7 @@ def validate_tmnt_modeling_params( md = dict(node_id="", ref_data_key="", design_storm_depth_inches=1) md.update( - TMNTFacilityAttrPatch(**unvalidated_data).dict( + TMNTFacilityAttrPatch(**unvalidated_data).model_dump( exclude_unset=True, exclude_none=True ) ) @@ -96,12 +96,12 @@ def maybe_update_pv_params( unvalidated_data.update(**cost_results) try: - pv_req = PVRequest(**{**unvalidated_data, **pv_global_settings}) + pv_req = PVRequest(**unvalidated_data, **pv_global_settings) - except ValidationError as _: - logger.info("Validation Error", _) + except ValidationError as e: + logger.info(f"Validation Error {str(e)}") return TMNTFacilityCostUpdate(**unvalidated_data) - cost_results = compute_bmp_pv(**pv_req.dict()) + cost_results = compute_bmp_pv(**pv_req.model_dump()) unvalidated_data.update(**cost_results) return TMNTFacilityCostUpdate(**unvalidated_data) @@ -115,7 +115,7 @@ def tmnt_attr_validator( unvalidated_data = deepcopy(tmnt_patch) if isinstance(unvalidated_data, BASE): - unvalidated_data = unvalidated_data.dict() + unvalidated_data = unvalidated_data.model_dump() tmnt_attr = validate_tmnt_modeling_params(unvalidated_data, context=context) diff --git a/stormpiper/stormpiper/models/tmnt_source_control.py b/stormpiper/stormpiper/models/tmnt_source_control.py index 10781195..1a95fd3a 100644 --- a/stormpiper/stormpiper/models/tmnt_source_control.py +++ b/stormpiper/stormpiper/models/tmnt_source_control.py @@ -21,13 +21,11 @@ class TMNTSourceControlBase(BaseModel): # Properties to recieve at the /post route handler -class TMNTSourceControlPost(TMNTSourceControlBase): - ... +class TMNTSourceControlPost(TMNTSourceControlBase): ... # Properties to receive at the /patch route handler -class TMNTSourceControlPatch(TMNTSourceControlBase): - ... +class TMNTSourceControlPatch(TMNTSourceControlBase): ... # Properties to store in DB during update @@ -36,8 +34,7 @@ class TMNTSourceControlUpdate(TMNTSourceControlPatch): # Properties to store in DB during creation -class TMNTSourceControlCreate(TMNTSourceControlUpdate): - ... +class TMNTSourceControlCreate(TMNTSourceControlUpdate): ... # Properties shared by models stored in DB @@ -46,5 +43,4 @@ class TMNTSourceControlInDBBase(BaseORM, TMNTSourceControlBase): # Properties to return to client -class TMNTSourceControl(TMNTSourceControlInDBBase): - ... +class TMNTSourceControl(TMNTSourceControlInDBBase): ... diff --git a/stormpiper/stormpiper/models/tmnt_view.py b/stormpiper/stormpiper/models/tmnt_view.py index 69bc169b..def033c6 100644 --- a/stormpiper/stormpiper/models/tmnt_view.py +++ b/stormpiper/stormpiper/models/tmnt_view.py @@ -59,6 +59,3 @@ class TMNTView(BaseORM): PHE_total_cost_dollars_per_load_lbs_removed: float | None PYR_total_cost_dollars_per_load_lbs_removed: float | None DEHP_total_cost_dollars_per_load_lbs_removed: float | None - - class Config: - orm_mode = True diff --git a/stormpiper/stormpiper/site/templates/login.html b/stormpiper/stormpiper/site/templates/login.html index 0b646a74..93161a31 100644 --- a/stormpiper/stormpiper/site/templates/login.html +++ b/stormpiper/stormpiper/site/templates/login.html @@ -95,8 +95,8 @@ } return ""; } - const submitLoginUrl = "{{ str(request.url_for('login:post_login')) }}"; - const redirectRoute = "{{ str(request.url_for('home')) }}"; + const submitLoginUrl = "{{ request.url_for('login:post_login') }}"; + const redirectRoute = "{{ request.url_for('home') }}"; const form = document.getElementById("LoginForm"); var err_div = document.getElementById("error_msgs"); diff --git a/stormpiper/stormpiper/spa/package-lock.json b/stormpiper/stormpiper/spa/package-lock.json index aa32593b..257ad479 100644 --- a/stormpiper/stormpiper/spa/package-lock.json +++ b/stormpiper/stormpiper/spa/package-lock.json @@ -18,13 +18,8 @@ "@mui/icons-material": "^5.11.11", "@mui/material": "^5.11.15", "@mui/x-data-grid": "^6.0.4", - "@types/jest": "^28.1.1", - "@types/node": "^18.8.2", - "@types/react": "^17.0.45", - "@types/react-dom": "^18.0.6", "d3-fetch": "^3.0.1", "d3-scale-chromatic": "^3.0.0", - "events": "^3.3.0", "lodash.debounce": "^4.0.8", "mapbox-gl": "^2.10.0", "nebula.gl": "^1.0.4", @@ -33,70 +28,66 @@ "react-hook-form": "^7.36.1", "react-map-gl": "^6.1.16", "react-router-dom": "^6.4.1", - "vega": "^5.25.0", - "vega-embed": "^6.22.1", - "vega-lite": "^5.8.0" + "vega-embed": "^7.0.2" }, "devDependencies": { - "@vitejs/plugin-react": "^3.1.0", - "cypress": "^9.7.0", + "@types/node": "^24.10.1", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-polyfill-node": "^0.10.2", - "typescript": "^4.8.4", - "vite": "^4.3.9" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "rollup-plugin-polyfill-node": "^0.13.0", + "typescript": "^5.9.3", + "vite": "^7.2.6" } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.3.tgz", - "integrity": "sha512-qIJONzoa/qiHghnm0l1n4i/6IIziDpzqc36FBs4pzMhDUraHqponwJLiAKm1hGLP3OSB/TVNz6rMwVGpwxxySw==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.3", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.3", - "@babel/types": "^7.21.3", - "convert-source-map": "^1.7.0", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -106,208 +97,146 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/@babel/generator": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.3.tgz", - "integrity": "sha512-QS3iR1GYC/YGUnW7IdggFeN5c1poPUurnGttOV/bZgPGV+izC/D8HnD6DLwod0fsatNyVn1G3EVWMYIF0nHbeA==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.21.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dependencies": { - "@babel/types": "^7.18.6" - }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/types": "^7.28.5" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.3.tgz", - "integrity": "sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -315,27 +244,14 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -345,12 +261,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -360,125 +277,65 @@ } }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.3.tgz", - "integrity": "sha512-XLyopNeaTancVitYZe2MlUEvgKb6YVVPXzofHgqHijCImG33b/uTurMS488ht/Hbsb2XK3U2BnSTxKVNGV3nGQ==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.3", - "@babel/types": "^7.21.3", - "debug": "^4.1.0", - "globals": "^11.1.0" + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.3.tgz", - "integrity": "sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cypress/request": { - "version": "2.88.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", - "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/@danmarshall/deckgl-typings": { "version": "4.9.12", "resolved": "https://registry.npmjs.org/@danmarshall/deckgl-typings/-/deckgl-typings-4.9.12.tgz", "integrity": "sha512-hRXXDepfieobs+YFcjhoSXS97boSqgMAlWKREGwxBbqO/mE2seNJgQHPedsR+DeGJiK3hJsQmykt8TO51shJ4g==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "@types/hammerjs": "^2.0.36", "@types/react": "*", @@ -486,14 +343,18 @@ } }, "node_modules/@deck.gl/core": { - "version": "8.8.12", - "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.8.12.tgz", - "integrity": "sha512-gul5V2/FFPAW6B4PChEw5QOx0lpRiQzxXGlJs6mEy7nWKEYueXCUpyihVDHBdIbDJ/GQK/3drcSRU9UX8VyKaQ==", - "dependencies": { - "@loaders.gl/core": "^3.2.5", - "@loaders.gl/images": "^3.2.5", - "@luma.gl/constants": "^8.5.16", - "@luma.gl/core": "^8.5.16", + "version": "8.9.36", + "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.9.36.tgz", + "integrity": "sha512-mkIv4/fY1jE+iehqSJzUQi75l9cgfx2ZBa1s1AifgLu0TCkCZgRgISV3UnDBECDCmTZ9Cqk+oKq3OGay3Bz1RQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/core": "^3.4.13", + "@loaders.gl/images": "^3.4.13", + "@luma.gl/constants": "^8.5.21", + "@luma.gl/core": "^8.5.21", + "@luma.gl/webgl": "^8.5.21", "@math.gl/core": "^3.6.2", "@math.gl/sun": "^3.6.2", "@math.gl/web-mercator": "^3.6.2", @@ -506,34 +367,42 @@ } }, "node_modules/@deck.gl/extensions": { - "version": "8.8.12", - "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-8.8.12.tgz", - "integrity": "sha512-DiInCSLaJ+4qzczRJxBApffYjMtdHT0d56o9K9IKKuP/vCAbuIv7+LgeEHrehspe6YQVjwkfzdVIAKbMwNsWfA==", + "version": "8.9.36", + "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-8.9.36.tgz", + "integrity": "sha512-BoHjJOK9Ue/zH+YkXiFli7ebS+I21fyL4YeCUzw2a6OOo36SZV/4S0gZSSkaaltO72aZsDsvduWPAbmXY2slqA==", + "license": "MIT", "peer": true, "dependencies": { - "@luma.gl/shadertools": "^8.5.16" + "@babel/runtime": "^7.0.0", + "@luma.gl/shadertools": "^8.5.21" }, "peerDependencies": { "@deck.gl/core": "^8.0.0", "@luma.gl/constants": "^8.0.0", "@luma.gl/core": "^8.0.0", + "@math.gl/core": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", "gl-matrix": "^3.0.0" } }, "node_modules/@deck.gl/geo-layers": { - "version": "8.8.12", - "resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-8.8.12.tgz", - "integrity": "sha512-5Z7LQakauV64x1YG+kFbpZuR4QE0VNWcSrFSd0Mb0Xj8zR2KwRxvwRDTtLhReHFGQr/mI8in/wZ3xMqlo5/6Hg==", - "dependencies": { - "@loaders.gl/3d-tiles": "^3.2.5", - "@loaders.gl/gis": "^3.2.5", - "@loaders.gl/loader-utils": "^3.2.5", - "@loaders.gl/mvt": "^3.2.5", - "@loaders.gl/schema": "^3.2.5", - "@loaders.gl/terrain": "^3.2.5", - "@loaders.gl/tiles": "^3.2.5", - "@luma.gl/constants": "^8.5.16", - "@luma.gl/experimental": "^8.5.16", + "version": "8.9.36", + "resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-8.9.36.tgz", + "integrity": "sha512-OmJhbRpNK2MPVfEWqWR45Q1e8Sz90fGuFOkcl8Ecl6HZJV7IWcAlnybtaAeJNWO2OohN2TI53UdRKUNGFYS4AQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/3d-tiles": "^3.4.13", + "@loaders.gl/gis": "^3.4.13", + "@loaders.gl/loader-utils": "^3.4.13", + "@loaders.gl/mvt": "^3.4.13", + "@loaders.gl/schema": "^3.4.13", + "@loaders.gl/terrain": "^3.4.13", + "@loaders.gl/tiles": "^3.4.13", + "@loaders.gl/wms": "^3.4.13", + "@luma.gl/constants": "^8.5.21", + "@luma.gl/experimental": "^8.5.21", "@math.gl/core": "^3.6.2", "@math.gl/culling": "^3.6.2", "@math.gl/web-mercator": "^3.6.2", @@ -546,40 +415,45 @@ "@deck.gl/extensions": "^8.0.0", "@deck.gl/layers": "^8.0.0", "@deck.gl/mesh-layers": "^8.0.0", - "@loaders.gl/core": "^3.0.0", + "@loaders.gl/core": "^3.4.13", "@luma.gl/core": "^8.0.0" } }, "node_modules/@deck.gl/layers": { - "version": "8.8.12", - "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.8.12.tgz", - "integrity": "sha512-n7gZKjYj4TyQAao2shXKtUlJyFyoZ5q4paHG4esHY7kruqVmnxTS9cdU+CpUr+cC7Tavy5toDyzHyT/UIw1Gig==", - "dependencies": { - "@loaders.gl/images": "^3.2.5", - "@loaders.gl/schema": "^3.2.5", - "@luma.gl/constants": "^8.5.16", - "@mapbox/tiny-sdf": "^1.1.0", + "version": "8.9.36", + "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.9.36.tgz", + "integrity": "sha512-sr/QKELXZ4W0ZHb12QC2+EV1bZJOM6cU6kAfOJD5jOVixOcyccr+FnPPGn39VK9cl/VFY0S339ZPs9reyhDFVg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/images": "^3.4.13", + "@loaders.gl/schema": "^3.4.13", + "@luma.gl/constants": "^8.5.21", + "@mapbox/tiny-sdf": "^2.0.5", "@math.gl/core": "^3.6.2", "@math.gl/polygon": "^3.6.2", "@math.gl/web-mercator": "^3.6.2", - "earcut": "^2.0.6" + "earcut": "^2.2.4" }, "peerDependencies": { "@deck.gl/core": "^8.0.0", - "@loaders.gl/core": "^3.0.0", + "@loaders.gl/core": "^3.4.13", "@luma.gl/core": "^8.0.0" } }, "node_modules/@deck.gl/mesh-layers": { - "version": "8.8.12", - "resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-8.8.12.tgz", - "integrity": "sha512-HakH3jMGyKmU8MlzdRXxXwMvceiUcfVl6dJPgSsepeJgjMdPn8LZsHbE3oaVIwmO6zx17UnJynAUfuss6nPmAg==", + "version": "8.9.36", + "resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-8.9.36.tgz", + "integrity": "sha512-xQ+OSdU3z3HIgaHJfxbcNIxmWYPUBMJZAM+fAbynojGVzGYLJo2MUjUJLtCsw0Ejs3YtnocyuFRM+zObB0I3jw==", + "license": "MIT", "peer": true, "dependencies": { - "@loaders.gl/gltf": "^3.2.5", - "@luma.gl/constants": "^8.5.16", - "@luma.gl/experimental": "^8.5.16", - "@luma.gl/shadertools": "^8.5.16" + "@babel/runtime": "^7.0.0", + "@loaders.gl/gltf": "^3.4.13", + "@luma.gl/constants": "^8.5.21", + "@luma.gl/experimental": "^8.5.21", + "@luma.gl/shadertools": "^8.5.21" }, "peerDependencies": { "@deck.gl/core": "^8.0.0", @@ -587,9 +461,13 @@ } }, "node_modules/@deck.gl/react": { - "version": "8.8.12", - "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.8.12.tgz", - "integrity": "sha512-04eB6ksUdJYO1cl8Hmg47H1QDUkm81HFHqpmF/4lAuOrwwcrILlS2slbuQPUVvT68dB19W8yQe+3O5xaJZU1mA==", + "version": "8.9.36", + "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.9.36.tgz", + "integrity": "sha512-/WIvHK0aJwppLnpA6GZrOhfanx5WVWihx/o6U88kX53VsyJQMZU10+EXKc1FkI3nd5/jsLbLc8fC0dUtiXiSVw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.0.0" + }, "peerDependencies": { "@deck.gl/core": "^8.0.0", "@types/react": ">= 16.3", @@ -598,779 +476,808 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.10.2", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz", - "integrity": "sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==", + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.0", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.0.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "stylis": "4.2.0" } }, "node_modules/@emotion/cache": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.5.tgz", - "integrity": "sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.1", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.1.3" + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" } }, - "node_modules/@emotion/cache/node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, "node_modules/@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", + "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.0" + "@emotion/memoize": "^0.9.0" } }, "node_modules/@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" }, "node_modules/@emotion/react": { - "version": "11.10.4", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz", - "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.0", - "@emotion/cache": "^11.10.0", - "@emotion/serialize": "^1.1.0", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } } }, "node_modules/@emotion/serialize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", - "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", - "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", "csstype": "^3.0.2" } }, "node_modules/@emotion/sheet": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.1.tgz", - "integrity": "sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" }, "node_modules/@emotion/styled": { - "version": "11.10.4", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.4.tgz", - "integrity": "sha512-pRl4R8Ez3UXvOPfc2bzIoV8u9P97UedgHS4FPX594ntwEuAMA114wlaHvOK24HB48uqfXiGlYIZYCxVJ1R1ttQ==", + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.0", - "@emotion/is-prop-valid": "^1.2.0", - "@emotion/serialize": "^1.1.0", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0" + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" }, "peerDependencies": { - "@babel/core": "^7.0.0", "@emotion/react": "^11.0.0-rc.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } } }, "node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" }, "node_modules/@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } }, "node_modules/@esbuild/android-arm": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz", - "integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz", - "integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz", - "integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz", - "integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz", - "integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz", - "integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz", - "integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz", - "integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz", - "integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz", - "integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz", - "integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz", - "integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz", - "integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz", - "integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz", - "integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz", - "integrity": "sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz", - "integrity": "sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz", - "integrity": "sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz", - "integrity": "sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz", - "integrity": "sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz", - "integrity": "sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@jest/expect-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", - "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", "dependencies": { - "jest-get-type": "^28.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=6.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "node_modules/@loaders.gl/3d-tiles": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-3.4.15.tgz", + "integrity": "sha512-JR67bEfLrD7Lzb6pWyEIRg2L6W3n6y43DKcWofRLpwPqLA7qHuY7SlO7E72Lz7Tniye8VhawqY1wO8gCx8T72Q==", + "license": "MIT", + "dependencies": { + "@loaders.gl/draco": "3.4.15", + "@loaders.gl/gltf": "3.4.15", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/math": "3.4.15", + "@loaders.gl/tiles": "3.4.15", + "@math.gl/core": "^3.5.1", + "@math.gl/geospatial": "^3.5.1", + "long": "^5.2.1" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "@loaders.gl/core": "^3.4.0" } }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@loaders.gl/3d-tiles/node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/@loaders.gl/core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.4.15.tgz", + "integrity": "sha512-rPOOTuusWlRRNMWg7hymZBoFmPCXWThsA5ZYRfqqXnsgVeQIi8hzcAhJ7zDUIFAd/OSR8ravtqb0SH+3k6MOFQ==", + "license": "MIT", + "peer": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@loaders.gl/3d-tiles": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-3.2.9.tgz", - "integrity": "sha512-h5RlXsOzAPjw07vri/cHqAQDA4vWF9jfhw9A2j93RD9gfAftzn0SeO0g04jM9xlZKKRbAS4F5zG9kaftj5HqWQ==", - "dependencies": { - "@loaders.gl/draco": "3.2.9", - "@loaders.gl/gltf": "3.2.9", - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/math": "3.2.9", - "@loaders.gl/tiles": "3.2.9", - "@math.gl/core": "^3.5.1", - "@math.gl/geospatial": "^3.5.1" - }, - "peerDependencies": { - "@loaders.gl/core": "^3.2.0" - } - }, - "node_modules/@loaders.gl/core": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.2.9.tgz", - "integrity": "sha512-dBFtpRUaSZBZ0OVe3ZHkEfDmqizgpb9AUxzUkhsiyTFi3D5Y8xeqFg1x5ftC8OA4+15o0vBQeqJsXFBWiR2ysA==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/worker-utils": "3.2.9", - "@probe.gl/log": "^3.5.0", - "probe.gl": "^3.4.0" + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/worker-utils": "3.4.15", + "@probe.gl/log": "^3.5.0" } }, "node_modules/@loaders.gl/draco": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-3.2.9.tgz", - "integrity": "sha512-WTIlAc0JZLTsi8kGAzdRhqsqo+IZlwGdHyA/T6wJCrA2fpdqYsYB5XHK3ZnM0NtC3cPd2tYhti1j4nurUVMVHQ==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-3.4.15.tgz", + "integrity": "sha512-SStmyP0ZnS4JbWZb2NhrfiHW65uy3pVTTzQDTgXfkR5cD9oDAEu4nCaHbQ8x38/m39FHliCPgS9b1xWvLKQo8w==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/schema": "3.2.9", - "@loaders.gl/worker-utils": "3.2.9", - "draco3d": "1.4.1" + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/schema": "3.4.15", + "@loaders.gl/worker-utils": "3.4.15", + "draco3d": "1.5.5" } }, "node_modules/@loaders.gl/gis": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-3.2.9.tgz", - "integrity": "sha512-322A5Q0nYNSiZUpR9UuaK3qxI0J1fpFEaIDVDjiF18aMxNCQ66g/H/nda/aeriRdNq2q4oJ6l+MrJlpPFUSwng==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-3.4.15.tgz", + "integrity": "sha512-h+LJI35P6ze8DFPSUylTKuml0l4HIfHMczML6u+ZXG6E2w5tbdM3Eh5AzHjXGQPuwUnaYPn3Mq/2t2N1rz98pg==", + "license": "MIT", "dependencies": { - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/schema": "3.2.9", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/schema": "3.4.15", "@mapbox/vector-tile": "^1.3.1", "@math.gl/polygon": "^3.5.1", "pbf": "^3.2.1" } }, "node_modules/@loaders.gl/gltf": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-3.2.9.tgz", - "integrity": "sha512-F5LqR7RR6PRHZpCWJuwQXIUQqCEDpfNMAzBI3iDySJhsOduiJJ7fFYTE0DamsU8ai50sbNnmlgv+WhoEZ/+7+Q==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-3.4.15.tgz", + "integrity": "sha512-Y6kMNPLiHQPr6aWQw/4BMTxgPHWx3fcib4LPpZCbhyfM8PRn6pOqATVngUXdoOf5XY0QtdKVld6N1kxlr4pJtw==", + "license": "MIT", + "peer": true, "dependencies": { - "@loaders.gl/draco": "3.2.9", - "@loaders.gl/images": "3.2.9", - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/textures": "3.2.9" + "@loaders.gl/draco": "3.4.15", + "@loaders.gl/images": "3.4.15", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/textures": "3.4.15", + "@math.gl/core": "^3.5.1" } }, "node_modules/@loaders.gl/images": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.2.9.tgz", - "integrity": "sha512-Akx9lep4zeSXxD9fRtOP6nS+IjzX4dZQ+P7uIXJ0ydqeBNbUjzKtPgkVEtBqYQNUjPXuXvQ0xahVTNatb/2tLg==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.4.15.tgz", + "integrity": "sha512-QpjYhEetHabY/z9mWZYJXZZp4XJAxa38f9Ii/DjPlnJErepzY5GLBUTDHMu4oZ6n99gGImtuGFicDnFV6mb60g==", + "license": "MIT", + "peer": true, "dependencies": { - "@loaders.gl/loader-utils": "3.2.9" + "@loaders.gl/loader-utils": "3.4.15" } }, "node_modules/@loaders.gl/loader-utils": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.2.9.tgz", - "integrity": "sha512-oz5A404HJ7lxRdkH/rdBmZ2hlQfQiyY244N6fLPI456f/9X52XAgAeoGt6WSQsEHpr/x//lsN7hot59NhaYrvA==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.4.15.tgz", + "integrity": "sha512-uUx6tCaky6QgCRkqCNuuXiUfpTzKV+ZlJOf6C9bKp62lpvFOv9AwqoXmL23j8nfsENdlzsX3vPhc3en6QQyksA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", - "@loaders.gl/worker-utils": "3.2.9", + "@loaders.gl/worker-utils": "3.4.15", "@probe.gl/stats": "^3.5.0" } }, "node_modules/@loaders.gl/math": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-3.2.9.tgz", - "integrity": "sha512-wm30jfZosEyzE6791xb+GU70sxtA5w5lsM5bfVU9ObwzmLZrzjKjhNN/McxQ5U03Hsz14TrWokr/oZuWVH2/uQ==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-3.4.15.tgz", + "integrity": "sha512-zTN8BUU/1fcppyVc8WzvdZcCyNGVYmNinxcn/A+a7mi1ug4OBGwEsZOj09Wjg0/s52c/cAL3h9ylPIZdjntscQ==", + "license": "MIT", "dependencies": { - "@loaders.gl/images": "3.2.9", - "@loaders.gl/loader-utils": "3.2.9", + "@loaders.gl/images": "3.4.15", + "@loaders.gl/loader-utils": "3.4.15", "@math.gl/core": "^3.5.1" } }, "node_modules/@loaders.gl/mvt": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/mvt/-/mvt-3.2.9.tgz", - "integrity": "sha512-P4ZK8/nJTNxNqnqkOVxvVw5qmpItnDAbjgqf0ZLFqNw0BTAbs7nHJRcNGtn0olz+2TYPLr3en+1ZtD1bO+/7EQ==", - "dependencies": { - "@loaders.gl/gis": "3.2.9", - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/schema": "3.2.9", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/mvt/-/mvt-3.4.15.tgz", + "integrity": "sha512-Q8e1ZyfNkJtPF/C4WSZ2qhWDEbzOvquP7OyG1NzQ2cp8R6eUfbexu48IgcnL/oAu8VPql3zIxQ+bQUyDReyN5g==", + "license": "MIT", + "dependencies": { + "@loaders.gl/gis": "3.4.15", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/schema": "3.4.15", "@math.gl/polygon": "^3.5.1", "pbf": "^3.2.1" } }, "node_modules/@loaders.gl/schema": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.2.9.tgz", - "integrity": "sha512-Qg/c4/0x3Awtz1EzWwAwyAgXxGHbbCvYdeA7idcpvjPA/xtrBkysEnwbwpbY06+xqJ3lnchkDkyFdCTgqdYjqg==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.4.15.tgz", + "integrity": "sha512-8oRtstz0IsqES7eZd2jQbmCnmExCMtL8T6jWd1+BfmnuyZnQ0B6TNccy++NHtffHdYuzEoQgSELwcdmhSApYew==", + "license": "MIT", "dependencies": { - "@types/geojson": "^7946.0.7", - "apache-arrow": "^4.0.0" + "@types/geojson": "^7946.0.7" } }, "node_modules/@loaders.gl/terrain": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/terrain/-/terrain-3.2.9.tgz", - "integrity": "sha512-3Y1u40/vkITSuPUNIsVX6uafzdTvWZTltP1FLXI8/gRkZWDNGXjkez8qNDsVvlgfz6GP0TqjIlragZ/KSGoTOQ==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/terrain/-/terrain-3.4.15.tgz", + "integrity": "sha512-ouv41J84uOnLEtXLM+iPEPFfeq7aRgIOls6esdvhBx2/dXJRNkt8Mx0wShXAi8VNHz77D+gZFrKARa7wqjmftg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/schema": "3.2.9", + "@loaders.gl/images": "3.4.15", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/schema": "3.4.15", "@mapbox/martini": "^0.2.0" } }, "node_modules/@loaders.gl/textures": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-3.2.9.tgz", - "integrity": "sha512-Sx8vkjlGupe9lhAQp7jxMe6aVI7Ptt5byvs4HXrWKgyiUNxQLR2eSh2xw13VYa4BHu1DHcHEI2EPNIoZ+VivhA==", - "dependencies": { - "@loaders.gl/images": "3.2.9", - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/schema": "3.2.9", - "@loaders.gl/worker-utils": "3.2.9", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-3.4.15.tgz", + "integrity": "sha512-QHnmxBYtLvTdG1uMz2KWcxVY8KPb1+XyPJUoZV9GMcQkulz+CwFB8BaX8nROfMDz9KKYoPfksCzjig0LZ0WBJQ==", + "license": "MIT", + "dependencies": { + "@loaders.gl/images": "3.4.15", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/schema": "3.4.15", + "@loaders.gl/worker-utils": "3.4.15", "ktx-parse": "^0.0.4", "texture-compressor": "^1.0.2" } }, "node_modules/@loaders.gl/tiles": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-3.2.9.tgz", - "integrity": "sha512-noUn1Kk5BZmyfb8hMoZg/cZK46RSayQP9Bh6buNcUecSbKL6HK32/Obhtj4AsDtBExH1AmMcxpfVIkA9JTDoQg==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-3.4.15.tgz", + "integrity": "sha512-o85aRSXq+YeVSK2ndW9aBwTMi5FhEsQ7k18J4DG+T5Oc+zz3tKui5X1SuBDiKbQN+kYtFpj0oYO1QG3ndNI6jg==", + "license": "MIT", "dependencies": { - "@loaders.gl/loader-utils": "3.2.9", - "@loaders.gl/math": "3.2.9", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/math": "3.4.15", "@math.gl/core": "^3.5.1", "@math.gl/culling": "^3.5.1", "@math.gl/geospatial": "^3.5.1", @@ -1378,45 +1285,80 @@ "@probe.gl/stats": "^3.5.0" }, "peerDependencies": { - "@loaders.gl/core": "^3.2.0" + "@loaders.gl/core": "^3.4.0" + } + }, + "node_modules/@loaders.gl/wms": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/wms/-/wms-3.4.15.tgz", + "integrity": "sha512-zY++Oxx+cNGF9ptuSTFxCmEnpRbR5VZYjvyLraylaRbuynZv+JiWrehymFzEfq3hJcQ/cGvIjaG6rSVtPuqCIA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/images": "3.4.15", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/schema": "3.4.15", + "@loaders.gl/xml": "3.4.15", + "@turf/rewind": "^5.1.5", + "deep-strict-equal": "^0.2.0", + "lerc": "^4.0.1" } }, "node_modules/@loaders.gl/worker-utils": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.2.9.tgz", - "integrity": "sha512-x9BnbprVJk23oy4+UbH6Hr3sBdAxjvFUDCecvfM7o0UB1gZTyW9C5miVRkTnJeln9MnbLhjsdmWh+52h1QMbRg==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.4.15.tgz", + "integrity": "sha512-zUUepOYRYmcYIcr/c4Mchox9h5fBFNkD81rsGnLlZyq19QvyHzN+93SVxrLc078gw93t2RKrVcOOZY13zT3t1w==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1" } }, + "node_modules/@loaders.gl/xml": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@loaders.gl/xml/-/xml-3.4.15.tgz", + "integrity": "sha512-iMWHaDzYSe8JoS8W5k9IbxQ6S3VHPr7M+UBejIVeYGCp1jzWF0ri498olwJWWDRvg4kqAWolrkj8Pcgkg8Jf8A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.4.15", + "@loaders.gl/schema": "3.4.15", + "fast-xml-parser": "^4.2.5" + } + }, "node_modules/@luma.gl/constants": { - "version": "8.5.17", - "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.17.tgz", - "integrity": "sha512-8jD2aDgFa04HtWuj5ZyZm4h+hz2HI+1gcrab4uQp3qq75iAQXg62Tu68mTcoL8xWehmJntNCkLbnkkuTdFsOAQ==" + "version": "8.5.21", + "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.21.tgz", + "integrity": "sha512-aJxayGxTT+IRd1vfpcgD/cKSCiVJjBNiuiChS96VulrmCvkzUOLvYXr42y5qKB4RyR7vOIda5uQprNzoHrhQAA==", + "license": "MIT", + "peer": true }, "node_modules/@luma.gl/core": { - "version": "8.5.17", - "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.17.tgz", - "integrity": "sha512-bvnySRyyRFkxEg9rmgyC4HWQmakIMax43RMbn9cEma9A8VnHwQ252nGAJhKzz07kg+70jTiNlXogWvNKGlIc1w==", + "version": "8.5.21", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.21.tgz", + "integrity": "sha512-11jQJQEMoR/IN2oIsd4zFxiQJk6FE+xgVIMUcsCTBuzafTtQZ8Po9df8mt+MVewpDyBlTVs6g8nxHRH4np1ukA==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.17", - "@luma.gl/engine": "8.5.17", - "@luma.gl/gltools": "8.5.17", - "@luma.gl/shadertools": "8.5.17", - "@luma.gl/webgl": "8.5.17" + "@luma.gl/constants": "8.5.21", + "@luma.gl/engine": "8.5.21", + "@luma.gl/gltools": "8.5.21", + "@luma.gl/shadertools": "8.5.21", + "@luma.gl/webgl": "8.5.21" } }, "node_modules/@luma.gl/engine": { - "version": "8.5.17", - "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.17.tgz", - "integrity": "sha512-XyYYBUKj23P6e9VH+vJ7vEZe/5IH80DZkst4qQABJIBAXg/0dUf2QxST5PNbokOT4SrmuM5As5a2QUrmcUmGiw==", + "version": "8.5.21", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.21.tgz", + "integrity": "sha512-IG3WQSKXFNUEs8QG7ZjHtGiOtsakUu+BAxtJ6997A6/F06yynZ44tPe5NU70jG9Yfu3kV0LykPZg7hO3vXZDiA==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.17", - "@luma.gl/gltools": "8.5.17", - "@luma.gl/shadertools": "8.5.17", - "@luma.gl/webgl": "8.5.17", + "@luma.gl/constants": "8.5.21", + "@luma.gl/gltools": "8.5.21", + "@luma.gl/shadertools": "8.5.21", + "@luma.gl/webgl": "8.5.21", "@math.gl/core": "^3.5.0", "@probe.gl/env": "^3.5.0", "@probe.gl/stats": "^3.5.0", @@ -1424,11 +1366,12 @@ } }, "node_modules/@luma.gl/experimental": { - "version": "8.5.17", - "resolved": "https://registry.npmjs.org/@luma.gl/experimental/-/experimental-8.5.17.tgz", - "integrity": "sha512-vYW9ovkSMjkyqEyuQn+wztwOwEqZnzKlvwzBIXIXoHrgnwErFovHE6toipj/XY0CAAS39UMh2weRkZJ8R+uAUA==", + "version": "8.5.21", + "resolved": "https://registry.npmjs.org/@luma.gl/experimental/-/experimental-8.5.21.tgz", + "integrity": "sha512-uFKPChGofyihOKxtqJy78QCQCDFnuMTK4QHrUX/qiTnvFSO8BgtTUevKvWGN9lBvq+uDD0lSieeF9yBzhQfAzw==", + "license": "MIT", "dependencies": { - "@luma.gl/constants": "8.5.17", + "@luma.gl/constants": "8.5.21", "@math.gl/core": "^3.5.0", "earcut": "^2.0.6" }, @@ -1442,34 +1385,40 @@ } }, "node_modules/@luma.gl/gltools": { - "version": "8.5.17", - "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.17.tgz", - "integrity": "sha512-ikrhwDcTBxxHFRvpCYFjm0HW9l2G2tueD4BV2UpWIl4u8rVTCG98nkypymU8HvF2W6zdvrOwna7Ha2vG4egX1Q==", + "version": "8.5.21", + "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.21.tgz", + "integrity": "sha512-6qZ0LaT2Mxa4AJT5F44TFoaziokYiHUwO45vnM/NYUOIu9xevcmS6VtToawytMEACGL6PDeDyVqP3Y80SDzq5g==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.17", + "@luma.gl/constants": "8.5.21", "@probe.gl/env": "^3.5.0", "@probe.gl/log": "^3.5.0", "@types/offscreencanvas": "^2019.7.0" } }, "node_modules/@luma.gl/shadertools": { - "version": "8.5.17", - "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.17.tgz", - "integrity": "sha512-lpCjdutWx3i8qeroH9jPCGyCFvLguLaccQ0d7PCLeFD2eQrN/KuDzgka2V3PHgW1M9Wjph+c0RlaFc6NOuRokQ==", + "version": "8.5.21", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.21.tgz", + "integrity": "sha512-WQah7yFDJ8cNCLPYpIm3r0wSlXLvjoA279fcknmATvvkW3/i8PcCJ/nYEBJO3hHEwwMQxD16+YZu/uwGiifLMg==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.0.0", "@math.gl/core": "^3.5.0" } }, "node_modules/@luma.gl/webgl": { - "version": "8.5.17", - "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.17.tgz", - "integrity": "sha512-z9uzRO7i1Y5i3D729x+eE1EjistEn1Ni3S+3RMJEHx6zPfs3WyiDc20B1ul+wk6vX0ukQWihLGCF6AIRdenktA==", + "version": "8.5.21", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.21.tgz", + "integrity": "sha512-ZVLO4W5UuaOlzZIwmFWhnmZ1gYoU97a+heMqxLrSSmCUAsSu3ZETUex9gOmzdM1WWxcdWaa3M68rvKCNEgwz0Q==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.17", - "@luma.gl/gltools": "8.5.17", + "@luma.gl/constants": "8.5.21", + "@luma.gl/gltools": "8.5.21", "@probe.gl/env": "^3.5.0", "@probe.gl/stats": "^3.5.0" } @@ -1478,6 +1427,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", "dependencies": { "get-stream": "^6.0.1", "minimist": "^1.2.6" @@ -1486,22 +1436,6 @@ "geojson-rewind": "geojson-rewind" } }, - "node_modules/@mapbox/geojson-rewind/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/geojson-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", - "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" - }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", @@ -1513,32 +1447,38 @@ "node_modules/@mapbox/mapbox-gl-supported": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz", - "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==" + "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==", + "license": "BSD-3-Clause" }, "node_modules/@mapbox/martini": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@mapbox/martini/-/martini-0.2.0.tgz", - "integrity": "sha512-7hFhtkb0KTLEls+TRw/rWayq5EeHtTaErgm/NskVoXmtgAQu/9D299aeyj6mzAR/6XUnYRp2lU+4IcrYRFjVsQ==" + "integrity": "sha512-7hFhtkb0KTLEls+TRw/rWayq5EeHtTaErgm/NskVoXmtgAQu/9D299aeyj6mzAR/6XUnYRp2lU+4IcrYRFjVsQ==", + "license": "ISC" }, "node_modules/@mapbox/point-geometry": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" }, "node_modules/@mapbox/tiny-sdf": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", - "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.7.tgz", + "integrity": "sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==", + "license": "BSD-2-Clause" }, "node_modules/@mapbox/unitbezier": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", - "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", "dependencies": { "@mapbox/point-geometry": "~0.1.0" } @@ -1547,6 +1487,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", "engines": { "node": ">=6.0.0" } @@ -1555,6 +1496,8 @@ "version": "3.6.3", "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.12.0", "@math.gl/types": "3.6.3", @@ -1565,6 +1508,7 @@ "version": "3.6.3", "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-3.6.3.tgz", "integrity": "sha512-3UERXHbaPlM6pnTk2MI7LeQ5CoelDZzDzghTTcv+HdQCZsT/EOEuEdYimETHtSxiyiOmsX2Un65UBLYT/rbKZg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.0", "@math.gl/core": "3.6.3", @@ -1575,6 +1519,7 @@ "version": "3.6.3", "resolved": "https://registry.npmjs.org/@math.gl/geospatial/-/geospatial-3.6.3.tgz", "integrity": "sha512-6xf657lJnaecSarSzn02t0cnsCSkWb+39m4+im96v20dZTrLCWZ2glDQVzfuL91meDnDXjH4oyvynp12Mj5MFg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.0", "@math.gl/core": "3.6.3", @@ -1585,6 +1530,7 @@ "version": "3.6.3", "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.6.3.tgz", "integrity": "sha512-FivQ1ZnYcAss1wVifOkHP/ZnlfQy1IL/769uzNtiHxwUbW0kZG3yyOZ9I7fwyzR5Hvqt3ErJKHjSYZr0uVlz5g==", + "license": "MIT", "dependencies": { "@math.gl/core": "3.6.3" } @@ -1593,6 +1539,7 @@ "version": "3.6.3", "resolved": "https://registry.npmjs.org/@math.gl/sun/-/sun-3.6.3.tgz", "integrity": "sha512-mrx6CGYYeTNSQttvcw0KVUy+35YDmnjMqpO/o0t06Vcghrt0HNruB/ScRgUSbJrgkbOg1Vcqm23HBd++clzQzw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.0" } @@ -1600,81 +1547,49 @@ "node_modules/@math.gl/types": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-3.6.3.tgz", - "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==" + "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==", + "license": "MIT" }, "node_modules/@math.gl/web-mercator": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz", "integrity": "sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==", + "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.12.0", "gl-matrix": "^3.4.0" } }, - "node_modules/@mui/base": { - "version": "5.0.0-alpha.123", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.123.tgz", - "integrity": "sha512-pxzcAfET3I6jvWqS4kijiLMn1OmdMw+mGmDa0SqmDZo3bXXdvLhpCCPqCkULG3UykhvFCOcU5HclOX3JCA+Zhg==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.0", - "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.13", - "@popperjs/core": "^2.11.7", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/base/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.11.15", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.15.tgz", - "integrity": "sha512-Q0e2oBsjHyIWWj1wLzl14btunvBYC0yl+px7zL9R69tF87uenj6q72ieS369BJ6jxYpJwvXfR6/f+TC+ZUsKKg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.18.0.tgz", + "integrity": "sha512-jbhwoQ1AY200PSSOrNXmrFCaSDSJWP7qk6urkTmIirvRXDROkqe+QwcLlUiw/PrREwsIF/vm3/dAXvjlMHF0RA==", + "license": "MIT", "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.11.11", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.11.tgz", - "integrity": "sha512-Eell3ADmQVE8HOpt/LZ3zIma8JSvPh3XgnhwZLT0k5HRqZcd6F/QDHc7xsWtgz09t+UEFvOYJXjtrwKmLdwwpw==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.18.0.tgz", + "integrity": "sha512-1s0vEZj5XFXDMmz3Arl/R7IncFqJ+WQ95LDp1roHWGDE2oCO3IS4/hmiOv1/8SD9r6B7tv9GLiqVZYHo+6PkTg==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0" + "@babel/runtime": "^7.23.9" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@mui/material": "^5.0.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1683,21 +1598,23 @@ } }, "node_modules/@mui/material": { - "version": "5.11.15", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.15.tgz", - "integrity": "sha512-E5RbLq9/OvRKmGyeZawdnmFBCvhKkI/Zqgr0xFqW27TGwKLxObq/BreJc6Uu5Sbv8Fjj34vEAbRx6otfOyxn5w==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-alpha.123", - "@mui/core-downloads-tracker": "^5.11.15", - "@mui/system": "^5.11.15", - "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.13", - "@types/react-transition-group": "^4.4.5", - "clsx": "^1.2.1", - "csstype": "^3.1.1", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.18.0.tgz", + "integrity": "sha512-bbH/HaJZpFtXGvWg3TsBWG4eyt3gah3E7nCNU8GLyRjVoWcA91Vm/T+sjHfUcwgJSw9iLtucfHBoq+qW/T30aA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/core-downloads-tracker": "^5.18.0", + "@mui/system": "^5.18.0", + "@mui/types": "~7.2.15", + "@mui/utils": "^5.17.1", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.2.0", + "react-is": "^19.0.0", "react-transition-group": "^4.4.5" }, "engines": { @@ -1705,14 +1622,14 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -1726,18 +1643,14 @@ } } }, - "node_modules/@mui/material/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/@mui/private-theming": { - "version": "5.11.13", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.13.tgz", - "integrity": "sha512-PJnYNKzW5LIx3R+Zsp6WZVPs6w5sEKJ7mgLNnUXuYB1zo5aX71FVLtV7geyPXRcaN2tsoRNK7h444ED0t7cIjA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.17.1.tgz", + "integrity": "sha512-XMxU0NTYcKqdsG8LRmSoxERPXwMbp16sIXPcLVgLGII/bVNagX0xaheWAwFv8+zDK7tI3ajllkuD3GZZE++ICQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.11.13", + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.17.1", "prop-types": "^15.8.1" }, "engines": { @@ -1745,11 +1658,11 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1758,13 +1671,15 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.11.11", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.11.tgz", - "integrity": "sha512-wV0UgW4lN5FkDBXefN8eTYeuE9sjyQdg5h94vtwZCUamGQEzmCOtir4AakgmbWMy0x8OLjdEUESn9wnf5J9MOg==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/cache": "^11.10.5", - "csstype": "^3.1.1", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.18.0.tgz", + "integrity": "sha512-BN/vKV/O6uaQh2z5rXV+MBlVrEkwoS/TK75rFQ2mjxA7+NBo8qtTAOA4UaM0XeJfn7kh2wZ+xQw2HAx0u+TiBg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -1772,12 +1687,12 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -1789,17 +1704,19 @@ } }, "node_modules/@mui/system": { - "version": "5.11.15", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.15.tgz", - "integrity": "sha512-vCatoWCTnAPquoNifHbqMCMnOElEbLosVUeW0FQDyjCq+8yMABD9E6iY0s14O7iq1wD+qqU7rFAuDIVvJ/AzzA==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/private-theming": "^5.11.13", - "@mui/styled-engine": "^5.11.11", - "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.13", - "clsx": "^1.2.1", - "csstype": "^3.1.1", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.18.0.tgz", + "integrity": "sha512-ojZGVcRWqWhu557cdO3pWHloIGJdzVtxs3rk0F9L+x55LsUjcMUVkEhiF7E4TMxZoF9MmIHGGs0ZX3FDLAf0Xw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.17.1", + "@mui/styled-engine": "^5.18.0", + "@mui/types": "~7.2.15", + "@mui/utils": "^5.17.1", + "clsx": "^2.1.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -1807,13 +1724,13 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -1828,11 +1745,12 @@ } }, "node_modules/@mui/types": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", - "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", + "version": "7.2.24", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz", + "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==", + "license": "MIT", "peerDependencies": { - "@types/react": "*" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1841,42 +1759,46 @@ } }, "node_modules/@mui/utils": { - "version": "5.11.13", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.13.tgz", - "integrity": "sha512-5ltA58MM9euOuUcnvwFJqpLdEugc9XFsRR8Gt4zZNb31XzMfSKJPR4eumulyhsOTK1rWf7K4D63NKFPfX0AxqA==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^16.7.1 || ^17.0.0", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.17.1.tgz", + "integrity": "sha512-jEZ8FTqInt2WzxDV8bhImWBqeQRD99c/id/fq83H0ER9tFl+sfZlaAoCdznGvbSQQ9ividMxqSV2c7cC1vBcQg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/types": "~7.2.15", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "react-is": "^19.0.0" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@mui/utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/@mui/x-data-grid": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.0.4.tgz", - "integrity": "sha512-SPkxmPhVU0hJEun/Ju5do5CPVzJj4NHT5XEPpfvDyVhHR4p4ax/EiXbtmLBl5d+D/tA8uaLEK0PUQWBLC8JNQA==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.11.13", - "clsx": "^1.2.1", + "version": "6.20.4", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-6.20.4.tgz", + "integrity": "sha512-I0JhinVV4e25hD2dB+R6biPBtpGeFrXf8RwlMPQbr9gUggPmPmNtWKo8Kk2PtBBMlGtdMAgHWe7PqhmucUxU1w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@mui/utils": "^5.14.16", + "clsx": "^2.0.0", "prop-types": "^15.8.1", - "reselect": "^4.1.7" + "reselect": "^4.1.8" }, "engines": { "node": ">=14.0.0" @@ -1888,14 +1810,15 @@ "peerDependencies": { "@mui/material": "^5.4.1", "@mui/system": "^5.4.1", - "react": "^17.0.2 || ^18.0.0", - "react-dom": "^17.0.2 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" } }, "node_modules/@nebula.gl/edit-modes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@nebula.gl/edit-modes/-/edit-modes-1.0.4.tgz", "integrity": "sha512-x0t73q2wmiVLK15+0DnkpsO7e7L69dZ/3xISEZlo/2pEJc0op2UCJ7BynRyuZq6Bb8ZvwJCVjyspaUGYQqabNg==", + "license": "MIT", "dependencies": { "@turf/along": ">=6.3.0", "@turf/area": ">=4.0.0", @@ -1932,6 +1855,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/@nebula.gl/layers/-/layers-1.0.4.tgz", "integrity": "sha512-jwBGvQK7iIdq05DWl5q7vOIhpU+rVFhR+y30G1P5toz/SD9z3Qadfm2SYDgIcX36Ez45mJMKVllY7hLEG1tSRA==", + "license": "MIT", "dependencies": { "@danmarshall/deckgl-typings": "4.9.12", "@nebula.gl/edit-modes": "1.0.4", @@ -1974,1572 +1898,2136 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@probe.gl/env": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.5.2.tgz", - "integrity": "sha512-JlNvJ2p6+ObWX7es6n3TycGPTv5CfVrCS8vblI1eHhrFCcZ6RxIo727ffRVwldpp0YTzdgjx3/4fB/1dnVYElw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", + "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0" } }, "node_modules/@probe.gl/log": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.5.2.tgz", - "integrity": "sha512-5yo8Dg8LrSltuPBdGlLh/WOvt4LdU7DDHu75GMeiS0fKM+J4IACRpGV8SOrktCj1MWZ6JVHcNQkJnoyZ6G7p/w==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.6.0.tgz", + "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.5.2" + "@probe.gl/env": "3.6.0" } }, "node_modules/@probe.gl/stats": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.5.2.tgz", - "integrity": "sha512-YKaYXiHF//fgy1OkX38JD70Lc8qxg2Viw8Q2CTNMwGPDJe12wda7kEmMKPJNw2oYLyFUfTzv00KJMA5h18z02w==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.6.0.tgz", + "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0" } }, "node_modules/@remix-run/router": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.2.tgz", - "integrity": "sha512-GRSOFhJzjGN+d4sKHTMSvNeUPoZiDHWmRnXfzaxrqe7dE/Nzlc8BiMSJdLDESZlndM7jIUrZ/F4yWqVYlI0rwQ==", + "version": "1.23.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.1.tgz", + "integrity": "sha512-vDbaOzF7yT2Qs4vO6XV1MHcJv+3dgR1sT+l3B8xxOVhUC336prMvqrvsLL/9Dnw2xr6Qhz4J0dmS0llNAbnUmQ==", + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=14.0.0" } }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", + "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", + "dev": true, + "license": "MIT" + }, "node_modules/@rollup/plugin-inject": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", - "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", "dev": true, + "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "estree-walker": "^2.0.1", - "magic-string": "^0.25.7" + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/plugin-inject/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" }, "engines": { - "node": ">= 8.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", + "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@sinclair/typebox": { - "version": "0.24.44", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz", - "integrity": "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==" + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", + "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@turf/along": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/along/-/along-6.5.0.tgz", - "integrity": "sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", + "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@turf/area": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", - "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", + "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@turf/bbox": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", - "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", + "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@turf/bbox-polygon": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-6.5.0.tgz", - "integrity": "sha512-+/r0NyL1lOG3zKZmmf6L8ommU07HliP4dgYToMoTxqzsWzyLjaj/OzgQ8rBmv703WJX+aS6yCmLuIhYqyufyuw==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", + "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] }, - "node_modules/@turf/bearing": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz", - "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", + "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@turf/boolean-clockwise": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-6.5.0.tgz", - "integrity": "sha512-45+C7LC5RMbRWrxh3Z0Eihsc8db1VGBO5d9BLTOAwU4jR6SgsunTfRWR16X7JUwIDYlCVEmnjcXJNi/kIU3VIw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", + "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@turf/boolean-point-in-polygon": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz", - "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", + "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", + "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", + "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", + "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", + "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", + "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", + "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", + "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", + "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", + "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", + "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", + "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", + "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", + "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@turf/along": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/along/-/along-7.3.1.tgz", + "integrity": "sha512-z84b9PKsUB69BhkeHA6oPqRO7VaJHwTid1SpuIbwWzDqHTpq8buJBKlrKgHIIthuVr5P/AZiEXmf3R4ifRhDmw==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.3.1", + "@turf/destination": "7.3.1", + "@turf/distance": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/buffer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-6.5.0.tgz", - "integrity": "sha512-qeX4N6+PPWbKqp1AVkBVWFerGjMYMUyencwfnkCesoznU6qvfugFHNAngNqIBVnJjZ5n8IFyOf+akcxnrt9sNg==", + "node_modules/@turf/along/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/center": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/projection": "^6.5.0", - "d3-geo": "1.7.1", - "turf-jsts": "*" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/buffer/node_modules/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "node_modules/@turf/buffer/node_modules/d3-geo": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", - "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==", + "node_modules/@turf/along/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "d3-array": "1" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/center": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/center/-/center-6.5.0.tgz", - "integrity": "sha512-T8KtMTfSATWcAX088rEDKjyvQCBkUsLnK/Txb6/8WUXIeOZyHu42G7MkdkHRoHtwieLdduDdmPLFyTdG5/e7ZQ==", + "node_modules/@turf/area": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.3.1.tgz", + "integrity": "sha512-9nSiwt4zB5QDMcSoTxF28WpK1f741MNKcpUJDiHVRX08CZ4qfGWGV9ZIPQ8TVEn5RE4LyYkFuQ47Z9pdEUZE9Q==", + "license": "MIT", "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/helpers": "^6.5.0" + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/centroid": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-6.5.0.tgz", - "integrity": "sha512-MwE1oq5E3isewPprEClbfU5pXljIK/GUOMbn22UM3IFPDJX0KeoyLNwghszkdmFp/qMGL/M13MMWvU+GNLXP/A==", + "node_modules/@turf/area/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/circle": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-6.5.0.tgz", - "integrity": "sha512-oU1+Kq9DgRnoSbWFHKnnUdTmtcRUMmHoV9DjTXu9vOLNV5OWtAAh1VZ+mzsioGGzoDNT/V5igbFOkMfBQc0B6A==", + "node_modules/@turf/area/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "@turf/destination": "^6.5.0", - "@turf/helpers": "^6.5.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/clone": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-6.5.0.tgz", - "integrity": "sha512-mzVtTFj/QycXOn6ig+annKrM6ZlimreKYz6f/GSERytOpgzodbQyOgkfwru100O1KQhhjSudKK4DsQ0oyi9cTw==", + "node_modules/@turf/bbox": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.1.tgz", + "integrity": "sha512-/IyMKoS7P9B0ch5PIlQ6gMfoE8gRr48+cSbzlyexvEjuDuaAV1VURjH1jAthS0ipFG8RrFxFJKnp7TLL1Skong==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0" + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/destination": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz", - "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==", + "node_modules/@turf/bbox-polygon": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/bbox-polygon/-/bbox-polygon-7.3.1.tgz", + "integrity": "sha512-2NvwPfuRtwJk7w5HIC/Knei3mUXrVT+t/0FB1zStgDbakmXrqKISaftlIh4YTOVlUsVnvq0tggjFMLZ/Xxo+lQ==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/difference": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.5.0.tgz", - "integrity": "sha512-l8iR5uJqvI+5Fs6leNbhPY5t/a3vipUF/3AeVLpwPQcgmedNXyheYuy07PcMGH5Jdpi5gItOiTqwiU/bUH4b3A==", + "node_modules/@turf/bbox-polygon/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "polygon-clipping": "^0.15.3" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/distance": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz", - "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==", + "node_modules/@turf/bbox/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/ellipse": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-6.5.0.tgz", - "integrity": "sha512-kuXtwFviw/JqnyJXF1mrR/cb496zDTSbGKtSiolWMNImYzGGkbsAsFTjwJYgD7+4FixHjp0uQPzo70KDf3AIBw==", + "node_modules/@turf/bbox/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0", - "@turf/transform-rotate": "^6.5.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/helpers": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", - "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", + "node_modules/@turf/bearing": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-7.3.1.tgz", + "integrity": "sha512-ex78l/LiY6uO6jO8AJepyWE6/tiWEbXjKLOgqUfJSkW23UcMVlhbAKzXDjbsdz9T66sXFC/6QNAh8oaZzmoo6w==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/intersect": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-6.5.0.tgz", - "integrity": "sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg==", + "node_modules/@turf/bearing/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "polygon-clipping": "^0.15.3" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/invariant": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", - "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", + "node_modules/@turf/bearing/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-intersect": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz", - "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==", + "node_modules/@turf/boolean-clockwise": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-5.1.5.tgz", + "integrity": "sha512-FqbmEEOJ4rU4/2t7FKx0HUWmjFEVqR+NJrFP7ymGSjja2SQ7Q91nnBihGuT+yuHHl6ElMjQ3ttsB/eTmyCycxA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "node_modules/@turf/boolean-point-in-polygon": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.3.1.tgz", + "integrity": "sha512-BUPW63vE43LctwkgannjmEFTX1KFR/18SS7WzFahJWK1ZoP0s1jrfxGX+pi0BH/3Dd9mA71hkGKDDnj1Ndcz0g==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-segment": "^6.5.0", - "@turf/meta": "^6.5.0", - "geojson-rbush": "3.x" + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "point-in-polygon-hao": "^1.1.0", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/line-segment": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz", - "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==", + "node_modules/@turf/boolean-point-in-polygon/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/meta": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", - "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", + "node_modules/@turf/boolean-point-in-polygon/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/midpoint": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-6.5.0.tgz", - "integrity": "sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0" + "node_modules/@turf/buffer": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/buffer/-/buffer-7.3.1.tgz", + "integrity": "sha512-jtdI0Ir3GwPyY1V2dFX039HNhD8MIYLX39c7b9AZdLh7kBuD2VgXJmPvhtnivqMV2SmRlS4fd9cKzNj369/cGg==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.3.1", + "@turf/center": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/jsts": "^2.7.1", + "@turf/meta": "7.3.1", + "@turf/projection": "7.3.1", + "@types/geojson": "^7946.0.10", + "d3-geo": "1.7.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/nearest-point-on-line": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz", - "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==", + "node_modules/@turf/buffer/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/meta": "^6.5.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/point-to-line-distance": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-6.5.0.tgz", - "integrity": "sha512-opHVQ4vjUhNBly1bob6RWy+F+hsZDH9SA0UW36pIRzfpu27qipU18xup0XXEePfY6+wvhF6yL/WgCO2IbrLqEA==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/projection": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0", - "@turf/rhumb-distance": "^6.5.0" + "node_modules/@turf/buffer/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/polygon-to-line": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-6.5.0.tgz", - "integrity": "sha512-5p4n/ij97EIttAq+ewSnKt0ruvuM+LIDzuczSzuHTpq4oS7Oq8yqg5TQ4nzMVuK41r/tALCk7nAoBuw3Su4Gcw==", + "node_modules/@turf/center": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/center/-/center-7.3.1.tgz", + "integrity": "sha512-czqNKLGGdik3phYsWCK5SHKBRkDulUArMlG4v62IQcNcRFq9MbOGqyN21GSshSMO792ynDeWzdXdcKmycQ14Yg==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" + "@turf/bbox": "7.3.1", + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/projection": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-6.5.0.tgz", - "integrity": "sha512-/Pgh9mDvQWWu8HRxqpM+tKz8OzgauV+DiOcr3FCjD6ubDnrrmMJlsf6fFJmggw93mtVPrZRL6yyi9aYCQBOIvg==", + "node_modules/@turf/center/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rewind": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-6.5.0.tgz", - "integrity": "sha512-IoUAMcHWotBWYwSYuYypw/LlqZmO+wcBpn8ysrBNbazkFNkLf3btSDZMkKJO/bvOzl55imr/Xj4fi3DdsLsbzQ==", + "node_modules/@turf/centroid": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.3.1.tgz", + "integrity": "sha512-hRnsDdVBH4pX9mAjYympb2q5W8TCMUMNEjcRrAF7HTCyjIuRmjJf8vUtlzf7TTn9RXbsvPc1vtm3kLw20Jm8DQ==", + "license": "MIT", "dependencies": { - "@turf/boolean-clockwise": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rhumb-bearing": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-6.5.0.tgz", - "integrity": "sha512-jMyqiMRK4hzREjQmnLXmkJ+VTNTx1ii8vuqRwJPcTlKbNWfjDz/5JqJlb5NaFDcdMpftWovkW5GevfnuzHnOYA==", + "node_modules/@turf/centroid/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rhumb-destination": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-6.5.0.tgz", - "integrity": "sha512-RHNP1Oy+7xTTdRrTt375jOZeHceFbjwohPHlr9Hf68VdHHPMAWgAKqiX2YgSWDcvECVmiGaBKWus1Df+N7eE4Q==", + "node_modules/@turf/centroid/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/rhumb-distance": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-6.5.0.tgz", - "integrity": "sha512-oKp8KFE8E4huC2Z1a1KNcFwjVOqa99isxNOwfo4g3SUABQ6NezjKDDrnvC4yI5YZ3/huDjULLBvhed45xdCrzg==", + "node_modules/@turf/circle": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/circle/-/circle-7.3.1.tgz", + "integrity": "sha512-UY2OM1OK7IuyrtN3YE8026ZM3xM9VIkqZ0vRZln8g33D0AogrJVJ/I9T81/VpRPlxTnrbDpzQxJQBH+3vPG/Ow==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" + "@turf/destination": "7.3.1", + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/transform-rotate": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-6.5.0.tgz", - "integrity": "sha512-A2Ip1v4246ZmpssxpcL0hhiVBEf4L8lGnSPWTgSv5bWBEoya2fa/0SnFX9xJgP40rMP+ZzRaCN37vLHbv1Guag==", - "dependencies": { - "@turf/centroid": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0", - "@turf/rhumb-distance": "^6.5.0" + "node_modules/@turf/circle/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/transform-scale": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-6.5.0.tgz", - "integrity": "sha512-VsATGXC9rYM8qTjbQJ/P7BswKWXHdnSJ35JlV4OsZyHBMxJQHftvmZJsFbOqVtQnIQIzf2OAly6rfzVV9QLr7g==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/center": "^6.5.0", - "@turf/centroid": "^6.5.0", - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/rhumb-bearing": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0", - "@turf/rhumb-distance": "^6.5.0" + "node_modules/@turf/clone": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-5.1.5.tgz", + "integrity": "sha512-//pITsQ8xUdcQ9pVb4JqXiSqG4dos5Q9N4sYFoWghX21tfOV2dhc5TGqYOhnHrQS7RiKQL1vQ48kIK34gQ5oRg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "^5.1.5" + } + }, + "node_modules/@turf/destination": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-7.3.1.tgz", + "integrity": "sha512-yyiJtbQJ4AB9Ny/FKDDNuWI9Sg4Jtd2PMpQPqOV3AFq8NNkg0xJSNmDHDxupb3oPqPWYPxyfVI3tBoF+Xhhoig==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/transform-translate": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-6.5.0.tgz", - "integrity": "sha512-NABLw5VdtJt/9vSstChp93pc6oel4qXEos56RBMsPlYB8hzNTEKYtC146XJvyF4twJeeYS8RVe1u7KhoFwEM5w==", + "node_modules/@turf/destination/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@turf/clone": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/rhumb-destination": "^6.5.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@turf/union": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.5.0.tgz", - "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==", + "node_modules/@turf/destination/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "polygon-clipping": "^0.15.3" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, - "node_modules/@types/clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/clone/-/clone-2.1.1.tgz", - "integrity": "sha512-BZIU34bSYye0j/BFcPraiDZ5ka6MJADjcDVELGf7glr9K+iE8NYVjFslJFVWzskSxkLLyCrSPScE82/UUoBSvg==" - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/flatbuffers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", - "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" - }, - "node_modules/@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" - }, - "node_modules/@types/hammerjs": { - "version": "2.0.41", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", - "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + "node_modules/@turf/difference": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-7.3.1.tgz", + "integrity": "sha512-Ne2AR+1AdeH8aqY2VHcws+Z/1MHl8SlSbSWHBNVZUVEfvyzTrRg8/E+OC5vFaSUvNZXkB/OUufTCM9xsatLKXQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "polyclip-ts": "^0.16.8", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "node_modules/@turf/difference/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/@turf/difference/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "node_modules/@turf/distance": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-7.3.1.tgz", + "integrity": "sha512-DK//doTGgYYjBkcWUywAe7wbZYcdP97hdEJ6rXYVYRoULwGGR3lhY96GNjozg6gaW9q2eSNYnZLpcL5iFVHqgw==", + "license": "MIT", "dependencies": { - "@types/istanbul-lib-report": "*" + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@types/jest": { - "version": "28.1.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.8.tgz", - "integrity": "sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw==", + "node_modules/@turf/distance/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "expect": "^28.0.0", - "pretty-format": "^28.0.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@types/mapbox-gl": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-2.7.6.tgz", - "integrity": "sha512-EPIfNO7WApXaFM7DuJBj+kpXmqffqJHMJ3Q9gbV/nNL23XHR0PC5CCDYbAFa4tKErm0xJd9C5kPLF6KvA/cRcA==", + "node_modules/@turf/distance/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "@types/geojson": "*" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@types/node": { - "version": "18.8.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.3.tgz", - "integrity": "sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w==" + "node_modules/@turf/ellipse": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/ellipse/-/ellipse-7.3.1.tgz", + "integrity": "sha512-tcGbS+U7EktZg+UJad17LRU+8C067XDWdmURPCmycaib2zRxeNrImh2Y/589us6wsldlYYoBYRxDY/c1oxIUCA==", + "license": "MIT", + "dependencies": { + "@turf/destination": "7.3.1", + "@turf/distance": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@turf/transform-rotate": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/@types/offscreencanvas": { - "version": "2019.7.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", - "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" + "node_modules/@turf/ellipse/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "node_modules/@turf/ellipse/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "node_modules/@turf/helpers": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-5.1.5.tgz", + "integrity": "sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==", + "license": "MIT" }, - "node_modules/@types/react": { - "version": "17.0.50", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.50.tgz", - "integrity": "sha512-ZCBHzpDb5skMnc1zFXAXnL3l1FAdi+xZvwxK+PkglMmBrwjpp9nKaWuEvrGnSifCJmBFGxZOOFuwC6KH/s0NuA==", + "node_modules/@turf/intersect": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-7.3.1.tgz", + "integrity": "sha512-676688YnF9wpprMioQWvxPlUMhtTvYITzw4XoG3lQmLjd/yt2cByanQHWpzWauLfYUlfuL13AeRGdqXRhSkhTQ==", + "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "polyclip-ts": "^0.16.8", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@types/react-dom": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", - "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "node_modules/@turf/intersect/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@types/react": "*" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "node_modules/@turf/intersect/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "@types/react": "*" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "node_modules/@turf/invariant": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-5.2.0.tgz", + "integrity": "sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==", + "license": "MIT", "dependencies": { - "@types/react": "*" + "@turf/helpers": "^5.1.5" } }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" - }, - "node_modules/@types/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" - }, - "node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "node_modules/@turf/jsts": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@turf/jsts/-/jsts-2.7.2.tgz", + "integrity": "sha512-zAezGlwWHPyU0zxwcX2wQY3RkRpwuoBmhhNE9HY9kWhFDkCxZ3aWK5URKwa/SWKJbj9aztO+8vtdiBA28KVJFg==", + "license": "(EDL-1.0 OR EPL-1.0)", "dependencies": { - "@types/yargs-parser": "*" + "jsts": "2.7.1" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, + "node_modules/@turf/line-intersect": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-7.3.1.tgz", + "integrity": "sha512-HFPH4Hi+rG7XZ5rijkYL5C9JGVKd6gz6TToShVfqOt/qgGY9/bLYQxymgum/MG7sRhIa8xcKff2d57JrIVuSWA==", + "license": "MIT", "dependencies": { - "@types/node": "*" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "sweepline-intersections": "^1.5.0", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/@vitejs/plugin-react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", - "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", - "dev": true, + "node_modules/@turf/line-intersect/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@babel/core": "^7.20.12", - "@babel/plugin-transform-react-jsx-self": "^7.18.6", - "@babel/plugin-transform-react-jsx-source": "^7.19.6", - "magic-string": "^0.27.0", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "peerDependencies": { - "vite": "^4.1.0-beta.0" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, + "node_modules/@turf/meta": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-5.2.0.tgz", + "integrity": "sha512-ZjQ3Ii62X9FjnK4hhdsbT+64AYRpaI8XMBMcyftEOGSmPMUVnkbvuv3C9geuElAXfQU7Zk1oWGOcrGOD9zr78Q==", + "license": "MIT", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@turf/helpers": "^5.1.5" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@turf/midpoint": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/midpoint/-/midpoint-7.3.1.tgz", + "integrity": "sha512-hx3eT9ut0Qyl8fyitCREp9l+v5Q4uBILht5+VKQS3p5eK2ijLEsKw4VikNZhh2rZ7bHGrs6obG5/P5ZqDTObiA==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.3.1", + "@turf/destination": "7.3.1", + "@turf/distance": "7.3.1", + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, + "node_modules/@turf/midpoint/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/turf" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "node_modules/@turf/nearest-point-on-line": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-7.3.1.tgz", + "integrity": "sha512-FialyHfXXZWLayKQcUtdOtKv3ulOQ9FSI45kSmkDl8b96+VFWHX983Pc94tTrSTSg89+XX7MDr6gRl0yowmF4Q==", + "license": "MIT", + "dependencies": { + "@turf/distance": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@turf/nearest-point-on-line/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/apache-arrow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-4.0.1.tgz", - "integrity": "sha512-DyF7GXCbSjsw4P5C8b+qW7OnJKa6w9mJI0mhV0+EfZbVZCmhfiF6ffqcnrI/kzBrRqn9hH/Ft9n5+m4DTbBJpg==", + "node_modules/@turf/nearest-point-on-line/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "@types/flatbuffers": "^1.10.0", - "@types/node": "^14.14.37", - "@types/text-encoding-utf-8": "^1.0.1", - "command-line-args": "5.1.1", - "command-line-usage": "6.1.1", - "flatbuffers": "1.12.0", - "json-bignum": "^0.0.3", - "pad-left": "^2.1.0", - "text-encoding-utf-8": "^1.0.2", - "tslib": "^2.2.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "bin": { - "arrow2csv": "bin/arrow2csv.js" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/apache-arrow/node_modules/@types/node": { - "version": "14.18.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.31.tgz", - "integrity": "sha512-vQAnaReSQkEDa8uwAyQby8bYGKu84R/deEc6mg5T8fX6gzCn8QW6rziSgsti1fNvsrswKUKPnVTi7uoB+u62Mw==" - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@turf/nearest-point-on-line/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "engines": { - "node": ">=6" + "node_modules/@turf/point-to-line-distance": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/point-to-line-distance/-/point-to-line-distance-7.3.1.tgz", + "integrity": "sha512-vynnX3zIMmJY633fyAIKnzlsmL7OBhbk05YhWVSjCKvSQV8C2xMA9pWaLFacn1xu4nfMSVDUaNOrcAqwubN9pg==", + "license": "MIT", + "dependencies": { + "@turf/bearing": "7.3.1", + "@turf/distance": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@turf/meta": "7.3.1", + "@turf/nearest-point-on-line": "7.3.1", + "@turf/projection": "7.3.1", + "@turf/rhumb-bearing": "7.3.1", + "@turf/rhumb-distance": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, + "node_modules/@turf/point-to-line-distance/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "safer-buffer": "~2.1.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" + "node_modules/@turf/point-to-line-distance/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@turf/point-to-line-distance/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "node_modules/@turf/polygon-to-line": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/polygon-to-line/-/polygon-to-line-7.3.1.tgz", + "integrity": "sha512-qTOFzn7SLQ0TcKBsPFAFYz7iiq34ijqinpjyr9fHQlFHRHeWzUXiWyIn5a2uOHazkdhHCEXNX8JPkt6hjdZ/fQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "node_modules/@turf/polygon-to-line/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" + "node_modules/@turf/polygon-to-line/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" + "node_modules/@turf/projection": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/projection/-/projection-7.3.1.tgz", + "integrity": "sha512-nDM3LG2j37B1tCpF4xL4rUBrQJcG585IRyDIxL2QEvP1LLv6dcm4fodw70HcGAj05Ux8bJr7IOXQXnobOJrlRA==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "node_modules/@turf/projection/node_modules/@turf/clone": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-7.3.1.tgz", + "integrity": "sha512-r7xDOfw9ohA7PhZW+8X9RMsO4szB4YqkhEROaELJyLtQ1bo8VNFtndpZdE6YHQpD7Pjlvlb6i99q8w1QLisEPg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "node_modules/@turf/projection/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=10", - "npm": ">=6" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, + "node_modules/@turf/projection/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "tweetnacl": "^0.14.3" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, + "node_modules/@turf/rewind": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-5.1.5.tgz", + "integrity": "sha512-Gdem7JXNu+G4hMllQHXRFRihJl3+pNl7qY+l4qhQFxq+hiU1cQoVFnyoleIqWKIrdK/i2YubaSwc3SCM7N5mMw==", + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@turf/boolean-clockwise": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@turf/rhumb-bearing": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/rhumb-bearing/-/rhumb-bearing-7.3.1.tgz", + "integrity": "sha512-GA/EUSOMapLp6qK5kOX+PkFg2MMUHzUSm/jVezv6Fted0dAlCgXHOrKgLm0tN8PqbH7Oj9xQhv9+3/1ze7W8YA==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], + "node_modules/@turf/rhumb-bearing/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@turf/rhumb-bearing/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" + "node_modules/@turf/rhumb-destination": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/rhumb-destination/-/rhumb-destination-7.3.1.tgz", + "integrity": "sha512-HjtAFr5DTISUn9b4oaZpX79tYl72r4EyAj40HKwjQeV6KkwIe5/h4zryOSEpnvAK2Gnkmu1GxYeTGfM5z3J9JA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@turf/rhumb-destination/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" + "node_modules/@turf/rhumb-destination/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001469", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001469.tgz", - "integrity": "sha512-Rcp7221ScNqQPP3W+lVOYDyjdR6dC+neEQCttoNr5bAyz54AboB4iwpnWgyi8P4YUsPybVzT4LgWiBbI3drL4g==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "node_modules/@turf/rhumb-distance": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/rhumb-distance/-/rhumb-distance-7.3.1.tgz", + "integrity": "sha512-9ZvXU0ii2aywdphLhiawl3uxMEHucMmXCBiRj3WhmssTY9CZkFii9iImbJEqz5glxh6/gzXDcz1CCFQUdNP2xA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@turf/rhumb-distance/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" + "node_modules/@turf/rhumb-distance/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "engines": { - "node": ">= 0.8.0" + "node_modules/@turf/transform-rotate": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/transform-rotate/-/transform-rotate-7.3.1.tgz", + "integrity": "sha512-KAYebOkk7IT2j7S8M+ZxDAmyqeni9ZZGU9ouD6mvd/hTpDOlGG+ORRmg312RxG0NiThzCHLyeG1Nea1nEud6bg==", + "license": "MIT", + "dependencies": { + "@turf/centroid": "7.3.1", + "@turf/clone": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@turf/meta": "7.3.1", + "@turf/rhumb-bearing": "7.3.1", + "@turf/rhumb-destination": "7.3.1", + "@turf/rhumb-distance": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/ci-info": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz", - "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==" + "node_modules/@turf/transform-rotate/node_modules/@turf/clone": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-7.3.1.tgz", + "integrity": "sha512-r7xDOfw9ohA7PhZW+8X9RMsO4szB4YqkhEROaELJyLtQ1bo8VNFtndpZdE6YHQpD7Pjlvlb6i99q8w1QLisEPg==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@turf/transform-rotate/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, + "node_modules/@turf/transform-rotate/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, + "node_modules/@turf/transform-rotate/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" }, - "engines": { - "node": "10.* || >= 12.*" + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/transform-scale": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/transform-scale/-/transform-scale-7.3.1.tgz", + "integrity": "sha512-e8jBSWEn0BMxG0HR8ZMvkHgBgdwNrFRzbhy8DqQwZDgUN59fMeWGbjX5QR5Exl2gZBPaBXkgbDgEhh/JD3kYhw==", + "license": "MIT", + "dependencies": { + "@turf/bbox": "7.3.1", + "@turf/center": "7.3.1", + "@turf/centroid": "7.3.1", + "@turf/clone": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@turf/meta": "7.3.1", + "@turf/rhumb-bearing": "7.3.1", + "@turf/rhumb-destination": "7.3.1", + "@turf/rhumb-distance": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, + "node_modules/@turf/transform-scale/node_modules/@turf/clone": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-7.3.1.tgz", + "integrity": "sha512-r7xDOfw9ohA7PhZW+8X9RMsO4szB4YqkhEROaELJyLtQ1bo8VNFtndpZdE6YHQpD7Pjlvlb6i99q8w1QLisEPg==", + "license": "MIT", "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://opencollective.com/turf" + } + }, + "node_modules/@turf/transform-scale/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/turf" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/@turf/transform-scale/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "engines": { - "node": ">=0.8" + "node_modules/@turf/transform-scale/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" + "node_modules/@turf/transform-translate": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/transform-translate/-/transform-translate-7.3.1.tgz", + "integrity": "sha512-yeaW1EqfuuY4l5VBWSsItglaZ9qdTFD0QEIUW1ooOYuQvtKQ2MTKrcQIKLXZckxQrrNq4TXsZDaBbFs+U1wtcQ==", + "license": "MIT", + "dependencies": { + "@turf/clone": "7.3.1", + "@turf/helpers": "7.3.1", + "@turf/invariant": "7.3.1", + "@turf/meta": "7.3.1", + "@turf/rhumb-destination": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@turf/transform-translate/node_modules/@turf/clone": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-7.3.1.tgz", + "integrity": "sha512-r7xDOfw9ohA7PhZW+8X9RMsO4szB4YqkhEROaELJyLtQ1bo8VNFtndpZdE6YHQpD7Pjlvlb6i99q8w1QLisEPg==", + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true + "node_modules/@turf/transform-translate/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" + } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, + "node_modules/@turf/transform-translate/node_modules/@turf/invariant": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-7.3.1.tgz", + "integrity": "sha512-IdZJfDjIDCLH+Gu2yLFoSM7H23sdetIo5t4ET1/25X8gi3GE2XSqbZwaGjuZgNh02nisBewLqNiJs2bo+hrqZA==", + "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" }, - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/command-line-args": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", - "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", + "node_modules/@turf/transform-translate/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", "dependencies": { - "array-back": "^3.0.1", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" }, - "engines": { - "node": ">=4.0.0" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "node_modules/@turf/union": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-7.3.1.tgz", + "integrity": "sha512-Fk8HvP2gRrRJz8xefeoFJJUeLwhih3HoPPKlqaDf/6L43jwAzBD6BPu59+AwRXOlaZeOUMNMGzgSgx0KKrBwBg==", + "license": "MIT", "dependencies": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" + "@turf/helpers": "7.3.1", + "@turf/meta": "7.3.1", + "@types/geojson": "^7946.0.10", + "polyclip-ts": "^0.16.8", + "tslib": "^2.8.1" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "engines": { - "node": ">=8" + "node_modules/@turf/union/node_modules/@turf/helpers": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.1.tgz", + "integrity": "sha512-zkL34JVhi5XhsuMEO0MUTIIFEJ8yiW1InMu4hu/oRqamlY4mMoZql0viEmH6Dafh/p+zOl8OYvMJ3Vm3rFshgg==", + "license": "MIT", + "dependencies": { + "@types/geojson": "^7946.0.10", + "tslib": "^2.8.1" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "engines": { - "node": ">=8" + "node_modules/@turf/union/node_modules/@turf/meta": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.1.tgz", + "integrity": "sha512-NWsfOE5RVtWpLQNkfOF/RrYvLRPwwruxhZUV0UFIzHqfiRJ50aO9Y6uLY4bwCUe2TumLJQSR4yaoA72Rmr2mnQ==", + "license": "MIT", + "dependencies": { + "@turf/helpers": "7.3.1", + "@types/geojson": "^7946.0.10" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, - "engines": { - "node": ">= 6" + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, - "engines": { - "node": ">=4.0.0" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.1" + "@babel/types": "^7.28.2" } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, + "node_modules/@types/hammerjs": { + "version": "2.0.46", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz", + "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==", + "license": "MIT" + }, + "node_modules/@types/mapbox-gl": { + "version": "2.7.21", + "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-2.7.21.tgz", + "integrity": "sha512-Dx9MuF2kKgT/N22LsMUB4b3acFZh9clVqz9zv1fomoiPoBrJolwYxpWA/9LPO/2N0xWbKi4V+pkjTaFkkx/4wA==", + "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" + "@types/geojson": "*" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@types/node": { + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "undici-types": "~7.16.0" } }, - "node_modules/csscolorparser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + "node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "license": "MIT" }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" }, - "node_modules/cubic-hermite-spline": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cubic-hermite-spline/-/cubic-hermite-spline-1.0.1.tgz", - "integrity": "sha512-OlfZfJqnCi44aYNg3YMn0IqYcvlUGv3SzRqNbm19cnZNTaMiWjFeA5l6rF/WLnmh1VBZs/kYc2QwAkD1t2Zhdg==" + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" }, - "node_modules/cypress": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-9.7.0.tgz", - "integrity": "sha512-+1EE1nuuuwIt/N1KXRR2iWHU+OiIt7H28jJDyyI4tiUftId/DrXYEwoDa5+kH2pki1zxnA0r6HrUGHV5eLbF5Q==", - "dev": true, - "hasInstallScript": true, + "node_modules/@types/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", + "license": "MIT", + "peer": true, "dependencies": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^5.1.0", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "eventemitter2": "^6.4.3", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.6", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": ">=12.0.0" + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" } }, - "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.31.tgz", - "integrity": "sha512-vQAnaReSQkEDa8uwAyQby8bYGKu84R/deEc6mg5T8fX6gzCn8QW6rziSgsti1fNvsrswKUKPnVTi7uoB+u62Mw==", - "dev": true + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } }, - "node_modules/cypress/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@vitejs/plugin-react": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.1.tgz", + "integrity": "sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@babel/core": "^7.28.5", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.47", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" }, "engines": { - "node": ">=8" + "node": "^20.19.0 || >=22.12.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "sprintf-js": "~1.0.2" } }, - "node_modules/cypress/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=10", + "npm": ">=6" } }, - "node_modules/cypress/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cypress/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/baseline-browser-mapping": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.2.tgz", + "integrity": "sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==", "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/cypress/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, "dependencies": { - "lru-cache": "^6.0.0" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { - "semver": "bin/semver.js" + "browserslist": "cli.js" }, "engines": { - "node": ">=10" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/cypress/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/buf-compare": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buf-compare/-/buf-compare-1.0.1.tgz", + "integrity": "sha512-Bvx4xH00qweepGc43xFvMs5BKASXTbHaHm6+kDYIK9p/4iFwjATQkmPKHQSgJZzKbAymhztRbXUf1Nqhzl73/Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001759", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", + "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=10" + "node": ">=20" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/core-assert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/core-assert/-/core-assert-0.2.1.tgz", + "integrity": "sha512-IG97qShIP+nrJCXMCgkNZgH7jZQ4n8RpPyPeXX++T6avR/KhLhgLiHKoEn5Rc1KjfycSfA9DMa6m+4C4eguHhw==", + "license": "MIT", + "dependencies": { + "buf-compare": "^1.0.0", + "is-error": "^2.2.0" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/d3-array": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.3.tgz", - "integrity": "sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==", + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", "dependencies": { - "internmap": "1 - 2" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=12" + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" } }, + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/cubic-hermite-spline": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cubic-hermite-spline/-/cubic-hermite-spline-1.0.1.tgz", + "integrity": "sha512-OlfZfJqnCi44aYNg3YMn0IqYcvlUGv3SzRqNbm19cnZNTaMiWjFeA5l6rF/WLnmh1VBZs/kYc2QwAkD1t2Zhdg==", + "license": "MIT" + }, + "node_modules/d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "license": "BSD-3-Clause" + }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3548,6 +4036,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", "dependencies": { "delaunator": "5" }, @@ -3559,6 +4048,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3567,6 +4057,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -3587,18 +4078,11 @@ "node": ">=12" } }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, "node_modules/d3-fetch": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", "dependencies": { "d3-dsv": "1 - 3" }, @@ -3610,6 +4094,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -3623,25 +4108,25 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", + "integrity": "sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" + "d3-array": "1" } }, "node_modules/d3-geo-projection": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz", "integrity": "sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg==", + "license": "ISC", "dependencies": { "commander": "7", "d3-array": "1 - 3", @@ -3658,18 +4143,35 @@ "node": ">=12" } }, - "node_modules/d3-geo-projection/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/d3-geo-projection/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "node_modules/d3-geo-projection/node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3678,6 +4180,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -3689,6 +4192,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3697,6 +4201,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3705,6 +4210,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -3717,9 +4223,10 @@ } }, "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -3728,10 +4235,23 @@ "node": ">=12" } }, + "node_modules/d3-scale/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-shape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", "dependencies": { "d3-path": "^3.1.0" }, @@ -3743,6 +4263,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", "dependencies": { "d3-array": "2 - 3" }, @@ -3754,6 +4275,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -3761,38 +4283,34 @@ "node": ">=12" } }, + "node_modules/d3-time/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-timer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dayjs": { - "version": "1.11.5", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.5.tgz", - "integrity": "sha512-CAdX5Q3YW3Gclyo5Vpqkgpj8fSdLQcRuzfX6mC6Phy0nfJ0eGYOeS7m4mt2plDWLAtA4TqTakvbboHvUxfe4iA==", - "dev": true - }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3803,43 +4321,32 @@ } } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/deep-strict-equal": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz", + "integrity": "sha512-3daSWyvZ/zwJvuMGlzG1O+Ow0YSadGfb3jsh9xoCutv2tWyB9dA4YvR9L9/fSdDZa2dByYQe+TqapSGUrjnkoA==", + "license": "MIT", + "dependencies": { + "core-assert": "^0.2.0" + }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "robust-predicates": "^3.0.2" } }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -3851,121 +4358,86 @@ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "node_modules/draco3d": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.4.1.tgz", - "integrity": "sha512-9Rxonc70xiovBC+Bq1h57SNZIHzWTibU1VfIGp5z3Xx8dPtv4yT5uGhiH7P5uvJRR2jkrvHafRxR7bTANkvfpg==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.5.tgz", + "integrity": "sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q==", + "license": "Apache-2.0" }, "node_modules/earcut": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" }, "node_modules/electron-to-chromium": { - "version": "1.4.337", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.337.tgz", - "integrity": "sha512-W8gdzXG86mVPoc56eM8YA+QiLxaAxJ8cmDjxZgfhLLWVvZQxyA918w5tX2JEWApZta45T1/sYcmFHTsTOUE3nw==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.5.264", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.264.tgz", + "integrity": "sha512-1tEf0nLgltC3iy9wtlYDlQDc5Rg9lEKVjEmIHJ21rI9OcqkvD45K1oyNIRA4rR1z3LgJ7KeGzEBojVcV6m4qjA==", "dev": true, - "dependencies": { - "once": "^1.4.0" - } + "license": "ISC" }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/esbuild": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.12.tgz", - "integrity": "sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.12", - "@esbuild/android-arm64": "0.17.12", - "@esbuild/android-x64": "0.17.12", - "@esbuild/darwin-arm64": "0.17.12", - "@esbuild/darwin-x64": "0.17.12", - "@esbuild/freebsd-arm64": "0.17.12", - "@esbuild/freebsd-x64": "0.17.12", - "@esbuild/linux-arm": "0.17.12", - "@esbuild/linux-arm64": "0.17.12", - "@esbuild/linux-ia32": "0.17.12", - "@esbuild/linux-loong64": "0.17.12", - "@esbuild/linux-mips64el": "0.17.12", - "@esbuild/linux-ppc64": "0.17.12", - "@esbuild/linux-riscv64": "0.17.12", - "@esbuild/linux-s390x": "0.17.12", - "@esbuild/linux-x64": "0.17.12", - "@esbuild/netbsd-x64": "0.17.12", - "@esbuild/openbsd-x64": "0.17.12", - "@esbuild/sunos-x64": "0.17.12", - "@esbuild/win32-arm64": "0.17.12", - "@esbuild/win32-ia32": "0.17.12", - "@esbuild/win32-x64": "0.17.12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.17.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz", - "integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -3974,6 +4446,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -3985,237 +4458,60 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/expect": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", - "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", - "dependencies": { - "@jest/expect-utils": "^28.1.3", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.3", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "license": "MIT" }, "node_modules/fast-json-patch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", + "license": "MIT" }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "node_modules/fast-xml-parser": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", "dependencies": { - "array-back": "^3.0.1" + "strnum": "^1.1.1" }, - "engines": { - "node": ">=4.0.0" + "bin": { + "fxparser": "src/cli/cli.js" } }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "node_modules/flatbuffers": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", - "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=10" + "node": ">=6 <7 || >=8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4225,14 +4521,20 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -4241,149 +4543,90 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/geojson/-/geojson-0.5.0.tgz", "integrity": "sha512-/Bx5lEn+qRF4TfQ5aLu6NH+UKtvIv7Lhc487y/c8BdludrCTpiWf9wyI0RTyqg49MFefIAvFDuEi5Dfd/zgNxQ==", + "license": "MIT", "engines": { "node": ">= 0.10" } }, - "node_modules/geojson-rbush": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz", - "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==", - "dependencies": { - "@turf/bbox": "*", - "@turf/helpers": "6.x", - "@turf/meta": "6.x", - "@types/geojson": "7946.0.8", - "rbush": "^3.0.1" - } - }, - "node_modules/geojson-rbush/node_modules/@types/geojson": { - "version": "7946.0.8", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", - "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" - }, "node_modules/geojson-types": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/geojson-types/-/geojson-types-2.0.1.tgz", - "integrity": "sha512-lF593HhpxQx8PjW7E7R/XsMKk01KbBRMciqg+NR7pkaaIPefS1NZDUep+w1L1QusXKcWDgZzvvgI4s7kDOe3aA==" + "integrity": "sha512-lF593HhpxQx8PjW7E7R/XsMKk01KbBRMciqg+NR7pkaaIPefS1NZDUep+w1L1QusXKcWDgZzvvgI4s7kDOe3aA==", + "license": "MIT" }, "node_modules/geojson-vt": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "license": "ISC" }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gl-matrix": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.4.tgz", + "integrity": "sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==", + "license": "MIT", + "peer": true + }, "node_modules/global": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "license": "MIT", "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" } }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/grid-index": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", - "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", + "license": "ISC" }, "node_modules/h3-js": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/h3-js/-/h3-js-3.7.2.tgz", "integrity": "sha512-LPjlHSwB9zQZrMqKloCZmmmt3yZzIK7nqPcXqwU93zT3TtYG6jP4tZBzAPouxut7lLjdFbMQ75wRBiKfpsnY7w==", + "license": "Apache-2.0", "engines": { "node": ">=4", "npm": ">=3", @@ -4394,33 +4637,28 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" + "node": ">= 0.4" } }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", "dependencies": { "react-is": "^16.7.0" } @@ -4428,35 +4666,14 @@ "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -4481,12 +4698,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/image-size": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "license": "MIT", "bin": { "image-size": "bin/image-size.js" }, @@ -4495,9 +4714,10 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4513,6 +4733,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/indefinitely-typed/-/indefinitely-typed-1.1.0.tgz", "integrity": "sha512-giaI0hCj+wWZIZZLsmWHI+LrM4Hwc+rEZ/VrgCafKePcnE42fLnQTFt4xspqLin8fCjI5WnQr2fep/0EFqjaxw==", + "license": "MIT", "dependencies": { "fs-extra": "^7.0.0", "minimist": "^1.2.5" @@ -4521,73 +4742,11 @@ "indefinitely-typed": "bin/cli2.js" } }, - "node_modules/indefinitely-typed/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/indefinitely-typed/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/indefinitely-typed/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4595,497 +4754,66 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" + "hasown": "^2.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/jest-diff": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", - "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", - "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.3", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/is-error": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", + "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" - } - }, - "node_modules/json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", - "engines": { - "node": ">=0.8" + "node": ">=6" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" }, "node_modules/json-stringify-pretty-compact": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", - "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -5094,282 +4822,64 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "node_modules/kdbush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", - "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" - }, - "node_modules/ktx-parse": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.0.4.tgz", - "integrity": "sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A==" - }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "engines": { - "node": "> 0.8" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "node_modules/jsts": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/jsts/-/jsts-2.7.1.tgz", + "integrity": "sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg==", + "license": "(EDL-1.0 OR EPL-1.0)", "engines": { - "node": ">=8" + "node": ">= 12" } }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" + }, + "node_modules/ktx-parse": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.0.4.tgz", + "integrity": "sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A==", + "license": "MIT" + }, + "node_modules/lerc": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lerc/-/lerc-4.0.4.tgz", + "integrity": "sha512-nHZH+ffiGPkgKUQtiZrljGUGV2GddvPcVTV5E345ZFncbKz+/rBIjDPrSxkiqW0EAtg1Jw7qAgRdaCwV+95Fow==", + "license": "Apache-2.0" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT" + }, "node_modules/long": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==", + "license": "Apache-2.0", "engines": { "node": ">=0.6" } @@ -5378,6 +4888,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -5386,40 +4897,37 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/mapbox-gl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-2.10.0.tgz", - "integrity": "sha512-ZAlCe55LXlbg60l15okSBs70NQAPLw3yRO3SSJMTB1uU7uj2QQbLCQPy1Ds+3B4wlaa5W3ewv8FNOZPQOoSSPA==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-2.15.0.tgz", + "integrity": "sha512-fjv+aYrd5TIHiL7wRa+W7KjtUqKWziJMZUkK5hm8TvJ3OLeNPx4NmW/DgfYhd/jHej8wWL+QJBDbdMMAKvNC0A==", + "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { - "@mapbox/geojson-rewind": "^0.5.1", - "@mapbox/geojson-types": "^1.0.2", + "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", "@mapbox/mapbox-gl-supported": "^2.0.1", "@mapbox/point-geometry": "^0.1.0", - "@mapbox/tiny-sdf": "^2.0.5", - "@mapbox/unitbezier": "^0.0.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", "csscolorparser": "~1.0.3", @@ -5427,106 +4935,49 @@ "geojson-vt": "^3.2.1", "gl-matrix": "^3.4.3", "grid-index": "^1.1.0", + "kdbush": "^4.0.1", "murmurhash-js": "^1.0.0", "pbf": "^3.2.1", - "potpack": "^1.0.2", + "potpack": "^2.0.0", "quickselect": "^2.0.0", "rw": "^1.3.3", - "supercluster": "^7.1.4", + "supercluster": "^8.0.0", "tinyqueue": "^2.0.3", "vt-pbf": "^3.1.3" } }, - "node_modules/mapbox-gl/node_modules/@mapbox/tiny-sdf": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.5.tgz", - "integrity": "sha512-OhXt2lS//WpLdkqrzo/KwB7SRD8AiNTFFzuo9n14IBupzIMa67yGItcK7I2W9D8Ghpa4T04Sw9FWsKCJG50Bxw==" - }, "node_modules/math.gl": { "version": "3.6.3", "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.3.tgz", "integrity": "sha512-Yq9CyECvSDox9+5ETi2+x1bGTY5WvGUGL3rJfC4KPoCZAM51MGfrCm6rIn4yOJUVfMPs2a5RwMD+yGS/n1g3gg==", + "license": "MIT", "dependencies": { "@math.gl/core": "3.6.3" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "version": "2.19.2", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.2.tgz", + "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==", + "license": "MIT", "dependencies": { "dom-walk": "^0.1.0" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mjolnir.js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.1.tgz", - "integrity": "sha512-72BeUWgTv2cj5aZQKpwL8caNUFhXZ9bDm1hxpNj70XJQ62IBnTZmtv/WPxJvtaVNhzNo+D2U8O6ryNI0zImYcw==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.3.tgz", + "integrity": "sha512-Z5z/+FzZqOSO3juSVKV3zcm4R2eAlWwlKMcqHmyFEJAaLILNcDKnIbnb4/kbcGyIuhtdWrzu8WOIR7uM6I34aw==", + "license": "MIT", "dependencies": { "@types/hammerjs": "^2.0.41", "hammerjs": "^2.0.8" @@ -5537,19 +4988,21 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/murmurhash-js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -5557,6 +5010,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5568,6 +5022,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/nebula.gl/-/nebula.gl-1.0.4.tgz", "integrity": "sha512-B9kMO45N830E0K1b+TQbv/2cNOCGzixHCQNeJCJ6sAHrKxaT2851tnHlW3EgD/zfvgw3B9yGWqWpXUihm8d4PA==", + "license": "MIT", "dependencies": { "@luma.gl/constants": "^8.5.10", "@nebula.gl/layers": "1.0.4", @@ -5608,110 +5063,18 @@ "@luma.gl/core": "^8.5.10" } }, - "node_modules/nebula.gl/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pad-left": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", - "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", - "dependencies": { - "repeat-string": "^1.5.4" - }, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5720,6 +5083,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -5731,6 +5095,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5744,41 +5109,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pbf": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", + "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -5787,55 +5137,48 @@ "pbf": "bin/pbf" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/point-in-polygon-hao": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/point-in-polygon-hao/-/point-in-polygon-hao-1.2.4.tgz", + "integrity": "sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ==", + "license": "MIT", + "dependencies": { + "robust-predicates": "^3.0.2" } }, - "node_modules/polygon-clipping": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", - "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", + "node_modules/polyclip-ts": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/polyclip-ts/-/polyclip-ts-0.16.8.tgz", + "integrity": "sha512-JPtKbDRuPEuAjuTdhR62Gph7Is2BS1Szx69CFOO3g71lpJDFo78k4tFyi+qFOMVPePEzdSKkpGU3NBXPHHjvKQ==", + "license": "MIT", "dependencies": { - "splaytree": "^3.1.0" + "bignumber.js": "^9.1.0", + "splaytree-ts": "^1.0.2" } }, "node_modules/postcss": { - "version": "8.4.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -5851,77 +5194,27 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/potpack": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", - "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/probe.gl": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.5.2.tgz", - "integrity": "sha512-8lFQVmi7pMQZkqfj8+VjX4GU9HTkyxgRm5/h/xxA/4/IvZPv3qtP996L+awPwZsrPRKEw99t12SvqEHqSls/sA==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.5.2", - "@probe.gl/log": "3.5.2", - "@probe.gl/stats": "3.5.2" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.1.0.tgz", + "integrity": "sha512-pcaShQc1Shq0y+E7GqJqvZj8DTthWV1KeHGdi0Z6IAin2Oi3JnLCOfwnCo84qc+HAp52wT9nK9H7FAJp5a44GQ==", + "license": "ISC" }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -5930,6 +5223,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -5939,70 +5233,27 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/protocol-buffers-schema": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" - }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "license": "MIT" }, "node_modules/quickselect": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" - }, - "node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "dependencies": { - "quickselect": "^2.0.0" - } + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" }, "node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -6015,6 +5266,8 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -6025,24 +5278,32 @@ } }, "node_modules/react-hook-form": { - "version": "7.37.0", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.37.0.tgz", - "integrity": "sha512-6NFTxsnw+EXSpNNvLr5nFMjPdYKRryQcelTHg7zwBB6vAzfPIcZq4AExP4heVlwdzntepQgwiOQW4z7Mr99Lsg==", + "version": "7.68.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.68.0.tgz", + "integrity": "sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==", + "license": "MIT", "engines": { - "node": ">=12.22.0" + "node": ">=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/react-hook-form" }, "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18" + "react": "^16.8.0 || ^17 || ^18 || ^19" } }, + "node_modules/react-is": { + "version": "19.2.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.1.tgz", + "integrity": "sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==", + "license": "MIT" + }, "node_modules/react-map-gl": { - "version": "6.1.19", - "resolved": "https://registry.npmjs.org/react-map-gl/-/react-map-gl-6.1.19.tgz", - "integrity": "sha512-rrDoRyEIGzVLUB5QfgsZ5xCw7jeUtmmYzHUv86xDx8oGp90VTV2KTQJ4RPQiSAmpfIFh6/pPqI28Pguf1u/mOg==", + "version": "6.1.21", + "resolved": "https://registry.npmjs.org/react-map-gl/-/react-map-gl-6.1.21.tgz", + "integrity": "sha512-7ENXxAeYaI4dhol5bir3iK6TeR9teA3MF0WH6VIhmkMRdYY3lgA4t1GzDh2BwpSO340Ngw+5mC0nTsc6gd1O4w==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", "@types/geojson": "^7946.0.7", @@ -6062,38 +5323,41 @@ } }, "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", + "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-router": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.2.tgz", - "integrity": "sha512-Rb0BAX9KHhVzT1OKhMvCDMw776aTYM0DtkxqUBP8dNBom3mPXlfNs76JNGK8wKJ1IZEY1+WGj+cvZxHVk/GiKw==", + "version": "6.30.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.2.tgz", + "integrity": "sha512-H2Bm38Zu1bm8KUE5NVWRMzuIyAV8p/JrOaBJAwVmp37AXG72+CZJlEBw6pdn9i5TBgLMhNDgijS4ZlblpHyWTA==", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.0.2" + "@remix-run/router": "1.23.1" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" }, "peerDependencies": { "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.2.tgz", - "integrity": "sha512-yM1kjoTkpfjgczPrcyWrp+OuQMyB1WleICiiGfstnQYo/S8hPEEnVjr/RdmlH6yKK4Tnj1UGXFSa7uwAtmDoLQ==", + "version": "6.30.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.2.tgz", + "integrity": "sha512-l2OwHn3UUnEVUqc6/1VMmR1cvZryZ3j3NzapC2eUXO1dB0sYp5mvwdjiXhpUbRb21eFow3qSxpP8Yv6oAU824Q==", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.0.2", - "react-router": "6.4.2" + "@remix-run/router": "1.23.1", + "react-router": "6.30.2" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" }, "peerDependencies": { "react": ">=16.8", @@ -6104,6 +5368,7 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -6115,66 +5380,34 @@ "react-dom": ">=16.6.0" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", + "license": "MIT" }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6183,6 +5416,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", "engines": { "node": ">=4" } @@ -6191,62 +5425,57 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "protocol-buffers-schema": "^3.3.1" } }, "node_modules/robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", + "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, + "license": "MIT", "peer": true, + "dependencies": { + "@types/estree": "1.0.8" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.3", + "@rollup/rollup-android-arm64": "4.53.3", + "@rollup/rollup-darwin-arm64": "4.53.3", + "@rollup/rollup-darwin-x64": "4.53.3", + "@rollup/rollup-freebsd-arm64": "4.53.3", + "@rollup/rollup-freebsd-x64": "4.53.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", + "@rollup/rollup-linux-arm-musleabihf": "4.53.3", + "@rollup/rollup-linux-arm64-gnu": "4.53.3", + "@rollup/rollup-linux-arm64-musl": "4.53.3", + "@rollup/rollup-linux-loong64-gnu": "4.53.3", + "@rollup/rollup-linux-ppc64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-musl": "4.53.3", + "@rollup/rollup-linux-s390x-gnu": "4.53.3", + "@rollup/rollup-linux-x64-gnu": "4.53.3", + "@rollup/rollup-linux-x64-musl": "4.53.3", + "@rollup/rollup-openharmony-arm64": "4.53.3", + "@rollup/rollup-win32-arm64-msvc": "4.53.3", + "@rollup/rollup-win32-ia32-msvc": "4.53.3", + "@rollup/rollup-win32-x64-gnu": "4.53.3", + "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" } }, @@ -6255,283 +5484,151 @@ "resolved": "https://registry.npmjs.org/rollup-plugin-analyzer/-/rollup-plugin-analyzer-4.0.0.tgz", "integrity": "sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/rollup-plugin-polyfill-node": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.2.tgz", - "integrity": "sha512-5GMywXiLiuQP6ZzED/LO/Q0HyDi2W6b8VN+Zd3oB0opIjyRs494Me2ZMaqKWDNbGiW4jvvzl6L2n4zRgxS9cSQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.13.0.tgz", + "integrity": "sha512-FYEvpCaD5jGtyBuBFcQImEGmTxDTPbiHjJdrYIp+mFIwgXiXabxvKUK7ZT9P31ozu2Tqm9llYQMRWsfvTMTAOw==", "dev": true, + "license": "MIT", "dependencies": { - "@rollup/plugin-inject": "^4.0.0" + "@rollup/plugin-inject": "^5.0.4" }, "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" } }, "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "node_modules/rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/splaytree": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.1.tgz", - "integrity": "sha512-9FaQ18FF0+sZc/ieEeXHt+Jw2eSpUgUtTLDYB/HXKWvhYVyOc7h1hzkn5MMO3GPib9MmXG1go8+OsBBzs/NMww==" + "node_modules/splaytree-ts": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/splaytree-ts/-/splaytree-ts-1.0.2.tgz", + "integrity": "sha512-0kGecIZNIReCSiznK3uheYB8sbstLjCZLiwcQwbmLhgHJj2gz6OnSPkVzJQCMnmEz1BQ4gPK59ylhBoEWOhGNA==", + "license": "BDS-3-Clause" }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" }, "node_modules/stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" }, "node_modules/supercluster": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", - "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", - "dependencies": { - "kdbush": "^3.0.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "kdbush": "^4.0.2" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6539,45 +5636,20 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "node_modules/sweepline-intersections": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sweepline-intersections/-/sweepline-intersections-1.5.0.tgz", + "integrity": "sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==", + "license": "MIT", "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "engines": { - "node": ">=8" + "tinyqueue": "^2.0.0" } }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - }, "node_modules/texture-compressor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/texture-compressor/-/texture-compressor-1.0.2.tgz", "integrity": "sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==", + "license": "MIT", "dependencies": { "argparse": "^1.0.10", "image-size": "^0.7.4" @@ -6586,58 +5658,52 @@ "texture-compressor": "bin/texture-compressor.js" } }, - "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/tinyqueue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, + "license": "MIT", "dependencies": { - "rimraf": "^3.0.0" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=8.17.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" + "node": ">=12.0.0" }, - "engines": { - "node": ">=8.0" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "license": "ISC" + }, "node_modules/topojson-client": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "license": "ISC", "dependencies": { "commander": "2" }, @@ -6650,109 +5716,50 @@ "node_modules/topojson-client/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/turf-jsts": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/turf-jsts/-/turf-jsts-1.2.3.tgz", - "integrity": "sha512-Ja03QIJlPuHt4IQ2FfGex4F4JAr8m3jpaHbFbQrgwr7s7L6U8ocrHiF3J1+wf9jzhGKxvDeaCAnGDot8OjGFyA==" - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "engines": { - "node": ">=8" + "node": ">=14.17" } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, - "engines": { - "node": ">= 10.0.0" - } + "license": "MIT" }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6761,117 +5768,140 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/vega": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/vega/-/vega-5.25.0.tgz", - "integrity": "sha512-lr+uj0mhYlSN3JOKbMNp1RzZBenWp9DxJ7kR3lha58AFNCzzds7pmFa7yXPbtbaGhB7Buh/t6n+Bzk3Y0VnF5g==", - "dependencies": { - "vega-crossfilter": "~4.1.1", - "vega-dataflow": "~5.7.5", - "vega-encode": "~4.9.2", - "vega-event-selector": "~3.0.1", - "vega-expression": "~5.1.0", - "vega-force": "~4.2.0", - "vega-format": "~1.1.1", - "vega-functions": "~5.13.2", - "vega-geo": "~4.4.1", - "vega-hierarchy": "~4.1.1", - "vega-label": "~1.2.1", - "vega-loader": "~4.5.1", - "vega-parser": "~6.2.0", - "vega-projection": "~1.6.0", - "vega-regression": "~1.2.0", - "vega-runtime": "~6.1.4", - "vega-scale": "~7.3.0", - "vega-scenegraph": "~4.10.2", - "vega-statistics": "~1.9.0", - "vega-time": "~2.1.1", - "vega-transforms": "~4.10.2", - "vega-typings": "~0.24.0", - "vega-util": "~1.17.2", - "vega-view": "~5.11.1", - "vega-view-transforms": "~4.5.9", - "vega-voronoi": "~4.2.1", - "vega-wordcloud": "~4.1.4" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/vega/-/vega-6.2.0.tgz", + "integrity": "sha512-BIwalIcEGysJdQDjeVUmMWB3e50jPDNAMfLJscjEvpunU9bSt7X1OYnQxkg3uBwuRRI4nWfFZO9uIW910nLeGw==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "vega-crossfilter": "~5.1.0", + "vega-dataflow": "~6.1.0", + "vega-encode": "~5.1.0", + "vega-event-selector": "~4.0.0", + "vega-expression": "~6.1.0", + "vega-force": "~5.1.0", + "vega-format": "~2.1.0", + "vega-functions": "~6.1.0", + "vega-geo": "~5.1.0", + "vega-hierarchy": "~5.1.0", + "vega-label": "~2.1.0", + "vega-loader": "~5.1.0", + "vega-parser": "~7.1.0", + "vega-projection": "~2.1.0", + "vega-regression": "~2.1.0", + "vega-runtime": "~7.1.0", + "vega-scale": "~8.1.0", + "vega-scenegraph": "~5.1.0", + "vega-statistics": "~2.0.0", + "vega-time": "~3.1.0", + "vega-transforms": "~5.1.0", + "vega-typings": "~2.1.0", + "vega-util": "~2.1.0", + "vega-view": "~6.1.0", + "vega-view-transforms": "~5.1.0", + "vega-voronoi": "~5.1.0", + "vega-wordcloud": "~5.1.0" + }, + "funding": { + "url": "https://app.hubspot.com/payments/GyPC972GD9Rt" } }, "node_modules/vega-canvas": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/vega-canvas/-/vega-canvas-1.2.7.tgz", - "integrity": "sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vega-canvas/-/vega-canvas-2.0.0.tgz", + "integrity": "sha512-9x+4TTw/USYST5nx4yN272sy9WcqSRjAR0tkQYZJ4cQIeon7uVsnohvoPQK1JZu7K1QXGUqzj08z0u/UegBVMA==", + "license": "BSD-3-Clause" }, "node_modules/vega-crossfilter": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.1.1.tgz", - "integrity": "sha512-yesvlMcwRwxrtAd9IYjuxWJJuAMI0sl7JvAFfYtuDkkGDtqfLXUcCzHIATqW6igVIE7tWwGxnbfvQLhLNgK44Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-5.1.0.tgz", + "integrity": "sha512-EmVhfP3p6AM7o/lPan/QAoqjblI19BxWUlvl2TSs0xjQd8KbaYYbS4Ixt3cmEvl0QjRdBMF6CdJJ/cy9DTS4Fw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "^3.2.4", + "vega-dataflow": "^6.1.0", + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-crossfilter/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { - "d3-array": "^3.2.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-dataflow": { - "version": "5.7.5", - "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.7.5.tgz", - "integrity": "sha512-EdsIl6gouH67+8B0f22Owr2tKDiMPNNR8lEvJDcxmFw02nXd8juimclpLvjPQriqn6ta+3Dn5txqfD117H04YA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-6.1.0.tgz", + "integrity": "sha512-JxumGlODtFbzoQ4c/jQK8Tb/68ih0lrexlCozcMfTAwQ12XhTqCvlafh7MAKKTMBizjOfaQTHm4Jkyb1H5CfyQ==", + "license": "BSD-3-Clause", "dependencies": { - "vega-format": "^1.1.1", - "vega-loader": "^4.5.1", - "vega-util": "^1.17.1" + "vega-format": "^2.1.0", + "vega-loader": "^5.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-embed": { - "version": "6.22.1", - "resolved": "https://registry.npmjs.org/vega-embed/-/vega-embed-6.22.1.tgz", - "integrity": "sha512-5a3SVhPwG5/Mz3JbcJV4WE38s/7AFrkANtPxoln7E8fbNLIbrurIennaAxB9+l0QOAg63lPSuJBNMUkM6yXvLA==", - "bundleDependencies": [ - "yallist" - ], + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/vega-embed/-/vega-embed-7.1.0.tgz", + "integrity": "sha512-ZmEIn5XJrQt7fSh2lwtSdXG/9uf3yIqZnvXFEwBJRppiBgrEWZcZbj6VK3xn8sNTFQ+sQDXW5sl/6kmbAW3s5A==", + "license": "BSD-3-Clause", "dependencies": { "fast-json-patch": "^3.1.1", - "json-stringify-pretty-compact": "^3.0.0", - "semver": "~7.4.0", - "tslib": "^2.5.0", - "vega-interpreter": "^1.0.5", - "vega-schema-url-parser": "^2.2.0", - "vega-themes": "^2.13.0", - "vega-tooltip": "^0.32.0", - "yallist": "*" + "json-stringify-pretty-compact": "^4.0.0", + "semver": "^7.7.2", + "tslib": "^2.8.1", + "vega-interpreter": "^2.0.0", + "vega-schema-url-parser": "^3.0.2", + "vega-themes": "3.0.0", + "vega-tooltip": "1.0.0" + }, + "funding": { + "url": "https://app.hubspot.com/payments/GyPC972GD9Rt" }, "peerDependencies": { - "vega": "^5.21.0", + "vega": "*", "vega-lite": "*" } }, "node_modules/vega-embed/node_modules/semver": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz", - "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6880,132 +5910,210 @@ } }, "node_modules/vega-encode": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-4.9.2.tgz", - "integrity": "sha512-c3J0LYkgYeXQxwnYkEzL15cCFBYPRaYUon8O2SZ6O4PhH4dfFTXBzSyT8+gh8AhBd572l2yGDfxpEYA6pOqdjg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-5.1.0.tgz", + "integrity": "sha512-q26oI7B+MBQYcTQcr5/c1AMsX3FvjZLQOBi7yI0vV+GEn93fElDgvhQiYrgeYSD4Exi/jBPeUXuN6p4bLz16kA==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "^3.2.2", + "d3-array": "^3.2.4", "d3-interpolate": "^3.0.1", - "vega-dataflow": "^5.7.5", - "vega-scale": "^7.3.0", - "vega-util": "^1.17.1" + "vega-dataflow": "^6.1.0", + "vega-scale": "^8.1.0", + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-encode/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-event-selector": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-3.0.1.tgz", - "integrity": "sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-4.0.0.tgz", + "integrity": "sha512-CcWF4m4KL/al1Oa5qSzZ5R776q8lRxCj3IafCHs5xipoEHrkgu1BWa7F/IH5HrDNXeIDnqOpSV1pFsAWRak4gQ==", + "license": "BSD-3-Clause" }, "node_modules/vega-expression": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.0.tgz", - "integrity": "sha512-u8Rzja/cn2PEUkhQN3zUj3REwNewTA92ExrcASNKUJPCciMkHJEjESwFYuI6DWMCq4hQElQ92iosOAtwzsSTqA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-6.1.0.tgz", + "integrity": "sha512-hHgNx/fQ1Vn1u6vHSamH7lRMsOa/yQeHGGcWVmh8fZafLdwdhCM91kZD9p7+AleNpgwiwzfGogtpATFaMmDFYg==", + "license": "BSD-3-Clause", "dependencies": { - "@types/estree": "^1.0.0", - "vega-util": "^1.17.1" + "@types/estree": "^1.0.8", + "vega-util": "^2.1.0" } }, - "node_modules/vega-expression/node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" - }, "node_modules/vega-force": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-4.2.0.tgz", - "integrity": "sha512-aE2TlP264HXM1r3fl58AvZdKUWBNOGkIvn4EWyqeJdgO2vz46zSU7x7TzPG4ZLuo44cDRU5Ng3I1eQk23Asz6A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-5.1.0.tgz", + "integrity": "sha512-wdnchOSeXpF9Xx8Yp0s6Do9F7YkFeOn/E/nENtsI7NOcyHpICJ5+UkgjUo9QaQ/Yu+dIDU+sP/4NXsUtq6SMaQ==", + "license": "BSD-3-Clause", "dependencies": { "d3-force": "^3.0.0", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "vega-dataflow": "^6.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-format": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.1.tgz", - "integrity": "sha512-Rll7YgpYbsgaAa54AmtEWrxaJqgOh5fXlvM2wewO4trb9vwM53KBv4Q/uBWCLK3LLGeBXIF6gjDt2LFuJAUtkQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-2.1.0.tgz", + "integrity": "sha512-i9Ht33IgqG36+S1gFDpAiKvXCPz+q+1vDhDGKK8YsgMxGOG4PzinKakI66xd7SdV4q97FgpR7odAXqtDN2wKqw==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "^3.2.2", + "d3-array": "^3.2.4", "d3-format": "^3.1.0", "d3-time-format": "^4.1.0", - "vega-time": "^2.1.1", - "vega-util": "^1.17.1" + "vega-time": "^3.1.0", + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-format/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-functions": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.13.2.tgz", - "integrity": "sha512-YE1Xl3Qi28kw3vdXVYgKFMo20ttd3+SdKth1jUNtBDGGdrOpvPxxFhZkVqX+7FhJ5/1UkDoAYs/cZY0nRKiYgA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-6.1.0.tgz", + "integrity": "sha512-yooEbWt0FWMBNoohwLsl25lEh08WsWabTXbbS+q0IXZzWSpX4Cyi45+q7IFyy/2L4oaIfGIIV14dgn3srQQcGA==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "^3.2.2", + "d3-array": "^3.2.4", "d3-color": "^3.1.0", - "d3-geo": "^3.1.0", - "vega-dataflow": "^5.7.5", - "vega-expression": "^5.1.0", - "vega-scale": "^7.3.0", - "vega-scenegraph": "^4.10.2", - "vega-selections": "^5.4.1", - "vega-statistics": "^1.8.1", - "vega-time": "^2.1.1", - "vega-util": "^1.17.1" + "d3-geo": "^3.1.1", + "vega-dataflow": "^6.1.0", + "vega-expression": "^6.1.0", + "vega-scale": "^8.1.0", + "vega-scenegraph": "^5.1.0", + "vega-selections": "^6.1.0", + "vega-statistics": "^2.0.0", + "vega-time": "^3.1.0", + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-functions/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/vega-functions/node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-geo": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-4.4.1.tgz", - "integrity": "sha512-s4WeZAL5M3ZUV27/eqSD3v0FyJz3PlP31XNSLFy4AJXHxHUeXT3qLiDHoVQnW5Om+uBCPDtTT1ROx1smGIf2aA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-5.1.0.tgz", + "integrity": "sha512-H8aBBHfthc3rzDbz/Th18+Nvp00J73q3uXGAPDQqizioDm/CoXCK8cX4pMePydBY9S6ikBiGJrLKFDa80wI20g==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "^3.2.2", + "d3-array": "^3.2.4", "d3-color": "^3.1.0", - "d3-geo": "^3.1.0", - "vega-canvas": "^1.2.7", - "vega-dataflow": "^5.7.5", - "vega-projection": "^1.6.0", - "vega-statistics": "^1.8.1", - "vega-util": "^1.17.1" + "d3-geo": "^3.1.1", + "vega-canvas": "^2.0.0", + "vega-dataflow": "^6.1.0", + "vega-projection": "^2.1.0", + "vega-statistics": "^2.0.0", + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-geo/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/vega-geo/node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-hierarchy": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.1.1.tgz", - "integrity": "sha512-h5mbrDtPKHBBQ9TYbvEb/bCqmGTlUX97+4CENkyH21tJs7naza319B15KRK0NWOHuhbGhFmF8T0696tg+2c8XQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-5.1.0.tgz", + "integrity": "sha512-rZlU8QJNETlB6o73lGCPybZtw2fBBsRIRuFE77aCLFHdGsh6wIifhplVarqE9icBqjUHRRUOmcEYfzwVIPr65g==", + "license": "BSD-3-Clause", "dependencies": { "d3-hierarchy": "^3.1.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "vega-dataflow": "^6.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-interpreter": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vega-interpreter/-/vega-interpreter-1.0.5.tgz", - "integrity": "sha512-po6oTOmeQqr1tzTCdD15tYxAQLeUnOVirAysgVEemzl+vfmvcEP7jQmlc51jz0jMA+WsbmE6oJywisQPu/H0Bg==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vega-interpreter/-/vega-interpreter-2.2.1.tgz", + "integrity": "sha512-o+4ZEme2mdFLewlpF76dwPWW2VkZ3TAF3DMcq75/NzA5KPvnN4wnlCM8At2FVawbaHRyGdVkJSS5ROF5KwpHPQ==", + "license": "BSD-3-Clause", + "dependencies": { + "vega-util": "^2.1.0" + } }, "node_modules/vega-label": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vega-label/-/vega-label-1.2.1.tgz", - "integrity": "sha512-n/ackJ5lc0Xs9PInCaGumYn2awomPjJ87EMVT47xNgk2bHmJoZV1Ve/1PUM6Eh/KauY211wPMrNp/9Im+7Ripg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vega-label/-/vega-label-2.1.0.tgz", + "integrity": "sha512-/hgf+zoA3FViDBehrQT42Lta3t8In6YwtMnwjYlh72zNn1p3c7E3YUBwqmAqTM1x+tudgzMRGLYig+bX1ewZxQ==", + "license": "BSD-3-Clause", "dependencies": { - "vega-canvas": "^1.2.6", - "vega-dataflow": "^5.7.3", - "vega-scenegraph": "^4.9.2", - "vega-util": "^1.15.2" + "vega-canvas": "^2.0.0", + "vega-dataflow": "^6.1.0", + "vega-scenegraph": "^5.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-lite": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-5.9.1.tgz", - "integrity": "sha512-mJCSzKMWHacEEQpRzMGKL1sfieVMk06awLaxLEI50/65+uzia+R3VC2lPXYwzTi+6UvWbFGPJ9rybT8e3gmn3A==", - "dependencies": { - "@types/clone": "~2.1.1", - "clone": "~2.1.2", - "fast-deep-equal": "~3.1.3", - "fast-json-stable-stringify": "~2.1.0", - "json-stringify-pretty-compact": "~3.0.0", - "tslib": "~2.5.0", - "vega-event-selector": "~3.0.1", - "vega-expression": "~5.1.0", - "vega-util": "~1.17.2", - "yargs": "~17.7.2" + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-6.4.1.tgz", + "integrity": "sha512-KO3ybHNouRK4A0al/+2fN9UqgTEfxrd/ntGLY933Hg5UOYotDVQdshR3zn7OfXwQ7uj0W96Vfa5R+QxO8am3IQ==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "json-stringify-pretty-compact": "~4.0.0", + "tslib": "~2.8.1", + "vega-event-selector": "~4.0.0", + "vega-expression": "~6.1.0", + "vega-util": "~2.1.0", + "yargs": "~18.0.0" }, "bin": { "vl2pdf": "bin/vl2pdf", @@ -7014,110 +6122,171 @@ "vl2vg": "bin/vl2vg" }, "engines": { - "node": ">=16" + "node": ">=18" + }, + "funding": { + "url": "https://app.hubspot.com/payments/GyPC972GD9Rt" }, "peerDependencies": { - "vega": "^5.24.0" + "vega": "^6.0.0" } }, "node_modules/vega-loader": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.1.tgz", - "integrity": "sha512-qy5x32SaT0YkEujQM2yKqvLGV9XWQ2aEDSugBFTdYzu/1u4bxdUSRDREOlrJ9Km3RWIOgFiCkobPmFxo47SKuA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-5.1.0.tgz", + "integrity": "sha512-GaY3BdSPbPNdtrBz8SYUBNmNd8mdPc3mtdZfdkFazQ0RD9m+Toz5oR8fKnTamNSk9fRTJX0Lp3uEqxrAlQVreg==", + "license": "BSD-3-Clause", "dependencies": { "d3-dsv": "^3.0.1", - "node-fetch": "^2.6.7", "topojson-client": "^3.1.0", - "vega-format": "^1.1.1", - "vega-util": "^1.17.1" + "vega-format": "^2.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-parser": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.2.0.tgz", - "integrity": "sha512-as+QnX8Qxe9q51L1C2sVBd+YYYctP848+zEvkBT2jlI2g30aZ6Uv7sKsq7QTL6DUbhXQKR0XQtzlanckSFdaOQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-7.1.0.tgz", + "integrity": "sha512-g0lrYxtmYVW8G6yXpIS4J3Uxt9OUSkc0bLu5afoYDo4rZmoOOdll3x3ebActp5LHPW+usZIE+p5nukRS2vEc7Q==", + "license": "BSD-3-Clause", "dependencies": { - "vega-dataflow": "^5.7.5", - "vega-event-selector": "^3.0.1", - "vega-functions": "^5.13.1", - "vega-scale": "^7.3.0", - "vega-util": "^1.17.1" + "vega-dataflow": "^6.1.0", + "vega-event-selector": "^4.0.0", + "vega-functions": "^6.1.0", + "vega-scale": "^8.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-projection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-1.6.0.tgz", - "integrity": "sha512-LGUaO/kpOEYuTlul+x+lBzyuL9qmMwP1yShdUWYLW+zXoeyGbs5OZW+NbPPwLYqJr5lpXDr/vGztFuA/6g2xvQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-2.1.0.tgz", + "integrity": "sha512-EjRjVSoMR5ibrU7q8LaOQKP327NcOAM1+eZ+NO4ANvvAutwmbNVTmfA1VpPH+AD0AlBYc39ND/wnRk7SieDiXA==", + "license": "BSD-3-Clause", "dependencies": { - "d3-geo": "^3.1.0", + "d3-geo": "^3.1.1", "d3-geo-projection": "^4.0.0", - "vega-scale": "^7.3.0" + "vega-scale": "^8.1.0" + } + }, + "node_modules/vega-projection/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/vega-projection/node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-regression": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-1.2.0.tgz", - "integrity": "sha512-6TZoPlhV/280VbxACjRKqlE0Nv48z5g4CSNf1FmGGTWS1rQtElPTranSoVW4d7ET5eVQ6f9QLxNAiALptvEq+g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-2.1.0.tgz", + "integrity": "sha512-HzC7MuoEwG1rIxRaNTqgcaYF03z/ZxYkQR2D5BN0N45kLnHY1HJXiEcZkcffTsqXdspLjn47yLi44UoCwF5fxQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "^3.2.4", + "vega-dataflow": "^6.1.0", + "vega-statistics": "^2.0.0", + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-regression/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { - "d3-array": "^3.2.2", - "vega-dataflow": "^5.7.3", - "vega-statistics": "^1.9.0", - "vega-util": "^1.15.2" + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-runtime": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-6.1.4.tgz", - "integrity": "sha512-0dDYXyFLQcxPQ2OQU0WuBVYLRZnm+/CwVu6i6N4idS7R9VXIX5581EkCh3pZ20pQ/+oaA7oJ0pR9rJgJ6rukRQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-7.1.0.tgz", + "integrity": "sha512-mItI+WHimyEcZlZrQ/zYR3LwHVeyHCWwp7MKaBjkU8EwkSxEEGVceyGUY9X2YuJLiOgkLz/6juYDbMv60pfwYA==", + "license": "BSD-3-Clause", "dependencies": { - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "vega-dataflow": "^6.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-scale": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.3.0.tgz", - "integrity": "sha512-pMOAI2h+e1z7lsqKG+gMfR6NKN2sTcyjZbdJwntooW0uFHwjLGjMSY7kSd3nSEquF0HQ8qF7zR6gs1eRwlGimw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-8.1.0.tgz", + "integrity": "sha512-VEgDuEcOec8+C8+FzLcnAmcXrv2gAJKqQifCdQhkgnsLa978vYUgVfCut/mBSMMHbH8wlUV1D0fKZTjRukA1+A==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "^3.2.2", + "d3-array": "^3.2.4", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", - "vega-time": "^2.1.1", - "vega-util": "^1.17.1" + "d3-scale-chromatic": "^3.1.0", + "vega-time": "^3.1.0", + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-scale/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-scenegraph": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.10.2.tgz", - "integrity": "sha512-R8m6voDZO5+etwNMcXf45afVM3XAtokMqxuDyddRl9l1YqSJfS+3u8hpolJ50c2q6ZN20BQiJwKT1o0bB7vKkA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-5.1.0.tgz", + "integrity": "sha512-4gA89CFIxkZX+4Nvl8SZF2MBOqnlj9J5zgdPh/HPx+JOwtzSlUqIhxFpFj7GWYfwzr/PyZnguBLPihPw1Og/cA==", + "license": "BSD-3-Clause", "dependencies": { "d3-path": "^3.1.0", "d3-shape": "^3.2.0", - "vega-canvas": "^1.2.7", - "vega-loader": "^4.5.1", - "vega-scale": "^7.3.0", - "vega-util": "^1.17.1" + "vega-canvas": "^2.0.0", + "vega-loader": "^5.1.0", + "vega-scale": "^8.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-schema-url-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vega-schema-url-parser/-/vega-schema-url-parser-2.2.0.tgz", - "integrity": "sha512-yAtdBnfYOhECv9YC70H2gEiqfIbVkq09aaE4y/9V/ovEFmH9gPKaEgzIZqgT7PSPQjKhsNkb6jk6XvSoboxOBw==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vega-schema-url-parser/-/vega-schema-url-parser-3.0.2.tgz", + "integrity": "sha512-xAnR7KAvNPYewI3O0l5QGdT8Tv0+GCZQjqfP39cW/hbe/b3aYMAQ39vm8O2wfXUHzm04xTe7nolcsx8WQNVLRQ==", + "license": "BSD-3-Clause" }, "node_modules/vega-selections": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.4.1.tgz", - "integrity": "sha512-EtYc4DvA+wXqBg9tq+kDomSoVUPCmQfS7hUxy2qskXEed79YTimt3Hcl1e1fW226I4AVDBEqTTKebmKMzbSgAA==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-6.1.2.tgz", + "integrity": "sha512-xJ+V4qdd46nk2RBdwIRrQm2iSTMHdlu/omhLz1pqRL3jZDrkqNBXimrisci2kIKpH2WBpA1YVagwuZEKBmF2Qw==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "3.2.2", - "vega-expression": "^5.0.1", - "vega-util": "^1.17.1" + "d3-array": "3.2.4", + "vega-expression": "^6.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-selections/node_modules/d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { "internmap": "1 - 2" }, @@ -7126,174 +6295,249 @@ } }, "node_modules/vega-statistics": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.9.0.tgz", - "integrity": "sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-2.0.0.tgz", + "integrity": "sha512-dGPfDXnBlgXbZF3oxtkb8JfeRXd5TYHx25Z/tIoaa9jWua4Vf/AoW2wwh8J1qmMy8J03/29aowkp1yk4DOPazQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "^3.2.4" + } + }, + "node_modules/vega-statistics/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { - "d3-array": "^3.2.2" + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-themes": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/vega-themes/-/vega-themes-2.13.0.tgz", - "integrity": "sha512-SVr/YDqGhkVDO2bRS62TeGyr1dVuXaNLJNCu42b1tbcnnmX2m9cyaq8G6gcputPeibArvHT1MsTF7MUzboOIWg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vega-themes/-/vega-themes-3.0.0.tgz", + "integrity": "sha512-1iFiI3BNmW9FrsLnDLx0ZKEddsCitRY3XmUAwp6qmp+p+IXyJYc9pfjlVj9E6KXBPfm4cQyU++s0smKNiWzO4g==", + "license": "BSD-3-Clause", + "funding": { + "url": "https://app.hubspot.com/payments/GyPC972GD9Rt" + }, "peerDependencies": { "vega": "*", "vega-lite": "*" } }, "node_modules/vega-time": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.1.tgz", - "integrity": "sha512-z1qbgyX0Af2kQSGFbApwBbX2meenGvsoX8Nga8uyWN8VIbiySo/xqizz1KrP6NbB6R+x5egKmkjdnyNThPeEWA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-3.1.0.tgz", + "integrity": "sha512-G93mWzPwNa6UYQRkr8Ujur9uqxbBDjDT/WpXjbDY0yygdSkRT+zXF+Sb4gjhW0nPaqdiwkn0R6kZcSPMj1bMNA==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "^3.2.2", + "d3-array": "^3.2.4", "d3-time": "^3.1.0", - "vega-util": "^1.17.1" + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-time/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-tooltip": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/vega-tooltip/-/vega-tooltip-0.32.0.tgz", - "integrity": "sha512-Sc4/vZsXDM9nOiHrxc8hfpc9lYc7Nr0FIYYkIi90v2d6IoE6thm6T4Exo2m7cMK4rwevwf6c4/FABwjOMIs4MQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vega-tooltip/-/vega-tooltip-1.0.0.tgz", + "integrity": "sha512-P1R0JP29v0qnTuwzCQ0SPJlkjAzr6qeyj+H4VgUFSykHmHc1OBxda//XBaFDl/bZgIscEMvjKSjZpXd84x3aZQ==", + "license": "BSD-3-Clause", "dependencies": { - "vega-util": "^1.17.1" + "vega-util": "^2.0.0" + }, + "funding": { + "url": "https://app.hubspot.com/payments/GyPC972GD9Rt" } }, "node_modules/vega-transforms": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.10.2.tgz", - "integrity": "sha512-sJELfEuYQ238PRG+GOqQch8D69RYnJevYSGLsRGQD2LxNz3j+GlUX6Pid+gUEH5HJy22Q5L0vsTl2ZNhIr4teQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-5.1.0.tgz", + "integrity": "sha512-mj/sO2tSuzzpiXX8JSl4DDlhEmVwM/46MTAzTNQUQzJPMI/n4ChCjr/SdEbfEyzlD4DPm1bjohZGjLc010yuMg==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "^3.2.4", + "vega-dataflow": "^6.1.0", + "vega-statistics": "^2.0.0", + "vega-time": "^3.1.0", + "vega-util": "^2.1.0" + } + }, + "node_modules/vega-transforms/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { - "d3-array": "^3.2.2", - "vega-dataflow": "^5.7.5", - "vega-statistics": "^1.8.1", - "vega-time": "^2.1.1", - "vega-util": "^1.17.1" + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, "node_modules/vega-typings": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-0.24.0.tgz", - "integrity": "sha512-FFYf67Dn5VNPbYoYHgO2T9Z1I81qcwrXjwKEe0rlJk0MX7CNWPJr9Y3VZEWfxyEx7J9anAm69hGIv0Ehb2G85A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-2.1.0.tgz", + "integrity": "sha512-zdis4Fg4gv37yEvTTSZEVMNhp8hwyEl7GZ4X4HHddRVRKxWFsbyKvZx/YW5Z9Ox4sjxVA2qHzEbod4Fdx+SEJA==", + "license": "BSD-3-Clause", "dependencies": { - "@types/geojson": "^7946.0.10", - "vega-event-selector": "^3.0.1", - "vega-expression": "^5.0.1", - "vega-util": "^1.17.1" + "@types/geojson": "7946.0.16", + "vega-event-selector": "^4.0.0", + "vega-expression": "^6.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-util": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", - "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-2.1.0.tgz", + "integrity": "sha512-PGfp0m0QCufDmcxKJCWQy4Ov23FoF8DSXmoJwSezi3itQaa2hbxK0+xwsTMP2vy4PR16Pu25HMzgMwXVW1+33w==", + "license": "BSD-3-Clause" }, "node_modules/vega-view": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-5.11.1.tgz", - "integrity": "sha512-RoWxuoEMI7xVQJhPqNeLEHCezudsf3QkVMhH5tCovBqwBADQGqq9iWyax3ZzdyX1+P3eBgm7cnLvpqtN2hU8kA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-6.1.0.tgz", + "integrity": "sha512-hmHDm/zC65lb23mb9Tr9Gx0wkxP0TMS31LpMPYxIZpvInxvUn7TYitkOtz1elr63k2YZrgmF7ztdGyQ4iCQ5fQ==", + "license": "BSD-3-Clause", "dependencies": { - "d3-array": "^3.2.2", + "d3-array": "^3.2.4", "d3-timer": "^3.0.1", - "vega-dataflow": "^5.7.5", - "vega-format": "^1.1.1", - "vega-functions": "^5.13.1", - "vega-runtime": "^6.1.4", - "vega-scenegraph": "^4.10.2", - "vega-util": "^1.17.1" + "vega-dataflow": "^6.1.0", + "vega-format": "^2.1.0", + "vega-functions": "^6.1.0", + "vega-runtime": "^7.1.0", + "vega-scenegraph": "^5.1.0", + "vega-util": "^2.1.0" } }, "node_modules/vega-view-transforms": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.5.9.tgz", - "integrity": "sha512-NxEq4ZD4QwWGRrl2yDLnBRXM9FgCI+vvYb3ZC2+nVDtkUxOlEIKZsMMw31op5GZpfClWLbjCT3mVvzO2xaTF+g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-5.1.0.tgz", + "integrity": "sha512-fpigh/xn/32t+An1ShoY3MLeGzNdlbAp2+HvFKzPpmpMTZqJEWkk/J/wHU7Swyc28Ta7W1z3fO+8dZkOYO5TWQ==", + "license": "BSD-3-Clause", "dependencies": { - "vega-dataflow": "^5.7.5", - "vega-scenegraph": "^4.10.2", - "vega-util": "^1.17.1" + "vega-dataflow": "^6.1.0", + "vega-scenegraph": "^5.1.0", + "vega-util": "^2.1.0" } }, - "node_modules/vega-voronoi": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.2.1.tgz", - "integrity": "sha512-zzi+fxU/SBad4irdLLsG3yhZgXWZezraGYVQfZFWe8kl7W/EHUk+Eqk/eetn4bDeJ6ltQskX+UXH3OP5Vh0Q0Q==", + "node_modules/vega-view/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { - "d3-delaunay": "^6.0.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, - "node_modules/vega-wordcloud": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.4.tgz", - "integrity": "sha512-oeZLlnjiusLAU5vhk0IIdT5QEiJE0x6cYoGNq1th+EbwgQp153t4r026fcib9oq15glHFOzf81a8hHXHSJm1Jw==", + "node_modules/vega-voronoi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-5.1.0.tgz", + "integrity": "sha512-uKdsoR9x60mz7eYtVG+NhlkdQXeVdMr6jHNAHxs+W+i6kawkUp5S9jp1xf1FmW/uZvtO1eqinHQNwATcDRsiUg==", + "license": "BSD-3-Clause", "dependencies": { - "vega-canvas": "^1.2.7", - "vega-dataflow": "^5.7.5", - "vega-scale": "^7.3.0", - "vega-statistics": "^1.8.1", - "vega-util": "^1.17.1" + "d3-delaunay": "^6.0.4", + "vega-dataflow": "^6.1.0", + "vega-util": "^2.1.0" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], + "node_modules/vega-wordcloud": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-5.1.0.tgz", + "integrity": "sha512-sSdNmT8y2D7xXhM2h76dKyaYn3PA4eV49WUUkfYfqHz/vpcu10GSAoFxLhQQTkbZXR+q5ZB63tFUow9W2IFo6g==", + "license": "BSD-3-Clause", "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "vega-canvas": "^2.0.0", + "vega-dataflow": "^6.1.0", + "vega-scale": "^8.1.0", + "vega-statistics": "^2.0.0", + "vega-util": "^2.1.0" } }, "node_modules/viewport-mercator-project": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/viewport-mercator-project/-/viewport-mercator-project-7.0.4.tgz", "integrity": "sha512-0jzpL6pIMocCKWg1C3mqi/N4UPgZC3FzwghEm1H+XsUo8hNZAyJc3QR7YqC816ibOR8aWT5pCsV+gCu8/BMJgg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", "dependencies": { "@math.gl/web-mercator": "^3.5.5" } }, "node_modules/vite": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", - "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz", + "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.23", - "rollup": "^3.21.0" + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, + "lightningcss": { + "optional": true + }, "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -7302,190 +6546,101 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, - "node_modules/vite/node_modules/rollup": { - "version": "3.21.7", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.7.tgz", - "integrity": "sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w==", + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, + "license": "MIT", "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" + "node": ">=12.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, "node_modules/vt-pbf": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", "dependencies": { "@mapbox/point-geometry": "0.1.0", "@mapbox/vector-tile": "^1.3.1", "pbf": "^3.2.1" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^7.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "node": "^20.19.0 || ^22.12.0 || >=23" } } } diff --git a/stormpiper/stormpiper/spa/package.json b/stormpiper/stormpiper/spa/package.json index 35cb2527..31dcf4c1 100644 --- a/stormpiper/stormpiper/spa/package.json +++ b/stormpiper/stormpiper/spa/package.json @@ -12,12 +12,14 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "devDependencies": { - "@vitejs/plugin-react": "^3.1.0", - "cypress": "^9.7.0", + "@types/node": "^24.10.1", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-polyfill-node": "^0.10.2", - "typescript": "^4.8.4", - "vite": "^4.3.9" + "rollup-plugin-polyfill-node": "^0.13.0", + "typescript": "^5.9.3", + "vite": "^7.2.6" }, "dependencies": { "@deck.gl/core": "^8.8.12", @@ -29,13 +31,8 @@ "@mui/icons-material": "^5.11.11", "@mui/material": "^5.11.15", "@mui/x-data-grid": "^6.0.4", - "@types/jest": "^28.1.1", - "@types/node": "^18.8.2", - "@types/react": "^17.0.45", - "@types/react-dom": "^18.0.6", "d3-fetch": "^3.0.1", "d3-scale-chromatic": "^3.0.0", - "events": "^3.3.0", "lodash.debounce": "^4.0.8", "mapbox-gl": "^2.10.0", "nebula.gl": "^1.0.4", @@ -44,8 +41,6 @@ "react-hook-form": "^7.36.1", "react-map-gl": "^6.1.16", "react-router-dom": "^6.4.1", - "vega": "^5.25.0", - "vega-embed": "^6.22.1", - "vega-lite": "^5.8.0" + "vega-embed": "^7.0.2" } } diff --git a/stormpiper/stormpiper/spa/src/App.test.jsx b/stormpiper/stormpiper/spa/src/App.test.jsx deleted file mode 100644 index 1f03afee..00000000 --- a/stormpiper/stormpiper/spa/src/App.test.jsx +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(