From 1339821139329a6cef179e2d14324f843526edc7 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 12 May 2023 16:44:28 +0900 Subject: [PATCH 001/222] Added a directory with some PostGIS snippets and resources for task-splitting --- scripts/postgis_snippets/centroids.sql | 25 +++++++++++++++++++ .../postgis_snippets/points_in_polygon.sql | 5 ++++ scripts/postgis_snippets/polygonize.sql | 6 +++++ scripts/postgis_snippets/postgis_resources.md | 3 +++ 4 files changed, 39 insertions(+) create mode 100644 scripts/postgis_snippets/centroids.sql create mode 100644 scripts/postgis_snippets/points_in_polygon.sql create mode 100644 scripts/postgis_snippets/polygonize.sql create mode 100644 scripts/postgis_snippets/postgis_resources.md diff --git a/scripts/postgis_snippets/centroids.sql b/scripts/postgis_snippets/centroids.sql new file mode 100644 index 0000000000..64b3afb808 --- /dev/null +++ b/scripts/postgis_snippets/centroids.sql @@ -0,0 +1,25 @@ +-- simple version (does not retain attributes) +/* +SELECT st_centroid(geom) as geom +FROM "osm_polygons" where building is not null; +*/ + +-- composed version (also does not retain attributes) +/* +with buildings as ( + select * + from "OSM_polygons" + where building is not null + ) +select st_centroid(geom) as geom +from buildings; +*/ + +-- composed version that retains attributes +with buildings as ( + select * + from "OSM_polygons" + where building is not null + ) +select *, st_centroid(geom) as centroid_geom +from buildings; diff --git a/scripts/postgis_snippets/points_in_polygon.sql b/scripts/postgis_snippets/points_in_polygon.sql new file mode 100644 index 0000000000..9c87bb448c --- /dev/null +++ b/scripts/postgis_snippets/points_in_polygon.sql @@ -0,0 +1,5 @@ +select p._uid_, count(c.geom) as numpoints +from OSM_polygons p +left join OSM_Building_centroids c +on st_contains(p.geom,c.geom) +group by p._uid_ diff --git a/scripts/postgis_snippets/polygonize.sql b/scripts/postgis_snippets/polygonize.sql new file mode 100644 index 0000000000..62eb6b4039 --- /dev/null +++ b/scripts/postgis_snippets/polygonize.sql @@ -0,0 +1,6 @@ +SELECT (ST_Dump(ST_Polygonize(ST_Node(multi_geom)))).geom +FROM ( + SELECT ST_Collect(geom) AS multi_geom + FROM osmlines +) q +; diff --git a/scripts/postgis_snippets/postgis_resources.md b/scripts/postgis_snippets/postgis_resources.md new file mode 100644 index 0000000000..080421bd05 --- /dev/null +++ b/scripts/postgis_snippets/postgis_resources.md @@ -0,0 +1,3 @@ +Paul Ramsey is a Canadian open source geographical analyst and developer. [His blog](https://blog.cleverelephant.ca/) (which is often *very* technical) is a gold mine of information on many subjects, notably PostGIS. +- [Overlays of polygons](https://blog.cleverelephant.ca/2019/07/postgis-overlays.html) +- \ No newline at end of file From 5c21a17943cf717d2a0a9ee94a53dd072515ab2e Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 12 May 2023 16:47:30 +0900 Subject: [PATCH 002/222] forgot geom column in count points in polygon --- scripts/postgis_snippets/points_in_polygon.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/postgis_snippets/points_in_polygon.sql b/scripts/postgis_snippets/points_in_polygon.sql index 9c87bb448c..a823521879 100644 --- a/scripts/postgis_snippets/points_in_polygon.sql +++ b/scripts/postgis_snippets/points_in_polygon.sql @@ -1,5 +1,5 @@ -select p._uid_, count(c.geom) as numpoints -from OSM_polygons p -left join OSM_Building_centroids c +select p._uid_, p.geom, count(c.geom) as numpoints +from islingtonsplitpolygons p +left join islingtonbuildingcentroids c on st_contains(p.geom,c.geom) group by p._uid_ From d93e02316ff60c8cafcdba8f4d972a58310a4606 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Mon, 15 May 2023 14:06:22 +0900 Subject: [PATCH 003/222] added voronoi polygon snipped and a bit more commenting --- scripts/postgis_snippets/centroids.sql | 5 +++++ scripts/postgis_snippets/points_in_polygon.sql | 5 +++++ scripts/postgis_snippets/polygonize.sql | 4 ++++ scripts/postgis_snippets/voronoi.sql | 15 +++++++++++++++ 4 files changed, 29 insertions(+) create mode 100644 scripts/postgis_snippets/voronoi.sql diff --git a/scripts/postgis_snippets/centroids.sql b/scripts/postgis_snippets/centroids.sql index 64b3afb808..63aa58eb05 100644 --- a/scripts/postgis_snippets/centroids.sql +++ b/scripts/postgis_snippets/centroids.sql @@ -1,3 +1,8 @@ +/* +Several recipes for creating centroids from a layer of polygons. +Here assuming the polygons are called "buildings". +*/ + -- simple version (does not retain attributes) /* SELECT st_centroid(geom) as geom diff --git a/scripts/postgis_snippets/points_in_polygon.sql b/scripts/postgis_snippets/points_in_polygon.sql index a823521879..44cef46999 100644 --- a/scripts/postgis_snippets/points_in_polygon.sql +++ b/scripts/postgis_snippets/points_in_polygon.sql @@ -1,3 +1,8 @@ +/* +Takes a layer of points and a layer of polygons. +Counts the number of points in each polygon. +*/ + select p._uid_, p.geom, count(c.geom) as numpoints from islingtonsplitpolygons p left join islingtonbuildingcentroids c diff --git a/scripts/postgis_snippets/polygonize.sql b/scripts/postgis_snippets/polygonize.sql index 62eb6b4039..f9387a2628 100644 --- a/scripts/postgis_snippets/polygonize.sql +++ b/scripts/postgis_snippets/polygonize.sql @@ -1,3 +1,7 @@ +/* +Takes a bunch of lines (for example roads, waterways, etc from OSM) +and converts every area enclosed by those lines. +*/ SELECT (ST_Dump(ST_Polygonize(ST_Node(multi_geom)))).geom FROM ( SELECT ST_Collect(geom) AS multi_geom diff --git a/scripts/postgis_snippets/voronoi.sql b/scripts/postgis_snippets/voronoi.sql new file mode 100644 index 0000000000..382aabcf3d --- /dev/null +++ b/scripts/postgis_snippets/voronoi.sql @@ -0,0 +1,15 @@ +/* +Creates Voronoi polygons from a layer of points. From inside to out: +- Collects the points layer into a single multipoint geometry (st_collect) +- Creates voronoi polygons (st_voronoipolygons) +- Dumps them to separate features (st_dump) + +Caution: Does NOT retain the original UIDs of the points. You get a number of +Voronoi polygons equal to the original number of points, but the IDs of the +points don't match those of the polygons they fall within. +*/ + +with voronoi (v) as + (select st_dump(st_voronoipolygons(st_collect(geom))) + as geom from points) +select (v).geom from voronoi; From ed4d55ad687ec27cfe9c53be70954d044e8efa01 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Mon, 15 May 2023 15:10:20 +0900 Subject: [PATCH 004/222] Added a clustering snippet --- scripts/postgis_snippets/clustering.sql | 7 +++++++ scripts/postgis_snippets/postgis_resources.md | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 scripts/postgis_snippets/clustering.sql diff --git a/scripts/postgis_snippets/clustering.sql b/scripts/postgis_snippets/clustering.sql new file mode 100644 index 0000000000..bd63287ad8 --- /dev/null +++ b/scripts/postgis_snippets/clustering.sql @@ -0,0 +1,7 @@ +/* +Create a specified number of clusters + +*/ +select st_clusterkmeans(geom, 100) --creates 100 clusters +over () +as cid, geom from points diff --git a/scripts/postgis_snippets/postgis_resources.md b/scripts/postgis_snippets/postgis_resources.md index 080421bd05..76eb7a4a8c 100644 --- a/scripts/postgis_snippets/postgis_resources.md +++ b/scripts/postgis_snippets/postgis_resources.md @@ -1,3 +1,7 @@ +# PostGIS resources +## Paul Ramsey or CleverElephant Paul Ramsey is a Canadian open source geographical analyst and developer. [His blog](https://blog.cleverelephant.ca/) (which is often *very* technical) is a gold mine of information on many subjects, notably PostGIS. - [Overlays of polygons](https://blog.cleverelephant.ca/2019/07/postgis-overlays.html) -- \ No newline at end of file + +## Random +- [A nice Stack Exchange](https://gis.stackexchange.com/questions/172198/constructing-voronoi-diagram-in-postgis/174219#174219) on Voronoi Polygons From d7163ec15c23da45db1618f54968127b78d21f99 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Wed, 17 May 2023 11:52:32 +0900 Subject: [PATCH 005/222] better aliases --- scripts/postgis_snippets/points_in_polygon.sql | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/postgis_snippets/points_in_polygon.sql b/scripts/postgis_snippets/points_in_polygon.sql index 44cef46999..f62291830b 100644 --- a/scripts/postgis_snippets/points_in_polygon.sql +++ b/scripts/postgis_snippets/points_in_polygon.sql @@ -3,8 +3,8 @@ Takes a layer of points and a layer of polygons. Counts the number of points in each polygon. */ -select p._uid_, p.geom, count(c.geom) as numpoints -from islingtonsplitpolygons p -left join islingtonbuildingcentroids c -on st_contains(p.geom,c.geom) -group by p._uid_ +select poly._uid_, poly.geom, count(cent.geom) as numpoints +from islingtonsplitpolygons poly +left join islingtonbuildingcentroids cent +on st_contains(poly.geom,cent.geom) +group by poly._uid_ From 8c8304079f6444eeb4764710dc4771acfbe66f44 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Thu, 18 May 2023 13:01:28 +0900 Subject: [PATCH 006/222] added selection of lines in poly --- scripts/postgis_snippets/select_lines_in_polygon.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 scripts/postgis_snippets/select_lines_in_polygon.sql diff --git a/scripts/postgis_snippets/select_lines_in_polygon.sql b/scripts/postgis_snippets/select_lines_in_polygon.sql new file mode 100644 index 0000000000..d21d6bd349 --- /dev/null +++ b/scripts/postgis_snippets/select_lines_in_polygon.sql @@ -0,0 +1,7 @@ +/* +Selects all lines for which any portion falls within a given polygon. +*/ + +select lines.* +from "AOI_Polygon" poly, "OSM_lines" lines +where st_intersects(lines.geom, poly.geom) From 3ed1e8ddf719b9068a74b6c92bbe4e077fcb705e Mon Sep 17 00:00:00 2001 From: ivangayton Date: Thu, 18 May 2023 20:02:43 +0900 Subject: [PATCH 007/222] Added composed query that creates splits from OSM lines and an AOI --- .../split_aoi__by_osm_lines.sql | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 scripts/postgis_snippets/split_aoi__by_osm_lines.sql diff --git a/scripts/postgis_snippets/split_aoi__by_osm_lines.sql b/scripts/postgis_snippets/split_aoi__by_osm_lines.sql new file mode 100644 index 0000000000..22fa94398d --- /dev/null +++ b/scripts/postgis_snippets/split_aoi__by_osm_lines.sql @@ -0,0 +1,26 @@ +/* +This incorporates a number of the other scripts into one that accepts: +- A layer of OSM lines from osm2pgsql* +- A single AOI polygon. + +It splits the AOI into multiple polygons based on the roads, waterways, and +railways contained in the OSM line layer. + +* It is important to use a line layer from osm2pgsql, because this script +assumes that the lines have tags as JSON blobs in a single column called tags. +*/ + +with splitlines as( + select lines.* + from "AOI" poly, ways_line lines + where st_intersects(lines.geom, poly.geom) + and (tags->>'highway' is not null + or tags->>'waterway' is not null + or tags->>'railway' is not null) +) + + SELECT (ST_Dump(ST_Polygonize(ST_Node(multi_geom)))).geom + FROM ( + SELECT ST_Collect(s.geom) AS multi_geom + FROM splitlines s +) splitpolys; From a48c9569c97f944b0df6942d3ca422e1e2ceb2f0 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Thu, 18 May 2023 23:31:29 +0900 Subject: [PATCH 008/222] more snippets: --- .../import_geojson_as_postgis_with_jsonb.md | 33 +++++++++++++++++++ ...m_lines.sql => split_aoi_by_osm_lines.sql} | 0 2 files changed, 33 insertions(+) create mode 100644 scripts/postgis_snippets/import_geojson_as_postgis_with_jsonb.md rename scripts/postgis_snippets/{split_aoi__by_osm_lines.sql => split_aoi_by_osm_lines.sql} (100%) diff --git a/scripts/postgis_snippets/import_geojson_as_postgis_with_jsonb.md b/scripts/postgis_snippets/import_geojson_as_postgis_with_jsonb.md new file mode 100644 index 0000000000..505efa693a --- /dev/null +++ b/scripts/postgis_snippets/import_geojson_as_postgis_with_jsonb.md @@ -0,0 +1,33 @@ +# Deprecated; now using pg_dump + +Import the GeoJSON file to PostGIS. To function in the same way as a layer directly imported from OSM using osm2psql, the ```tags``` column needs to be jsonb type. + +There probably is a simple way to combine changing the column type and casting the json string to the actual jsonb type, but I don't know how to do it. So here's the workaround: + +- Rename the tags column to tagsvarchar + +``` +alter table "Islington_AOI_polygons" +rename column tags to tagsvarchar; +``` + +- create a new tags column with the correct type + +``` +alter table "Islington_AOI_polygons" +add column tags jsonb +``` + +- Cast the json strings to jsonb and copy them over + +``` +update "Islington_AOI_polygons" +set tags = tagsvarchar::jsonb +``` + +- Nuke the renamed column with the varchar, leaving only the ```tags``` column with the jsonb type + +``` +alter table "Islington_AOI_polygons" +drop column tagsvarchar +``` diff --git a/scripts/postgis_snippets/split_aoi__by_osm_lines.sql b/scripts/postgis_snippets/split_aoi_by_osm_lines.sql similarity index 100% rename from scripts/postgis_snippets/split_aoi__by_osm_lines.sql rename to scripts/postgis_snippets/split_aoi_by_osm_lines.sql From 65b76d86c1b56535cfb13a8baba49dadbe6712f3 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 19 May 2023 14:03:36 +0900 Subject: [PATCH 009/222] generalized selection within polygon snippet --- scripts/postgis_snippets/select_features_in_polygon.sql | 8 ++++++++ scripts/postgis_snippets/select_lines_in_polygon.sql | 7 ------- 2 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 scripts/postgis_snippets/select_features_in_polygon.sql delete mode 100644 scripts/postgis_snippets/select_lines_in_polygon.sql diff --git a/scripts/postgis_snippets/select_features_in_polygon.sql b/scripts/postgis_snippets/select_features_in_polygon.sql new file mode 100644 index 0000000000..b07bcfa8ca --- /dev/null +++ b/scripts/postgis_snippets/select_features_in_polygon.sql @@ -0,0 +1,8 @@ +/* +Selects all features (points, lines, or polygons) +for which any portion falls within a given polygon. +*/ + +select features.* +from "AOI_Polygon" poly, "OSM_features" features +where st_intersects(features.geom, poly.geom) diff --git a/scripts/postgis_snippets/select_lines_in_polygon.sql b/scripts/postgis_snippets/select_lines_in_polygon.sql deleted file mode 100644 index d21d6bd349..0000000000 --- a/scripts/postgis_snippets/select_lines_in_polygon.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* -Selects all lines for which any portion falls within a given polygon. -*/ - -select lines.* -from "AOI_Polygon" poly, "OSM_lines" lines -where st_intersects(lines.geom, poly.geom) From fff5de401127b759dfa3770d25a6af08f81299ea Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 19 May 2023 19:40:03 +0900 Subject: [PATCH 010/222] clustering retaining attributes --- scripts/postgis_snippets/clustering.sql | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/scripts/postgis_snippets/clustering.sql b/scripts/postgis_snippets/clustering.sql index bd63287ad8..f6ae65910a 100644 --- a/scripts/postgis_snippets/clustering.sql +++ b/scripts/postgis_snippets/clustering.sql @@ -1,7 +1,21 @@ /* -Create a specified number of clusters - +Create a specified number of clusters from any geometry +(tested with points and polygons, no idea what it does with lines) +Simply adds a "cid" column to all features, with the same +value for all features in each cluster */ -select st_clusterkmeans(geom, 100) --creates 100 clusters + +/* +-- Version that does not retain attributes +select st_clusterkmeans(geom, 200) --creates 200 clusters over () -as cid, geom from points +as cid, geom +from features +*/ + +-- This version retains attributes +select *, st_clusterkmeans(geom, 200) --creates 200 clusters +over () +as cid +from features + From dacf6c4f7aff7c6e45a33c531c9028ac88cced44 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Thu, 25 May 2023 14:46:56 +0900 Subject: [PATCH 011/222] added snippet to count tags --- .../postgis_snippets/count_building_tags.sql | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 scripts/postgis_snippets/count_building_tags.sql diff --git a/scripts/postgis_snippets/count_building_tags.sql b/scripts/postgis_snippets/count_building_tags.sql new file mode 100644 index 0000000000..9f271e87f9 --- /dev/null +++ b/scripts/postgis_snippets/count_building_tags.sql @@ -0,0 +1,35 @@ +/* +Selects every building within a set of OSM polygons that has a tag, any tag, +in addition to 'building'. + +This is a very rough proxy for buildings that have been field mapped. It's +rough because many buildings have tags other than 'building' that have +only been remotely mapped. Still, it's useful because most buildings that +have only been digitized in JOSM/ID only have the tag 'building'='yes'. +This filters all of those out. + +Works on OSM extracts converted to PostGIS layers using the Underpass +database schema: + +https://github.com/hotosm/underpass/blob/master/utils/raw.lua + +which converts all tags into a jsonb object in a 'tags' column. +*/ + + +with tagsarrayed as +( +select +*, +array(select jsonb_object_keys(tags)) as keys +from "ways_poly" +where tags->>'building' is not null +), +tagscounted as +( +select *, array_length(keys, 1) as numkeys +from tagsarrayed +) +select * +from tagscounted +where numkeys > 1 From 303f30d7116dca5af6d3de99ba11247e2bb09082 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Thu, 25 May 2023 19:28:03 +0900 Subject: [PATCH 012/222] stub out possible way to exclude certain tags --- scripts/postgis_snippets/count_building_tags.sql | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/postgis_snippets/count_building_tags.sql b/scripts/postgis_snippets/count_building_tags.sql index 9f271e87f9..73283ad4fb 100644 --- a/scripts/postgis_snippets/count_building_tags.sql +++ b/scripts/postgis_snippets/count_building_tags.sql @@ -14,6 +14,10 @@ database schema: https://github.com/hotosm/underpass/blob/master/utils/raw.lua which converts all tags into a jsonb object in a 'tags' column. + +Probably useful at some point to punt tags that don't help +identify field mapping, such as 'source' (usually just a reference +to the imagery used to digitize) */ @@ -29,7 +33,11 @@ tagscounted as ( select *, array_length(keys, 1) as numkeys from tagsarrayed -) +)/*, +tagsignored as +( +select * from () +)*/ select * from tagscounted where numkeys > 1 From 20cfd73e2d6528f80453385cf17df7822f6f3e9a Mon Sep 17 00:00:00 2001 From: ivangayton Date: Sat, 27 May 2023 10:26:42 +0900 Subject: [PATCH 013/222] added more resources --- scripts/postgis_snippets/postgis_resources.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/postgis_snippets/postgis_resources.md b/scripts/postgis_snippets/postgis_resources.md index 76eb7a4a8c..bb58fb78b9 100644 --- a/scripts/postgis_snippets/postgis_resources.md +++ b/scripts/postgis_snippets/postgis_resources.md @@ -3,5 +3,8 @@ Paul Ramsey is a Canadian open source geographical analyst and developer. [His blog](https://blog.cleverelephant.ca/) (which is often *very* technical) is a gold mine of information on many subjects, notably PostGIS. - [Overlays of polygons](https://blog.cleverelephant.ca/2019/07/postgis-overlays.html) +## Matt Forest's Spatial SQL Cookbook +- Intended for someone who's already an experienced GIS user and wants to transfer their knowledge to SQL. [Lots of clear, useful recipes](https://forrest.nyc/spatial-sql-cookbook/). + ## Random - [A nice Stack Exchange](https://gis.stackexchange.com/questions/172198/constructing-voronoi-diagram-in-postgis/174219#174219) on Voronoi Polygons From 863b8de99eabd3540bd04b90a458446a0e9a27a6 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Sat, 27 May 2023 13:14:04 +0900 Subject: [PATCH 014/222] another counting snippet --- scripts/postgis_snippets/points_in_polygon.sql | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/postgis_snippets/points_in_polygon.sql b/scripts/postgis_snippets/points_in_polygon.sql index f62291830b..f9c0f35136 100644 --- a/scripts/postgis_snippets/points_in_polygon.sql +++ b/scripts/postgis_snippets/points_in_polygon.sql @@ -8,3 +8,12 @@ from islingtonsplitpolygons poly left join islingtonbuildingcentroids cent on st_contains(poly.geom,cent.geom) group by poly._uid_ + +-- Count with intersect instead +/* +select sp.polyid, sp.geom, count(b.geom) as numfeatures +from "splitpolys" sp +left join "buildings" b +on st_intersects(sp.geom,b.geom) +group by sp.polyid, sp.geom +*/ From 1342d9feabdd550168db584afd8c5f529f814582 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Tue, 30 May 2023 10:13:15 +0900 Subject: [PATCH 015/222] added an interesting PostGIS resource --- scripts/postgis_snippets/postgis_resources.md | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/postgis_snippets/postgis_resources.md b/scripts/postgis_snippets/postgis_resources.md index bb58fb78b9..9a63ea3118 100644 --- a/scripts/postgis_snippets/postgis_resources.md +++ b/scripts/postgis_snippets/postgis_resources.md @@ -8,3 +8,4 @@ Paul Ramsey is a Canadian open source geographical analyst and developer. [His b ## Random - [A nice Stack Exchange](https://gis.stackexchange.com/questions/172198/constructing-voronoi-diagram-in-postgis/174219#174219) on Voronoi Polygons +- [Best answer ever](https://stackoverflow.com/questions/49531535/pass-fields-when-applying-st-voronoipolygons-and-clip-output) on how to subdivide existing areas with Voronoi polygons From 3d8789d6fb5178fe69894e25eb52e5305a1037de Mon Sep 17 00:00:00 2001 From: ivangayton Date: Thu, 8 Jun 2023 09:17:43 +0100 Subject: [PATCH 016/222] Added some fairly complete splitting utilites from the task-splitting Hackathon --- .../task_splitting/building_clusters_of_5.sql | 148 ++++++++++ ...ve_hull_tasks_from_clustered_buildings.sql | 27 ++ .../task_splitting/task_splitting.sql | 254 ++++++++++++++++++ 3 files changed, 429 insertions(+) create mode 100644 scripts/postgis_snippets/task_splitting/building_clusters_of_5.sql create mode 100644 scripts/postgis_snippets/task_splitting/concave_hull_tasks_from_clustered_buildings.sql create mode 100644 scripts/postgis_snippets/task_splitting/task_splitting.sql diff --git a/scripts/postgis_snippets/task_splitting/building_clusters_of_5.sql b/scripts/postgis_snippets/task_splitting/building_clusters_of_5.sql new file mode 100644 index 0000000000..9c1f91248c --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/building_clusters_of_5.sql @@ -0,0 +1,148 @@ +/* +Licence: GPLv3 + +This script divides an layer of buildings into clusters suitable for field +mapping as part of the HOT Field Mapping Tasking Manager. + +It takes four inputs, all of which are tables in a Postgresql database with +the PostGIS extension enabled. The first three are PostGIS layers in +an EPSG:4326 projection. + +1) "project_aoi", a polygon layer with a single-feature Area of Interest +2) "ways_line", a line layer, usually from OpenStreetMap, covering the AOI +3) "ways_poly", a polygon layer, usually from OSM, covering the AOI +4) "project_config", a table with parameters for the splitting + - A desired number of features per task polygon + - A set of tags indicating what features should be included in the line + polygon layers + - Maybe other stuff. I don't know yet; I haven't implemented this table yet. + +TODO: implement the config table +*/ + +-- The Area of Interest provided by the person creating the project +WITH aoi AS ( + SELECT * FROM "project-aoi" +) +-- Extract all lines to be used as splitlines from a table of lines +-- with the schema from Underpass (all tags as jsonb column called 'tags') +-- TODO: add polygons (closed ways in OSM) with a 'highway' tag; +-- some features such as roundabouts appear as polygons. +-- TODO: add waterway polygons; now a beach doesn't show up as a splitline. +-- TODO: these tags should come from another table rather than hardcoded +-- so that they're easily configured during project creation. +,splitlines AS ( + SELECT ST_Intersection(a.geom, l.geom) AS geom + FROM aoi a, "ways_line" l + WHERE ST_Intersects(a.geom, l.geom) + -- TODO: these tags should come from a config table + -- All highways, waterways, and railways + AND (tags->>'highway' IS NOT NULL + OR tags->>'waterway' IS NOT NULL + OR tags->>'railway' IS NOT NULL + ) + -- A selection of highways, waterways, and all railways + /* + AND (tags->>'highway' = 'trunk' + OR tags->>'highway' = 'primary' + OR tags->>'highway' = 'secondary' + OR tags->>'highway' = 'tertiary' + OR tags->>'highway' = 'residential' + OR tags->>'highway' = 'unclassified' + OR tags->>'waterway' = 'river' + OR tags->>'waterway' = 'drain' + OR tags->>'railway' IS NOT NULL + ) + */ +) +-- Merge all lines, necessary so that the polygonize function works later +,merged AS ( + SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom + FROM splitlines +) +-- Combine the boundary of the AOI with the splitlines +-- First extract the Area of Interest boundary as a line +,boundary AS ( + SELECT ST_Boundary(geom) AS geom + FROM aoi +) +-- Then combine it with the splitlines +,comb AS ( + SELECT ST_Union(boundary.geom, merged.geom) AS geom + FROM boundary, merged +) +-- Create a polygon for each area enclosed by the splitlines +,splitpolysnoindex AS ( + SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom + FROM comb +) +-- Add an index column to the split polygons +-- Row numbers can function as temporary unique IDs for our new polygons +,splitpolygons AS( +SELECT row_number () over () as polyid, * +from splitpolysnoindex +) +-- Grab the buildings. +-- While we're at it, grab the ID of the polygon the buildings fall within. +-- TODO: at the moment this uses building centroids. +-- There's definitely a way to calculate which of several polygons the largest +-- proportion of a building falls, that's what we should do instead. +,buildings AS ( + SELECT b.*, polys.polyid + FROM "ways_poly" b, splitpolygons polys + WHERE ST_Intersects(polys.geom, st_centroid(b.geom)) + AND b.tags->>'building' IS NOT NULL +) +-- Count the building centroids in each polygon split by line features. +,polygonsfeaturecount AS ( + SELECT sp.polyid, sp.geom, count(b.geom) AS numfeatures + FROM "splitpolygons" sp + LEFT JOIN "buildings" b + ON sp.polyid = b.polyid + GROUP BY sp.polyid, sp.geom +) +-- Filter out polygons with no features in them +-- TODO: Merge the empty ones into their neighbors and replace the UIDs +-- with consecutive integers for only the polygons with contents +,splitpolygonswithcontents AS ( + SELECT * + FROM polygonsfeaturecount pfc + WHERE pfc.numfeatures > 0 +) +/******************************************************************************* +-- Uncomment this and stop here for split polygons before clustering +SELECT * FROM splitpolygonswithcontents +*******************************************************************************/ + +-- Add the count of features in the splitpolygon each building belongs to +-- to the buildings table; sets us up to be able to run the clustering. +,buildingswithcount AS ( + SELECT b.*, p.numfeatures + FROM buildings b + LEFT JOIN polygonsfeaturecount p + ON b.polyid = p.polyid +) +-- Cluster the buildings within each splitpolygon. The second term in the +-- call to the ST_ClusterKMeans function is the number of clusters to create, +-- so we're dividing the number of features by a constant (10 in this case) +-- to get the number of clusters required to get close to the right number +-- of features per cluster. +-- TODO: This should certainly not be a hardcoded, the number of features +-- per cluster should come from a project configuration table +,buildingstocluster as ( + SELECT * FROM buildingswithcount bc + WHERE bc.numfeatures > 0 +) +,clusteredbuildingsnocombineduid AS ( +SELECT *, + ST_ClusterKMeans(geom, cast((b.numfeatures / 5) + 1 as integer)) + over (partition by polyid) as cid +FROM buildingstocluster b +) +-- uid combining the id of the outer splitpolygon and inner cluster +,clusteredbuildings as ( + select *, + polyid::text || '-' || cid as clusteruid + from clusteredbuildingsnocombineduid +) +SELECT * FROM clusteredbuildings diff --git a/scripts/postgis_snippets/task_splitting/concave_hull_tasks_from_clustered_buildings.sql b/scripts/postgis_snippets/task_splitting/concave_hull_tasks_from_clustered_buildings.sql new file mode 100644 index 0000000000..54252cb182 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/concave_hull_tasks_from_clustered_buildings.sql @@ -0,0 +1,27 @@ +WITH clusteredbuildings AS ( + select * from "clustered-buildings" +) + +,hulls AS( + -- Using a very high param_pctconvex value; smaller values often produce + -- self-intersections and crash. It seems that anything below 1 produces + -- something massively better than 1 (which is just a convex hull) but + -- no different (i.e. 0.99 produces the same thing as 0.9999), so + -- there's nothing to lose choosing a value a miniscule fraction less than 1. + select clb.polyid, clb.cid, clb.clusteruid, + ST_ConcaveHull(ST_Collect(clb.geom), 0.9999) as geom + from clusteredbuildings clb + group by clb.clusteruid, clb.polyid, clb.cid +) +-- Now we need to: +-- - Get rid of the overlapping areas of the hulls +-- - Create intersections for the hulls so all overlapping bits are separated +-- - Check what's inside of the overlapping bits +-- - If it's only stuff belonging to one of the original hulls, give that +-- bit to the hull it belongs to +-- - If the overlapping are contains stuff belonging to more than one hull, +-- somehow split the overlapping bit such that each piece only contains +-- stuff from one or another parent hull. Then merge them back. +-- - Do something Voronoi-esque to expand the hulls until they tile the +-- entire AOI, creating task polygons with no gaps +select * from hulls diff --git a/scripts/postgis_snippets/task_splitting/task_splitting.sql b/scripts/postgis_snippets/task_splitting/task_splitting.sql new file mode 100644 index 0000000000..25b34bb38b --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/task_splitting.sql @@ -0,0 +1,254 @@ +/* +Licence: GPLv3 + +This script divides an area into smaller areas suitable for field mapping as part of the HOT Field Mapping Tasking Manager. + +It takes four inputs, all of which are tables in a Postgresql database with +the PostGIS extension enabled. The first three are PostGIS layers in +an EPSG:4326 projection. + +1) "project_aoi", a polygon layer with a single-feature Area of Interest +2) "ways_line", a line layer, usually from OpenStreetMap, covering the AOI +3) "ways_poly", a polygon layer, usually from OSM, covering the AOI +4) "project_config", a table with parameters for the splitting + - A desired number of features per task polygon + - A set of tags indicating what features should be included in the line + polygon layers + - Maybe other stuff. I don't know yet; I haven't implemented this table yet. + +TODO: implement the config table +*/ + +-- The Area of Interest provided by the person creating the project +WITH aoi AS ( + SELECT * FROM "project_aoi" +) +-- Extract all lines to be used as splitlines from a table of lines +-- with the schema from Underpass (all tags as jsonb column called 'tags') +-- TODO: add polygons (closed ways in OSM) with a 'highway' tag; +-- some features such as roundabouts appear as polygons. +-- TODO: add waterway polygons; now a beach doesn't show up as a splitline. +-- TODO: these tags should come from another table rather than hardcoded +-- so that they're easily configured during project creation. +,splitlines AS ( + SELECT ST_Intersection(a.geom, l.geom) AS geom + FROM aoi a, "ways_line" l + WHERE ST_Intersects(a.geom, l.geom) + -- TODO: these tags should come from a config table + -- All highways, waterways, and railways + AND (tags->>'highway' IS NOT NULL + OR tags->>'waterway' IS NOT NULL + OR tags->>'railway' IS NOT NULL + ) + -- A selection of highways, waterways, and all railways + /* + AND (tags->>'highway' = 'trunk' + OR tags->>'highway' = 'primary' + OR tags->>'highway' = 'secondary' + OR tags->>'highway' = 'tertiary' + OR tags->>'highway' = 'residential' + OR tags->>'highway' = 'unclassified' + OR tags->>'waterway' = 'river' + OR tags->>'waterway' = 'drain' + OR tags->>'railway' IS NOT NULL + ) + */ +) +-- Merge all lines, necessary so that the polygonize function works later +,merged AS ( + SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom + FROM splitlines +) +-- Combine the boundary of the AOI with the splitlines +-- First extract the Area of Interest boundary as a line +,boundary AS ( + SELECT ST_Boundary(geom) AS geom + FROM aoi +) +-- Then combine it with the splitlines +,comb AS ( + SELECT ST_Union(boundary.geom, merged.geom) AS geom + FROM boundary, merged +) +-- Create a polygon for each area enclosed by the splitlines +,splitpolysnoindex AS ( + SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom + FROM comb +) +-- Add an index column to the split polygons +-- Row numbers can function as temporary unique IDs for our new polygons +,splitpolygons AS( +SELECT row_number () over () as polyid, * +from splitpolysnoindex +) +-- Grab the buildings. +-- While we're at it, grab the ID of the polygon the buildings fall within. +-- TODO: at the moment this uses ST_Intersects, which is fine except when +-- buildings cross polygon boundaries (which definitely happens in OSM). +-- In that case, the building should probably be placed in the polygon +-- where the largest proportion of its area falls. At the moment it +-- duplicates the building in 2 polygons, which is bad! +-- There's definitely a way to calculate which of several polygons the largest +-- proportion of a building falls, that's what we should do. +-- Doing it as a left join would also be better. +-- Using the intersection of the centroid would also avoid duplication, +-- but sometimes causes weird placements. +,buildings AS ( + SELECT b.*, polys.polyid + FROM "ways_poly" b, splitpolygons polys + WHERE ST_Intersects(polys.geom, b.geom) + AND b.tags->>'building' IS NOT NULL +) +-- Count the features in each polygon split by line features. +,polygonsfeaturecount AS ( + SELECT sp.polyid, sp.geom, count(b.geom) AS numfeatures + FROM "splitpolygons" sp + LEFT JOIN "buildings" b + ON sp.polyid = b.polyid + GROUP BY sp.polyid, sp.geom +) +-- Filter out polygons with no features in them +-- TODO: Merge the empty ones into their neighbors and replace the UIDs +-- with consecutive integers for only the polygons with contents +,splitpolygonswithcontents AS ( + SELECT * + FROM polygonsfeaturecount pfc + WHERE pfc.numfeatures > 0 +) +/******************************************************************************* +-- Uncomment this and stop here for split polygons before clustering +SELECT * FROM splitpolygonswithcontents +*******************************************************************************/ + +-- Add the count of features in the splitpolygon each building belongs to +-- to the buildings table; sets us up to be able to run the clustering. +,buildingswithcount AS ( + SELECT b.*, p.numfeatures + FROM buildings b + LEFT JOIN polygonsfeaturecount p + ON b.polyid = p.polyid +) +-- Cluster the buildings within each splitpolygon. The second term in the +-- call to the ST_ClusterKMeans function is the number of clusters to create, +-- so we're dividing the number of features by a constant (10 in this case) +-- to get the number of clusters required to get close to the right number +-- of features per cluster. +-- TODO: This should certainly not be a hardcoded, the number of features +-- per cluster should come from a project configuration table +-- TODO; CRITICAL: Sets of buildings in polygons with less than twice the +-- number of desired buildings plus one +-- per task must be excluded from this operation +,buildingstocluster as ( + SELECT * FROM buildingswithcount bc + WHERE bc.numfeatures > 21 +) +,clusteredbuildingsnocombineduid AS ( +SELECT *, + ST_ClusterKMeans(geom, cast((b.numfeatures / 10) + 1 as integer)) + over (partition by polyid) as cid +FROM buildingstocluster b +) +-- uid combining the id of the outer splitpolygon and inner cluster +,clusteredbuildings as ( + select *, + polyid::text || '-' || cid as clusteruid + from clusteredbuildingsnocombineduid +) +/******************************************************************************* +-- Uncomment this and stop here for clustered buildings +SELECT * FROM clusteredbuildings +*******************************************************************************/ + +/*********************Magic approach****************************************** +-- Magic function that Steve is writing +-- This may prevent us from needing to write tables or queries to the db. +,hulls AS( + select Ivan_Hull(ST_Collect(clb.geom), clb.clusteruid, pwc.geom) as geom + from clusteredbuildings clb + LEFT JOIN splitpolygonswithcontents pwc ON clb.polyid = pwc.polyid +) +select * from hulls +******************************************************************************/ + +--******************Concave Hull approach************************************** +,hulls AS( + -- Using a very high param_pctconvex value; smaller values often produce + -- self-intersections and crash. It seems that anything below 1 produces + -- something massively better than 1 (which is just a convex hull) but + -- no different (i.e. 0.99 produces the same thing as 0.9999), so + -- there's nothing to lose choosing a value a miniscule fraction less than 1. + select clb.polyid, clb.cid, clb.clusteruid, + ST_ConcaveHull(ST_Collect(clb.geom), 0.9999) as geom + from clusteredbuildings clb + group by clb.clusteruid, clb.polyid, clb.cid +) +-- Now we need to: +-- - Get rid of the overlapping areas of the hulls +-- - Create intersections for the hulls so all overlapping bits are separated +-- - Check what's inside of the overlapping bits +-- - If it's only stuff belonging to one of the original hulls, give that +-- bit to the hull it belongs to +-- - If the overlapping are contains stuff belonging to more than one hull, +-- somehow split the overlapping bit such that each piece only contains +-- stuff from one or another parent hull. Then merge them back. +-- - Do something Voronoi-esque to expand the hulls until they tile the +-- entire AOI, creating task polygons with no gaps +select * from hulls +--*****************************************************************************/ + +/******************Voronoi approach******************************************** +-- This actually generates pretty good boundaries (not perfect, but not bad). +-- They'd be better if we segmentized the buildings first. +-- The problem is that it is unacceptably slow on big datasets, due to the +-- lack of a spatial index on the building nodes and voronoi polygons. +-- This could be solved by creating tables and indexes as we go, but +-- then we don't have a nice pure query that doesn't modify the database. +-- If only there were a way to retain the uid of the point each Voronoi +-- polygon was created from... + +-- Extract all of the nodes in the buildings as points +-- TODO: segmentize them first so that the points are denser and make nicer +-- Voronoi polygons that don't poke into their neighbor's buildings +,dumpedpoints AS ( + SELECT cb.osm_id, cb.polyid, cb.cid, cb.clusteruid, + (st_dumppoints(geom)).geom + FROM clusteredbuildings cb +) +-- Aggregate the points by the unique ids of the clusters so that the next +-- step (Voronoi polygons) can treat each cluster as a discrete dataset +,dumpedpointsuid as ( +SELECT dp.clusteruid, dp.geom +FROM dumpedpoints dp +GROUP by dp. geom, dp.clusteruid +) + +-- Generate a set of voronoi polygons for each splitpolygon, so that the +-- Voronois tile each splitpolygon but don't poke out of them +,voronoisnoid as ( + SELECT + st_intersection((ST_Dump(ST_VoronoiPolygons( + ST_Collect(points.geom) + ))).geom, + sp.geom) as geom + FROM dumpedpoints as points, + splitpolygonswithcontents as sp + where st_contains(sp.geom, points.geom) + group by sp.geom +) +-- Re-associate each Voronoi polygon with the point it was created from. +-- TODO: This has major performance issues because there's no spatial index +-- on the points or Voronoi polygons. On a big dataset it can take hours. +-- There are only three possible solutions that I can see: +-- - Write the points and Voronoi polygons as tables and index them +-- - Find a way to retain the IDs of the points when creating Voronoi +-- polygons from them +-- - Wait for Steve to write a magic function +,voronois as ( + select p.clusteruid, v.geom + from voronoisnoid v, dumpedpoints p + WHERE st_within(p.geom, v.geom) +) +select * +from voronois v +*****************************************************************************/ + From bc96adda72fbbc0a8bee8cfc5f0495d026972455 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Sat, 10 Jun 2023 07:52:53 +0100 Subject: [PATCH 017/222] separate script for splitting on roads --- .../split_area_by_osm_lines.sql | 106 ++++++++++++++++++ .../task_splitting/task_splitting.sql | 2 +- 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 scripts/postgis_snippets/task_splitting/split_area_by_osm_lines.sql diff --git a/scripts/postgis_snippets/task_splitting/split_area_by_osm_lines.sql b/scripts/postgis_snippets/task_splitting/split_area_by_osm_lines.sql new file mode 100644 index 0000000000..cb1a6092b0 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/split_area_by_osm_lines.sql @@ -0,0 +1,106 @@ + /* +Licence: GPLv3 + +This script divides an area into areas delimited by roads, waterways, +and railways as part of the HOT Field Mapping Tasking Manager. + +*/ + +-- The Area of Interest provided by the person creating the project +WITH aoi AS ( + SELECT * FROM "project-aoi" +) +-- Extract all lines to be used as splitlines from a table of lines +-- with the schema from Underpass (all tags as jsonb column called 'tags') +-- TODO: add polygons (closed ways in OSM) with a 'highway' tag; +-- some features such as roundabouts appear as polygons. +-- TODO: add waterway polygons; now a beach doesn't show up as a splitline. +-- TODO: these tags should come from another table rather than hardcoded +-- so that they're easily configured during project creation. +,splitlines AS ( + SELECT ST_Intersection(a.geom, l.geom) AS geom + FROM aoi a, "ways_line" l + WHERE ST_Intersects(a.geom, l.geom) + -- TODO: these tags should come from a config table + -- All highways, waterways, and railways + AND (tags->>'highway' IS NOT NULL + OR tags->>'waterway' IS NOT NULL + OR tags->>'railway' IS NOT NULL + ) + -- A selection of highways, waterways, and all railways + /* + AND (tags->>'highway' = 'trunk' + OR tags->>'highway' = 'primary' + OR tags->>'highway' = 'secondary' + OR tags->>'highway' = 'tertiary' + OR tags->>'highway' = 'residential' + OR tags->>'highway' = 'unclassified' + OR tags->>'waterway' = 'river' + OR tags->>'waterway' = 'drain' + OR tags->>'railway' IS NOT NULL + ) + */ +) +-- Merge all lines, necessary so that the polygonize function works later +,merged AS ( + SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom + FROM splitlines +) +-- Combine the boundary of the AOI with the splitlines +-- First extract the Area of Interest boundary as a line +,boundary AS ( + SELECT ST_Boundary(geom) AS geom + FROM aoi +) +-- Then combine it with the splitlines +,comb AS ( + SELECT ST_Union(boundary.geom, merged.geom) AS geom + FROM boundary, merged +) +-- Create a polygon for each area enclosed by the splitlines +,splitpolysnoindex AS ( + SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom + FROM comb +) +-- Add an index column to the split polygons +-- Row numbers can function as temporary unique IDs for our new polygons +,splitpolygons AS( +SELECT row_number () over () as polyid, * +from splitpolysnoindex +) +-- Grab the buildings. +-- While we're at it, grab the ID of the polygon the buildings fall within. +-- TODO: at the moment this uses ST_Intersects, which is fine except when +-- buildings cross polygon boundaries (which definitely happens in OSM). +-- In that case, the building should probably be placed in the polygon +-- where the largest proportion of its area falls. At the moment it +-- duplicates the building in 2 polygons, which is bad! +-- There's definitely a way to calculate which of several polygons the largest +-- proportion of a building falls, that's what we should do. +-- Doing it as a left join would also be better. +-- Using the intersection of the centroid would also avoid duplication, +-- but sometimes causes weird placements. +,buildings AS ( + SELECT b.*, polys.polyid + FROM "ways_poly" b, splitpolygons polys + WHERE ST_Intersects(polys.geom, b.geom) + AND b.tags->>'building' IS NOT NULL +) +-- Count the features in each polygon split by line features. +,polygonsfeaturecount AS ( + SELECT sp.polyid, sp.geom, count(b.geom) AS numfeatures + FROM "splitpolygons" sp + LEFT JOIN "buildings" b + ON sp.polyid = b.polyid + GROUP BY sp.polyid, sp.geom +) +-- Filter out polygons with no features in them +-- TODO: Merge the empty ones into their neighbors and replace the UIDs +-- with consecutive integers for only the polygons with contents +,splitpolygonswithcontents AS ( + SELECT * + FROM polygonsfeaturecount pfc + WHERE pfc.numfeatures > 0 +) + +SELECT * FROM splitpolygonswithcontents diff --git a/scripts/postgis_snippets/task_splitting/task_splitting.sql b/scripts/postgis_snippets/task_splitting/task_splitting.sql index 25b34bb38b..af6c71520b 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting.sql @@ -21,7 +21,7 @@ TODO: implement the config table -- The Area of Interest provided by the person creating the project WITH aoi AS ( - SELECT * FROM "project_aoi" + SELECT * FROM "project-aoi" ) -- Extract all lines to be used as splitlines from a table of lines -- with the schema from Underpass (all tags as jsonb column called 'tags') From 17cea1dc2fc70d71fb0213168d375fb881ac5eaf Mon Sep 17 00:00:00 2001 From: ivangayton Date: Wed, 21 Jun 2023 02:38:36 +0900 Subject: [PATCH 018/222] progress on merging empty splitpolygons with neighbors --- ...lygons_with_no_features_into_neighbors.sql | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql diff --git a/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql b/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql new file mode 100644 index 0000000000..08a1b50843 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql @@ -0,0 +1,46 @@ +/* +Licence: GPLv3 + +This script divides an layer of buildings into clusters suitable for field +mapping as part of the HOT Field Mapping Tasking Manager. +*/ + +-- Grab the areas with fewer than the requisite number of features +with lowfeaturecountpolys as ( + select *, st_area(p.geom) + as area + from "polys-with-count" as p + -- TODO: feature count should not be hard-coded + where p.numfeatures < 5 +), +-- Grab a reference to all of the polygons with area (for sorting) +allpolys as ( + select *, st_area(p.geom) as area + from "polys-with-count" as p +), +-- Find the neighbors of the low-feature-count polygons +-- Store their ids as n_polyid, numfeatures as n_numfeatures, etc +allneighborlist as ( + select p.*, + pf.polyid as n_polyid, + pf.area as n_area, + pf.numfeatures as n_numfeatures + -- length of shared boundary to make nice merge decisions + st_length2d(st_intersection(p.geom, pf.geom)) as sharedbound + from lowfeaturecountpolys as p + inner join allpolys as pf + -- Anything that touches + on st_touches(p.geom, pf.geom) + -- But eliminate those whose intersection is a point, because + -- polygons that only touch at a corner shouldn't be merged + and st_geometrytype(st_intersection(p.geom, pf.geom)) != 'ST_Point' + -- Sort first by polyid of the low-feature-count polygons + -- Then by descending featurecount and area of the + -- high-feature-count neighbors (area is in case of equal + -- featurecounts, we'll just pick the biggest to add to) + order by p.polyid, pf.numfeatures desc, pf.area desc + -- OR, maybe for more aesthetic merges: + -- order by p.polyid, sharedbound desc +) + +select distinct on (a.polyid) * from allneighborlist as a From 7af8942c88ce675f9379e7bad0cfff7fe85946a4 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Wed, 28 Jun 2023 07:29:12 +0900 Subject: [PATCH 019/222] tiny typo --- scripts/postgis_snippets/task_splitting/task_splitting.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/postgis_snippets/task_splitting/task_splitting.sql b/scripts/postgis_snippets/task_splitting/task_splitting.sql index af6c71520b..0bedd2ebd7 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting.sql @@ -217,9 +217,9 @@ select * from hulls -- Aggregate the points by the unique ids of the clusters so that the next -- step (Voronoi polygons) can treat each cluster as a discrete dataset ,dumpedpointsuid as ( -SELECT dp.clusteruid, dp.geom -FROM dumpedpoints dp -GROUP by dp. geom, dp.clusteruid + SELECT dp.clusteruid, dp.geom + FROM dumpedpoints dp + GROUP by dp.geom, dp.clusteruid ) -- Generate a set of voronoi polygons for each splitpolygon, so that the From 8adba8893650ea142861bec333c20f5a9ed5747c Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 30 Jun 2023 09:27:44 +0900 Subject: [PATCH 020/222] corrected missing comma in neighbor-merging WIP --- .../merge_polygons_with_no_features_into_neighbors.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql b/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql index 08a1b50843..cf5de5d330 100644 --- a/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql +++ b/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql @@ -24,7 +24,7 @@ allneighborlist as ( select p.*, pf.polyid as n_polyid, pf.area as n_area, - pf.numfeatures as n_numfeatures + pf.numfeatures as n_numfeatures, -- length of shared boundary to make nice merge decisions st_length2d(st_intersection(p.geom, pf.geom)) as sharedbound from lowfeaturecountpolys as p From 7eda5c4817316b77b8cae928c04571b9aaafc283 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 30 Jun 2023 20:50:35 +0900 Subject: [PATCH 021/222] Reasonable splitting algoritm basically working --- ...lygons_with_no_features_into_neighbors.sql | 20 +- .../task_splitting_optimized.sql | 270 ++++++++++++++++++ 2 files changed, 280 insertions(+), 10 deletions(-) create mode 100644 scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql diff --git a/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql b/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql index cf5de5d330..a73c190f34 100644 --- a/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql +++ b/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql @@ -5,26 +5,26 @@ This script divides an layer of buildings into clusters suitable for field mapping as part of the HOT Field Mapping Tasking Manager. */ +-- Grab a reference to all of the polygons with area (for sorting) +allpolys AS ( + SELECT *, st_area(p.geom) AS area + FROM "splitpolygons" AS p +), -- Grab the areas with fewer than the requisite number of features with lowfeaturecountpolys as ( - select *, st_area(p.geom) - as area - from "polys-with-count" as p + select * + from allpolys as p -- TODO: feature count should not be hard-coded where p.numfeatures < 5 ), --- Grab a reference to all of the polygons with area (for sorting) -allpolys as ( - select *, st_area(p.geom) as area - from "polys-with-count" as p -), + -- Find the neighbors of the low-feature-count polygons -- Store their ids as n_polyid, numfeatures as n_numfeatures, etc allneighborlist as ( select p.*, pf.polyid as n_polyid, pf.area as n_area, - pf.numfeatures as n_numfeatures, + p.numfeatures as n_numfeatures, -- length of shared boundary to make nice merge decisions st_length2d(st_intersection(p.geom, pf.geom)) as sharedbound from lowfeaturecountpolys as p @@ -38,7 +38,7 @@ allneighborlist as ( -- Then by descending featurecount and area of the -- high-feature-count neighbors (area is in case of equal -- featurecounts, we'll just pick the biggest to add to) - order by p.polyid, pf.numfeatures desc, pf.area desc + order by p.polyid, p.numfeatures desc, pf.area desc -- OR, maybe for more aesthetic merges: -- order by p.polyid, sharedbound desc ) diff --git a/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql b/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql new file mode 100644 index 0000000000..cc30df4a65 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql @@ -0,0 +1,270 @@ + /* +Licence: GPLv3 +*/ + +--*************************Split by OSM lines*********************** +-- Nuke whatever was there before +DROP TABLE IF EXISTS polygonsnocount; +-- Create a new polygon layer of splits by lines +CREATE TABLE polygonsnocount AS ( + -- The Area of Interest provided by the person creating the project + WITH aoi AS ( + SELECT * FROM "project-aoi" + ) + -- Extract all lines to be used as splitlines from a table of lines + -- with the schema from Underpass (all tags as jsonb column called 'tags') + -- TODO: add polygons (closed ways in OSM) with a 'highway' tag; + -- some features such as roundabouts appear as polygons. + -- TODO: add waterway polygons; now a beach doesn't show up as a splitline. + -- TODO: these tags should come from another table rather than hardcoded + -- so that they're easily configured during project creation. + ,splitlines AS ( + SELECT ST_Intersection(a.geom, l.geom) AS geom + FROM aoi a, "ways_line" l + WHERE ST_Intersects(a.geom, l.geom) + -- TODO: these tags should come from a config table + -- All highways, waterways, and railways + AND (tags->>'highway' IS NOT NULL + OR tags->>'waterway' IS NOT NULL + OR tags->>'railway' IS NOT NULL + ) + ) + -- Merge all lines, necessary so that the polygonize function works later + ,merged AS ( + SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom + FROM splitlines + ) + -- Combine the boundary of the AOI with the splitlines + -- First extract the Area of Interest boundary as a line + ,boundary AS ( + SELECT ST_Boundary(geom) AS geom + FROM aoi + ) + -- Then combine it with the splitlines + ,comb AS ( + SELECT ST_Union(boundary.geom, merged.geom) AS geom + FROM boundary, merged + ) + -- TODO add closed ways from OSM to lines (roundabouts etc) + -- Create a polygon for each area enclosed by the splitlines + ,splitpolysnoindex AS ( + SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom + FROM comb + ) + -- Add an index column to the split polygons + ,splitpolygons AS( + SELECT + row_number () over () as polyid, + ST_Transform(spni.geom,4326)::geography AS geog, + spni.* + from splitpolysnoindex spni + ) + SELECT * FROM splitpolygons +); +-- Make that index column a primary key +ALTER TABLE polygonsnocount ADD PRIMARY KEY(polyid); +-- Properly register geometry column (makes QGIS happy) +SELECT Populate_Geometry_Columns('public.polygonsnocount'::regclass); +-- Add a spatial index (vastly improves performance for a lot of operations) +CREATE INDEX polygonsnocount_idx + ON polygonsnocount + USING GIST (geom); +-- Clean up the table which may have gaps and stuff from spatial indexing +VACUUM ANALYZE polygonsnocount; + +-- ************************Grab the buildings************************** +-- While we're at it, grab the ID of the polygon the buildings fall within. +-- TODO add outer rings of buildings from relations table of OSM export +DROP TABLE IF EXISTS buildings; +CREATE TABLE buildings AS ( + SELECT b.*, polys.polyid + FROM "ways_poly" b, polygonsnocount polys + WHERE ST_Intersects(polys.geom, ST_Centroid(b.geom)) + AND b.tags->>'building' IS NOT NULL +); +ALTER TABLE buildings ADD PRIMARY KEY(osm_id); +-- Properly register geometry column (makes QGIS happy) +SELECT Populate_Geometry_Columns('public.buildings'::regclass); +-- Add a spatial index (vastly improves performance for a lot of operations) +CREATE INDEX buildings_idx + ON buildings + USING GIST (geom); +-- Clean up the table which may have gaps and stuff from spatial indexing +VACUUM ANALYZE buildings; + +--**************************Count features in polygons***************** +DROP TABLE IF EXISTS splitpolygons; +CREATE TABLE splitpolygons AS ( + WITH polygonsfeaturecount AS ( + SELECT sp.polyid, + sp.geom, + sp.geog, + count(b.geom) AS numfeatures, + ST_Area(sp.geog) AS area + FROM polygonsnocount sp + LEFT JOIN "buildings" b + ON sp.polyid = b.polyid + GROUP BY sp.polyid, sp.geom + ) + SELECT * from polygonsfeaturecount +); +ALTER TABLE splitpolygons ADD PRIMARY KEY(polyid); +SELECT Populate_Geometry_Columns('public.splitpolygons'::regclass); +CREATE INDEX splitpolygons_idx + ON splitpolygons + USING GIST (geom); +VACUUM ANALYZE splitpolygons; + +DROP TABLE polygonsnocount; + +DROP TABLE IF EXISTS lowfeaturecountpolygons; +CREATE TABLE lowfeaturecountpolygons AS ( + -- Grab the polygons with fewer than the requisite number of features + with lowfeaturecountpolys as ( + select * + from splitpolygons as p + -- TODO: feature count should not be hard-coded + where p.numfeatures < 5 + ), + -- Find the neighbors of the low-feature-count polygons + -- Store their ids as n_polyid, numfeatures as n_numfeatures, etc + allneighborlist as ( + select p.*, + pf.polyid as n_polyid, + pf.area as n_area, + p.numfeatures as n_numfeatures, + -- length of shared boundary to make nice merge decisions + st_length2d(st_intersection(p.geom, pf.geom)) as sharedbound + from lowfeaturecountpolys as p + inner join splitpolygons as pf + -- Anything that touches + on st_touches(p.geom, pf.geom) + -- But eliminate those whose intersection is a point, because + -- polygons that only touch at a corner shouldn't be merged + and st_geometrytype(st_intersection(p.geom, pf.geom)) != 'ST_Point' + -- Sort first by polyid of the low-feature-count polygons + -- Then by descending featurecount and area of the + -- high-feature-count neighbors (area is in case of equal + -- featurecounts, we'll just pick the biggest to add to) + order by p.polyid, p.numfeatures desc, pf.area desc + -- OR, maybe for more aesthetic merges: + -- order by p.polyid, sharedbound desc + ) + select distinct on (a.polyid) * from allneighborlist as a +); +ALTER TABLE lowfeaturecountpolygons ADD PRIMARY KEY(polyid); +SELECT Populate_Geometry_Columns('public.lowfeaturecountpolygons'::regclass); +CREATE INDEX lowfeaturecountpolygons_idx + ON lowfeaturecountpolygons + USING GIST (geom); +VACUUM ANALYZE lowfeaturecountpolygons; + +--****************Merge low feature count polygons with neighbors******* + + + +--****************Cluster buildings************************************* +DROP TABLE IF EXISTS clusteredbuildings; +CREATE TABLE clusteredbuildings AS ( + WITH splitpolygonswithcontents AS ( + SELECT * + FROM splitpolygons sp + WHERE sp.numfeatures > 0 + ) + -- Add the count of features in the splitpolygon each building belongs to + -- to the buildings table; sets us up to be able to run the clustering. + ,buildingswithcount AS ( + SELECT b.*, p.numfeatures + FROM buildings b + LEFT JOIN splitpolygons p + ON b.polyid = p.polyid + ) + -- Cluster the buildings within each splitpolygon. The second term in the + -- call to the ST_ClusterKMeans function is the number of clusters to create, + -- so we're dividing the number of features by a constant (10 in this case) + -- to get the number of clusters required to get close to the right number + -- of features per cluster. + -- TODO: This should certainly not be a hardcoded, the number of features + -- per cluster should come from a project configuration table + ,buildingstocluster as ( + SELECT * FROM buildingswithcount bc + WHERE bc.numfeatures > 0 + ) + ,clusteredbuildingsnocombineduid AS ( + SELECT *, + ST_ClusterKMeans(geom, cast((b.numfeatures / 5) + 1 as integer)) + over (partition by polyid) as cid + FROM buildingstocluster b + ) + -- uid combining the id of the outer splitpolygon and inner cluster + ,clusteredbuildings as ( + select *, + polyid::text || '-' || cid as clusteruid + from clusteredbuildingsnocombineduid + ) + SELECT * FROM clusteredbuildings +); +ALTER TABLE clusteredbuildings ADD PRIMARY KEY(osm_id); +SELECT Populate_Geometry_Columns('public.clusteredbuildings'::regclass); +CREATE INDEX clusteredbuildings_idx + ON clusteredbuildings + USING GIST (geom); +VACUUM ANALYZE clusteredbuildings; + +--*****************Densified dumped building nodes****************** +DROP TABLE IF EXISTS dumpedpoints; +CREATE TABLE dumpedpoints AS ( + SELECT cb.osm_id, cb.polyid, cb.cid, cb.clusteruid, + -- POSSIBLE BUG: PostGIS' Voronoi implementation seems to panic + -- with segments less than 0.00004 degrees. + -- Should probably use geography instead of geometry + (st_dumppoints(ST_Segmentize(geom, 0.00004))).geom + FROM clusteredbuildings cb +); +SELECT Populate_Geometry_Columns('public.dumpedpoints'::regclass); +CREATE INDEX dumpedpoints_idx + ON dumpedpoints + USING GIST (geom); +VACUUM ANALYZE dumpedpoints; + +--*******************voronoia**************************************** +DROP TABLE IF EXISTS voronoids; +CREATE TABLE voronoids AS ( + SELECT + st_intersection((ST_Dump(ST_VoronoiPolygons( + ST_Collect(points.geom) + ))).geom, + sp.geom) as geom + FROM dumpedpoints as points, + splitpolygons as sp + where st_contains(sp.geom, points.geom) + group by sp.geom +); +CREATE INDEX voronoids_idx + ON voronoids + USING GIST (geom); +VACUUM ANALYZE voronoids; + +DROP TABLE IF EXISTS voronois; +CREATE TABLE voronois AS ( + SELECT p.clusteruid, v.geom + FROM voronoids v, dumpedpoints p + WHERE st_within(p.geom, v.geom) +); +CREATE INDEX voronois_idx + ON voronois + USING GIST (geom); +VACUUM ANALYZE voronois; +DROP TABLE voronoids; + +DROP TABLE IF EXISTS taskpolygons; +CREATE TABLE taskpolygons AS ( + SELECT ST_Union(geom) as geom, clusteruid + FROM voronois + GROUP BY clusteruid +); +CREATE INDEX taskpolygons_idx + ON taskpolygons + USING GIST (geom); +VACUUM ANALYZE taskpolygons; + From 7664a69fbf404935f882d555f2f7dfde058c7f5c Mon Sep 17 00:00:00 2001 From: ivangayton Date: Sun, 2 Jul 2023 00:49:31 +0900 Subject: [PATCH 022/222] Readme for task splitting script --- .../postgis_snippets/task_splitting/README.md | 66 +++++++++++++++++++ .../task_splitting/clean_and_simplify.sql | 27 ++++++++ .../task_splitting/make_project_config.sql | 1 + .../task_splitting_optimized.sql | 2 +- 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 scripts/postgis_snippets/task_splitting/README.md create mode 100644 scripts/postgis_snippets/task_splitting/clean_and_simplify.sql create mode 100644 scripts/postgis_snippets/task_splitting/make_project_config.sql diff --git a/scripts/postgis_snippets/task_splitting/README.md b/scripts/postgis_snippets/task_splitting/README.md new file mode 100644 index 0000000000..1b7f5891be --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/README.md @@ -0,0 +1,66 @@ +# Task Splitting + +The file ```task_splitting_optimized.sql``` is a spatial Structured Query Language (SQL) script to split an area of interest for field mapping into small "task" areas. + +It operates within a Postgresql database with the the spatial extension PostGIS enabled. It requires write access to the database for performance reasons (there is another version without the suffice "_optimized" that doesn't require write access, but it's not likely to ever work well enough for production. + +It takes into account roads, waterways, and railways to avoid forcing mappers to cross such features during mapping. + +It uses a clustering algorithm to divide the area into discrete polygons containing an average number of tasks. + +## Inputs (tables/layers) +This script takes 4 inputs, all of which are Postgresql/PostGIS tables/layers. +- ```project-aoi```, a PostGIS polygon layer containing a single feature: a polygon containing the Area of Interest. +- ```ways_line```, a PostGIS line layer containing all OpenStreetMap "open ways" (the OSM term for linestrings) in the Area of Interest. +- ```ways_poly```, a Postgis polygon layer containing all OpenSTreetMap "closed ways" (the OSM term for polygons) in the AOI. +- ```project-config```, a Postgresql table containing settings (for example, the average number of features desired per task). _This isn't yet implemented; these settings are hard-coded for the moment. The script runs without a ```project-config``` table, but the number of features per task needs to be tweaked within the code._ + +OSM data (```ways-line``` and ```ways_poly```) can be loaded into a PostGIS database using the [Underpass] configuration file [raw.lua](https://github.com/hotosm/underpass/blob/master/utils/raw.lua). If these two layers are present in the same database and schema as the ```project-aoi``` layer, the script will make use of them automatically (non-desctructively; it doesn't modify any tables other than the ones it creates unless you're unlucky enough to have tables matching the very specific names I'm using, which I'll later change to names that should avoid all realistically possible collisions). + +## Running the script +You need a Postgresql database with PostGIS extension enabled. If both Postgresql and PostGIS are installed and you have permissions set up properly (doing both of those things is way beyond scope here), this should do the trick (choose whatever database name you want): + +``` +createdb [databasename] -O [username] +psql -U [username] -d [databasename] -c 'CREATE EXTENSION POSTGIS' +``` + +Now you need to get some OSM data in there. You can get OSM data from the GeoFabrik download tool or the HOT export tool in ```.pbf``` format. + +If you have your own way of getting the OSM data into the database, as long as it'll create the ```ways_line``` and ```ways_poly``` layers, go for it. Here's ho I'm doing it: + +``` +osm2pgsql --create -H localhost -U [username] -P 5432 -d [database name] -W --extra-attributes --output=flex --style /path/to/git/underpass/utils/raw.lua /path/to/my_extract.osm.pbf +``` + +Now you need an AOI. I'm using QGIS connect to the database using the Database Manager, then creating a polygon layer (make a "Temporary scratch layer' with polygon geometry, draw an AOI, and import that layer into the database using the Database Manager). If you don't want to use QGIS, you can get a GeoJSON polygon some other way ([geojson.io](geojson.io) comes to mind) and shove it into the database using ogr2ogr or some other tool. Whatever. Just ensure it's a polygon layer in EPSG:4326 and it's called ```project-aoi```. + +``` +psql -U [username] -d [database name] -f path/to/fmtm/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql +``` + +If all is set up correctly, that'll run and spit out some console output. It's moderately likely to include some warning messages due to messy OSM data, and will very likely complain that some tables do not exist (that's because I clobber any tables with colliding names before creating my own tables; don't run this script on random production databases until I collision-proof the names, and probably not even then). + +## Outputs +You should now have the following useful layers in your Postgresql/PostGIS database: +- clusteredbuildings +- taskpolygons + +As well as the following non-useful layers (well, they're useful for debugging, but not for end users' purposes): +- buildings +- dumpedpoints +- lowfeaturecountpolygons +- splitpolygons +- voronois + +The ```taskpolygons``` layer can be exported as GeoJSON and used as a task to upload to the FMTM. This works in at least some cases; I'm not sure if there are cases where whatever was in the AOI and OSM layers causes outputs that break somehow (there are definitely some cases where building footprints in OSM are sufficiently messed up that they create weird task geometries, but so far these haven't actually broken anything). + +## Next steps + +It's working OK now, but needs more work. +- Still simply discards polygon delineated by roads/waterways/railways rather than merging them into neighbors, which causes the task polygons to not tile the full AOI. This isn't necessarily always a problem, but it would be better to have the option to merge rather than discard those areas. +- Task polygon edges can be rough, often jagged, occasionally poking into buildings from adjacent polygons (though never, I think to the centroid). Working on simplifying/smoothing these, but there are some complications... +- Task polygon edges can contain closed-off loops unconnected to their main bodies. May need to increase density of segmentation of buildings in some places. +- Clustering is really pretty good, but not very strict at keeping similar numbers of features per cluster; you get a bit of a range of task sizes (though much, much better than anything we've had previously). I think it's possible to tweak this, though I think it might be expensive in terms of performance. + + diff --git a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql new file mode 100644 index 0000000000..c76671abe5 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql @@ -0,0 +1,27 @@ +/* +Task polygons made by creating and merging Voronoi polygons have lots of jagged edges. Simplifying them makes them both nicer to look at, and easier to render on a map. + +The problem is that the polygons seem not to perfectly tile the plane; there are centimeter-level slivers. So when simplified, the adjacent polygons don't simplify in exactly the same way, creating big visible gaps. + +When the polygons are converted to lines and then to line segments, each line segment seems to have at least one near-exact duplicate; near enough to be visibly indistinguishable, but not precisely equal according to PostGIS when trying to select distinct or otherwise get rid of duplicate geometries. +*/ + +-- Convert all polygons into boundary lines +with lines as ( + select st_boundary(tp.geom) as geom, + row_number () over () as gid + from taskpolygons as tp +) +-- Break the lines into segments +,segments AS ( + SELECT gid, ST_Astext(ST_MakeLine(lag((pt).geom, 1, NULL) + OVER (PARTITION BY gid ORDER BY gid, (pt).path), (pt).geom)) + AS geom + FROM (SELECT gid, ST_DumpPoints(geom) AS pt FROM lines) as dumps +) +-- Select distinct (unique) segments (DOESN'T WORK CORRECTLY) +select distinct on(ST_AsBinary(geom)) geom, geom as geomstring +from segments +where geom is not null; + +-- If you load up the resulting layer, the individual line segments all seem to have a twin. diff --git a/scripts/postgis_snippets/task_splitting/make_project_config.sql b/scripts/postgis_snippets/task_splitting/make_project_config.sql new file mode 100644 index 0000000000..c9721bd222 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/make_project_config.sql @@ -0,0 +1 @@ +CREATE TABLE projectconfig diff --git a/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql b/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql index cc30df4a65..3f3dd3d50a 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql @@ -124,7 +124,7 @@ CREATE TABLE lowfeaturecountpolygons AS ( select * from splitpolygons as p -- TODO: feature count should not be hard-coded - where p.numfeatures < 5 + where p.numfeatures < 20 ), -- Find the neighbors of the low-feature-count polygons -- Store their ids as n_polyid, numfeatures as n_numfeatures, etc From 22b336b74b3c48bbefacf9b0f2a7a164575698dd Mon Sep 17 00:00:00 2001 From: ivangayton Date: Sun, 2 Jul 2023 00:53:42 +0900 Subject: [PATCH 023/222] typos in readme for splitting script --- scripts/postgis_snippets/task_splitting/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/postgis_snippets/task_splitting/README.md b/scripts/postgis_snippets/task_splitting/README.md index 1b7f5891be..ecdfe35999 100644 --- a/scripts/postgis_snippets/task_splitting/README.md +++ b/scripts/postgis_snippets/task_splitting/README.md @@ -15,13 +15,15 @@ This script takes 4 inputs, all of which are Postgresql/PostGIS tables/layers. - ```ways_poly```, a Postgis polygon layer containing all OpenSTreetMap "closed ways" (the OSM term for polygons) in the AOI. - ```project-config```, a Postgresql table containing settings (for example, the average number of features desired per task). _This isn't yet implemented; these settings are hard-coded for the moment. The script runs without a ```project-config``` table, but the number of features per task needs to be tweaked within the code._ -OSM data (```ways-line``` and ```ways_poly```) can be loaded into a PostGIS database using the [Underpass] configuration file [raw.lua](https://github.com/hotosm/underpass/blob/master/utils/raw.lua). If these two layers are present in the same database and schema as the ```project-aoi``` layer, the script will make use of them automatically (non-desctructively; it doesn't modify any tables other than the ones it creates unless you're unlucky enough to have tables matching the very specific names I'm using, which I'll later change to names that should avoid all realistically possible collisions). +OSM data (```ways-line``` and ```ways_poly```) can be loaded into a PostGIS database using the [Underpass](https://github.com/hotosm/underpass) configuration file [raw.lua](https://github.com/hotosm/underpass/blob/master/utils/raw.lua). If these two layers are present in the same database and schema as the ```project-aoi``` layer, the script will make use of them automatically (non-desctructively; it doesn't modify any tables other than the ones it creates unless you're unlucky enough to have tables matching the very specific names I'm using, which I'll later change to names that should avoid all realistically possible collisions). ## Running the script You need a Postgresql database with PostGIS extension enabled. If both Postgresql and PostGIS are installed and you have permissions set up properly (doing both of those things is way beyond scope here), this should do the trick (choose whatever database name you want): ``` createdb [databasename] -O [username] +``` +``` psql -U [username] -d [databasename] -c 'CREATE EXTENSION POSTGIS' ``` From eb22f0aea1a387f97f25d449c49cc16e24713f5b Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 7 Jul 2023 08:13:29 +0900 Subject: [PATCH 024/222] Simplify almost working; requires QGIS dissolve step --- .../task_splitting/clean_and_simplify.sql | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql index c76671abe5..f409ff9e02 100644 --- a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql +++ b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql @@ -1,27 +1,40 @@ /* Task polygons made by creating and merging Voronoi polygons have lots of jagged edges. Simplifying them makes them both nicer to look at, and easier to render on a map. -The problem is that the polygons seem not to perfectly tile the plane; there are centimeter-level slivers. So when simplified, the adjacent polygons don't simplify in exactly the same way, creating big visible gaps. - -When the polygons are converted to lines and then to line segments, each line segment seems to have at least one near-exact duplicate; near enough to be visibly indistinguishable, but not precisely equal according to PostGIS when trying to select distinct or otherwise get rid of duplicate geometries. +At the moment the algorithm is working, except that the */ --- Convert all polygons into boundary lines -with lines as ( - select st_boundary(tp.geom) as geom, - row_number () over () as gid - from taskpolygons as tp +-- convert task polygon boundaries to linestrings +with rawlines as ( + select tp.clusteruid, st_boundary(tp.geom) as geom + from taskpolygons as tp ) --- Break the lines into segments -,segments AS ( - SELECT gid, ST_Astext(ST_MakeLine(lag((pt).geom, 1, NULL) - OVER (PARTITION BY gid ORDER BY gid, (pt).path), (pt).geom)) - AS geom - FROM (SELECT gid, ST_DumpPoints(geom) AS pt FROM lines) as dumps +-- Union, which eliminates duplicates from adjacent polygon boundaries +,unionlines as ( + select st_union(l.geom) as geom from rawlines l ) --- Select distinct (unique) segments (DOESN'T WORK CORRECTLY) -select distinct on(ST_AsBinary(geom)) geom, geom as geomstring -from segments -where geom is not null; - --- If you load up the resulting layer, the individual line segments all seem to have a twin. +-- Dump, which gives unique segments. +,dumpedlinesegments as ( + select (st_dump(l.geom)).geom as geom + from unionlines l +) +-- TODO: this step using st_union, st_unaryunion, st_collect, st_node, +-- and maybe a few others I've tried to dissolve the line segments +-- appears to work, but the resulting multiline geometry fails to simplify. +-- On the other hand, the QGIS Dissolve tool works, and produces multiline +-- geometry that simplifies nicely. +-- QGIS Multipart to Singleparts does something arguably even better: it +-- unions all of the segments between intersections. +,dissolved as ( + select st_collect(l.geom) as geom from dumpedlinesegments l +) +-- Cheating by loading an external layer because QGIS dissolve works. +-- I'm loading the dumpedlinesegements to the QGIS canvas, dissolving them, +-- and pulling that layer back into the DB as dissolvedfromdumpedlinesegments, +-- which st_simplify appears happy with. +,simplified as ( + select st_simplify(l.geom, 0.000075) + as geom from dissolvedfromdumpedlinesegements l -- import from QGIS +) +-- Rehydrate the task areas after simplification +select (st_dump(st_polygonize(s.geom))).geom as geom from simplified s From c6f5bb82716ad937a197010f8288b06a5097a729 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 7 Jul 2023 08:16:11 +0900 Subject: [PATCH 025/222] Simplify almost working; requires a QGIS dissolve step --- .../postgis_snippets/task_splitting/clean_and_simplify.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql index f409ff9e02..72c94281af 100644 --- a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql +++ b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql @@ -1,7 +1,7 @@ /* Task polygons made by creating and merging Voronoi polygons have lots of jagged edges. Simplifying them makes them both nicer to look at, and easier to render on a map. -At the moment the algorithm is working, except that the +At the moment the algorithm is working, except that the dissolve step just before simplification only works using an external tool (see TODO below). */ -- convert task polygon boundaries to linestrings @@ -28,6 +28,7 @@ with rawlines as ( ,dissolved as ( select st_collect(l.geom) as geom from dumpedlinesegments l ) +-- Dissolve segments into linestrings or multilinestrings for simplification -- Cheating by loading an external layer because QGIS dissolve works. -- I'm loading the dumpedlinesegements to the QGIS canvas, dissolving them, -- and pulling that layer back into the DB as dissolvedfromdumpedlinesegments, @@ -36,5 +37,5 @@ with rawlines as ( select st_simplify(l.geom, 0.000075) as geom from dissolvedfromdumpedlinesegements l -- import from QGIS ) --- Rehydrate the task areas after simplification +-- Rehydrate the task areas into polygons after simplification select (st_dump(st_polygonize(s.geom))).geom as geom from simplified s From a810426a79098dde46a9d2dd0ada9ca4cc7cff0b Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 7 Jul 2023 08:24:08 +0900 Subject: [PATCH 026/222] Simplify almost working; requires QGIS dissolve tool step --- .../postgis_snippets/task_splitting/clean_and_simplify.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql index 72c94281af..3c05c19b7a 100644 --- a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql +++ b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql @@ -18,6 +18,8 @@ with rawlines as ( select (st_dump(l.geom)).geom as geom from unionlines l ) +-- Dissolve segments into linestrings or multilinestrings for simplification + -- TODO: this step using st_union, st_unaryunion, st_collect, st_node, -- and maybe a few others I've tried to dissolve the line segments -- appears to work, but the resulting multiline geometry fails to simplify. @@ -28,7 +30,8 @@ with rawlines as ( ,dissolved as ( select st_collect(l.geom) as geom from dumpedlinesegments l ) --- Dissolve segments into linestrings or multilinestrings for simplification +-- Simplify the line layer (using a tolerance in degrees to annoy Steve) +-- (actually just because I haven't yet bothered to reproject) -- Cheating by loading an external layer because QGIS dissolve works. -- I'm loading the dumpedlinesegements to the QGIS canvas, dissolving them, -- and pulling that layer back into the DB as dissolvedfromdumpedlinesegments, From 0b1b1b158cfd6c2a14a9fdd405cfc750400919b5 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Sat, 8 Jul 2023 12:32:46 +0900 Subject: [PATCH 027/222] starting to incorporate cleaning algo despite dissolve problem --- .../task_splitting/clean_and_simplify.sql | 4 +- .../task_splitting/task_splitting.sql | 534 ++++++++++-------- .../task_splitting_optimized.sql | 2 +- 3 files changed, 295 insertions(+), 245 deletions(-) diff --git a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql index 3c05c19b7a..0a89e799ee 100644 --- a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql +++ b/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql @@ -20,12 +20,12 @@ with rawlines as ( ) -- Dissolve segments into linestrings or multilinestrings for simplification --- TODO: this step using st_union, st_unaryunion, st_collect, st_node, +-- TODO: Using st_union, st_unaryunion, st_collect, st_node, st_linemerge -- and maybe a few others I've tried to dissolve the line segments -- appears to work, but the resulting multiline geometry fails to simplify. -- On the other hand, the QGIS Dissolve tool works, and produces multiline -- geometry that simplifies nicely. --- QGIS Multipart to Singleparts does something arguably even better: it +678-- QGIS Multipart to Singleparts does something arguably even better: it -- unions all of the segments between intersections. ,dissolved as ( select st_collect(l.geom) as geom from dumpedlinesegments l diff --git a/scripts/postgis_snippets/task_splitting/task_splitting.sql b/scripts/postgis_snippets/task_splitting/task_splitting.sql index 0bedd2ebd7..a813ace0d5 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting.sql @@ -1,254 +1,304 @@ -/* + /* Licence: GPLv3 - -This script divides an area into smaller areas suitable for field mapping as part of the HOT Field Mapping Tasking Manager. - -It takes four inputs, all of which are tables in a Postgresql database with -the PostGIS extension enabled. The first three are PostGIS layers in -an EPSG:4326 projection. - -1) "project_aoi", a polygon layer with a single-feature Area of Interest -2) "ways_line", a line layer, usually from OpenStreetMap, covering the AOI -3) "ways_poly", a polygon layer, usually from OSM, covering the AOI -4) "project_config", a table with parameters for the splitting - - A desired number of features per task polygon - - A set of tags indicating what features should be included in the line - polygon layers - - Maybe other stuff. I don't know yet; I haven't implemented this table yet. - -TODO: implement the config table */ --- The Area of Interest provided by the person creating the project -WITH aoi AS ( - SELECT * FROM "project-aoi" -) --- Extract all lines to be used as splitlines from a table of lines --- with the schema from Underpass (all tags as jsonb column called 'tags') --- TODO: add polygons (closed ways in OSM) with a 'highway' tag; --- some features such as roundabouts appear as polygons. --- TODO: add waterway polygons; now a beach doesn't show up as a splitline. --- TODO: these tags should come from another table rather than hardcoded --- so that they're easily configured during project creation. -,splitlines AS ( - SELECT ST_Intersection(a.geom, l.geom) AS geom - FROM aoi a, "ways_line" l - WHERE ST_Intersects(a.geom, l.geom) - -- TODO: these tags should come from a config table - -- All highways, waterways, and railways - AND (tags->>'highway' IS NOT NULL - OR tags->>'waterway' IS NOT NULL - OR tags->>'railway' IS NOT NULL - ) - -- A selection of highways, waterways, and all railways - /* - AND (tags->>'highway' = 'trunk' - OR tags->>'highway' = 'primary' - OR tags->>'highway' = 'secondary' - OR tags->>'highway' = 'tertiary' - OR tags->>'highway' = 'residential' - OR tags->>'highway' = 'unclassified' - OR tags->>'waterway' = 'river' - OR tags->>'waterway' = 'drain' - OR tags->>'railway' IS NOT NULL - ) - */ -) --- Merge all lines, necessary so that the polygonize function works later -,merged AS ( - SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom - FROM splitlines -) --- Combine the boundary of the AOI with the splitlines --- First extract the Area of Interest boundary as a line -,boundary AS ( - SELECT ST_Boundary(geom) AS geom - FROM aoi -) --- Then combine it with the splitlines -,comb AS ( - SELECT ST_Union(boundary.geom, merged.geom) AS geom - FROM boundary, merged -) --- Create a polygon for each area enclosed by the splitlines -,splitpolysnoindex AS ( - SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom - FROM comb -) --- Add an index column to the split polygons --- Row numbers can function as temporary unique IDs for our new polygons -,splitpolygons AS( -SELECT row_number () over () as polyid, * -from splitpolysnoindex -) --- Grab the buildings. +--*************************Split by OSM lines*********************** +-- Nuke whatever was there before +DROP TABLE IF EXISTS polygonsnocount; +-- Create a new polygon layer of splits by lines +CREATE TABLE polygonsnocount AS ( + -- The Area of Interest provided by the person creating the project + WITH aoi AS ( + SELECT * FROM "project-aoi" + ) + -- Extract all lines to be used as splitlines from a table of lines + -- with the schema from Underpass (all tags as jsonb column called 'tags') + -- TODO: add polygons (closed ways in OSM) with a 'highway' tag; + -- some features such as roundabouts appear as polygons. + -- TODO: add waterway polygons; now a beach doesn't show up as a splitline. + -- TODO: these tags should come from another table rather than hardcoded + -- so that they're easily configured during project creation. + ,splitlines AS ( + SELECT ST_Intersection(a.geom, l.geom) AS geom + FROM aoi a, "ways_line" l + WHERE ST_Intersects(a.geom, l.geom) + -- TODO: these tags should come from a config table + -- All highways, waterways, and railways + AND (tags->>'highway' IS NOT NULL + OR tags->>'waterway' IS NOT NULL + OR tags->>'railway' IS NOT NULL + ) + ) + -- Merge all lines, necessary so that the polygonize function works later + ,merged AS ( + SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom + FROM splitlines + ) + -- Combine the boundary of the AOI with the splitlines + -- First extract the Area of Interest boundary as a line + ,boundary AS ( + SELECT ST_Boundary(geom) AS geom + FROM aoi + ) + -- Then combine it with the splitlines + ,comb AS ( + SELECT ST_Union(boundary.geom, merged.geom) AS geom + FROM boundary, merged + ) + -- TODO add closed ways from OSM to lines (roundabouts etc) + -- Create a polygon for each area enclosed by the splitlines + ,splitpolysnoindex AS ( + SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom + FROM comb + ) + -- Add an index column to the split polygons + ,splitpolygons AS( + SELECT + row_number () over () as polyid, + ST_Transform(spni.geom,4326)::geography AS geog, + spni.* + from splitpolysnoindex spni + ) + SELECT * FROM splitpolygons +); +-- Make that index column a primary key +ALTER TABLE polygonsnocount ADD PRIMARY KEY(polyid); +-- Properly register geometry column (makes QGIS happy) +SELECT Populate_Geometry_Columns('public.polygonsnocount'::regclass); +-- Add a spatial index (vastly improves performance for a lot of operations) +CREATE INDEX polygonsnocount_idx + ON polygonsnocount + USING GIST (geom); +-- Clean up the table which may have gaps and stuff from spatial indexing +VACUUM ANALYZE polygonsnocount; + +-- ************************Grab the buildings************************** -- While we're at it, grab the ID of the polygon the buildings fall within. --- TODO: at the moment this uses ST_Intersects, which is fine except when --- buildings cross polygon boundaries (which definitely happens in OSM). --- In that case, the building should probably be placed in the polygon --- where the largest proportion of its area falls. At the moment it --- duplicates the building in 2 polygons, which is bad! --- There's definitely a way to calculate which of several polygons the largest --- proportion of a building falls, that's what we should do. --- Doing it as a left join would also be better. --- Using the intersection of the centroid would also avoid duplication, --- but sometimes causes weird placements. -,buildings AS ( +-- TODO add outer rings of buildings from relations table of OSM export +DROP TABLE IF EXISTS buildings; +CREATE TABLE buildings AS ( SELECT b.*, polys.polyid - FROM "ways_poly" b, splitpolygons polys - WHERE ST_Intersects(polys.geom, b.geom) + FROM "ways_poly" b, polygonsnocount polys + WHERE ST_Intersects(polys.geom, ST_Centroid(b.geom)) AND b.tags->>'building' IS NOT NULL -) --- Count the features in each polygon split by line features. -,polygonsfeaturecount AS ( - SELECT sp.polyid, sp.geom, count(b.geom) AS numfeatures - FROM "splitpolygons" sp - LEFT JOIN "buildings" b - ON sp.polyid = b.polyid - GROUP BY sp.polyid, sp.geom -) --- Filter out polygons with no features in them --- TODO: Merge the empty ones into their neighbors and replace the UIDs --- with consecutive integers for only the polygons with contents -,splitpolygonswithcontents AS ( - SELECT * - FROM polygonsfeaturecount pfc - WHERE pfc.numfeatures > 0 -) -/******************************************************************************* --- Uncomment this and stop here for split polygons before clustering -SELECT * FROM splitpolygonswithcontents -*******************************************************************************/ - --- Add the count of features in the splitpolygon each building belongs to --- to the buildings table; sets us up to be able to run the clustering. -,buildingswithcount AS ( - SELECT b.*, p.numfeatures - FROM buildings b - LEFT JOIN polygonsfeaturecount p - ON b.polyid = p.polyid -) --- Cluster the buildings within each splitpolygon. The second term in the --- call to the ST_ClusterKMeans function is the number of clusters to create, --- so we're dividing the number of features by a constant (10 in this case) --- to get the number of clusters required to get close to the right number --- of features per cluster. --- TODO: This should certainly not be a hardcoded, the number of features --- per cluster should come from a project configuration table --- TODO; CRITICAL: Sets of buildings in polygons with less than twice the --- number of desired buildings plus one --- per task must be excluded from this operation -,buildingstocluster as ( - SELECT * FROM buildingswithcount bc - WHERE bc.numfeatures > 21 -) -,clusteredbuildingsnocombineduid AS ( -SELECT *, - ST_ClusterKMeans(geom, cast((b.numfeatures / 10) + 1 as integer)) - over (partition by polyid) as cid -FROM buildingstocluster b -) --- uid combining the id of the outer splitpolygon and inner cluster -,clusteredbuildings as ( - select *, - polyid::text || '-' || cid as clusteruid - from clusteredbuildingsnocombineduid -) -/******************************************************************************* --- Uncomment this and stop here for clustered buildings -SELECT * FROM clusteredbuildings -*******************************************************************************/ - -/*********************Magic approach****************************************** --- Magic function that Steve is writing --- This may prevent us from needing to write tables or queries to the db. -,hulls AS( - select Ivan_Hull(ST_Collect(clb.geom), clb.clusteruid, pwc.geom) as geom - from clusteredbuildings clb - LEFT JOIN splitpolygonswithcontents pwc ON clb.polyid = pwc.polyid -) -select * from hulls -******************************************************************************/ - ---******************Concave Hull approach************************************** -,hulls AS( - -- Using a very high param_pctconvex value; smaller values often produce - -- self-intersections and crash. It seems that anything below 1 produces - -- something massively better than 1 (which is just a convex hull) but - -- no different (i.e. 0.99 produces the same thing as 0.9999), so - -- there's nothing to lose choosing a value a miniscule fraction less than 1. - select clb.polyid, clb.cid, clb.clusteruid, - ST_ConcaveHull(ST_Collect(clb.geom), 0.9999) as geom - from clusteredbuildings clb - group by clb.clusteruid, clb.polyid, clb.cid -) --- Now we need to: --- - Get rid of the overlapping areas of the hulls --- - Create intersections for the hulls so all overlapping bits are separated --- - Check what's inside of the overlapping bits --- - If it's only stuff belonging to one of the original hulls, give that --- bit to the hull it belongs to --- - If the overlapping are contains stuff belonging to more than one hull, --- somehow split the overlapping bit such that each piece only contains --- stuff from one or another parent hull. Then merge them back. --- - Do something Voronoi-esque to expand the hulls until they tile the --- entire AOI, creating task polygons with no gaps -select * from hulls ---*****************************************************************************/ - -/******************Voronoi approach******************************************** --- This actually generates pretty good boundaries (not perfect, but not bad). --- They'd be better if we segmentized the buildings first. --- The problem is that it is unacceptably slow on big datasets, due to the --- lack of a spatial index on the building nodes and voronoi polygons. --- This could be solved by creating tables and indexes as we go, but --- then we don't have a nice pure query that doesn't modify the database. --- If only there were a way to retain the uid of the point each Voronoi --- polygon was created from... - --- Extract all of the nodes in the buildings as points --- TODO: segmentize them first so that the points are denser and make nicer --- Voronoi polygons that don't poke into their neighbor's buildings -,dumpedpoints AS ( +); +ALTER TABLE buildings ADD PRIMARY KEY(osm_id); +-- Properly register geometry column (makes QGIS happy) +SELECT Populate_Geometry_Columns('public.buildings'::regclass); +-- Add a spatial index (vastly improves performance for a lot of operations) +CREATE INDEX buildings_idx + ON buildings + USING GIST (geom); +-- Clean up the table which may have gaps and stuff from spatial indexing +VACUUM ANALYZE buildings; + +--**************************Count features in polygons***************** +DROP TABLE IF EXISTS splitpolygons; +CREATE TABLE splitpolygons AS ( + WITH polygonsfeaturecount AS ( + SELECT sp.polyid, + sp.geom, + sp.geog, + count(b.geom) AS numfeatures, + ST_Area(sp.geog) AS area + FROM polygonsnocount sp + LEFT JOIN "buildings" b + ON sp.polyid = b.polyid + GROUP BY sp.polyid, sp.geom + ) + SELECT * from polygonsfeaturecount +); +ALTER TABLE splitpolygons ADD PRIMARY KEY(polyid); +SELECT Populate_Geometry_Columns('public.splitpolygons'::regclass); +CREATE INDEX splitpolygons_idx + ON splitpolygons + USING GIST (geom); +VACUUM ANALYZE splitpolygons; + +DROP TABLE polygonsnocount; + +DROP TABLE IF EXISTS lowfeaturecountpolygons; +CREATE TABLE lowfeaturecountpolygons AS ( + -- Grab the polygons with fewer than the requisite number of features + WITH lowfeaturecountpolys as ( + SELECT * + FROM splitpolygons AS p + -- TODO: feature count should not be hard-coded + WHERE p.numfeatures < 20 + ), + -- Find the neighbors of the low-feature-count polygons + -- Store their ids as n_polyid, numfeatures as n_numfeatures, etc + allneighborlist AS ( + SELECT p.*, + pf.polyid AS n_polyid, + pf.area AS n_area, + p.numfeatures AS n_numfeatures, + -- length of shared boundary to make nice merge decisions + st_length2d(st_intersection(p.geom, pf.geom)) as sharedbound + FROM lowfeaturecountpolys AS p + INNER JOIN splitpolygons AS pf + -- Anything that touches + ON st_touches(p.geom, pf.geom) + -- But eliminate those whose intersection is a point, because + -- polygons that only touch at a corner shouldn't be merged + AND st_geometrytype(st_intersection(p.geom, pf.geom)) != 'ST_Point' + -- Sort first by polyid of the low-feature-count polygons + -- Then by descending featurecount and area of the + -- high-feature-count neighbors (area is in case of equal + -- featurecounts, we'll just pick the biggest to add to) + ORDER BY p.polyid, p.numfeatures DESC, pf.area DESC + -- OR, maybe for more aesthetic merges: + -- order by p.polyid, sharedbound desc + ) + SELECT DISTINCT ON (a.polyid) * FROM allneighborlist AS a +); +ALTER TABLE lowfeaturecountpolygons ADD PRIMARY KEY(polyid); +SELECT Populate_Geometry_Columns('public.lowfeaturecountpolygons'::regclass); +CREATE INDEX lowfeaturecountpolygons_idx + ON lowfeaturecountpolygons + USING GIST (geom); +VACUUM ANALYZE lowfeaturecountpolygons; + +--****************Merge low feature count polygons with neighbors******* + + + +--****************Cluster buildings************************************* +DROP TABLE IF EXISTS clusteredbuildings; +CREATE TABLE clusteredbuildings AS ( + WITH splitpolygonswithcontents AS ( + SELECT * + FROM splitpolygons sp + WHERE sp.numfeatures > 0 + ) + -- Add the count of features in the splitpolygon each building belongs to + -- to the buildings table; sets us up to be able to run the clustering. + ,buildingswithcount AS ( + SELECT b.*, p.numfeatures + FROM buildings b + LEFT JOIN splitpolygons p + ON b.polyid = p.polyid + ) + -- Cluster the buildings within each splitpolygon. The second term in the + -- call to the ST_ClusterKMeans function is the number of clusters to create, + -- so we're dividing the number of features by a constant (10 in this case) + -- to get the number of clusters required to get close to the right number + -- of features per cluster. + -- TODO: This should certainly not be a hardcoded, the number of features + -- per cluster should come from a project configuration table + ,buildingstocluster as ( + SELECT * FROM buildingswithcount bc + WHERE bc.numfeatures > 0 + ) + ,clusteredbuildingsnocombineduid AS ( + SELECT *, + ST_ClusterKMeans(geom, cast((b.numfeatures / 20) + 1 as integer)) + over (partition by polyid) as cid + FROM buildingstocluster b + ) + -- uid combining the id of the outer splitpolygon and inner cluster + ,clusteredbuildings as ( + select *, + polyid::text || '-' || cid as clusteruid + from clusteredbuildingsnocombineduid + ) + SELECT * FROM clusteredbuildings +); +ALTER TABLE clusteredbuildings ADD PRIMARY KEY(osm_id); +SELECT Populate_Geometry_Columns('public.clusteredbuildings'::regclass); +CREATE INDEX clusteredbuildings_idx + ON clusteredbuildings + USING GIST (geom); +VACUUM ANALYZE clusteredbuildings; + +--*****************Densify dumped building nodes****************** +DROP TABLE IF EXISTS dumpedpoints; +CREATE TABLE dumpedpoints AS ( SELECT cb.osm_id, cb.polyid, cb.cid, cb.clusteruid, - (st_dumppoints(geom)).geom + -- POSSIBLE BUG: PostGIS' Voronoi implementation seems to panic + -- with segments less than 0.00004 degrees. + -- Should probably use geography instead of geometry + (st_dumppoints(ST_Segmentize(geom, 0.00001))).geom FROM clusteredbuildings cb -) --- Aggregate the points by the unique ids of the clusters so that the next --- step (Voronoi polygons) can treat each cluster as a discrete dataset -,dumpedpointsuid as ( - SELECT dp.clusteruid, dp.geom - FROM dumpedpoints dp - GROUP by dp.geom, dp.clusteruid -) - --- Generate a set of voronoi polygons for each splitpolygon, so that the --- Voronois tile each splitpolygon but don't poke out of them -,voronoisnoid as ( +); +SELECT Populate_Geometry_Columns('public.dumpedpoints'::regclass); +CREATE INDEX dumpedpoints_idx + ON dumpedpoints + USING GIST (geom); +VACUUM ANALYZE dumpedpoints; + +--*******************voronoia**************************************** +DROP TABLE IF EXISTS voronoids; +CREATE TABLE voronoids AS ( SELECT st_intersection((ST_Dump(ST_VoronoiPolygons( - ST_Collect(points.geom) - ))).geom, - sp.geom) as geom - FROM dumpedpoints as points, - splitpolygonswithcontents as sp - where st_contains(sp.geom, points.geom) - group by sp.geom -) --- Re-associate each Voronoi polygon with the point it was created from. --- TODO: This has major performance issues because there's no spatial index --- on the points or Voronoi polygons. On a big dataset it can take hours. --- There are only three possible solutions that I can see: --- - Write the points and Voronoi polygons as tables and index them --- - Find a way to retain the IDs of the points when creating Voronoi --- polygons from them --- - Wait for Steve to write a magic function -,voronois as ( - select p.clusteruid, v.geom - from voronoisnoid v, dumpedpoints p + ST_Collect(points.geom) + ))).geom, + sp.geom) as geom + FROM dumpedpoints as points, + splitpolygons as sp + where st_contains(sp.geom, points.geom) + group by sp.geom +); +CREATE INDEX voronoids_idx + ON voronoids + USING GIST (geom); +VACUUM ANALYZE voronoids; + +DROP TABLE IF EXISTS voronois; +CREATE TABLE voronois AS ( + SELECT p.clusteruid, v.geom + FROM voronoids v, dumpedpoints p WHERE st_within(p.geom, v.geom) -) -select * -from voronois v -*****************************************************************************/ +); +CREATE INDEX voronois_idx + ON voronois + USING GIST (geom); +VACUUM ANALYZE voronois; +DROP TABLE voronoids; + +DROP TABLE IF EXISTS taskpolygons; +CREATE TABLE taskpolygons AS ( + SELECT ST_Union(geom) as geom, clusteruid + FROM voronois + GROUP BY clusteruid +); +CREATE INDEX taskpolygons_idx + ON taskpolygons + USING GIST (geom); +VACUUM ANALYZE taskpolygons; + +--*****************************Simplify******************************* +-- Extract unique line segments +DROP TABLE IF EXISTS taskpolysegments; +CREATE TABLE taskpolysegments AS ( + --Convert task polygon boundaries to linestrings + WITH rawlines AS ( + SELECT tp.clusteruid, st_boundary(tp.geom) AS geom + FROM taskpolygons AS tp + ) + -- Union, which eliminates duplicates from adjacent polygon boundaries + ,unionlines AS ( + SELECT st_union(l.geom) AS geom FROM rawlines l + ) + -- Dump, which gives unique segments. + SELECT (st_dump(l.geom)).geom AS geom + FROM unionlines l +); +ALTER TABLE taskpolysegments + ALTER COLUMN geom + TYPE geometry(LineString, 4326) + USING ST_SetSRID(geom, 4326); +CREATE INDEX taskpolysegments_idx + ON taskpolysegments + USING GIST (geom); +VACUUM ANALYZE taskpolysegments; + +-- Dissolve the segments + +-- Simplify + +-- Rehydrate back into polygons + +-- Clean results (nuke or merge polygons without features in them) diff --git a/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql b/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql index 3f3dd3d50a..1e9a598d03 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql @@ -192,7 +192,7 @@ CREATE TABLE clusteredbuildings AS ( ) ,clusteredbuildingsnocombineduid AS ( SELECT *, - ST_ClusterKMeans(geom, cast((b.numfeatures / 5) + 1 as integer)) + ST_ClusterKMeans(geom, cast((b.numfeatures / 20) + 1 as integer)) over (partition by polyid) as cid FROM buildingstocluster b ) From 1a585fe3edfd13acab1c2767083a6647c8dcc1e1 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Sat, 8 Jul 2023 23:51:19 +0900 Subject: [PATCH 028/222] Task splitting script now includes simplification, the rabbits send their regards --- .../task_splitting/task_splitting.sql | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/scripts/postgis_snippets/task_splitting/task_splitting.sql b/scripts/postgis_snippets/task_splitting/task_splitting.sql index a813ace0d5..215453043d 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting.sql @@ -270,8 +270,8 @@ VACUUM ANALYZE taskpolygons; --*****************************Simplify******************************* -- Extract unique line segments -DROP TABLE IF EXISTS taskpolysegments; -CREATE TABLE taskpolysegments AS ( +DROP TABLE IF EXISTS simplifiedpolygons; +CREATE TABLE simplifiedpolygons AS ( --Convert task polygon boundaries to linestrings WITH rawlines AS ( SELECT tp.clusteruid, st_boundary(tp.geom) AS geom @@ -282,23 +282,25 @@ CREATE TABLE taskpolysegments AS ( SELECT st_union(l.geom) AS geom FROM rawlines l ) -- Dump, which gives unique segments. - SELECT (st_dump(l.geom)).geom AS geom - FROM unionlines l + ,segments AS ( + SELECT (st_dump(l.geom)).geom AS geom + FROM unionlines l + ) + ,agglomerated AS ( + SELECT st_linemerge(st_unaryunion(st_collect(s.geom))) AS geom + FROM segments s + ) + ,simplifiedlines AS ( + SELECT st_simplify(a.geom, 0.000075) AS geom + FROM agglomerated a + ) + SELECT (st_dump(st_polygonize(s.geom))).geom AS geom + FROM simplifiedlines s ); -ALTER TABLE taskpolysegments - ALTER COLUMN geom - TYPE geometry(LineString, 4326) - USING ST_SetSRID(geom, 4326); -CREATE INDEX taskpolysegments_idx - ON taskpolysegments +CREATE INDEX simplifiedpolygons_idx + ON simplifiedpolygons USING GIST (geom); -VACUUM ANALYZE taskpolysegments; - --- Dissolve the segments - --- Simplify - --- Rehydrate back into polygons +VACUUM ANALYZE simplifiedpolygons; -- Clean results (nuke or merge polygons without features in them) From c5938a983b2baed0a82e783727387ffd9e27185d Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 14 Jul 2023 10:20:56 +0900 Subject: [PATCH 029/222] clean splitting script directories and begin split for road tasks --- .../building_clusters_of_5.sql | 0 .../{ => Examples_and_tests}/centroids.sql | 0 .../clean_and_simplify.sql | 0 .../{ => Examples_and_tests}/clustering.sql | 0 ...ve_hull_tasks_from_clustered_buildings.sql | 0 .../count_building_tags.sql | 0 ...lygons_with_no_features_into_neighbors.sql | 0 .../points_in_polygon.sql | 0 .../{ => Examples_and_tests}/polygonize.sql | 0 .../select_features_in_polygon.sql | 0 .../split_aoi_by_osm_lines.sql | 0 .../split_area_by_osm_lines.sql | 0 .../task_splitting_optimized.sql | 0 .../{ => Examples_and_tests}/voronoi.sql | 0 ...l => task_splitting_for_osm_buildings.sql} | 3 + .../task_splitting_for_osm_roads.sql | 303 ++++++++++++++++++ .../{README.md => task_splitting_readme.md} | 0 17 files changed, 306 insertions(+) rename scripts/postgis_snippets/{task_splitting => Examples_and_tests}/building_clusters_of_5.sql (100%) rename scripts/postgis_snippets/{ => Examples_and_tests}/centroids.sql (100%) rename scripts/postgis_snippets/{task_splitting => Examples_and_tests}/clean_and_simplify.sql (100%) rename scripts/postgis_snippets/{ => Examples_and_tests}/clustering.sql (100%) rename scripts/postgis_snippets/{task_splitting => Examples_and_tests}/concave_hull_tasks_from_clustered_buildings.sql (100%) rename scripts/postgis_snippets/{ => Examples_and_tests}/count_building_tags.sql (100%) rename scripts/postgis_snippets/{task_splitting => Examples_and_tests}/merge_polygons_with_no_features_into_neighbors.sql (100%) rename scripts/postgis_snippets/{ => Examples_and_tests}/points_in_polygon.sql (100%) rename scripts/postgis_snippets/{ => Examples_and_tests}/polygonize.sql (100%) rename scripts/postgis_snippets/{ => Examples_and_tests}/select_features_in_polygon.sql (100%) rename scripts/postgis_snippets/{ => Examples_and_tests}/split_aoi_by_osm_lines.sql (100%) rename scripts/postgis_snippets/{task_splitting => Examples_and_tests}/split_area_by_osm_lines.sql (100%) rename scripts/postgis_snippets/{task_splitting => Examples_and_tests}/task_splitting_optimized.sql (100%) rename scripts/postgis_snippets/{ => Examples_and_tests}/voronoi.sql (100%) rename scripts/postgis_snippets/task_splitting/{task_splitting.sql => task_splitting_for_osm_buildings.sql} (94%) create mode 100644 scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql rename scripts/postgis_snippets/task_splitting/{README.md => task_splitting_readme.md} (100%) diff --git a/scripts/postgis_snippets/task_splitting/building_clusters_of_5.sql b/scripts/postgis_snippets/Examples_and_tests/building_clusters_of_5.sql similarity index 100% rename from scripts/postgis_snippets/task_splitting/building_clusters_of_5.sql rename to scripts/postgis_snippets/Examples_and_tests/building_clusters_of_5.sql diff --git a/scripts/postgis_snippets/centroids.sql b/scripts/postgis_snippets/Examples_and_tests/centroids.sql similarity index 100% rename from scripts/postgis_snippets/centroids.sql rename to scripts/postgis_snippets/Examples_and_tests/centroids.sql diff --git a/scripts/postgis_snippets/task_splitting/clean_and_simplify.sql b/scripts/postgis_snippets/Examples_and_tests/clean_and_simplify.sql similarity index 100% rename from scripts/postgis_snippets/task_splitting/clean_and_simplify.sql rename to scripts/postgis_snippets/Examples_and_tests/clean_and_simplify.sql diff --git a/scripts/postgis_snippets/clustering.sql b/scripts/postgis_snippets/Examples_and_tests/clustering.sql similarity index 100% rename from scripts/postgis_snippets/clustering.sql rename to scripts/postgis_snippets/Examples_and_tests/clustering.sql diff --git a/scripts/postgis_snippets/task_splitting/concave_hull_tasks_from_clustered_buildings.sql b/scripts/postgis_snippets/Examples_and_tests/concave_hull_tasks_from_clustered_buildings.sql similarity index 100% rename from scripts/postgis_snippets/task_splitting/concave_hull_tasks_from_clustered_buildings.sql rename to scripts/postgis_snippets/Examples_and_tests/concave_hull_tasks_from_clustered_buildings.sql diff --git a/scripts/postgis_snippets/count_building_tags.sql b/scripts/postgis_snippets/Examples_and_tests/count_building_tags.sql similarity index 100% rename from scripts/postgis_snippets/count_building_tags.sql rename to scripts/postgis_snippets/Examples_and_tests/count_building_tags.sql diff --git a/scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql b/scripts/postgis_snippets/Examples_and_tests/merge_polygons_with_no_features_into_neighbors.sql similarity index 100% rename from scripts/postgis_snippets/task_splitting/merge_polygons_with_no_features_into_neighbors.sql rename to scripts/postgis_snippets/Examples_and_tests/merge_polygons_with_no_features_into_neighbors.sql diff --git a/scripts/postgis_snippets/points_in_polygon.sql b/scripts/postgis_snippets/Examples_and_tests/points_in_polygon.sql similarity index 100% rename from scripts/postgis_snippets/points_in_polygon.sql rename to scripts/postgis_snippets/Examples_and_tests/points_in_polygon.sql diff --git a/scripts/postgis_snippets/polygonize.sql b/scripts/postgis_snippets/Examples_and_tests/polygonize.sql similarity index 100% rename from scripts/postgis_snippets/polygonize.sql rename to scripts/postgis_snippets/Examples_and_tests/polygonize.sql diff --git a/scripts/postgis_snippets/select_features_in_polygon.sql b/scripts/postgis_snippets/Examples_and_tests/select_features_in_polygon.sql similarity index 100% rename from scripts/postgis_snippets/select_features_in_polygon.sql rename to scripts/postgis_snippets/Examples_and_tests/select_features_in_polygon.sql diff --git a/scripts/postgis_snippets/split_aoi_by_osm_lines.sql b/scripts/postgis_snippets/Examples_and_tests/split_aoi_by_osm_lines.sql similarity index 100% rename from scripts/postgis_snippets/split_aoi_by_osm_lines.sql rename to scripts/postgis_snippets/Examples_and_tests/split_aoi_by_osm_lines.sql diff --git a/scripts/postgis_snippets/task_splitting/split_area_by_osm_lines.sql b/scripts/postgis_snippets/Examples_and_tests/split_area_by_osm_lines.sql similarity index 100% rename from scripts/postgis_snippets/task_splitting/split_area_by_osm_lines.sql rename to scripts/postgis_snippets/Examples_and_tests/split_area_by_osm_lines.sql diff --git a/scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql b/scripts/postgis_snippets/Examples_and_tests/task_splitting_optimized.sql similarity index 100% rename from scripts/postgis_snippets/task_splitting/task_splitting_optimized.sql rename to scripts/postgis_snippets/Examples_and_tests/task_splitting_optimized.sql diff --git a/scripts/postgis_snippets/voronoi.sql b/scripts/postgis_snippets/Examples_and_tests/voronoi.sql similarity index 100% rename from scripts/postgis_snippets/voronoi.sql rename to scripts/postgis_snippets/Examples_and_tests/voronoi.sql diff --git a/scripts/postgis_snippets/task_splitting/task_splitting.sql b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_buildings.sql similarity index 94% rename from scripts/postgis_snippets/task_splitting/task_splitting.sql rename to scripts/postgis_snippets/task_splitting/task_splitting_for_osm_buildings.sql index 215453043d..56755c3244 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_buildings.sql @@ -1,5 +1,8 @@ /* Licence: GPLv3 +Part of the HOT Field Mapping Tasking Manager (FMTM) + +This script splits an Area of Interest into task polygons based on OpenStreetMap lines (roads, waterways, and railways) and buildings. More information in the adjacent file task_splitting_readme.md. */ --*************************Split by OSM lines*********************** diff --git a/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql new file mode 100644 index 0000000000..f9bf5c7e95 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql @@ -0,0 +1,303 @@ + /* +Licence: GPLv3 +Part of the HOT Field Mapping Tasking Manager (FMTM) + +This script splits an Area of Interest into task polygons based on OpenStreetMap lines (roads, waterways, and railways) for the purposes of adding information (tags) to road segments. +*/ + +--*************************Extract road segments*********************** +-- Nuke whatever was there before +DROP TABLE IF EXISTS roadsdissolved; +-- Create a new polygon layer of splits by lines +CREATE TABLE roadsdissolved AS ( + -- The Area of Interest provided by the person creating the project + WITH aoi AS ( + SELECT * FROM "project-aoi" + ) + ,roadlines AS ( + SELECT ST_Intersection(a.geom, l.geom) AS geom + FROM aoi a, "ways_line" l + WHERE ST_Intersects(a.geom, l.geom) + AND tags->>'highway' IS NOT NULL + ) + ,roadpolys AS ( + SELECT ST_Intersection(a.geom, p.geom) AS geom + FROM aoi a, "ways_poly" p + WHERE ST_Intersects(a.geom, p.geom) + AND tags->>'highway' IS NOT NULL + ) + -- Merge all lines, necessary so that the polygonize function works later + ,merged AS ( + SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom + FROM splitlines + ) + -- Combine the boundary of the AOI with the splitlines + -- First extract the Area of Interest boundary as a line + ,boundary AS ( + SELECT ST_Boundary(geom) AS geom + FROM aoi + ) + -- Then combine it with the splitlines + ,comb AS ( + SELECT ST_Union(boundary.geom, merged.geom) AS geom + FROM boundary, merged + ) + -- TODO add closed ways from OSM to lines (roundabouts etc) + -- Create a polygon for each area enclosed by the splitlines + ,splitpolysnoindex AS ( + SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom + FROM comb + ) + -- Add an index column to the split polygons + ,splitpolygons AS( + SELECT + row_number () over () as polyid, + ST_Transform(spni.geom,4326)::geography AS geog, + spni.* + from splitpolysnoindex spni + ) + SELECT * FROM splitpolygons +); +-- Make that index column a primary key +ALTER TABLE polygonsnocount ADD PRIMARY KEY(polyid); +-- Properly register geometry column (makes QGIS happy) +SELECT Populate_Geometry_Columns('public.polygonsnocount'::regclass); +-- Add a spatial index (vastly improves performance for a lot of operations) +CREATE INDEX polygonsnocount_idx + ON polygonsnocount + USING GIST (geom); +-- Clean up the table which may have gaps and stuff from spatial indexing +VACUUM ANALYZE polygonsnocount; + +-- ************************Grab the buildings************************** +-- While we're at it, grab the ID of the polygon the buildings fall within. +-- TODO add outer rings of buildings from relations table of OSM export +DROP TABLE IF EXISTS buildings; +CREATE TABLE buildings AS ( + SELECT b.*, polys.polyid + FROM "ways_poly" b, polygonsnocount polys + WHERE ST_Intersects(polys.geom, ST_Centroid(b.geom)) + AND b.tags->>'building' IS NOT NULL +); +ALTER TABLE buildings ADD PRIMARY KEY(osm_id); +-- Properly register geometry column (makes QGIS happy) +SELECT Populate_Geometry_Columns('public.buildings'::regclass); +-- Add a spatial index (vastly improves performance for a lot of operations) +CREATE INDEX buildings_idx + ON buildings + USING GIST (geom); +-- Clean up the table which may have gaps and stuff from spatial indexing +VACUUM ANALYZE buildings; + +--**************************Count features in polygons***************** +DROP TABLE IF EXISTS splitpolygons; +CREATE TABLE splitpolygons AS ( + WITH polygonsfeaturecount AS ( + SELECT sp.polyid, + sp.geom, + sp.geog, + count(b.geom) AS numfeatures, + ST_Area(sp.geog) AS area + FROM polygonsnocount sp + LEFT JOIN "buildings" b + ON sp.polyid = b.polyid + GROUP BY sp.polyid, sp.geom + ) + SELECT * from polygonsfeaturecount +); +ALTER TABLE splitpolygons ADD PRIMARY KEY(polyid); +SELECT Populate_Geometry_Columns('public.splitpolygons'::regclass); +CREATE INDEX splitpolygons_idx + ON splitpolygons + USING GIST (geom); +VACUUM ANALYZE splitpolygons; + +DROP TABLE polygonsnocount; + +DROP TABLE IF EXISTS lowfeaturecountpolygons; +CREATE TABLE lowfeaturecountpolygons AS ( + -- Grab the polygons with fewer than the requisite number of features + WITH lowfeaturecountpolys as ( + SELECT * + FROM splitpolygons AS p + -- TODO: feature count should not be hard-coded + WHERE p.numfeatures < 20 + ), + -- Find the neighbors of the low-feature-count polygons + -- Store their ids as n_polyid, numfeatures as n_numfeatures, etc + allneighborlist AS ( + SELECT p.*, + pf.polyid AS n_polyid, + pf.area AS n_area, + p.numfeatures AS n_numfeatures, + -- length of shared boundary to make nice merge decisions + st_length2d(st_intersection(p.geom, pf.geom)) as sharedbound + FROM lowfeaturecountpolys AS p + INNER JOIN splitpolygons AS pf + -- Anything that touches + ON st_touches(p.geom, pf.geom) + -- But eliminate those whose intersection is a point, because + -- polygons that only touch at a corner shouldn't be merged + AND st_geometrytype(st_intersection(p.geom, pf.geom)) != 'ST_Point' + -- Sort first by polyid of the low-feature-count polygons + -- Then by descending featurecount and area of the + -- high-feature-count neighbors (area is in case of equal + -- featurecounts, we'll just pick the biggest to add to) + ORDER BY p.polyid, p.numfeatures DESC, pf.area DESC + -- OR, maybe for more aesthetic merges: + -- order by p.polyid, sharedbound desc + ) + SELECT DISTINCT ON (a.polyid) * FROM allneighborlist AS a +); +ALTER TABLE lowfeaturecountpolygons ADD PRIMARY KEY(polyid); +SELECT Populate_Geometry_Columns('public.lowfeaturecountpolygons'::regclass); +CREATE INDEX lowfeaturecountpolygons_idx + ON lowfeaturecountpolygons + USING GIST (geom); +VACUUM ANALYZE lowfeaturecountpolygons; + +--****************Merge low feature count polygons with neighbors******* + + + +--****************Cluster buildings************************************* +DROP TABLE IF EXISTS clusteredbuildings; +CREATE TABLE clusteredbuildings AS ( + WITH splitpolygonswithcontents AS ( + SELECT * + FROM splitpolygons sp + WHERE sp.numfeatures > 0 + ) + -- Add the count of features in the splitpolygon each building belongs to + -- to the buildings table; sets us up to be able to run the clustering. + ,buildingswithcount AS ( + SELECT b.*, p.numfeatures + FROM buildings b + LEFT JOIN splitpolygons p + ON b.polyid = p.polyid + ) + -- Cluster the buildings within each splitpolygon. The second term in the + -- call to the ST_ClusterKMeans function is the number of clusters to create, + -- so we're dividing the number of features by a constant (10 in this case) + -- to get the number of clusters required to get close to the right number + -- of features per cluster. + -- TODO: This should certainly not be a hardcoded, the number of features + -- per cluster should come from a project configuration table + ,buildingstocluster as ( + SELECT * FROM buildingswithcount bc + WHERE bc.numfeatures > 0 + ) + ,clusteredbuildingsnocombineduid AS ( + SELECT *, + ST_ClusterKMeans(geom, cast((b.numfeatures / 20) + 1 as integer)) + over (partition by polyid) as cid + FROM buildingstocluster b + ) + -- uid combining the id of the outer splitpolygon and inner cluster + ,clusteredbuildings as ( + select *, + polyid::text || '-' || cid as clusteruid + from clusteredbuildingsnocombineduid + ) + SELECT * FROM clusteredbuildings +); +ALTER TABLE clusteredbuildings ADD PRIMARY KEY(osm_id); +SELECT Populate_Geometry_Columns('public.clusteredbuildings'::regclass); +CREATE INDEX clusteredbuildings_idx + ON clusteredbuildings + USING GIST (geom); +VACUUM ANALYZE clusteredbuildings; + +--*****************Densify dumped building nodes****************** +DROP TABLE IF EXISTS dumpedpoints; +CREATE TABLE dumpedpoints AS ( + SELECT cb.osm_id, cb.polyid, cb.cid, cb.clusteruid, + -- POSSIBLE BUG: PostGIS' Voronoi implementation seems to panic + -- with segments less than 0.00004 degrees. + -- Should probably use geography instead of geometry + (st_dumppoints(ST_Segmentize(geom, 0.00001))).geom + FROM clusteredbuildings cb +); +SELECT Populate_Geometry_Columns('public.dumpedpoints'::regclass); +CREATE INDEX dumpedpoints_idx + ON dumpedpoints + USING GIST (geom); +VACUUM ANALYZE dumpedpoints; + +--*******************voronoia**************************************** +DROP TABLE IF EXISTS voronoids; +CREATE TABLE voronoids AS ( + SELECT + st_intersection((ST_Dump(ST_VoronoiPolygons( + ST_Collect(points.geom) + ))).geom, + sp.geom) as geom + FROM dumpedpoints as points, + splitpolygons as sp + where st_contains(sp.geom, points.geom) + group by sp.geom +); +CREATE INDEX voronoids_idx + ON voronoids + USING GIST (geom); +VACUUM ANALYZE voronoids; + +DROP TABLE IF EXISTS voronois; +CREATE TABLE voronois AS ( + SELECT p.clusteruid, v.geom + FROM voronoids v, dumpedpoints p + WHERE st_within(p.geom, v.geom) +); +CREATE INDEX voronois_idx + ON voronois + USING GIST (geom); +VACUUM ANALYZE voronois; +DROP TABLE voronoids; + +DROP TABLE IF EXISTS taskpolygons; +CREATE TABLE taskpolygons AS ( + SELECT ST_Union(geom) as geom, clusteruid + FROM voronois + GROUP BY clusteruid +); +CREATE INDEX taskpolygons_idx + ON taskpolygons + USING GIST (geom); +VACUUM ANALYZE taskpolygons; + +--*****************************Simplify******************************* +-- Extract unique line segments +DROP TABLE IF EXISTS simplifiedpolygons; +CREATE TABLE simplifiedpolygons AS ( + --Convert task polygon boundaries to linestrings + WITH rawlines AS ( + SELECT tp.clusteruid, st_boundary(tp.geom) AS geom + FROM taskpolygons AS tp + ) + -- Union, which eliminates duplicates from adjacent polygon boundaries + ,unionlines AS ( + SELECT st_union(l.geom) AS geom FROM rawlines l + ) + -- Dump, which gives unique segments. + ,segments AS ( + SELECT (st_dump(l.geom)).geom AS geom + FROM unionlines l + ) + ,agglomerated AS ( + SELECT st_linemerge(st_unaryunion(st_collect(s.geom))) AS geom + FROM segments s + ) + ,simplifiedlines AS ( + SELECT st_simplify(a.geom, 0.000075) AS geom + FROM agglomerated a + ) + SELECT (st_dump(st_polygonize(s.geom))).geom AS geom + FROM simplifiedlines s +); +CREATE INDEX simplifiedpolygons_idx + ON simplifiedpolygons + USING GIST (geom); +VACUUM ANALYZE simplifiedpolygons; + +-- Clean results (nuke or merge polygons without features in them) + diff --git a/scripts/postgis_snippets/task_splitting/README.md b/scripts/postgis_snippets/task_splitting/task_splitting_readme.md similarity index 100% rename from scripts/postgis_snippets/task_splitting/README.md rename to scripts/postgis_snippets/task_splitting/task_splitting_readme.md From 195467c4aef915f4316759da6e93664d5497cb52 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 14 Jul 2023 10:59:26 +0900 Subject: [PATCH 030/222] merge roads from lines and roads from polys without performance issue --- .../task_splitting_for_osm_roads.sql | 76 ++++--------------- 1 file changed, 14 insertions(+), 62 deletions(-) diff --git a/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql index f9bf5c7e95..ebc413a624 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql @@ -11,84 +11,35 @@ DROP TABLE IF EXISTS roadsdissolved; -- Create a new polygon layer of splits by lines CREATE TABLE roadsdissolved AS ( -- The Area of Interest provided by the person creating the project - WITH aoi AS ( + WITH aoi AS ( SELECT * FROM "project-aoi" ) + -- Grab all roads within the AOI ,roadlines AS ( - SELECT ST_Intersection(a.geom, l.geom) AS geom + SELECT ST_Collect(l.geom) AS geom FROM aoi a, "ways_line" l WHERE ST_Intersects(a.geom, l.geom) AND tags->>'highway' IS NOT NULL ) - ,roadpolys AS ( - SELECT ST_Intersection(a.geom, p.geom) AS geom + -- Grab the roads that are polygons in OSM ("Closed ways" with highway tags) + ,roadpolystolines AS ( + SELECT ST_Collect(ST_Boundary(p.geom)) AS geom FROM aoi a, "ways_poly" p WHERE ST_Intersects(a.geom, p.geom) AND tags->>'highway' IS NOT NULL ) - -- Merge all lines, necessary so that the polygonize function works later - ,merged AS ( - SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom - FROM splitlines - ) - -- Combine the boundary of the AOI with the splitlines - -- First extract the Area of Interest boundary as a line - ,boundary AS ( - SELECT ST_Boundary(geom) AS geom - FROM aoi - ) - -- Then combine it with the splitlines - ,comb AS ( - SELECT ST_Union(boundary.geom, merged.geom) AS geom - FROM boundary, merged - ) - -- TODO add closed ways from OSM to lines (roundabouts etc) - -- Create a polygon for each area enclosed by the splitlines - ,splitpolysnoindex AS ( - SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom - FROM comb - ) - -- Add an index column to the split polygons - ,splitpolygons AS( - SELECT - row_number () over () as polyid, - ST_Transform(spni.geom,4326)::geography AS geog, - spni.* - from splitpolysnoindex spni - ) - SELECT * FROM splitpolygons + -- Merge the roads from lines with the roads from polys + SELECT ST_Union(ml.geom, mp.geom) as geom + FROM roadlines ml, roadpolystolines mp ); --- Make that index column a primary key -ALTER TABLE polygonsnocount ADD PRIMARY KEY(polyid); --- Properly register geometry column (makes QGIS happy) -SELECT Populate_Geometry_Columns('public.polygonsnocount'::regclass); -- Add a spatial index (vastly improves performance for a lot of operations) -CREATE INDEX polygonsnocount_idx - ON polygonsnocount +CREATE INDEX roadsdissolved_idx + ON USING GIST (geom); -- Clean up the table which may have gaps and stuff from spatial indexing -VACUUM ANALYZE polygonsnocount; - --- ************************Grab the buildings************************** --- While we're at it, grab the ID of the polygon the buildings fall within. --- TODO add outer rings of buildings from relations table of OSM export -DROP TABLE IF EXISTS buildings; -CREATE TABLE buildings AS ( - SELECT b.*, polys.polyid - FROM "ways_poly" b, polygonsnocount polys - WHERE ST_Intersects(polys.geom, ST_Centroid(b.geom)) - AND b.tags->>'building' IS NOT NULL -); -ALTER TABLE buildings ADD PRIMARY KEY(osm_id); --- Properly register geometry column (makes QGIS happy) -SELECT Populate_Geometry_Columns('public.buildings'::regclass); --- Add a spatial index (vastly improves performance for a lot of operations) -CREATE INDEX buildings_idx - ON buildings - USING GIST (geom); --- Clean up the table which may have gaps and stuff from spatial indexing -VACUUM ANALYZE buildings; +VACUUM ANALYZE roadsdissolved; +/* --**************************Count features in polygons***************** DROP TABLE IF EXISTS splitpolygons; CREATE TABLE splitpolygons AS ( @@ -301,3 +252,4 @@ VACUUM ANALYZE simplifiedpolygons; -- Clean results (nuke or merge polygons without features in them) +*/ From 0bc64e54ccf14db699638a4f817f581301449f65 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 14 Jul 2023 13:25:02 +0900 Subject: [PATCH 031/222] clustering split roads --- .../task_splitting_for_osm_roads.sql | 164 +++++------------- 1 file changed, 48 insertions(+), 116 deletions(-) diff --git a/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql index ebc413a624..655bb7c623 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql @@ -4,7 +4,7 @@ Part of the HOT Field Mapping Tasking Manager (FMTM) This script splits an Area of Interest into task polygons based on OpenStreetMap lines (roads, waterways, and railways) for the purposes of adding information (tags) to road segments. */ - +/* --*************************Extract road segments*********************** -- Nuke whatever was there before DROP TABLE IF EXISTS roadsdissolved; @@ -29,136 +29,68 @@ CREATE TABLE roadsdissolved AS ( AND tags->>'highway' IS NOT NULL ) -- Merge the roads from lines with the roads from polys - SELECT ST_Union(ml.geom, mp.geom) as geom - FROM roadlines ml, roadpolystolines mp + ,merged AS ( + SELECT ST_Union(ml.geom, mp.geom) as geom + FROM roadlines ml, roadpolystolines mp + ) + SELECT * + FROM merged mr ); -- Add a spatial index (vastly improves performance for a lot of operations) CREATE INDEX roadsdissolved_idx - ON + ON roadsdissolved USING GIST (geom); -- Clean up the table which may have gaps and stuff from spatial indexing VACUUM ANALYZE roadsdissolved; -/* ---**************************Count features in polygons***************** -DROP TABLE IF EXISTS splitpolygons; -CREATE TABLE splitpolygons AS ( - WITH polygonsfeaturecount AS ( - SELECT sp.polyid, - sp.geom, - sp.geog, - count(b.geom) AS numfeatures, - ST_Area(sp.geog) AS area - FROM polygonsnocount sp - LEFT JOIN "buildings" b - ON sp.polyid = b.polyid - GROUP BY sp.polyid, sp.geom - ) - SELECT * from polygonsfeaturecount -); -ALTER TABLE splitpolygons ADD PRIMARY KEY(polyid); -SELECT Populate_Geometry_Columns('public.splitpolygons'::regclass); -CREATE INDEX splitpolygons_idx - ON splitpolygons - USING GIST (geom); -VACUUM ANALYZE splitpolygons; +--**************************MISSING BIT******************************** +-- Here we use QGIS multipart to singleparts, which splits the roads +-- on all intersections into sensible parts. Need to implement in PostGIS. +-- Output here is a line layer table called roadparts which consists of one +-- linestring for each portion of a road between any and all intersections. -DROP TABLE polygonsnocount; +-- *****************Re-associate parts with OSM ID and tags************* +*/ -DROP TABLE IF EXISTS lowfeaturecountpolygons; -CREATE TABLE lowfeaturecountpolygons AS ( - -- Grab the polygons with fewer than the requisite number of features - WITH lowfeaturecountpolys as ( - SELECT * - FROM splitpolygons AS p - -- TODO: feature count should not be hard-coded - WHERE p.numfeatures < 20 - ), - -- Find the neighbors of the low-feature-count polygons - -- Store their ids as n_polyid, numfeatures as n_numfeatures, etc - allneighborlist AS ( - SELECT p.*, - pf.polyid AS n_polyid, - pf.area AS n_area, - p.numfeatures AS n_numfeatures, - -- length of shared boundary to make nice merge decisions - st_length2d(st_intersection(p.geom, pf.geom)) as sharedbound - FROM lowfeaturecountpolys AS p - INNER JOIN splitpolygons AS pf - -- Anything that touches - ON st_touches(p.geom, pf.geom) - -- But eliminate those whose intersection is a point, because - -- polygons that only touch at a corner shouldn't be merged - AND st_geometrytype(st_intersection(p.geom, pf.geom)) != 'ST_Point' - -- Sort first by polyid of the low-feature-count polygons - -- Then by descending featurecount and area of the - -- high-feature-count neighbors (area is in case of equal - -- featurecounts, we'll just pick the biggest to add to) - ORDER BY p.polyid, p.numfeatures DESC, pf.area DESC - -- OR, maybe for more aesthetic merges: - -- order by p.polyid, sharedbound desc - ) - SELECT DISTINCT ON (a.polyid) * FROM allneighborlist AS a -); -ALTER TABLE lowfeaturecountpolygons ADD PRIMARY KEY(polyid); -SELECT Populate_Geometry_Columns('public.lowfeaturecountpolygons'::regclass); -CREATE INDEX lowfeaturecountpolygons_idx - ON lowfeaturecountpolygons +DROP TABLE IF EXISTS roadpartstagged; +CREATE TABLE roadpartstagged AS ( + SELECT + wl.osm_id, + wl.tags, + l.geom as geom + FROM "ways_line" wl, roadparts l + -- Funky hack here: checking if a roadpart is a subset of an OSM way is + -- terribly slow if you check for a line intersection, but if you check for + -- any intersection it'll often return the attributes of an intersecting road. + -- If you check for intersection with the start and end nodes, sometimes + -- cresecent roads (which touch another road at start and end) get the + -- attributes from the road that they touch. + -- So we check for intersection of the first and second nodes in the part + -- (if there are only two, they're the start and end by definition, but they + -- also can't be a crescent so that's ok). + WHERE st_intersects(st_startpoint(l.geom), wl.geom) + AND ST_Intersects(st_pointn(l.geom, 2), wl.geom) +); +CREATE INDEX roadpartstagged_idx + ON roadpartstagged USING GIST (geom); -VACUUM ANALYZE lowfeaturecountpolygons; - ---****************Merge low feature count polygons with neighbors******* - +VACUUM ANALYZE roadpartstagged; - ---****************Cluster buildings************************************* -DROP TABLE IF EXISTS clusteredbuildings; -CREATE TABLE clusteredbuildings AS ( - WITH splitpolygonswithcontents AS ( - SELECT * - FROM splitpolygons sp - WHERE sp.numfeatures > 0 - ) - -- Add the count of features in the splitpolygon each building belongs to - -- to the buildings table; sets us up to be able to run the clustering. - ,buildingswithcount AS ( - SELECT b.*, p.numfeatures - FROM buildings b - LEFT JOIN splitpolygons p - ON b.polyid = p.polyid - ) - -- Cluster the buildings within each splitpolygon. The second term in the - -- call to the ST_ClusterKMeans function is the number of clusters to create, - -- so we're dividing the number of features by a constant (10 in this case) - -- to get the number of clusters required to get close to the right number - -- of features per cluster. - -- TODO: This should certainly not be a hardcoded, the number of features - -- per cluster should come from a project configuration table - ,buildingstocluster as ( - SELECT * FROM buildingswithcount bc - WHERE bc.numfeatures > 0 - ) - ,clusteredbuildingsnocombineduid AS ( +--****************Cluster roadparts************************************* +DROP TABLE IF EXISTS clusteredroadparts; +CREATE TABLE clusteredroadparts AS ( SELECT *, - ST_ClusterKMeans(geom, cast((b.numfeatures / 20) + 1 as integer)) - over (partition by polyid) as cid - FROM buildingstocluster b - ) - -- uid combining the id of the outer splitpolygon and inner cluster - ,clusteredbuildings as ( - select *, - polyid::text || '-' || cid as clusteruid - from clusteredbuildingsnocombineduid - ) - SELECT * FROM clusteredbuildings + -- TODO: replace 4500 with count of roadparts + ST_ClusterKMeans(geom, cast((4500 / 20) + 1 as integer)) + over () as cid + FROM roadpartstagged rp ); -ALTER TABLE clusteredbuildings ADD PRIMARY KEY(osm_id); -SELECT Populate_Geometry_Columns('public.clusteredbuildings'::regclass); -CREATE INDEX clusteredbuildings_idx - ON clusteredbuildings +CREATE INDEX clusteredroadparts_idx + ON clusteredroadparts USING GIST (geom); -VACUUM ANALYZE clusteredbuildings; +VACUUM ANALYZE clusteredroadparts; +/* --*****************Densify dumped building nodes****************** DROP TABLE IF EXISTS dumpedpoints; CREATE TABLE dumpedpoints AS ( From 582bed73b0f8fd83d05f12001bddd91d83cb9694 Mon Sep 17 00:00:00 2001 From: ivangayton Date: Fri, 14 Jul 2023 17:13:16 +0900 Subject: [PATCH 032/222] voronois and taskpolygons for road mapping --- .../task_splitting_for_osm_roads.sql | 42 ++++++++----------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql index 655bb7c623..25564eaa60 100644 --- a/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql +++ b/scripts/postgis_snippets/task_splitting/task_splitting_for_osm_roads.sql @@ -90,35 +90,29 @@ CREATE INDEX clusteredroadparts_idx USING GIST (geom); VACUUM ANALYZE clusteredroadparts; -/* ---*****************Densify dumped building nodes****************** -DROP TABLE IF EXISTS dumpedpoints; -CREATE TABLE dumpedpoints AS ( - SELECT cb.osm_id, cb.polyid, cb.cid, cb.clusteruid, +--***************** dump road segement nodes****************** +DROP TABLE IF EXISTS dumpedroadpoints; +CREATE TABLE dumpedroadpoints AS ( + SELECT crp.osm_id, crp.cid, -- POSSIBLE BUG: PostGIS' Voronoi implementation seems to panic -- with segments less than 0.00004 degrees. -- Should probably use geography instead of geometry - (st_dumppoints(ST_Segmentize(geom, 0.00001))).geom - FROM clusteredbuildings cb + (st_dumppoints(ST_Segmentize(crp.geom, 0.0001))).geom + --(st_dumppoints(crp.geom)).geom + FROM clusteredroadparts crp ); SELECT Populate_Geometry_Columns('public.dumpedpoints'::regclass); -CREATE INDEX dumpedpoints_idx - ON dumpedpoints +CREATE INDEX dumpedroadpoints_idx + ON dumpedroadpoints USING GIST (geom); -VACUUM ANALYZE dumpedpoints; +VACUUM ANALYZE dumpedroadpoints; --*******************voronoia**************************************** DROP TABLE IF EXISTS voronoids; CREATE TABLE voronoids AS ( SELECT - st_intersection((ST_Dump(ST_VoronoiPolygons( - ST_Collect(points.geom) - ))).geom, - sp.geom) as geom - FROM dumpedpoints as points, - splitpolygons as sp - where st_contains(sp.geom, points.geom) - group by sp.geom + (ST_Dump(ST_VoronoiPolygons(ST_Collect(points.geom)))).geom as geom + FROM dumpedroadpoints as points ); CREATE INDEX voronoids_idx ON voronoids @@ -127,8 +121,8 @@ VACUUM ANALYZE voronoids; DROP TABLE IF EXISTS voronois; CREATE TABLE voronois AS ( - SELECT p.clusteruid, v.geom - FROM voronoids v, dumpedpoints p + SELECT p.cid, st_intersection(v.geom, a.geom) as geom + FROM voronoids v, dumpedroadpoints p, "project-aoi" a WHERE st_within(p.geom, v.geom) ); CREATE INDEX voronois_idx @@ -139,9 +133,9 @@ DROP TABLE voronoids; DROP TABLE IF EXISTS taskpolygons; CREATE TABLE taskpolygons AS ( - SELECT ST_Union(geom) as geom, clusteruid + SELECT ST_Union(geom) as geom, cid FROM voronois - GROUP BY clusteruid + GROUP BY cid ); CREATE INDEX taskpolygons_idx ON taskpolygons @@ -154,7 +148,7 @@ DROP TABLE IF EXISTS simplifiedpolygons; CREATE TABLE simplifiedpolygons AS ( --Convert task polygon boundaries to linestrings WITH rawlines AS ( - SELECT tp.clusteruid, st_boundary(tp.geom) AS geom + SELECT tp.cid, st_boundary(tp.geom) AS geom FROM taskpolygons AS tp ) -- Union, which eliminates duplicates from adjacent polygon boundaries @@ -184,4 +178,4 @@ VACUUM ANALYZE simplifiedpolygons; -- Clean results (nuke or merge polygons without features in them) -*/ + From f24d7d32f2577b58c336c0bf1d660f0cb4ffa1a8 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sat, 15 Jul 2023 17:41:32 +0545 Subject: [PATCH 033/222] params arranged properly --- src/backend/app/central/central_crud.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backend/app/central/central_crud.py b/src/backend/app/central/central_crud.py index ad446b9d89..a2b1cc2cb6 100644 --- a/src/backend/app/central/central_crud.py +++ b/src/backend/app/central/central_crud.py @@ -217,7 +217,10 @@ def upload_xform_media(project_id: int, xform_id:str, filespec: str, odk_cred def create_odk_xform( - project_id: int, xform_id: str, filespec: str, odk_credentials: project_schemas.ODKCentral = None, + project_id: int, + xform_id: str, + filespec: str, + odk_credentials: project_schemas.ODKCentral = None, draft: bool = False, upload_media = True ): From 0bdbfc6d3a980b59227e5c57da0710a8182eb211 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sat, 15 Jul 2023 17:43:46 +0545 Subject: [PATCH 034/222] update project category updated --- src/backend/app/projects/project_crud.py | 94 +++++++++++++++++++--- src/backend/app/projects/project_routes.py | 8 +- 2 files changed, 83 insertions(+), 19 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 98994dbe8e..53925eedac 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -35,7 +35,7 @@ import segno import shapely.wkb as wkblib import sqlalchemy -from fastapi import HTTPException, UploadFile +from fastapi import HTTPException, UploadFile, File from fastapi.logger import logger as logger from geoalchemy2.shape import from_shape from geojson import dump @@ -1796,8 +1796,8 @@ def add_features_into_database( async def update_project_form( db: Session, project_id: int, - form: str, form_type: str, + form: UploadFile = File(None) ): project = get_project(db, project_id) @@ -1805,30 +1805,98 @@ async def update_project_form( project_title = project.project_name_prefix odk_id = project.odkid - task = table("tasks", column("outline"), column("id")) - where = f"project_id={project_id}" - sql = select(task).where(text(where)) + if form: + xlsform = f"/tmp/custom_form.{form_type}" + contents = await form.read() + with open(xlsform, "wb") as f: + f.write(contents) + else: + xlsform = f"{xlsforms_path}/{category}.xls" + + db.query(db_models.DbFeatures).filter(db_models.DbFeatures.project_id == project_id).delete() + db.commit() + + # OSM Extracts for whole project + pg = PostgresClient('https://raw-data-api0.hotosm.org/v1', "underpass") + outfile = f"/tmp/{project_title}_{category}.geojson" # This file will store osm extracts + + extract_polygon = True if project.data_extract_type == 'polygon' else False + + project = table( + "projects", + column("outline") + ) + + # where = f"id={project_id} + sql = select( + geoalchemy2.functions.ST_AsGeoJSON(project.c.outline).label("outline"), + ).where(text(f"id={project_id}")) result = db.execute(sql) + project_outline = result.first() + + final_outline = json.loads(project_outline.outline) + + outline_geojson = pg.getFeatures(boundary = final_outline, + filespec = outfile, + polygon = extract_polygon, + xlsfile = f'{category}.xls', + category = category + ) + - form_type = "xls" + updated_outline_geojson = { + "type": "FeatureCollection", + "features": []} + + # Collect feature mappings for bulk insert + feature_mappings = [] + + for feature in outline_geojson["features"]: + + # If the osm extracts contents do not have a title, provide an empty text for that. + feature["properties"]["title"] = "" + + feature_shape = shape(feature['geometry']) + + # # If the centroid of the Polygon is not inside the outline, skip the feature. + # if extract_polygon and (not shape(outline).contains(shape(feature_shape.centroid))): + # continue + + wkb_element = from_shape(feature_shape, srid=4326) + feature_mapping = { + 'project_id': project_id, + 'category_title': category, + 'geometry': wkb_element, + 'properties': feature["properties"], + } + updated_outline_geojson['features'].append(feature) + feature_mappings.append(feature_mapping) + + # Insert features into db + db_feature = db_models.DbFeatures( + project_id=project_id, + category_title = category, + geometry=wkb_element, + properties=feature["properties"] + ) + db.add(db_feature) + db.commit() - xlsform = f"/tmp/custom_form.{form_type}" - with open(xlsform, "wb") as f: - f.write(form) + tasks_list = tasks_crud.get_task_lists(db, project_id) + for task in tasks_list: - for poly in result.fetchall(): - xform = f"/tmp/{project_title}_{category}_{poly.id}.xml" # This file will store xml contents of an xls form. - outfile = f"/tmp/{project_title}_{category}_{poly.id}.geojson" # This file will store osm extracts + xform = f"/tmp/{project_title}_{category}_{task}.xml" # This file will store xml contents of an xls form. + outfile = f"/tmp/{project_title}_{category}_{task}.geojson" # This file will store osm extracts outfile = central_crud.generate_updated_xform( xlsform, xform, form_type) # Create an odk xform result = central_crud.create_odk_xform( - odk_id, poly.id, outfile, None, True, False + odk_id, task, outfile, None, True, False ) return True \ No newline at end of file diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 3b37f4dad7..9aa223378e 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -713,23 +713,19 @@ async def update_project_category( allowed_extensions = [".xls", '.xlsx', '.xml'] if file_ext not in allowed_extensions: raise HTTPException(status_code=400, detail="Provide a valid .xls file") - contents = await upload.read() project.form_xls = contents db.commit() - else: - form_path = f"{xlsforms_path}/{category}.xls" - contents = open(form_path, 'rb') - project.category = category + project.xform_title = category db.commit() # Update odk forms form_updated = await project_crud.update_project_form( db, project_id, - contents, # Form Contents file_ext[1:] if upload else 'xls', + upload # Form ) From 210e477c855e68ba6fbf1b3dccad71089e2dcf5a Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 19 Jul 2023 12:05:15 +0545 Subject: [PATCH 035/222] fix: removed api listing static content --- .../src/components/ProjectInfo/ProjectInfoSidebar.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx index a1b195433d..7f3655b5e8 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx @@ -107,7 +107,7 @@ const ProjectInfoSidebar = ({ taskInfo }) => { }, }} > - + {/* Api Listing @@ -124,7 +124,7 @@ const ProjectInfoSidebar = ({ taskInfo }) => { - + */} ); From 810a7991eb9f0afd8b89c8213f8475ceb109dd4d Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 20 Jul 2023 10:28:32 +0545 Subject: [PATCH 036/222] fix: data Cleaning fix --- src/backend/app/projects/project_crud.py | 26 ++++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index b2f856c36b..6e25ce810d 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -1036,19 +1036,19 @@ def upload_custom_data_extracts(db: Session, features_data = json.loads(contents) - # Data Cleaning - cleaned = FilterData() - models = xlsforms_path.replace("xlsforms", "data_models") - xlsfile = f"{category}.xls" # FIXME: for custom form - file = f"{xlsforms_path}/{xlsfile}" - if os.path.exists(file): - title, extract = cleaned.parse(file) - elif os.path.exists(f"{file}x"): - title, extract = cleaned.parse(f"{file}x") - # Remove anything in the data extract not in the choices sheet. - cleaned_data = cleaned.cleanData(features_data) - - for feature in cleaned_data["features"]: + # # Data Cleaning + # cleaned = FilterData() + # models = xlsforms_path.replace("xlsforms", "data_models") + # xlsfile = f"{category}.xls" # FIXME: for custom form + # file = f"{xlsforms_path}/{xlsfile}" + # if os.path.exists(file): + # title, extract = cleaned.parse(file) + # elif os.path.exists(f"{file}x"): + # title, extract = cleaned.parse(f"{file}x") + # # Remove anything in the data extract not in the choices sheet. + # cleaned_data = cleaned.cleanData(features_data) + + for feature in features_data["features"]: feature_shape = shape(feature['geometry']) From b29727c8bacfbb13491fb5190950e2485a79c7bc Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 20 Jul 2023 11:24:04 +0545 Subject: [PATCH 037/222] feat: edit form with form category WIP --- .../main/src/api/CreateProjectService.ts | 15 +- .../components/createproject/DataExtract.tsx | 60 +++--- .../createproject/FormSelection.tsx | 34 ++-- .../src/components/editproject/UpdateForm.tsx | 171 ++++++++++++++---- src/frontend/main/src/views/EditProject.tsx | 6 +- 5 files changed, 203 insertions(+), 83 deletions(-) diff --git a/src/frontend/main/src/api/CreateProjectService.ts b/src/frontend/main/src/api/CreateProjectService.ts index 8b1304b751..a2f7537b57 100755 --- a/src/frontend/main/src/api/CreateProjectService.ts +++ b/src/frontend/main/src/api/CreateProjectService.ts @@ -392,8 +392,10 @@ const PostFormUpdate: Function = (url: string, payload: any) => { const postFormUpdate = async (url, payload) => { try { const formFormData = new FormData(); - formFormData.append('form', payload); - const postFormUpdateResponse = await axios.post(url, formFormData) + if (payload) { + formFormData.append('form', payload); + } + const postFormUpdateResponse = await axios.post(url, payload ? formFormData : {}) const resp: ProjectDetailsModel = postFormUpdateResponse.data; // dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); // dispatch(CreateProjectActions.SetPostFormUpdate(resp)); @@ -408,6 +410,15 @@ const PostFormUpdate: Function = (url: string, payload: any) => { ); } catch (error) { dispatch(CreateProjectActions.SetPostFormUpdateLoading(false)); + console.log(error?.response, 'error'); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: error?.response?.data?.detail, + variant: "error", + duration: 2000, + }) + ); } finally { dispatch(CreateProjectActions.SetPostFormUpdateLoading(false)); } diff --git a/src/frontend/main/src/components/createproject/DataExtract.tsx b/src/frontend/main/src/components/createproject/DataExtract.tsx index a4fae5af8d..0fc3e36bc3 100755 --- a/src/frontend/main/src/components/createproject/DataExtract.tsx +++ b/src/frontend/main/src/components/createproject/DataExtract.tsx @@ -12,9 +12,9 @@ import DefineAreaMap from 'map/DefineAreaMap'; import DataExtractValidation from './validation/DataExtractValidation'; // import { SelectPicker } from 'rsuite'; -let generateProjectLogIntervalCb:any = null; +let generateProjectLogIntervalCb: any = null; -const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile,setDataExtractFile,setDataExtractFileValue }) => { +const DataExtract: React.FC = ({ geojsonFile, setGeojsonFile, dataExtractFile, setDataExtractFile, setDataExtractFileValue }) => { const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); const navigate = useNavigate(); @@ -38,7 +38,7 @@ const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile const dataExtractOptions = dataExtractOptionsList.map((item) => ({ label: item, value: item })); const formCategoryData = formCategoryList.map((item) => ({ label: item.title, value: item.title })); // //we use use-selector from redux to get state of dividedTaskGeojson from createProject slice - + // Fetching form category list useEffect(() => { dispatch(FormCategoryService(`${enviroment.baseApiUrl}/central/list-forms`)); @@ -46,9 +46,9 @@ const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile // END const submission = () => { - // const previousValues = location.state.values; - dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, ...values })); - navigate('/select-form'); + // const previousValues = location.state.values; + dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, ...values })); + navigate('/select-form'); // navigate("/select-form", { replace: true, state: { values: values } }); }; @@ -67,7 +67,7 @@ const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile submission, DataExtractValidation, ); - + return ( = ({ geojsonFile,setGeojsonFile,dataExtractFile sx={{ display: 'flex', flexDirection: { xs: 'column', md: 'row' } }} > - + = ({ geojsonFile,setGeojsonFile,dataExtractFile {errors.data_extract_options} )} - - {/* Area Geojson File Upload For Create Project */} + + {/* Area Geojson File Upload For Create Project */} {values.data_extract_options === 'Upload Custom Data Extract' && Upload Custom Data Extract { @@ -191,9 +191,9 @@ const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile )} } - - - {values.data_extract_options === 'Data Extract Ways' && + + + {values.data_extract_options === 'Data Extract Ways' && = ({ geojsonFile,setGeojsonFile,dataExtractFile {errors.data_extractWays} )} - } + } + + + + + - - - - - = ({ geojsonFile,setGeojsonFile,dataExtractFile {/* END */} {/* Submit Button For Create Project on Area Upload */} - - } - variant="contained" - color="error" + + } + variant="contained" + color="error" > Next - + {/* END */} diff --git a/src/frontend/main/src/components/createproject/FormSelection.tsx b/src/frontend/main/src/components/createproject/FormSelection.tsx index ea8e7c3d37..03339dd6fc 100755 --- a/src/frontend/main/src/components/createproject/FormSelection.tsx +++ b/src/frontend/main/src/components/createproject/FormSelection.tsx @@ -14,9 +14,9 @@ import LoadingBar from './LoadingBar'; import environment from '../../environment'; // import { SelectPicker } from 'rsuite'; -let generateProjectLogIntervalCb:any = null; +let generateProjectLogIntervalCb: any = null; -const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, customFormInputValue,dataExtractFile }) => { +const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, customFormInputValue, dataExtractFile }) => { const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); const navigate = useNavigate(); @@ -64,7 +64,7 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom const newDividedTaskGeojson = JSON.stringify(dividedTaskGeojson); const parsedNewDividedTaskGeojson = JSON.parse(newDividedTaskGeojson); const exparsedNewDividedTaskGeojson = JSON.stringify(parsedNewDividedTaskGeojson); - var newUpdatedTaskGeojsonFile = new File([exparsedNewDividedTaskGeojson], "AOI.geojson", {type: "application/geo+json" }) + var newUpdatedTaskGeojsonFile = new File([exparsedNewDividedTaskGeojson], "AOI.geojson", { type: "application/geo+json" }) // console.log(f,'file F'); // setGeojsonFile(f); dispatch( @@ -129,7 +129,7 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom useEffect(() => { if (generateQrSuccess && generateProjectLog?.status === 'SUCCESS') { clearInterval(generateProjectLogIntervalCb); - const encodedProjectId = environment.encode(projectDetailsResponse?.id) + const encodedProjectId = environment.encode(projectDetailsResponse?.id) navigate(`/project_details/${encodedProjectId}`); dispatch( CommonActions.SetSnackBar({ @@ -233,7 +233,7 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom }), ); }} - // onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'form_ways', value: e.target.value }))} + // onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'form_ways', value: e.target.value }))} > {selectFormWays?.map((form) => ( {form.label} @@ -258,12 +258,12 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom { setCustomFormFile(e.target.files[0]); }} - inputProps={{ "accept":".xml, .xls, .xlsx" }} + inputProps={{ "accept": ".xml, .xls, .xlsx" }} /> {customFormFile?.name} @@ -329,19 +329,19 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom {/* END */} {/* Submit Button For Create Project on Area Upload */} - - } - variant="contained" - color="error" + + } + variant="contained" + color="error" > Submit - + {/* END */} diff --git a/src/frontend/main/src/components/editproject/UpdateForm.tsx b/src/frontend/main/src/components/editproject/UpdateForm.tsx index caee5df379..053a3a4b5a 100644 --- a/src/frontend/main/src/components/editproject/UpdateForm.tsx +++ b/src/frontend/main/src/components/editproject/UpdateForm.tsx @@ -1,50 +1,157 @@ -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react' import CoreModules from '../../shared/CoreModules'; import environment from '../../environment'; import { PostFormUpdate } from '../../api/CreateProjectService'; -const UpdateForm = ({projectId}) => { +const UpdateForm = ({ projectId }) => { const dispatch = CoreModules.useDispatch(); + const editProjectDetails: any = CoreModules.useSelector((state) => state.createproject.editProjectDetails); const [uploadForm, setUploadForm] = useState(null); + const [formUpdateOption, setFormUpdateOption] = useState(null); const formUpdateLoading: any = CoreModules.useSelector((state) => state.createproject.formUpdateLoading); + const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); // //we use use selector from redux to get all state of defaultTheme from theme slice - const onSubmit=()=>{ - dispatch(PostFormUpdate(`${environment.baseApiUrl}/projects/update-form/${projectId}`,uploadForm)); + const selectFormWaysList = ['Use Existing Form', 'Upload a Custom Form']; + const selectFormWays = selectFormWaysList.map((item) => ({ label: item, value: item })); + const formCategoryList = CoreModules.useSelector((state: any) => state.createproject.formCategoryList); + // //we use use-selector from redux to get all state of formCategory from createProject slice + const formCategoryData = formCategoryList.map((item) => ({ label: item.title, value: item.title })); + + useEffect(() => { + setFormUpdateOption({ ...formUpdateOption, formCategory: editProjectDetails?.xform_title }); + }, [editProjectDetails]) + + + const onSubmit = () => { + dispatch(PostFormUpdate(`${environment.baseApiUrl}/projects/update_category?project_id=${projectId}&category=${formUpdateOption?.formCategory}`, uploadForm)); } return ( - - Upload .xls/.xlsx/.xml Form - - { - setUploadForm(e.target.files[0]); - }} - inputProps={{ "accept":".xml, .xls, .xlsx" }} + - /> - {/* {customFormFile?.name} */} - - {/* {!values.uploaded_form && ( + {/* {!values.uploaded_form && ( Form File is required. )} */} - - } - variant="contained" - color="error" - onClick={onSubmit} - > - Submit - - - + + + + Form Selection + + { + setFormUpdateOption({ ...formUpdateOption, formWays: e.target.value }); + // handleCustomChange('form_ways', e.target.value); + // dispatch( + // CreateProjectActions.SetIndividualProjectDetailsData({ + // ...projectDetails, + // form_ways: e.target.value, + // }), + // ); + }} + // onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'form_ways', value: e.target.value }))} + > + {selectFormWays?.map((form) => ( + {form.label} + ))} + + {/* {errors.form_ways && ( + + {errors.form_ways} + + )} */} + + + + Form Category + + { + setFormUpdateOption({ ...formUpdateOption, formCategory: e.target.value }); + }} + > + {/* onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'xform_title', value: e.target.value }))} > */} + {formCategoryData?.map((form) => ( + {form.label} + ))} + + {/* {errors.xform_title && ( + + {errors.xform_title} + + )} */} + + + {formUpdateOption?.formWays === 'Upload a Custom Form' ? + Upload .xls/.xlsx/.xml Form + + { + setUploadForm(e.target.files[0]); + }} + inputProps={{ "accept": ".xml, .xls, .xlsx" }} + + /> + {/* {customFormFile?.name} */} + + : null} + + + + } + variant="contained" + color="error" + onClick={onSubmit} + > + Submit + + + ) } diff --git a/src/frontend/main/src/views/EditProject.tsx b/src/frontend/main/src/views/EditProject.tsx index 956d886da1..399c2bcd36 100755 --- a/src/frontend/main/src/views/EditProject.tsx +++ b/src/frontend/main/src/views/EditProject.tsx @@ -3,7 +3,7 @@ import '../styles/home.css'; import CoreModules from '../shared/CoreModules'; import AssetModules from '../shared/AssetModules'; import environment from '../environment'; -import { GetIndividualProjectDetails, OrganisationService } from '../api/CreateProjectService'; +import { FormCategoryService, GetIndividualProjectDetails, OrganisationService } from '../api/CreateProjectService'; import EditProjectDetails from '../components/editproject/EditProjectDetails'; import SidebarContent from '../constants/EditProjectSidebarContent'; import { useNavigate } from 'react-router-dom'; @@ -32,7 +32,9 @@ const EditProject: React.FC = () => { dispatch(GetIndividualProjectDetails(`${environment.baseApiUrl}/projects/${decodedProjectId}`)); } }, [decodedProjectId]) - + useEffect(() => { + dispatch(FormCategoryService(`${environment.baseApiUrl}/central/list-forms`)); + }, []); return (
From 389724fe1fbf4cb08d9abe505b8b0361b663668b Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 20 Jul 2023 11:46:34 +0545 Subject: [PATCH 038/222] feat: sentry setup for production but dev dsn missing --- src/frontend/main/package-lock.json | 164 ++++++++++++++++------------ src/frontend/main/package.json | 2 +- src/frontend/main/src/App.jsx | 20 +++- 3 files changed, 116 insertions(+), 70 deletions(-) diff --git a/src/frontend/main/package-lock.json b/src/frontend/main/package-lock.json index d1c35b1313..c7521c6a36 100644 --- a/src/frontend/main/package-lock.json +++ b/src/frontend/main/package-lock.json @@ -15,7 +15,7 @@ "@mui/lab": "^5.0.0-alpha.134", "@mui/material": "^5.11.1", "@reduxjs/toolkit": "^1.9.1", - "@sentry/browser": "^7.59.2", + "@sentry/react": "^7.59.3", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "axios": "^1.2.2", @@ -2674,13 +2674,13 @@ } }, "node_modules/@sentry-internal/tracing": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.2.tgz", - "integrity": "sha512-02gteChV/lMobWU06VlITq+myEWk0MzhnDCm8n/DMigB47I9HkWZFAJ+CYG6Ns0rTL+3+/c2V0bPyQkZwIC+Sg==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.3.tgz", + "integrity": "sha512-/RkBj/0zQKGsW/UYg6hufrLHHguncLfu4610FCPWpVp0K5Yu5ou8/Aw8D76G3ZxD2TiuSNGwX0o7TYN371ZqTQ==", "dependencies": { - "@sentry/core": "7.59.2", - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2", + "@sentry/core": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -2688,15 +2688,15 @@ } }, "node_modules/@sentry/browser": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.59.2.tgz", - "integrity": "sha512-N1JiBs1VRR5DV0209TZgaMwRGiTYN1C34sFzIW7nuC82X4gHy3tuJjZPlMDTtgFrALBMJ24yQ7D4HJjXrS2+Dw==", - "dependencies": { - "@sentry-internal/tracing": "7.59.2", - "@sentry/core": "7.59.2", - "@sentry/replay": "7.59.2", - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.59.3.tgz", + "integrity": "sha512-rTsePz1zEhiouX24TqjzYdY8PsBNU2EGUSHK9jCKml5i/eKTqQabnwdxHgIC4/wcs1nGOabRg/Iel6l4y4mCjA==", + "dependencies": { + "@sentry-internal/tracing": "7.59.3", + "@sentry/core": "7.59.3", + "@sentry/replay": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -2704,45 +2704,63 @@ } }, "node_modules/@sentry/core": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.59.2.tgz", - "integrity": "sha512-GRhoPw6b6GkvOsa060aREc9yyHjgAKITgITNbzUmn0GqIeWD5SMoCBAcENRHVgUnpQWOpnkEF1/sqxvwx+rf6Q==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.59.3.tgz", + "integrity": "sha512-cGBOwT9gziIn50fnlBH1WGQlGcHi7wrbvOCyrex4MxKnn1LSBYWBhwU0ymj8DI/9MyPrGDNGkrgpV0WJWBSClg==", "dependencies": { - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { "node": ">=8" } }, + "node_modules/@sentry/react": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.59.3.tgz", + "integrity": "sha512-2TmJ/su8NBQad4PpyJoJ8Er6bzc1jgzgwKSYpI5xHNT6FOFxI4cGIbfrYNqXBjPTvFHwC8WFyN+XZ0K42GFgqQ==", + "dependencies": { + "@sentry/browser": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "hoist-non-react-statics": "^3.3.2", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": "15.x || 16.x || 17.x || 18.x" + } + }, "node_modules/@sentry/replay": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.59.2.tgz", - "integrity": "sha512-Ma72ofTdtSinBY5GH0zM7k8o/WsdaVdPP/1iyFbcWQDt8dnrcsJVUKK0t9+8gijpiSMUKE+vjFjQNL9/PGYekw==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.59.3.tgz", + "integrity": "sha512-o0Z9XD46ua4kex8P2zcahNLARm+joLU6e8bTwjdmfsLS/A2yH1RhJ/VlcAEpPR2IzSYLXz3ApJ/XiqLPTNSu1w==", "dependencies": { - "@sentry/core": "7.59.2", - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2" + "@sentry/core": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3" }, "engines": { "node": ">=12" } }, "node_modules/@sentry/types": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.59.2.tgz", - "integrity": "sha512-rylG7UQ0cC/xbV6trSuaAE/bsruSZy92jxQ1/KSOYKwBBvRFPXJBuiBtA81b8eYa4THZ+mE/ol2qOTJYuuV4Ug==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.59.3.tgz", + "integrity": "sha512-HQ/Pd3YHyIa4HM0bGfOsfI4ZF+sLVs6II9VtlS4hsVporm4ETl3Obld5HywO3aVYvWOk5j/bpAW9JYsxXjRG5A==", "engines": { "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.59.2.tgz", - "integrity": "sha512-uxC8xH9wsB/tZUnjmaQ1uGtsumFOc19KWfedVHXzcNwqdt5uS3EB4+D1d8WwiJyLy2nm61DdmTC9SiB4HS+OSw==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.59.3.tgz", + "integrity": "sha512-Q57xauMKuzd6S+POA1fmulfjzTsb/z118TNAfZZNkHqVB48hHBqgzdhbEBmN4jPCSKV2Cx7VJUoDZxJfzQyLUQ==", "dependencies": { - "@sentry/types": "7.59.2", + "@sentry/types": "7.59.3", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -12790,60 +12808,72 @@ "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==" }, "@sentry-internal/tracing": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.2.tgz", - "integrity": "sha512-02gteChV/lMobWU06VlITq+myEWk0MzhnDCm8n/DMigB47I9HkWZFAJ+CYG6Ns0rTL+3+/c2V0bPyQkZwIC+Sg==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.3.tgz", + "integrity": "sha512-/RkBj/0zQKGsW/UYg6hufrLHHguncLfu4610FCPWpVp0K5Yu5ou8/Aw8D76G3ZxD2TiuSNGwX0o7TYN371ZqTQ==", "requires": { - "@sentry/core": "7.59.2", - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2", + "@sentry/core": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", "tslib": "^2.4.1 || ^1.9.3" } }, "@sentry/browser": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.59.2.tgz", - "integrity": "sha512-N1JiBs1VRR5DV0209TZgaMwRGiTYN1C34sFzIW7nuC82X4gHy3tuJjZPlMDTtgFrALBMJ24yQ7D4HJjXrS2+Dw==", - "requires": { - "@sentry-internal/tracing": "7.59.2", - "@sentry/core": "7.59.2", - "@sentry/replay": "7.59.2", - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.59.3.tgz", + "integrity": "sha512-rTsePz1zEhiouX24TqjzYdY8PsBNU2EGUSHK9jCKml5i/eKTqQabnwdxHgIC4/wcs1nGOabRg/Iel6l4y4mCjA==", + "requires": { + "@sentry-internal/tracing": "7.59.3", + "@sentry/core": "7.59.3", + "@sentry/replay": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", "tslib": "^2.4.1 || ^1.9.3" } }, "@sentry/core": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.59.2.tgz", - "integrity": "sha512-GRhoPw6b6GkvOsa060aREc9yyHjgAKITgITNbzUmn0GqIeWD5SMoCBAcENRHVgUnpQWOpnkEF1/sqxvwx+rf6Q==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.59.3.tgz", + "integrity": "sha512-cGBOwT9gziIn50fnlBH1WGQlGcHi7wrbvOCyrex4MxKnn1LSBYWBhwU0ymj8DI/9MyPrGDNGkrgpV0WJWBSClg==", "requires": { - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/react": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.59.3.tgz", + "integrity": "sha512-2TmJ/su8NBQad4PpyJoJ8Er6bzc1jgzgwKSYpI5xHNT6FOFxI4cGIbfrYNqXBjPTvFHwC8WFyN+XZ0K42GFgqQ==", + "requires": { + "@sentry/browser": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "hoist-non-react-statics": "^3.3.2", "tslib": "^2.4.1 || ^1.9.3" } }, "@sentry/replay": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.59.2.tgz", - "integrity": "sha512-Ma72ofTdtSinBY5GH0zM7k8o/WsdaVdPP/1iyFbcWQDt8dnrcsJVUKK0t9+8gijpiSMUKE+vjFjQNL9/PGYekw==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.59.3.tgz", + "integrity": "sha512-o0Z9XD46ua4kex8P2zcahNLARm+joLU6e8bTwjdmfsLS/A2yH1RhJ/VlcAEpPR2IzSYLXz3ApJ/XiqLPTNSu1w==", "requires": { - "@sentry/core": "7.59.2", - "@sentry/types": "7.59.2", - "@sentry/utils": "7.59.2" + "@sentry/core": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3" } }, "@sentry/types": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.59.2.tgz", - "integrity": "sha512-rylG7UQ0cC/xbV6trSuaAE/bsruSZy92jxQ1/KSOYKwBBvRFPXJBuiBtA81b8eYa4THZ+mE/ol2qOTJYuuV4Ug==" + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.59.3.tgz", + "integrity": "sha512-HQ/Pd3YHyIa4HM0bGfOsfI4ZF+sLVs6II9VtlS4hsVporm4ETl3Obld5HywO3aVYvWOk5j/bpAW9JYsxXjRG5A==" }, "@sentry/utils": { - "version": "7.59.2", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.59.2.tgz", - "integrity": "sha512-uxC8xH9wsB/tZUnjmaQ1uGtsumFOc19KWfedVHXzcNwqdt5uS3EB4+D1d8WwiJyLy2nm61DdmTC9SiB4HS+OSw==", + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.59.3.tgz", + "integrity": "sha512-Q57xauMKuzd6S+POA1fmulfjzTsb/z118TNAfZZNkHqVB48hHBqgzdhbEBmN4jPCSKV2Cx7VJUoDZxJfzQyLUQ==", "requires": { - "@sentry/types": "7.59.2", + "@sentry/types": "7.59.3", "tslib": "^2.4.1 || ^1.9.3" } }, diff --git a/src/frontend/main/package.json b/src/frontend/main/package.json index 6c56dd0b83..30d61ec06f 100755 --- a/src/frontend/main/package.json +++ b/src/frontend/main/package.json @@ -46,7 +46,7 @@ "@mui/lab": "^5.0.0-alpha.134", "@mui/material": "^5.11.1", "@reduxjs/toolkit": "^1.9.1", - "@sentry/browser": "^7.59.2", + "@sentry/react": "^7.59.3", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "axios": "^1.2.2", diff --git a/src/frontend/main/src/App.jsx b/src/frontend/main/src/App.jsx index 4a0095a5a8..60b036834d 100755 --- a/src/frontend/main/src/App.jsx +++ b/src/frontend/main/src/App.jsx @@ -7,12 +7,28 @@ import routes from "./routes"; import { PersistGate } from "redux-persist/integration/react"; import "./index.css"; import 'react-loading-skeleton/dist/skeleton.css' -import * as Sentry from "@sentry/browser"; +import * as Sentry from "@sentry/react"; import environment from "./environment"; // import 'swiper/css'; // import 'swiper/css/navigation'; // import 'swiper/css/pagination'; -{ environment.nodeEnv !== 'development' ? Sentry.init({ dsn: environment.main_url === 'fmtm.hotosm.org' ? "https://419f6e226571489d9a767f75c7ae157f@glitchtip.naxa.com.np/6" : "https://2f6079201d4a48f8acdb1a31763e0c0d@glitchtip.naxa.com.np/4" }) : null }; +{ + environment.nodeEnv !== 'development' ? Sentry.init({ + dsn: environment.main_url === 'fmtm.hotosm.org' ? "https://35c80d0894e441f593c5ac5dfa1094a0@o68147.ingest.sentry.io/4505557311356928" : "https://35c80d0894e441f593c5ac5dfa1094a0@o68147.ingest.sentry.io/4505557311356928", + integrations: [ + new Sentry.BrowserTracing({ + // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled + tracePropagationTargets: ["localhost", "https:yourserver.io/api/"], + }), + new Sentry.Replay(), + ], + // Performance Monitoring + tracesSampleRate: 1.0, // Capture 100% of the transactions, reduce in production! + // Session Replay + replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. + replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. + }) : null +}; ReactDOM.render( From e1ff9656e072a73c849a2f4dc637b242f8af8ef9 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 20 Jul 2023 11:47:52 +0545 Subject: [PATCH 039/222] feat: fmtm dev and prod domain to tracepropagationtargets --- src/frontend/main/src/App.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/main/src/App.jsx b/src/frontend/main/src/App.jsx index 60b036834d..5187262bee 100755 --- a/src/frontend/main/src/App.jsx +++ b/src/frontend/main/src/App.jsx @@ -18,7 +18,7 @@ import environment from "./environment"; integrations: [ new Sentry.BrowserTracing({ // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled - tracePropagationTargets: ["localhost", "https:yourserver.io/api/"], + tracePropagationTargets: ["https://fmtm.naxa.com.np/", "https://fmtm.hotosm.org/"], }), new Sentry.Replay(), ], From 1e130e9dceb4891583c379146cf645b3da22a8f7 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 20 Jul 2023 14:51:23 +0545 Subject: [PATCH 040/222] feat: data extracts on the update project form --- src/backend/app/projects/project_crud.py | 45 ++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 53925eedac..1a67b37ce6 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -1887,16 +1887,57 @@ async def update_project_form( for task in tasks_list: + task_obj = tasks_crud.get_task(db, task) + + # Get the features for this task. + # Postgis query to filter task inside this task outline and of this project + # Update those features and set task_id + query = f'''UPDATE features + SET task_id={task} + WHERE id in ( + + SELECT id + FROM features + WHERE project_id={project_id} and ST_Intersects(geometry, '{task_obj.outline}'::Geometry) + + )''' + + result = db.execute(query) + + # Get the geojson of those features for this task. + query = f'''SELECT jsonb_build_object( + 'type', 'FeatureCollection', + 'features', jsonb_agg(feature) + ) + FROM ( + SELECT jsonb_build_object( + 'type', 'Feature', + 'id', id, + 'geometry', ST_AsGeoJSON(geometry)::jsonb, + 'properties', properties + ) AS feature + FROM features + WHERE project_id={project_id} and task_id={task} + ) features;''' + + + result = db.execute(query) + features = result.fetchone()[0] xform = f"/tmp/{project_title}_{category}_{task}.xml" # This file will store xml contents of an xls form. - outfile = f"/tmp/{project_title}_{category}_{task}.geojson" # This file will store osm extracts + extracts = f"/tmp/{project_title}_{category}_{task}.geojson" # This file will store osm extracts + + # Update outfile containing osm extracts with the new geojson contents containing title in the properties. + with open(extracts, "w") as jsonfile: + jsonfile.truncate(0) # clear the contents of the file + dump(features, jsonfile) outfile = central_crud.generate_updated_xform( xlsform, xform, form_type) # Create an odk xform result = central_crud.create_odk_xform( - odk_id, task, outfile, None, True, False + odk_id, task, xform, None, True, True ) return True \ No newline at end of file From 205807c04fba73ccc5c9aaa8ca6ae3421a8289b7 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 20 Jul 2023 14:52:32 +0545 Subject: [PATCH 041/222] implementing threading on the download submission --- src/backend/app/submission/submission_crud.py | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 826368b21b..d9a4997b4e 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -16,6 +16,11 @@ # along with FMTM. If not, see . # +import os +import zipfile +import concurrent.futures +import logging +import threading import csv import io import os @@ -230,6 +235,84 @@ async def convert_to_osm(db: Session, project_id: int, task_id: int): return FileResponse(final_zip_file_path) + +def download_submission_for_project(db, project_id): + project_info = project_crud.get_project(db, project_id) + + # Return empty list if project is not found + if not project_info: + raise HTTPException(status_code=404, detail="Project not found") + + odkid = project_info.odkid + project_name = project_info.project_name_prefix + form_category = project_info.xform_title + project_tasks = project_info.tasks + + # ODK Credentials + odk_credentials = project_schemas.ODKCentral( + odk_central_url=project_info.odk_central_url, + odk_central_user=project_info.odk_central_user, + odk_central_password=project_info.odk_central_password, + ) + + # Get ODK Form with odk credentials from the project. + xform = get_odk_form(odk_credentials) + + def download_submission_for_task(task_id): + logging.info(f"Thread {threading.current_thread().name} - Downloading submission for Task ID {task_id}") + xml_form_id = f"{project_name}_{form_category}_{task_id}".split("_")[2] + file = xform.getSubmissionMedia(odkid, xml_form_id) + file_path = f"{project_name}_{form_category}_submission_{task_id}.zip" + with open(file_path, "wb") as f: + f.write(file.content) + return file_path + + def extract_files(zip_file_path): + logging.info(f"Thread {threading.current_thread().name} - Extracting files from {zip_file_path}") + with zipfile.ZipFile(zip_file_path, "r") as zip_file: + extract_dir = os.path.splitext(zip_file_path)[0] + zip_file.extractall(extract_dir) + return [os.path.join(extract_dir, f) for f in zip_file.namelist()] + + # Set up logging configuration + logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(threadName)s] %(message)s") + + with concurrent.futures.ThreadPoolExecutor() as executor: + task_list = [x.id for x in project_tasks] + + # Download submissions using thread pool + futures = {executor.submit(download_submission_for_task, task_id): task_id for task_id in task_list} + + files = [] + for future in concurrent.futures.as_completed(futures): + task_id = futures[future] + try: + file_path = future.result() + files.append(file_path) + logging.info(f"Thread {threading.current_thread().name} - Task {task_id} - Download completed.") + except Exception as e: + logging.error(f"Thread {threading.current_thread().name} - Error occurred while downloading submission for task {task_id}: {e}") + + # Extract files using thread pool + extracted_files = [] + futures = {executor.submit(extract_files, file_path): file_path for file_path in files} + for future in concurrent.futures.as_completed(futures): + file_path = futures[future] + try: + extracted_files.extend(future.result()) + logging.info(f"Thread {threading.current_thread().name} - Extracted files from {file_path}") + except Exception as e: + logging.error(f"Thread {threading.current_thread().name} - Error occurred while extracting files from {file_path}: {e}") + + # Create a new ZIP file for the extracted files + final_zip_file_path = f"{project_name}_{form_category}_submissions_final.zip" + with zipfile.ZipFile(final_zip_file_path, mode="w") as final_zip_file: + for file_path in extracted_files: + final_zip_file.write(file_path) + + return final_zip_file_path + + def download_submission(db: Session, project_id: int, task_id: int, export_json: bool): project_info = project_crud.get_project(db, project_id) From 3e1f770bb126b9e467cc5a108e2e90b7688589f4 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 20 Jul 2023 15:14:11 +0545 Subject: [PATCH 042/222] feat: changed head title --- src/frontend/main/src/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/main/src/index.html b/src/frontend/main/src/index.html index cec81d1a86..965c8dda4d 100755 --- a/src/frontend/main/src/index.html +++ b/src/frontend/main/src/index.html @@ -7,7 +7,7 @@ - fmtm + Field Mapping Tasking Manager From 41fe0fe126e09c0c1a1f094ecb74ee0dec19a2e7 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 20 Jul 2023 15:36:59 +0545 Subject: [PATCH 043/222] print statement for debug --- src/backend/app/submission/submission_crud.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index d9a4997b4e..6652b42146 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -237,6 +237,8 @@ async def convert_to_osm(db: Session, project_id: int, task_id: int): def download_submission_for_project(db, project_id): + print('Download submission for a project') + project_info = project_crud.get_project(db, project_id) # Return empty list if project is not found From b392002d3fa0bf84dc895fabf75f2b02cd9d75a9 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 20 Jul 2023 15:39:13 +0545 Subject: [PATCH 044/222] download submissions route updated which uses function using threads --- src/backend/app/submission/submission_routes.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index 72b6f0b1c2..0924788942 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -19,6 +19,7 @@ from fastapi import APIRouter, Depends from fastapi.logger import logger as logger from sqlalchemy.orm import Session +from fastapi.responses import FileResponse from ..db import database from . import submission_crud @@ -97,6 +98,10 @@ async def download_submission( task_id: The ID of the task. This parameter is optional. If task_id is provided, this endpoint returns the submissions made for this task. """ + if not (task_id and export_json): + file = submission_crud.download_submission_for_project(db, project_id) + return FileResponse(file) + return submission_crud.download_submission(db, project_id, task_id, export_json) From 1bd4801430fc012e2b4b7b7fd9939242c7d32951 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 20 Jul 2023 15:59:10 +0545 Subject: [PATCH 045/222] odk credentials passesd in create_odk_form for update form --- src/backend/app/projects/project_crud.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 557d76dfa7..7c96504b5f 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -1874,6 +1874,13 @@ async def update_project_form( project_title = project.project_name_prefix odk_id = project.odkid + # ODK Credentials + odk_credentials = project_schemas.ODKCentral( + odk_central_url = project.odk_central_url, + odk_central_user = project.odk_central_user, + odk_central_password = project.odk_central_password, + ) + if form: xlsform = f"/tmp/custom_form.{form_type}" @@ -2007,7 +2014,7 @@ async def update_project_form( # Create an odk xform result = central_crud.create_odk_xform( - odk_id, task, xform, None, True, True + odk_id, task, xform, odk_credentials, True, True ) return True From 949c82f255c7f0e0a71665e6d3fd8a509fd95f1b Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 20 Jul 2023 16:33:54 +0545 Subject: [PATCH 046/222] feat: popup changed to another file --- .../main/src/utilfunctions/createPopup.ts | 17 +++++++++++++++ src/frontend/main/src/utilfunctions/login.ts | 21 +++---------------- 2 files changed, 20 insertions(+), 18 deletions(-) create mode 100644 src/frontend/main/src/utilfunctions/createPopup.ts diff --git a/src/frontend/main/src/utilfunctions/createPopup.ts b/src/frontend/main/src/utilfunctions/createPopup.ts new file mode 100644 index 0000000000..a853171dcd --- /dev/null +++ b/src/frontend/main/src/utilfunctions/createPopup.ts @@ -0,0 +1,17 @@ +export function createPopup(title: string = 'Authentication', location: string) { + const width = 500; + const height = 630; + const settings = [ + ['width', width], + ['height', height], + ['left', window.innerWidth / 2 - width / 2], + ['top', window.innerHeight / 2 - height / 2], + ] + .map((x) => x.join('=')) + .join(','); + + const popup = window.open(location, title, settings); + if (!popup) return; + + return popup; +} \ No newline at end of file diff --git a/src/frontend/main/src/utilfunctions/login.ts b/src/frontend/main/src/utilfunctions/login.ts index f8f090c20b..547731e563 100644 --- a/src/frontend/main/src/utilfunctions/login.ts +++ b/src/frontend/main/src/utilfunctions/login.ts @@ -1,28 +1,13 @@ import environment from "../environment"; +import { createPopup } from "./createPopup"; declare global { interface Window { - authComplete:any; + authComplete: any; } } // Code taken from https://github.com/mapbox/osmcha-frontend/blob/master/src/utils/create_popup.js -export function createPopup(title: string = 'Authentication', location: string) { - const width = 500; - const height = 630; - const settings = [ - ['width', width], - ['height', height], - ['left', window.innerWidth / 2 - width / 2], - ['top', window.innerHeight / 2 - height / 2], - ] - .map((x) => x.join('=')) - .join(','); - const popup = window.open(location, title, settings); - if (!popup) return; - - return popup; -} export const createLoginWindow = (redirectTo) => { const popup = createPopup('OSM auth', ''); @@ -53,7 +38,7 @@ export const createLoginWindow = (redirectTo) => { const params = new URLSearchParams({ username: userRes.user_data.username, osm_oauth_token: res.access_token.access_token, - id:userRes.user_data.id, + id: userRes.user_data.id, picture: userRes.user_data.img_url, redirect_to: redirectTo, }).toString(); From 68398ddce9b2416de51b42cbb327a6c15058d0d4 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 20 Jul 2023 16:34:26 +0545 Subject: [PATCH 047/222] feat: organization another page redirect --- .../createproject/ProjectDetailsForm.tsx | 37 ++++++++++--------- .../main/src/views/CreateOrganization.tsx | 13 ++++--- src/frontend/main/src/views/CreateProject.tsx | 23 ++++++------ 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index bec8cbce3c..c69f6a1328 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -11,6 +11,7 @@ import environment from '../../environment'; import { MenuItem, Select } from '@mui/material'; import CustomizedModal from '../../utilities/CustomizedModal'; import OrganizationAddForm from '../organization/OrganizationAddForm'; +import { createPopup } from '../../utilfunctions/createPopup'; const ProjectDetailsForm: React.FC = () => { const [openOrganizationModal, setOpenOrganizationModal] = useState(false); @@ -36,9 +37,9 @@ const ProjectDetailsForm: React.FC = () => { // dispatch(OrganisationService(`${environment.baseApiUrl}/organization/`)); }, []); - - + + const submission = () => { // submitForm(); @@ -53,8 +54,8 @@ const ProjectDetailsForm: React.FC = () => { CreateProjectValidation, ); - - + + const inputFormStyles = () => { return { style: { @@ -76,10 +77,10 @@ const ProjectDetailsForm: React.FC = () => { onFocus() // Calls onFocus when the window first loads return () => { - window.removeEventListener("focus", onFocus); - // window.removeEventListener("blur", onBlur); + window.removeEventListener("focus", onFocus); + // window.removeEventListener("blur", onBlur); }; -}, []); + }, []); return (
@@ -134,24 +135,24 @@ const ProjectDetailsForm: React.FC = () => { value={values.organization || ''} // label="Organization" onChange={(e) => { - handleCustomChange('organization', e.target.value); }} + handleCustomChange('organization', e.target.value); + }} > {organizationList?.map((org) => ( {org.label} ))} - createPopup('Create Organization', 'createOrganization?popup=true')} + sx={{ width: 'auto' }} + // disabled={qrcode == "" ? true : false} + color="info" + aria-label="download qrcode" > - + - {errors.organization && ( @@ -374,7 +375,7 @@ const ProjectDetailsForm: React.FC = () => { - + ); }; export default ProjectDetailsForm; diff --git a/src/frontend/main/src/views/CreateOrganization.tsx b/src/frontend/main/src/views/CreateOrganization.tsx index 953c7904c0..fa5ef4f30f 100644 --- a/src/frontend/main/src/views/CreateOrganization.tsx +++ b/src/frontend/main/src/views/CreateOrganization.tsx @@ -5,13 +5,14 @@ import useForm from '../hooks/useForm'; import { useDispatch } from 'react-redux'; import OrganizationAddValidation from '../components/organization/Validation/OrganizationAddValidation'; import { PostOrganizationDataService } from '../api/OrganizationService'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useParams, useSearchParams } from 'react-router-dom'; import { OrganizationAction } from '../store/slices/organizationSlice'; const CreateOrganizationForm = () => { const dispatch = useDispatch(); const navigate = useNavigate(); + const [searchParams, setSearchParams] = useSearchParams(); const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); const postOrganizationData: any = CoreModules.useSelector((state) => state.organization.postOrganizationData); const postOrganizationDataLoading: any = CoreModules.useSelector((state) => state.organization.postOrganizationDataLoading); @@ -25,7 +26,6 @@ const CreateOrganizationForm = () => { submission, OrganizationAddValidation, ); - console.log(values,'values'); const inputFormStyles = () => { return { style: { @@ -38,10 +38,13 @@ const CreateOrganizationForm = () => { useEffect(() => { if (postOrganizationData) { - - navigate('/organization'); dispatch(OrganizationAction.postOrganizationData(null)) dispatch(OrganizationAction.SetOrganizationFormData({})) + if (searchParams.get("popup") === 'true') { + window.close(); + } else { + navigate('/organization'); + } } @@ -158,7 +161,7 @@ const CreateOrganizationForm = () => { > Upload Logo - + { - const [geojsonFile ,setGeojsonFile]= useState(null); - const [customFormFile ,setCustomFormFile]= useState(null); - const [customFormInputValue ,setCustomFormInputValue]= useState(null); - const [inputValue ,setInputValue]= useState(null); - const [dataExtractFile ,setDataExtractFile]= useState(null); - const [dataExtractFileValue ,setDataExtractFileValue]= useState(null); + const [geojsonFile, setGeojsonFile] = useState(null); + const [customFormFile, setCustomFormFile] = useState(null); + const [customFormInputValue, setCustomFormInputValue] = useState(null); + const [inputValue, setInputValue] = useState(null); + const [dataExtractFile, setDataExtractFile] = useState(null); + const [dataExtractFileValue, setDataExtractFileValue] = useState(null); const dispatch = useDispatch(); const location = useLocation(); const boxSX = { @@ -26,10 +28,9 @@ const CreateProject: React.FC = () => { }, }; useEffect(() => { - return () => { dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ dimension: 10 })); - dispatch(CreateProjectActions.SetGenerateProjectQRSuccess(null)); + dispatch(CreateProjectActions.SetGenerateProjectQRSuccess(null)); dispatch(CreateProjectActions.SetDividedTaskGeojson(null)); setGeojsonFile(null); setCustomFormFile(null); @@ -204,9 +205,9 @@ const CreateProject: React.FC = () => { {location.pathname === '/create-project' ? : null} {location.pathname === '/upload-area' ? : null} - {location.pathname === '/define-tasks' ? : null} - {location.pathname === '/data-extract' ? : null } - {location.pathname === '/select-form' ? : null } + {location.pathname === '/define-tasks' ? : null} + {location.pathname === '/data-extract' ? : null} + {location.pathname === '/select-form' ? : null} {/* {location.pathname === "/basemap-selection" ? : null} */} {/* END */} From 2e472e8a05add6fd1e772c990a075419d3723296 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 11:19:40 +0545 Subject: [PATCH 048/222] feat: added workbox for pwa --- src/frontend/main/package-lock.json | 1674 ++++++++++++++++++++++++++- src/frontend/main/package.json | 3 +- 2 files changed, 1656 insertions(+), 21 deletions(-) diff --git a/src/frontend/main/package-lock.json b/src/frontend/main/package-lock.json index c7521c6a36..efb0ae44bc 100644 --- a/src/frontend/main/package-lock.json +++ b/src/frontend/main/package-lock.json @@ -60,7 +60,8 @@ "webpack": "^5.57.1", "webpack-bundle-analyzer": "^4.8.0", "webpack-cli": "^4.9.0", - "webpack-dev-server": "^4.3.1" + "webpack-dev-server": "^4.3.1", + "workbox-webpack-plugin": "^7.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -2673,6 +2674,85 @@ "node": ">=14" } }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/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/@sentry-internal/tracing": { "version": "7.59.3", "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.3.tgz", @@ -2773,6 +2853,18 @@ "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", "dev": true }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -2987,6 +3079,15 @@ "@types/react": "*" } }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -3031,6 +3132,12 @@ "@types/node": "*" } }, + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", @@ -3758,11 +3865,26 @@ "get-intrinsic": "^1.1.3" } }, + "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/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "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/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -4064,6 +4186,18 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bundle-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", @@ -4306,6 +4440,15 @@ "node": ">= 6" } }, + "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==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -4465,6 +4608,15 @@ "node": ">= 8" } }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/css-declaration-sorter": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", @@ -4818,6 +4970,15 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-browser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", @@ -5156,6 +5317,21 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.367", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", @@ -5760,6 +5936,12 @@ "node": ">=4.0" } }, + "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/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -5951,6 +6133,36 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -6118,6 +6330,21 @@ "node": ">= 0.6" } }, + "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, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -6195,6 +6422,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -6659,6 +6892,12 @@ "postcss": "^8.1.0" } }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -6927,6 +7166,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -6960,6 +7205,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.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", @@ -7007,6 +7261,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -7117,6 +7380,94 @@ "node": ">=0.10.0" } }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/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/jake/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/jake/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/jake/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/jake/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/jake/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/jest-util": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", @@ -7282,6 +7633,12 @@ "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 + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -7304,6 +7661,27 @@ "node": ">=6" } }, + "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" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", @@ -7346,6 +7724,15 @@ "shell-quote": "^1.7.3" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -7428,6 +7815,12 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -7468,6 +7861,15 @@ "yallist": "^3.0.2" } }, + "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" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -8804,6 +9206,18 @@ "node": ">=6.0.0" } }, + "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-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -9354,8 +9768,83 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/run-applescript": { - "version": "5.0.0", + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/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/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/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/run-applescript": { + "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", "dependencies": { @@ -9724,6 +10213,12 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -9758,6 +10253,13 @@ "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==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -9873,6 +10375,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -9884,6 +10400,15 @@ "node": ">=8" } }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -10015,6 +10540,45 @@ "node": ">=6" } }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/terser": { "version": "5.16.9", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz", @@ -10222,6 +10786,15 @@ "node": ">=6" } }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/ts-api-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", @@ -10352,6 +10925,27 @@ "node": ">=4" } }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -10369,6 +10963,16 @@ "node": ">=8" } }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -10474,6 +11078,12 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "node_modules/webpack": { "version": "5.79.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.79.0.tgz", @@ -10949,6 +11559,17 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11003,6 +11624,286 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, + "node_modules/workbox-background-sync": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz", + "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz", + "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-build": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.0.0.tgz", + "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.0.0", + "workbox-broadcast-update": "7.0.0", + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-google-analytics": "7.0.0", + "workbox-navigation-preload": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-range-requests": "7.0.0", + "workbox-recipes": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0", + "workbox-streams": "7.0.0", + "workbox-sw": "7.0.0", + "workbox-window": "7.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz", + "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.0.0.tgz", + "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.0.0.tgz", + "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz", + "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==", + "dev": true, + "dependencies": { + "workbox-background-sync": "7.0.0", + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz", + "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-precaching": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.0.0.tgz", + "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz", + "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-recipes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.0.0.tgz", + "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "node_modules/workbox-routing": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.0.0.tgz", + "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-strategies": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.0.0.tgz", + "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } + }, + "node_modules/workbox-streams": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.0.0.tgz", + "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0" + } + }, + "node_modules/workbox-sw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz", + "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==", + "dev": true + }, + "node_modules/workbox-webpack-plugin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-R1ZzCHPfzeJjLK2/TpKUhxSQ3fFDCxlWxgRhhSjMQLz3G2MlBnyw/XeYb34e7SGgSv0qG22zEhMIzjMNqNeKbw==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "7.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz", + "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.0.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -12807,6 +13708,59 @@ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==" }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@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 + } + } + }, "@sentry-internal/tracing": { "version": "7.59.3", "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.3.tgz", @@ -12883,6 +13837,18 @@ "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", "dev": true }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -13094,6 +14060,15 @@ "@types/react": "*" } }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -13138,6 +14113,12 @@ "@types/node": "*" } }, + "@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, "@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", @@ -13671,11 +14652,23 @@ "get-intrinsic": "^1.1.3" } }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "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 + }, "autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -13896,6 +14889,12 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, "bundle-name": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", @@ -14066,6 +15065,12 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, + "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==", + "dev": true + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -14199,6 +15204,12 @@ "which": "^2.0.1" } }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, "css-declaration-sorter": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", @@ -14434,6 +15445,12 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, "default-browser": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", @@ -14668,6 +15685,15 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, + "ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, "electron-to-chromium": { "version": "1.4.367", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", @@ -15088,6 +16114,12 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, + "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 + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -15251,6 +16283,35 @@ "flat-cache": "^3.0.4" } }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -15372,6 +16433,18 @@ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, + "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, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -15427,6 +16500,12 @@ "has-symbols": "^1.0.3" } }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -15765,6 +16844,12 @@ "dev": true, "requires": {} }, + "idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -15935,6 +17020,12 @@ } } }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -15953,6 +17044,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true + }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -15982,6 +17079,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -16039,23 +17142,86 @@ "is-docker": "^2.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "jest-util": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", @@ -16180,6 +17346,12 @@ "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==" }, + "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 + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -16196,6 +17368,22 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true + }, "jsx-ast-utils": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", @@ -16229,6 +17417,12 @@ "shell-quote": "^1.7.3" } }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -16296,6 +17490,12 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, "lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -16333,6 +17533,15 @@ "yallist": "^3.0.2" } }, + "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, + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -17224,6 +18433,12 @@ "fast-diff": "^1.1.2" } }, + "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 + }, "pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -17624,6 +18839,64 @@ "glob": "^7.1.3" } }, + "rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "dependencies": { + "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 + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "run-applescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", @@ -17911,6 +19184,12 @@ "websocket-driver": "^0.7.4" } }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -17938,6 +19217,12 @@ } } }, + "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 + }, "spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -18031,6 +19316,17 @@ "es-abstract": "^1.20.4" } }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -18039,6 +19335,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -18121,6 +19423,32 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, + "temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true + }, + "tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true + } + } + }, "terser": { "version": "5.16.9", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz", @@ -18253,6 +19581,15 @@ "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", "dev": true }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, "ts-api-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", @@ -18341,6 +19678,21 @@ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -18352,6 +19704,12 @@ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", @@ -18423,6 +19781,12 @@ "minimalistic-assert": "^1.0.0" } }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, "webpack": { "version": "5.79.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.79.0.tgz", @@ -18741,6 +20105,17 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -18780,6 +20155,265 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, + "workbox-background-sync": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz", + "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==", + "dev": true, + "requires": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" + } + }, + "workbox-broadcast-update": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz", + "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==", + "dev": true, + "requires": { + "workbox-core": "7.0.0" + } + }, + "workbox-build": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.0.0.tgz", + "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==", + "dev": true, + "requires": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.0.0", + "workbox-broadcast-update": "7.0.0", + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-google-analytics": "7.0.0", + "workbox-navigation-preload": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-range-requests": "7.0.0", + "workbox-recipes": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0", + "workbox-streams": "7.0.0", + "workbox-sw": "7.0.0", + "workbox-window": "7.0.0" + }, + "dependencies": { + "@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "requires": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + } + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + } + } + }, + "workbox-cacheable-response": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz", + "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==", + "dev": true, + "requires": { + "workbox-core": "7.0.0" + } + }, + "workbox-core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.0.0.tgz", + "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==", + "dev": true + }, + "workbox-expiration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.0.0.tgz", + "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==", + "dev": true, + "requires": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" + } + }, + "workbox-google-analytics": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz", + "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==", + "dev": true, + "requires": { + "workbox-background-sync": "7.0.0", + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "workbox-navigation-preload": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz", + "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==", + "dev": true, + "requires": { + "workbox-core": "7.0.0" + } + }, + "workbox-precaching": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.0.0.tgz", + "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==", + "dev": true, + "requires": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "workbox-range-requests": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz", + "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==", + "dev": true, + "requires": { + "workbox-core": "7.0.0" + } + }, + "workbox-recipes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.0.0.tgz", + "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==", + "dev": true, + "requires": { + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" + } + }, + "workbox-routing": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.0.0.tgz", + "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==", + "dev": true, + "requires": { + "workbox-core": "7.0.0" + } + }, + "workbox-strategies": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.0.0.tgz", + "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==", + "dev": true, + "requires": { + "workbox-core": "7.0.0" + } + }, + "workbox-streams": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.0.0.tgz", + "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==", + "dev": true, + "requires": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0" + } + }, + "workbox-sw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz", + "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==", + "dev": true + }, + "workbox-webpack-plugin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-R1ZzCHPfzeJjLK2/TpKUhxSQ3fFDCxlWxgRhhSjMQLz3G2MlBnyw/XeYb34e7SGgSv0qG22zEhMIzjMNqNeKbw==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "7.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } + } + }, + "workbox-window": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz", + "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/src/frontend/main/package.json b/src/frontend/main/package.json index 30d61ec06f..390e249bbc 100755 --- a/src/frontend/main/package.json +++ b/src/frontend/main/package.json @@ -37,7 +37,8 @@ "webpack": "^5.57.1", "webpack-bundle-analyzer": "^4.8.0", "webpack-cli": "^4.9.0", - "webpack-dev-server": "^4.3.1" + "webpack-dev-server": "^4.3.1", + "workbox-webpack-plugin": "^7.0.0" }, "dependencies": { "@emotion/react": "^11.10.5", From 44b280542dbd45ff6dab33607fcacbf13be212e5 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 11:19:57 +0545 Subject: [PATCH 049/222] feat: workbox config on webpack --- src/frontend/main/webpack.config.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index 29dcb1b68d..f9c0b91fc9 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -6,6 +6,8 @@ const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); const path = require('path'); const deps = require("./package.json").dependencies; const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const WorkboxWebpackPlugin = require('workbox-webpack-plugin'); // Add the WorkboxWebpackPlugin + //const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; module.exports = function (webpackEnv) { @@ -120,6 +122,12 @@ module.exports = function (webpackEnv) { ], }, plugins: [ + // Add the WorkboxWebpackPlugin to generate the service worker and handle caching + new WorkboxWebpackPlugin.GenerateSW({ + clientsClaim: true, + skipWaiting: true, + maximumFileSizeToCacheInBytes:7000000 + }), //new BundleAnalyzerPlugin(), new MiniCssExtractPlugin({ filename: 'static/css/[name].[contenthash:8].css', From b7ecd3233a9a7b716a03796a82665c2c29807acf Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 11:20:17 +0545 Subject: [PATCH 050/222] feat: integrated serviceworker for pwa --- src/frontend/main/src/App.jsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/frontend/main/src/App.jsx b/src/frontend/main/src/App.jsx index 5187262bee..f2a7d7d101 100755 --- a/src/frontend/main/src/App.jsx +++ b/src/frontend/main/src/App.jsx @@ -38,3 +38,13 @@ ReactDOM.render( , document.getElementById("app")); + +if ('serviceWorker' in navigator) { + window.addEventListener('load', () => { + navigator.serviceWorker.register('/service-worker.js').then(registration => { + console.log('ServiceWorker registered: ', registration); + }).catch(error => { + console.log('ServiceWorker registration failed: ', error); + }); + }); +} \ No newline at end of file From 5807838c297a215247a03744336cd38d0badca6a Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 11:20:31 +0545 Subject: [PATCH 051/222] feat: added manifest.json for pwa --- src/frontend/main/src/manifest.json | 40 +++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/frontend/main/src/manifest.json diff --git a/src/frontend/main/src/manifest.json b/src/frontend/main/src/manifest.json new file mode 100644 index 0000000000..f8d30926dd --- /dev/null +++ b/src/frontend/main/src/manifest.json @@ -0,0 +1,40 @@ +{ + "name": "Field Mapping Tasking Manager", + "short_name": "FMTM", + "start_url": ".", + "display": "standalone", + "background_color": "#fff", + "description": "A project to provide tools for Open Mapping campaigns.", + "icons": [ + { + "src": "assets/images/favicon.png", + "sizes": "48x48", + "type": "image/png" + }, + { + "src": "assets/images/favicon.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "assets/images/favicon.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "assets/images/favicon.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "assets/images/favicon.png", + "sizes": "168x168", + "type": "image/png" + }, + { + "src": "assets/images/favicon.png", + "sizes": "192x192", + "type": "image/png" + } + ] +} From f6cf359163a0dca6ac1fd17f2219db2e0ef004b6 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 14:10:43 +0545 Subject: [PATCH 052/222] Feat: Webpack Configuration of public path for PWA --- src/frontend/main/public/icon-192x192.png | Bin 0 -> 19515 bytes src/frontend/main/public/icon-256x256.png | Bin 0 -> 30891 bytes src/frontend/main/public/icon-384x384.png | Bin 0 -> 59147 bytes src/frontend/main/public/icon-512x512.png | Bin 0 -> 92286 bytes src/frontend/main/public/manifest.json | 30 ++++++++++++++++ src/frontend/main/src/index.html | 1 + src/frontend/main/src/manifest.json | 40 ---------------------- src/frontend/main/webpack.config.js | 2 +- 8 files changed, 32 insertions(+), 41 deletions(-) create mode 100644 src/frontend/main/public/icon-192x192.png create mode 100644 src/frontend/main/public/icon-256x256.png create mode 100644 src/frontend/main/public/icon-384x384.png create mode 100644 src/frontend/main/public/icon-512x512.png create mode 100644 src/frontend/main/public/manifest.json delete mode 100644 src/frontend/main/src/manifest.json diff --git a/src/frontend/main/public/icon-192x192.png b/src/frontend/main/public/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..5a41bf0ae6784ee03411854f40b3bc7d364d7b33 GIT binary patch literal 19515 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ଫ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 literal 0 HcmV?d00001 diff --git a/src/frontend/main/public/icon-256x256.png b/src/frontend/main/public/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..ce5a8034e10540f95682d2e7b4cd33bba8de990a GIT binary patch literal 30891 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 literal 0 HcmV?d00001 diff --git a/src/frontend/main/public/icon-384x384.png b/src/frontend/main/public/icon-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8260c8622e46f2382b1f4ec794bbb3b7bca259 GIT binary patch literal 59147 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�li&Iw1o=g$-Qp!&3D>=tV78|Ct(UW$XR;l7RoP zKMeO91p5dn2GlvEs%TSWbnXmKe(8${GhX|<+pN!e#(kvfp*F?Gdk-VZ$U*zJSf06AMKg-^DjahVT`V-Wx;-$jYYIbN>@;w{S z>!9Z&^DSH-BWrC(``YW=``!=H8@H(Xju1QA*yaVP(B&=Thu4aPexbrqTSZDnZ;95! zzDrCbkW!1rfZV*x8-Mi`>dQA6-`!zd1*6Lw*(&rJ=@o*LBCIxO|CFr=TWqF_tt2;M zkpPN*RU9M(ttjl0eIXKoy7q)_ip-|0&1Ss(m;VEK^({_BP+Fh^35XM7(d3$?IA01I zg8v|lcvXPi;_(peYL^W|6)kRbI9z z2M>oiL^R*^J3fNNM>7EoJK1G0rY`#mOe8WRv3BAlr`EPfw+`5Q_ZD81-WmIneQ>LO z1&6=_y$V�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 literal 0 HcmV?d00001 diff --git a/src/frontend/main/public/icon-512x512.png b/src/frontend/main/public/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..b3057e3660c364294fcb9b6c09b0e25bd999ef56 GIT binary patch literal 92286 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
|mra&`qWYZ8;=zA9?+)H#m6xRqSw| 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
9CIOlu5i&h_jB2^u1 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 }XrSZi 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 literal 0 HcmV?d00001 diff --git a/src/frontend/main/public/manifest.json b/src/frontend/main/public/manifest.json new file mode 100644 index 0000000000..e2bf572d18 --- /dev/null +++ b/src/frontend/main/public/manifest.json @@ -0,0 +1,30 @@ +{ + "name": "Field Mapping Tasking Manager", + "short_name": "FMTM", + "start_url": ".", + "display": "fullscreen", + "background_color": "#fff", + "description": "A project to provide tools for Open Mapping campaigns.", + "icons": [ + { + "src": "/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/icon-256x256.png", + "sizes": "256x256", + "type": "image/png" + }, + { + "src": "/icon-384x384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "/icon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/src/frontend/main/src/index.html b/src/frontend/main/src/index.html index 965c8dda4d..4051db80a8 100755 --- a/src/frontend/main/src/index.html +++ b/src/frontend/main/src/index.html @@ -6,6 +6,7 @@ + Field Mapping Tasking Manager diff --git a/src/frontend/main/src/manifest.json b/src/frontend/main/src/manifest.json deleted file mode 100644 index f8d30926dd..0000000000 --- a/src/frontend/main/src/manifest.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "Field Mapping Tasking Manager", - "short_name": "FMTM", - "start_url": ".", - "display": "standalone", - "background_color": "#fff", - "description": "A project to provide tools for Open Mapping campaigns.", - "icons": [ - { - "src": "assets/images/favicon.png", - "sizes": "48x48", - "type": "image/png" - }, - { - "src": "assets/images/favicon.png", - "sizes": "72x72", - "type": "image/png" - }, - { - "src": "assets/images/favicon.png", - "sizes": "96x96", - "type": "image/png" - }, - { - "src": "assets/images/favicon.png", - "sizes": "144x144", - "type": "image/png" - }, - { - "src": "assets/images/favicon.png", - "sizes": "168x168", - "type": "image/png" - }, - { - "src": "assets/images/favicon.png", - "sizes": "192x192", - "type": "image/png" - } - ] -} diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index f9c0b91fc9..e46361a7d8 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -22,7 +22,7 @@ module.exports = function (webpackEnv) { // bail: isEnvProduction, devtool: isEnvProduction ? 'source-map' : isEnvDevelopment && 'inline-source-map', output: { - publicPath: `${process.env.FRONTEND_MAIN_URL}/`, + publicPath: `/src/frontend/main/`, path: path.resolve(__dirname, "dist"), filename: "[name].[contenthash].bundle.js", clean:true From da8a9ff7a4a9bb0a3fa5e7361d77a7880eb05cc7 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 15:07:32 +0545 Subject: [PATCH 053/222] feat: webpack changes for pwa --- src/frontend/main/webpack.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index e46361a7d8..47bd891754 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -22,7 +22,7 @@ module.exports = function (webpackEnv) { // bail: isEnvProduction, devtool: isEnvProduction ? 'source-map' : isEnvDevelopment && 'inline-source-map', output: { - publicPath: `/src/frontend/main/`, + publicPath: `${process.env.FRONTEND_MAIN_URL}/`, path: path.resolve(__dirname, "dist"), filename: "[name].[contenthash].bundle.js", clean:true @@ -126,7 +126,7 @@ module.exports = function (webpackEnv) { new WorkboxWebpackPlugin.GenerateSW({ clientsClaim: true, skipWaiting: true, - maximumFileSizeToCacheInBytes:7000000 + maximumFileSizeToCacheInBytes:50000000 }), //new BundleAnalyzerPlugin(), new MiniCssExtractPlugin({ From a6e72d207479b29500027c53d1ec027e651b4a76 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 21 Jul 2023 15:11:20 +0545 Subject: [PATCH 054/222] added sentry sdk package --- src/backend/pdm.lock | 18 +++++++++++++++++- src/backend/pyproject.toml | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index 2dd94ffb91..99369c7726 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -1,3 +1,6 @@ +# This file is @generated by PDM. +# It is not intended for manual editing. + [[package]] name = "alembic" version = "1.8.1" @@ -717,6 +720,15 @@ version = "1.5.2" requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" summary = "QR Code and Micro QR Code generator for Python 2 and Python 3" +[[package]] +name = "sentry-sdk" +version = "1.9.6" +summary = "Python client for Sentry (https://sentry.io)" +dependencies = [ + "certifi", + "urllib3>=1.26.11; python_version >= \"3.6\"", +] + [[package]] name = "shapely" version = "2.0.1" @@ -897,7 +909,7 @@ summary = "Backport of pathlib-compatible object wrapper for zip files" lock_version = "4.2" cross_platform = true groups = ["default", "dev"] -content_hash = "sha256:f7aa374b3d8f41551fba6e5884a090347089de18d25f9136b2f31880f3f4ad77" +content_hash = "sha256:1fc6cfe35039ddc838a4e1a087b2136c3af90b31e2debc1cd7a6292f4fdc3f19" [metadata.files] "alembic 1.8.1" = [ @@ -1887,6 +1899,10 @@ content_hash = "sha256:f7aa374b3d8f41551fba6e5884a090347089de18d25f9136b2f31880f {url = "https://files.pythonhosted.org/packages/10/57/bef22e1ec64200bd5887c6012221e018fc1f2a25697a7f90f661b9689c00/segno-1.5.2-py2.py3-none-any.whl", hash = "sha256:b17ace8171aad3987e01bb4aeadf7e0450c40674024c4c57b4da54028e55f1e9"}, {url = "https://files.pythonhosted.org/packages/90/2a/2fedf1023f9273d8326362df7936748ebadef92ba53ab7970d9b8df1a6c2/segno-1.5.2.tar.gz", hash = "sha256:983424b296e62189d70fc73460cd946cf56dcbe82b9bda18c066fc1b24371cdc"}, ] +"sentry-sdk 1.9.6" = [ + {url = "https://files.pythonhosted.org/packages/0a/3d/4ef597b13bf0a4b373b9f4a28f6bef9639fcf3ea620206a6037a4698aa2e/sentry_sdk-1.9.6-py2.py3-none-any.whl", hash = "sha256:630faec958e09b1151d88b8655bb749274c6b1acd19baa6f7a5ec3106276f752"}, + {url = "https://files.pythonhosted.org/packages/c4/d1/1649fbbf654d9caeef95bfe2578509e2ca9d2921d7ed3d0b2701e071b1d5/sentry-sdk-1.9.6.tar.gz", hash = "sha256:f713f33ff7f82658c30e7e8cdec72c432218e6dd41b0f004905733793bd9719b"}, +] "shapely 2.0.1" = [ {url = "https://files.pythonhosted.org/packages/04/67/05e96af1c4ee130e12ac228da1ab86f7581809d8f008aa3a9ec19ea22eb2/shapely-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70a18fc7d6418e5aea76ac55dce33f98e75bd413c6eb39cfed6a1ba36469d7d4"}, {url = "https://files.pythonhosted.org/packages/0e/da/055d5b854a9a702fed0965d37754b79967ecfd67fe8377264e6a00b521ea/shapely-2.0.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43755d2c46b75a7b74ac6226d2cc9fa2a76c3263c5ae70c195c6fb4e7b08e79"}, diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index f035bfae61..33cf2b7189 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -47,6 +47,7 @@ dependencies = [ "bcrypt==4.0.1", "segno==1.5.2", "osm-fieldwork==0.3.2", + "sentry-sdk==1.9.6" ] requires-python = ">=3.10" readme = "../../README.md" From 01dca52b87f9c48d0b7f31ef74fa2ec738ebea97 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 21 Jul 2023 15:13:30 +0545 Subject: [PATCH 055/222] manage imports by precommit --- src/backend/app/config.py | 2 ++ src/backend/app/main.py | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/app/config.py b/src/backend/app/config.py index 634bb3387c..5189f8c3c7 100644 --- a/src/backend/app/config.py +++ b/src/backend/app/config.py @@ -114,6 +114,8 @@ def assemble_db_connection(cls, v: str, values: dict[str, Any]) -> Any: OSM_SECRET_KEY: str OAUTHLIB_INSECURE_TRANSPORT: Optional[str] = 1 + SENTRY_DSN: Optional[str] + class Config: """Pydantic settings config.""" diff --git a/src/backend/app/main.py b/src/backend/app/main.py index 75787ddb8d..acb30f7c73 100644 --- a/src/backend/app/main.py +++ b/src/backend/app/main.py @@ -23,6 +23,7 @@ import sys from typing import Union +import sentry_sdk from fastapi import FastAPI, Request from fastapi.exceptions import RequestValidationError from fastapi.middleware.cors import CORSMiddleware @@ -34,12 +35,12 @@ from .central import central_routes from .config import settings from .db.database import Base, engine, get_db +from .organization import organization_routes from .projects import project_routes from .projects.project_crud import read_xlsforms from .submission import submission_routes from .tasks import tasks_routes from .users import user_routes -from .organization import organization_routes # Env variables os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = settings.OAUTHLIB_INSECURE_TRANSPORT @@ -58,6 +59,12 @@ logger = logging.getLogger(__name__) +sentry_sdk.init( + dsn=settings.SENTRY_DSN, + traces_sample_rate=0.1, +) + + def get_application() -> FastAPI: """Get the FastAPI app instance, with settings.""" _app = FastAPI( From b247a4ea5b8612bef1b52f1979825607447b2947 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 15:26:44 +0545 Subject: [PATCH 056/222] Feat: added copy webpack plugin for copying manifest --- src/frontend/main/package-lock.json | 204 ++++++++++++++++++++++++++++ src/frontend/main/package.json | 1 + src/frontend/main/webpack.config.js | 7 + 3 files changed, 212 insertions(+) diff --git a/src/frontend/main/package-lock.json b/src/frontend/main/package-lock.json index efb0ae44bc..2d6643903f 100644 --- a/src/frontend/main/package-lock.json +++ b/src/frontend/main/package-lock.json @@ -47,6 +47,7 @@ "autoprefixer": "^10.1.0", "babel-loader": "^8.2.2", "babel-plugin-import": "^1.13.6", + "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.3.0", "css-minimizer-webpack-plugin": "^4.2.2", "html-webpack-plugin": "^5.3.2", @@ -4561,6 +4562,126 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/core-js-compat": { "version": "3.30.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", @@ -15167,6 +15288,89 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, "core-js-compat": { "version": "3.30.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", diff --git a/src/frontend/main/package.json b/src/frontend/main/package.json index 390e249bbc..3b56f31bc5 100755 --- a/src/frontend/main/package.json +++ b/src/frontend/main/package.json @@ -24,6 +24,7 @@ "autoprefixer": "^10.1.0", "babel-loader": "^8.2.2", "babel-plugin-import": "^1.13.6", + "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.3.0", "css-minimizer-webpack-plugin": "^4.2.2", "html-webpack-plugin": "^5.3.2", diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index 47bd891754..1bc5a0c547 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -7,6 +7,7 @@ const path = require('path'); const deps = require("./package.json").dependencies; const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const WorkboxWebpackPlugin = require('workbox-webpack-plugin'); // Add the WorkboxWebpackPlugin +const CopyPlugin = require("copy-webpack-plugin"); //const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; module.exports = function (webpackEnv) { @@ -122,6 +123,12 @@ module.exports = function (webpackEnv) { ], }, plugins: [ + new CopyPlugin({ + patterns: [ + { from: "./public/manifest.json", to: "./" }, + // { from: "other", to: "public" }, + ], + }), // Add the WorkboxWebpackPlugin to generate the service worker and handle caching new WorkboxWebpackPlugin.GenerateSW({ clientsClaim: true, From 2a2042db88ae56707b047fc846f4dd8be991dc4c Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 15:44:08 +0545 Subject: [PATCH 057/222] fix: pwa fixes for icon --- src/frontend/main/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index 1bc5a0c547..5ea3fa12a7 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -125,7 +125,7 @@ module.exports = function (webpackEnv) { plugins: [ new CopyPlugin({ patterns: [ - { from: "./public/manifest.json", to: "./" }, + { from: "./public/", to: "./" }, // { from: "other", to: "public" }, ], }), From c95656a915df07491d8926d4ec50b65c82201c35 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 20:28:55 +0545 Subject: [PATCH 058/222] Feat: Go To Odk Collect Button Test --- .../fmtm_openlayer_map/src/components/QrcodeComponent.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index fd54ec1e77..3b141da338 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -100,7 +100,11 @@ const TasksComponent = ({ type, task, defaultTheme }) => { /> - + { + document.location.href = 'intent:#Intent;scheme=https;package=org.odk.collect.android;end;'; + }}>Go To ODK Date: Fri, 21 Jul 2023 20:44:20 +0545 Subject: [PATCH 059/222] feat: app on scheme of intent for redirect to odk collect app --- .../fmtm_openlayer_map/src/components/QrcodeComponent.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index 3b141da338..c1a67b03b1 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,7 +103,7 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - document.location.href = 'intent:#Intent;scheme=https;package=org.odk.collect.android;end;'; + document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android;end;'; }}>Go To ODK Date: Fri, 21 Jul 2023 20:56:51 +0545 Subject: [PATCH 060/222] test: odk collect opening from mobile --- .../fmtm_openlayer_map/src/components/QrcodeComponent.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index c1a67b03b1..03c1d5d8f9 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,7 +103,7 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android;end;'; + document.location.href = 'intent:#Intent;scheme=content;package=org.odk.collect.android.provider.odk.forms/forms;end;'; }}>Go To ODK Date: Fri, 21 Jul 2023 21:32:01 +0545 Subject: [PATCH 061/222] Test : ODK Collect App Open --- .../fmtm_openlayer_map/src/components/QrcodeComponent.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index 03c1d5d8f9..84b1c636b6 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,7 +103,7 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - document.location.href = 'intent:#Intent;scheme=content;package=org.odk.collect.android.provider.odk.forms/forms;end;'; + document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android.provider.odk.forms;end;'; }}>Go To ODK Date: Fri, 21 Jul 2023 21:55:48 +0545 Subject: [PATCH 062/222] fix: intent --- .../fmtm_openlayer_map/src/components/QrcodeComponent.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index 84b1c636b6..75562fd1f6 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,7 +103,7 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android.provider.odk.forms;end;'; + document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android.formlists;end;'; }}>Go To ODK Date: Fri, 21 Jul 2023 22:06:40 +0545 Subject: [PATCH 063/222] test: intent for odk collect --- .../fmtm_openlayer_map/src/components/QrcodeComponent.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index 75562fd1f6..c1a67b03b1 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,7 +103,7 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android.formlists;end;'; + document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android;end;'; }}>Go To ODK Date: Fri, 21 Jul 2023 22:23:47 +0545 Subject: [PATCH 064/222] test: intent test --- .../fmtm_openlayer_map/src/components/QrcodeComponent.jsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index c1a67b03b1..50efe20dc0 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,7 +103,9 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android;end;'; + document.location.href = 'intent://instagram.com/#Intent;scheme=https;package=com.instagram.android;end'; + // document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android;end;'; + // document.location.href = 'https://play.google.com/store/apps/details?id=org.odk.collect.android'; }}>Go To ODK Date: Fri, 21 Jul 2023 22:31:31 +0545 Subject: [PATCH 065/222] test : intent --- .../fmtm_openlayer_map/src/components/QrcodeComponent.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index 50efe20dc0..d5ae6aba51 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,7 +103,7 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - document.location.href = 'intent://instagram.com/#Intent;scheme=https;package=com.instagram.android;end'; + document.location.href = 'intent://getodk.org/#Intent;scheme=https;package=org.odk.collect.android;end'; // document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android;end;'; // document.location.href = 'https://play.google.com/store/apps/details?id=org.odk.collect.android'; }}>Go To ODK From 6a58ff102f9d80010a17932f5ad830ace1062f2a Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 21 Jul 2023 22:53:10 +0545 Subject: [PATCH 066/222] test: odk collect --- .../src/components/QrcodeComponent.jsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index d5ae6aba51..ff2a604a7b 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,7 +103,15 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - document.location.href = 'intent://getodk.org/#Intent;scheme=https;package=org.odk.collect.android;end'; + // Replace "org.odk.collect.android.FORM_DOWNLOAD" with the desired action name + const action = "org.odk.collect.android.FORM_DOWNLOAD"; + // Replace "vnd.android.cursor.dir/vnd.odk.form" with the desired data mime type + const mimeType = "vnd.android.cursor.dir/vnd.odk.form"; + + const intentURI = `intent:${action};category=android.intent.category.DEFAULT;type=${mimeType};end;`; + + document.location.href = intentURI; + // document.location.href = 'intent://getodk.org/#Intent;scheme=app;package=org.odk.collect.android;end'; // document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android;end;'; // document.location.href = 'https://play.google.com/store/apps/details?id=org.odk.collect.android'; }}>Go To ODK From 82d5a2f90238c1ba3c1af7628ca1531ee14060ea Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 24 Jul 2023 09:54:32 +0545 Subject: [PATCH 067/222] fix: go to odk temp fix --- .../src/components/QrcodeComponent.jsx | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index ff2a604a7b..be800c9586 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -103,17 +103,7 @@ const TasksComponent = ({ type, task, defaultTheme }) => { { - // Replace "org.odk.collect.android.FORM_DOWNLOAD" with the desired action name - const action = "org.odk.collect.android.FORM_DOWNLOAD"; - // Replace "vnd.android.cursor.dir/vnd.odk.form" with the desired data mime type - const mimeType = "vnd.android.cursor.dir/vnd.odk.form"; - - const intentURI = `intent:${action};category=android.intent.category.DEFAULT;type=${mimeType};end;`; - - document.location.href = intentURI; - // document.location.href = 'intent://getodk.org/#Intent;scheme=app;package=org.odk.collect.android;end'; - // document.location.href = 'intent:#Intent;scheme=app;package=org.odk.collect.android;end;'; - // document.location.href = 'https://play.google.com/store/apps/details?id=org.odk.collect.android'; + document.location.href = 'intent://getodk.org/#Intent;scheme=app;package=org.odk.collect.android;end'; }}>Go To ODK Date: Mon, 24 Jul 2023 10:43:15 +0545 Subject: [PATCH 068/222] fix: upload boundary, seek(0) used for in memory file --- src/backend/app/projects/project_routes.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index a90bf86aa4..83febaf7c0 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -376,6 +376,7 @@ async def upload_project_boundary( raise HTTPException(status_code=400, detail="Provide a valid .geojson file") # read entire file + await upload.seek(0) content = await upload.read() boundary = json.loads(content) @@ -412,6 +413,7 @@ async def edit_project_boundary( raise HTTPException(status_code=400, detail="Provide a valid .geojson file") # read entire file + await upload.seek(0) content = await upload.read() boundary = json.loads(content) @@ -641,6 +643,7 @@ async def preview_tasks(upload: UploadFile = File(...), dimension: int = Form(50 raise HTTPException(status_code=400, detail="Provide a valid .geojson file") # read entire file + await upload.seek(0) content = await upload.read() boundary = json.loads(content) From 6837bf3a2ca1e51c5228d9e9bb7bd84d204ae00e Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 24 Jul 2023 11:01:57 +0545 Subject: [PATCH 069/222] fix: seek for in memory file used in multipolygon upload --- src/backend/app/projects/project_routes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 83febaf7c0..ca00870a5c 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -318,6 +318,7 @@ async def upload_multi_project_boundary( If the project ID does not exist in the database, an HTTP 428 error is raised. """ # read entire file + await upload.seek(0) content = await upload.read() boundary = json.loads(content) From ba7c3bf1c0c8c44043f686a227ebb92a713f3ee9 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 24 Jul 2023 13:48:44 +0545 Subject: [PATCH 070/222] osm user id, username saved in db user table --- src/backend/app/auth/auth_routes.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/backend/app/auth/auth_routes.py b/src/backend/app/auth/auth_routes.py index 97442c9d91..83ee71ca10 100644 --- a/src/backend/app/auth/auth_routes.py +++ b/src/backend/app/auth/auth_routes.py @@ -20,7 +20,7 @@ from fastapi.logger import logger as log from fastapi.responses import JSONResponse from sqlalchemy.orm import Session - +from ..db.db_models import DbUser from ..db import database from ..users import user_crud, user_schemas from .osm import AuthUser, init_osm_auth, login_required @@ -85,6 +85,9 @@ def my_data(user_data: AuthUser = Depends(login_required)): Returns: user_data """ - print(user_data, 'user_data') - return JSONResponse(content={"user_data": user_data}, status_code=200) - # return user_data + + # Save user info in User table + db_user = DbUser(id=user_data['id'], username=user_data['username']) + db_user.commit() + + return JSONResponse(content={"user_data": user_data}, status_code=200) \ No newline at end of file From f3e19bf9e7b9cbededbd03c38bf8ae09162ae0a4 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 24 Jul 2023 14:23:37 +0545 Subject: [PATCH 071/222] sentry added for debug false --- src/backend/app/main.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/app/main.py b/src/backend/app/main.py index acb30f7c73..2c5018b9bf 100644 --- a/src/backend/app/main.py +++ b/src/backend/app/main.py @@ -58,11 +58,11 @@ logger = logging.getLogger(__name__) - -sentry_sdk.init( - dsn=settings.SENTRY_DSN, - traces_sample_rate=0.1, -) +if not settings.DEBUG: + sentry_sdk.init( + dsn=settings.SENTRY_DSN, + traces_sample_rate=0.1, + ) def get_application() -> FastAPI: From 52dfb7f862760a34128ad19c0ee63e2de9893f81 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 24 Jul 2023 14:24:12 +0545 Subject: [PATCH 072/222] user_info api updated --- src/backend/app/projects/project_routes.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index ca00870a5c..054794dba0 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -155,6 +155,7 @@ async def create_project( else: raise HTTPException(status_code=404, detail="Project not found") + @router.post("/update_odk_credentials") async def update_odk_credentials( background_task: BackgroundTasks, @@ -485,6 +486,7 @@ async def generate_files( if file_ext not in allowed_extensions: raise HTTPException(status_code=400, detail="Provide a valid .xls file") xform_title = file_name[0] + await upload.seek(0) contents = await upload.read() project.form_xls = contents From b6606c1bbbad9b61942b7a2a4a2cbef80aa9f53a Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 24 Jul 2023 14:24:56 +0545 Subject: [PATCH 073/222] me api in auth model --- src/backend/app/auth/auth_routes.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/backend/app/auth/auth_routes.py b/src/backend/app/auth/auth_routes.py index 83ee71ca10..7372059ccb 100644 --- a/src/backend/app/auth/auth_routes.py +++ b/src/backend/app/auth/auth_routes.py @@ -77,7 +77,10 @@ def callback(request: Request, osm_auth=Depends(init_osm_auth)): @router.get("/me/", response_model=AuthUser) -def my_data(user_data: AuthUser = Depends(login_required)): +def my_data( + db: Session = Depends(database.get_db), + user_data: AuthUser = Depends(login_required) + ): """Read the access token and provide user details from OSM user's API endpoint, also integrated with underpass . @@ -87,7 +90,11 @@ def my_data(user_data: AuthUser = Depends(login_required)): """ # Save user info in User table - db_user = DbUser(id=user_data['id'], username=user_data['username']) - db_user.commit() + user = user_crud.get_user_by_id(db, user_data['id']) + if not user: + db_user = DbUser(id=user_data['id'], username=user_data['username']) + db.add(db_user) + db.commit() + return JSONResponse(content={"user_data": user_data}, status_code=200) \ No newline at end of file From edab306473e8577f8d33e581cb2cc52843b496a8 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 24 Jul 2023 14:25:07 +0545 Subject: [PATCH 074/222] get user by id function --- src/backend/app/users/user_crud.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/backend/app/users/user_crud.py b/src/backend/app/users/user_crud.py index 2722fa4547..a2f7364f62 100644 --- a/src/backend/app/users/user_crud.py +++ b/src/backend/app/users/user_crud.py @@ -149,3 +149,8 @@ async def create_user_roles(user_role: user_schemas.UserRoles, db: Session): db.commit() db.refresh(db_user_role) return db_user_role + + +def get_user_by_id(db: Session, user_id: int): + db_user = db.query(db_models.DbUser).filter(db_models.DbUser.id == user_id).first() + return db_user From 736e7744d627d8f1b932c8b582122ba8375d8913 Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 24 Jul 2023 18:05:13 +0545 Subject: [PATCH 075/222] Fix: Eslint Config And Typescript Config --- src/frontend/fmtm_openlayer_map/src/App.jsx | 1 - .../fmtm_openlayer_map/src/routes.jsx | 1 - src/frontend/main/.eslintrc.cjs | 25 + src/frontend/main/.eslintrc.js | 25 - src/frontend/main/package-lock.json | 771 +++++++++++++++++- src/frontend/main/package.json | 3 +- src/frontend/main/src/views/Login.tsx | 171 ++-- src/frontend/main/tsconfig.json | 5 +- 8 files changed, 860 insertions(+), 142 deletions(-) create mode 100644 src/frontend/main/.eslintrc.cjs delete mode 100644 src/frontend/main/.eslintrc.js diff --git a/src/frontend/fmtm_openlayer_map/src/App.jsx b/src/frontend/fmtm_openlayer_map/src/App.jsx index 151f1fdea7..a517ffb619 100755 --- a/src/frontend/fmtm_openlayer_map/src/App.jsx +++ b/src/frontend/fmtm_openlayer_map/src/App.jsx @@ -1,5 +1,4 @@ -import React from "react"; import './index.css' import ReactDOM from "react-dom"; import { store } from "fmtm/Store"; diff --git a/src/frontend/fmtm_openlayer_map/src/routes.jsx b/src/frontend/fmtm_openlayer_map/src/routes.jsx index aa8d5f35de..fe60ce44cd 100755 --- a/src/frontend/fmtm_openlayer_map/src/routes.jsx +++ b/src/frontend/fmtm_openlayer_map/src/routes.jsx @@ -1,4 +1,3 @@ -import React from 'react'; import MainView from './views/MainView'; import Home from './views/Home'; import CoreModules from 'fmtm/CoreModules'; diff --git a/src/frontend/main/.eslintrc.cjs b/src/frontend/main/.eslintrc.cjs new file mode 100644 index 0000000000..d1da6984a1 --- /dev/null +++ b/src/frontend/main/.eslintrc.cjs @@ -0,0 +1,25 @@ +module.exports = { + parser: '@typescript-eslint/parser', // Specifies the ESLint parser + extends: [ + 'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react + 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin + 'prettier', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier + 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. + 'plugin:react/jsx-runtime', + ], + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + rules: { + //FIXME: Remove This Code To Integrate Types Instead Of "Any" Types. + '@typescript-eslint/no-explicit-any': 0, + // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs + // e.g. "@typescript-eslint/explicit-function-return-type": "off", + }, + settings: { + react: { + version: 'detect', // Tells eslint-plugin-react to automatically detect the version of React to use + }, + }, +}; diff --git a/src/frontend/main/.eslintrc.js b/src/frontend/main/.eslintrc.js deleted file mode 100644 index 180d64ccdf..0000000000 --- a/src/frontend/main/.eslintrc.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', // Specifies the ESLint parser - extends: [ - 'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin - 'prettier/@typescript-eslint', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier - 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. - ], - parserOptions: { - ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features - sourceType: 'module', // Allows for the use of imports - ecmaFeatures: { - jsx: true, // Allows for the parsing of JSX - }, - }, - rules: { - // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs - // e.g. "@typescript-eslint/explicit-function-return-type": "off", - }, - settings: { - react: { - version: 'detect', // Tells eslint-plugin-react to automatically detect the version of React to use - }, - }, - }; \ No newline at end of file diff --git a/src/frontend/main/package-lock.json b/src/frontend/main/package-lock.json index 2d6643903f..112ba43dee 100644 --- a/src/frontend/main/package-lock.json +++ b/src/frontend/main/package-lock.json @@ -23,7 +23,6 @@ "eslint": "^8.44.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", - "eslint-plugin-react": "^7.32.2", "install": "^0.13.0", "mini-css-extract-plugin": "^2.7.5", "react": "^17.0.2", @@ -50,6 +49,8 @@ "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.3.0", "css-minimizer-webpack-plugin": "^4.2.2", + "eslint-config-airbnb": "^19.0.4", + "eslint-plugin-react": "^7.33.0", "html-webpack-plugin": "^5.3.2", "postcss": "^8.2.1", "postcss-loader": "^4.1.0", @@ -3012,6 +3013,13 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "peer": true + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -3776,10 +3784,21 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -3798,6 +3817,7 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -3824,6 +3844,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -3841,6 +3862,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -3858,6 +3880,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -3866,6 +3889,13 @@ "get-intrinsic": "^1.1.3" } }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true, + "peer": true + }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -3923,6 +3953,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3930,6 +3961,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/axios": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", @@ -3940,6 +3981,16 @@ "proxy-from-env": "^1.1.0" } }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -4226,6 +4277,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -4512,6 +4564,12 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", @@ -5070,6 +5128,13 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "peer": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5259,6 +5324,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -5287,6 +5353,16 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -5458,6 +5534,13 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==" }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "peer": true + }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -5536,6 +5619,7 @@ "version": "1.21.2", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.0", "available-typed-arrays": "^1.0.5", @@ -5588,6 +5672,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", @@ -5601,6 +5686,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, "dependencies": { "has": "^1.0.3" } @@ -5609,6 +5695,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5701,6 +5788,46 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "dev": true, + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" + } + }, "node_modules/eslint-config-prettier": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", @@ -5712,6 +5839,140 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dev": true, + "peer": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, "node_modules/eslint-plugin-prettier": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", @@ -5741,9 +6002,10 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz", + "integrity": "sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==", + "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -5758,7 +6020,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "engines": { @@ -5768,10 +6030,24 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5783,6 +6059,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { "node": ">=4.0" } @@ -5791,6 +6068,7 @@ "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -6403,6 +6681,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -6500,6 +6779,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -6517,6 +6797,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6534,6 +6815,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -6564,6 +6846,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -6623,6 +6906,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -6656,6 +6940,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6714,6 +6999,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6730,6 +7016,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -6741,6 +7028,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6752,6 +7040,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6763,6 +7052,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -7104,6 +7394,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -7135,6 +7426,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -7153,6 +7445,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -7176,6 +7469,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7191,6 +7485,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -7213,6 +7508,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7297,6 +7593,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -7316,6 +7613,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7371,6 +7669,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7395,6 +7694,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -7417,6 +7717,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7431,6 +7732,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -7445,6 +7747,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -7463,6 +7766,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -7807,6 +8111,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -7835,6 +8140,23 @@ "node": ">= 8" } }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true, + "peer": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "peer": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, "node_modules/launch-editor": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", @@ -8196,6 +8518,16 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -8354,6 +8686,7 @@ "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8362,6 +8695,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -8370,6 +8704,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -8387,6 +8722,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -8400,6 +8736,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -8416,6 +8753,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, "dependencies": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4" @@ -8428,6 +8766,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -9721,6 +10060,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -10023,6 +10363,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -10084,9 +10425,10 @@ } }, "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, "bin": { "semver": "bin/semver.js" } @@ -10287,6 +10629,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -10440,6 +10783,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -10458,6 +10802,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -10474,6 +10819,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -10487,6 +10833,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -10521,6 +10868,16 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", @@ -10927,6 +11284,32 @@ "typescript": ">=4.2.0" } }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", @@ -10971,6 +11354,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -10996,6 +11380,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -11709,6 +12094,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -11724,6 +12110,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -14113,6 +14500,13 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "peer": true + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -14707,10 +15101,21 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "peer": true, + "requires": { + "dequal": "^2.0.3" + } + }, "array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, "requires": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -14726,6 +15131,7 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -14743,6 +15149,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -14754,6 +15161,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -14765,6 +15173,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -14773,6 +15182,13 @@ "get-intrinsic": "^1.1.3" } }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true, + "peer": true + }, "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -14807,7 +15223,15 @@ "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "dev": true, + "peer": true }, "axios": { "version": "1.3.5", @@ -14819,6 +15243,16 @@ "proxy-from-env": "^1.1.0" } }, + "axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "peer": true, + "requires": { + "dequal": "^2.0.3" + } + }, "babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -15034,6 +15468,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -15250,6 +15685,12 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, "connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", @@ -15636,6 +16077,13 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "peer": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -15753,6 +16201,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -15769,6 +16218,13 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "peer": true + }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -15903,6 +16359,13 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==" }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "peer": true + }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -15957,6 +16420,7 @@ "version": "1.21.2", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dev": true, "requires": { "array-buffer-byte-length": "^1.0.0", "available-typed-arrays": "^1.0.5", @@ -16003,6 +16467,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, "requires": { "get-intrinsic": "^1.1.3", "has": "^1.0.3", @@ -16013,6 +16478,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, "requires": { "has": "^1.0.3" } @@ -16021,6 +16487,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -16197,12 +16664,152 @@ } } }, + "eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + } + }, + "eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + } + }, "eslint-config-prettier": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "requires": {} }, + "eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dev": true, + "peer": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + } + }, "eslint-plugin-prettier": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", @@ -16213,9 +16820,10 @@ } }, "eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz", + "integrity": "sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==", + "dev": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -16230,7 +16838,7 @@ "object.values": "^1.1.6", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", + "semver": "^6.3.1", "string.prototype.matchall": "^4.0.8" }, "dependencies": { @@ -16238,6 +16846,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "requires": { "esutils": "^2.0.2" } @@ -16245,12 +16854,14 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true }, "resolve": { "version": "2.0.0-next.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -16259,6 +16870,14 @@ } } }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "peer": true, + "requires": {} + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -16605,6 +17224,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "requires": { "is-callable": "^1.1.3" } @@ -16676,6 +17296,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -16686,7 +17307,8 @@ "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true }, "gensync": { "version": "1.0.0-beta.2", @@ -16698,6 +17320,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -16719,6 +17342,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -16760,6 +17384,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, "requires": { "define-properties": "^1.1.3" } @@ -16781,6 +17406,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "requires": { "get-intrinsic": "^1.1.3" } @@ -16826,7 +17452,8 @@ "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true }, "has-flag": { "version": "3.0.0", @@ -16837,6 +17464,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, "requires": { "get-intrinsic": "^1.1.1" } @@ -16844,17 +17472,20 @@ "has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true }, "has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -17111,6 +17742,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, "requires": { "get-intrinsic": "^1.2.0", "has": "^1.0.3", @@ -17133,6 +17765,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -17148,6 +17781,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "requires": { "has-bigints": "^1.0.1" } @@ -17165,6 +17799,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -17173,7 +17808,8 @@ "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true }, "is-core-module": { "version": "2.12.0", @@ -17187,6 +17823,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -17233,7 +17870,8 @@ "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true }, "is-number": { "version": "7.0.0", @@ -17244,6 +17882,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -17278,6 +17917,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -17293,6 +17933,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -17306,6 +17947,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -17314,6 +17956,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "requires": { "has-symbols": "^1.0.2" } @@ -17322,6 +17965,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -17334,6 +17978,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "requires": { "call-bind": "^1.0.2" } @@ -17592,6 +18237,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "dev": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -17611,6 +18257,23 @@ "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "dev": true }, + "language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true, + "peer": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "peer": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, "launch-editor": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", @@ -17890,6 +18553,13 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "peer": true + }, "mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -18002,17 +18672,20 @@ "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18024,6 +18697,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18034,6 +18708,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18044,6 +18719,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, "requires": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4" @@ -18053,6 +18729,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18920,6 +19597,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -19126,6 +19804,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -19174,9 +19853,10 @@ } }, "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 }, "send": { "version": "0.18.0", @@ -19350,6 +20030,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -19479,6 +20160,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -19494,6 +20176,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -19504,6 +20187,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -19514,6 +20198,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -19539,6 +20224,13 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "peer": true + }, "strip-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", @@ -19800,6 +20492,31 @@ "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", "requires": {} }, + "tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "peer": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, "tslib": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", @@ -19832,6 +20549,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "requires": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -19847,6 +20565,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -20332,6 +21051,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -20344,6 +21064,7 @@ "version": "1.1.10", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", + "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", diff --git a/src/frontend/main/package.json b/src/frontend/main/package.json index 3b56f31bc5..24fd3f35b0 100755 --- a/src/frontend/main/package.json +++ b/src/frontend/main/package.json @@ -27,6 +27,8 @@ "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.3.0", "css-minimizer-webpack-plugin": "^4.2.2", + "eslint-config-airbnb": "^19.0.4", + "eslint-plugin-react": "^7.33.0", "html-webpack-plugin": "^5.3.2", "postcss": "^8.2.1", "postcss-loader": "^4.1.0", @@ -56,7 +58,6 @@ "eslint": "^8.44.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", - "eslint-plugin-react": "^7.32.2", "install": "^0.13.0", "mini-css-extract-plugin": "^2.7.5", "react": "^17.0.2", diff --git a/src/frontend/main/src/views/Login.tsx b/src/frontend/main/src/views/Login.tsx index a0af1277d5..42dd13cce3 100755 --- a/src/frontend/main/src/views/Login.tsx +++ b/src/frontend/main/src/views/Login.tsx @@ -1,99 +1,96 @@ -import React, {useEffect, useState } from "react"; -import '../styles/login.css' -import enviroment from "../environment"; -import CoreModules from "../shared/CoreModules"; -import {SignInService} from '../api/LoginService' -import { useCallback } from "react"; -import { SingUpModel } from "../models/login/loginModel"; +import { useEffect, useState } from 'react'; +import '../styles/login.css'; +import enviroment from '../environment'; +import CoreModules from '../shared/CoreModules'; +import { SignInService } from '../api/LoginService'; +import { useCallback } from 'react'; +import { SingUpModel } from '../models/login/loginModel'; - /* +/* Create a simple input element in React that calls a function when onFocusOut is triggered */ - - - const Login = () => { - const defaultTheme:any = CoreModules.useSelector(state => state.theme.hotTheme) - const navigate = CoreModules.useNavigate() - const dispatch = CoreModules.useDispatch() - //dispatch function to perform redux state mutation - const token:any = CoreModules.useSelector(state=>state.login.loginToken) - // console.log(location.pathname,'and :',token); - const initalUserForm = { - username:'', - password:'', - } - const [userForm,setUserForm] = useState(initalUserForm) - const btnStyles = { - padding: 8, - width: "100%", - borderRadius: 7, - fontFamily: defaultTheme.typography.subtitle2.fontFamily, - } - const handleOnChange = (e)=>{ - const value = e.target.value; - const name = e.target.name; - setUserForm(prev => { - const newValues = {...prev} - newValues[name] = value; - return newValues - }) - } + const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const navigate = CoreModules.useNavigate(); + const dispatch = CoreModules.useDispatch(); + //dispatch function to perform redux state mutation + const token: any = CoreModules.useSelector((state) => state.login.loginToken); + // console.log(location.pathname,'and :',token); + const initalUserForm = { + username: '', + password: '', + }; + const [userForm, setUserForm] = useState(initalUserForm); + const btnStyles = { + padding: 8, + width: '100%', + borderRadius: 7, + fontFamily: defaultTheme.typography.subtitle2.fontFamily, + }; + const handleOnChange = (e) => { + const value = e.target.value; + const name = e.target.name; + setUserForm((prev) => { + const newValues = { ...prev }; + newValues[name] = value; + return newValues; + }); + }; - useEffect(()=>{ - if (token != null) { - setTimeout(() => { - navigate('/') - }, 500); - } - },[token]) + useEffect(() => { + if (token != null) { + setTimeout(() => { + navigate('/'); + }, 500); + } + }, [token]); - const handleOnSubmit = useCallback(async()=>{ - const body:SingUpModel = {...userForm} - setUserForm(initalUserForm) - await dispatch(SignInService(`${enviroment.baseApiUrl}/users/`,body)) - - },[initalUserForm]) + const handleOnSubmit = useCallback(async () => { + const body: SingUpModel = { ...userForm }; + setUserForm(initalUserForm); + await dispatch(SignInService(`${enviroment.baseApiUrl}/users/`, body)); + }, [initalUserForm]); - return ( + return ( + + - - - - SIGN IN - - - - - sign in - - don't have an account ? Sign up - - + SIGN IN - ) -} + + + + sign in + + + don't have an account ?{' '} + + Sign up + + + + + ); +}; export default Login; - diff --git a/src/frontend/main/tsconfig.json b/src/frontend/main/tsconfig.json index fc60518219..5ba2ad6552 100644 --- a/src/frontend/main/tsconfig.json +++ b/src/frontend/main/tsconfig.json @@ -21,7 +21,7 @@ "noEmit": true, "jsx": "react-jsx", "baseUrl": "./src/", - "noImplicitAny": false, + "noImplicitAny": false, //FIXME: Change This "true" to "false" To Integrate Types Instead Of "Any" Types. "strictNullChecks": true, "strictFunctionTypes": true, "noImplicitThis": true, @@ -32,7 +32,8 @@ "noUnusedParameters": true, }, "include": [ - ".eslintrc.cjs", + // ".eslintrc.cjs", + // ".eslintrc.js", "src", "src/**/*.ts" ], From 27ae3473a5a99df07c1cf81e3c3de37c2173ba3f Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 24 Jul 2023 22:05:30 +0545 Subject: [PATCH 076/222] fix: task-features api with undefined issue --- .../src/components/ProjectInfo/ProjectInfomap.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index 5e681a9ad5..7621c185e8 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -139,7 +139,7 @@ const ProjectInfomap = () => { }, []); useEffect(() => { - if (!projectTaskBoundries) return + if (!projectTaskBoundries && projectTaskBoundries?.length>0) return const taskGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ From bee0a40560ec704975c729456822f2a5064ca0a8 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 26 Jul 2023 11:47:36 +0545 Subject: [PATCH 077/222] Feat: Test Configuration --- src/frontend/main/.eslintrc.cjs | 6 +- src/frontend/main/package-lock.json | 31071 ++++++++++------ src/frontend/main/package.json | 20 +- .../main/src/types/modulesDecleration.d.ts | 1 + .../main/src/utilfunctions/testUtils.ts | 34 + .../main/tests/CreateProject.test.tsx | 35 + src/frontend/main/tests/mocks/fileMock.ts | 1 + src/frontend/main/tsconfig.json | 13 +- src/frontend/main/webpack.config.js | 140 +- 9 files changed, 19076 insertions(+), 12245 deletions(-) create mode 100644 src/frontend/main/src/utilfunctions/testUtils.ts create mode 100644 src/frontend/main/tests/CreateProject.test.tsx create mode 100644 src/frontend/main/tests/mocks/fileMock.ts diff --git a/src/frontend/main/.eslintrc.cjs b/src/frontend/main/.eslintrc.cjs index d1da6984a1..1c29f9380a 100644 --- a/src/frontend/main/.eslintrc.cjs +++ b/src/frontend/main/.eslintrc.cjs @@ -2,10 +2,9 @@ module.exports = { parser: '@typescript-eslint/parser', // Specifies the ESLint parser extends: [ 'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin 'prettier', // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier - 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. 'plugin:react/jsx-runtime', + 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. ], parserOptions: { ecmaVersion: 'latest', @@ -14,6 +13,9 @@ module.exports = { rules: { //FIXME: Remove This Code To Integrate Types Instead Of "Any" Types. '@typescript-eslint/no-explicit-any': 0, + 'react/prop-types': 0, + 'react/jsx-uses-react': 'off', + 'react/react-in-jsx-scope': 'off', // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs // e.g. "@typescript-eslint/explicit-function-return-type": "off", }, diff --git a/src/frontend/main/package-lock.json b/src/frontend/main/package-lock.json index 112ba43dee..5a15f7109e 100644 --- a/src/frontend/main/package-lock.json +++ b/src/frontend/main/package-lock.json @@ -16,6 +16,9 @@ "@mui/material": "^5.11.1", "@reduxjs/toolkit": "^1.9.1", "@sentry/react": "^7.59.3", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^12.1.5", + "@types/jest": "^29.5.3", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "axios": "^1.2.2", @@ -24,6 +27,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "install": "^0.13.0", + "jest": "^29.6.1", "mini-css-extract-plugin": "^2.7.5", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -52,6 +56,7 @@ "eslint-config-airbnb": "^19.0.4", "eslint-plugin-react": "^7.33.0", "html-webpack-plugin": "^5.3.2", + "jest-environment-jsdom": "^29.6.1", "postcss": "^8.2.1", "postcss-loader": "^4.1.0", "prettier": "^3.0.0", @@ -74,11 +79,15 @@ "node": ">=0.10.0" } }, + "node_modules/@adobe/css-tools": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", + "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==" + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -102,7 +111,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -111,7 +119,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.21.4", @@ -141,7 +148,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", - "dev": true, "dependencies": { "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", @@ -181,7 +187,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.21.4", "@babel/helper-validator-option": "^7.21.0", @@ -255,7 +260,6 @@ "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==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -276,7 +280,6 @@ "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==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/types": "^7.21.0" @@ -289,7 +292,6 @@ "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==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -324,7 +326,6 @@ "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==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -355,7 +356,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -399,7 +399,6 @@ "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==", - "dev": true, "dependencies": { "@babel/types": "^7.20.2" }, @@ -423,7 +422,6 @@ "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==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -451,7 +449,6 @@ "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==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -475,7 +472,6 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, "dependencies": { "@babel/template": "^7.20.7", "@babel/traverse": "^7.21.0", @@ -502,7 +498,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -795,7 +790,17 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -807,7 +812,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -869,11 +873,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -885,7 +899,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -900,7 +913,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -912,7 +924,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -924,7 +935,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -936,7 +946,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -948,7 +957,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -960,7 +968,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -987,7 +994,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1002,7 +1008,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1788,7 +1793,6 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.20.7", @@ -1802,7 +1806,6 @@ "version": "7.21.4", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.21.4", "@babel/generator": "^7.21.4", @@ -1832,6 +1835,11 @@ "node": ">=6.9.0" } }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -2075,40 +2083,77 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dependencies": { - "@sinclair/typebox": "^0.25.16" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", - "dev": true, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz", + "integrity": "sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==", + "dependencies": { + "@jest/types": "^29.6.1", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "slash": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { + "node_modules/@jest/console/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" }, @@ -2119,11 +2164,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/types/node_modules/chalk": { + "node_modules/@jest/console/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" @@ -2135,11 +2179,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/types/node_modules/color-convert": { + "node_modules/@jest/console/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" }, @@ -2147,26 +2190,23 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/types/node_modules/color-name": { + "node_modules/@jest/console/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@jest/types/node_modules/has-flag": { + "node_modules/@jest/console/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/@jest/types/node_modules/supports-color": { + "node_modules/@jest/console/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" }, @@ -2174,3113 +2214,3153 @@ "node": ">=8" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@jest/core": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz", + "integrity": "sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jest/console": "^29.6.1", + "@jest/reporters": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.6.1", + "jest-haste-map": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-resolve-dependencies": "^29.6.1", + "jest-runner": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "jest-watcher": "^29.6.1", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "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==", + "node_modules/@jest/core/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": ">=6.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/@jest/core/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": ">=6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "node_modules/@jest/core/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": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "node_modules/@jest/core/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/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "node_modules/@jest/core/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/@jridgewell/trace-mapping/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/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@mui/base": { - "version": "5.0.0-alpha.126", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.126.tgz", - "integrity": "sha512-I5e52A0Muv9Gaoy2GcqbYrQ6dpRyC2UXeA00brT3HuW0nF0E4fiTOIqdNTN+N5gyaYK0z3O6jtLt/97CCrIxVA==", + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.0", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.12.0", - "@popperjs/core": "^2.11.7", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/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": { - "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" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/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" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@mui/core-downloads-tracker": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.12.1.tgz", - "integrity": "sha512-rNiQYHtkXljcvCEnhWrJzie1ifff5O98j3uW7ZlchFgD8HWxEcz/QoxZvo+sCKC9aayAgxi9RsVn2VjCyp5CrA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" + "node_modules/@jest/environment": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz", + "integrity": "sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==", + "dependencies": { + "@jest/fake-timers": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", + "node_modules/@jest/expect": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz", + "integrity": "sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==", "dependencies": { - "@babel/runtime": "^7.21.0" + "expect": "^29.6.1", + "jest-snapshot": "^29.6.1" }, "engines": { - "node": ">=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz", + "integrity": "sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==", + "dependencies": { + "jest-get-type": "^29.4.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@mui/material": "^5.0.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz", + "integrity": "sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==", + "dependencies": { + "@jest/types": "^29.6.1", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.1", + "jest-mock": "^29.6.1", + "jest-util": "^29.6.1" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@mui/lab": { - "version": "5.0.0-alpha.134", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.134.tgz", - "integrity": "sha512-GhvuM2dNOi6hzjbeGEocWVozgyyeUn7RBmZhLFtniROauxmPCZMcTsEU+GAxmpyYppqHuI8flP6tGKgMuEAK/g==", + "node_modules/@jest/globals": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz", + "integrity": "sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==", "dependencies": { - "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-beta.4", - "@mui/system": "^5.13.5", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "@jest/environment": "^29.6.1", + "@jest/expect": "^29.6.1", + "@jest/types": "^29.6.1", + "jest-mock": "^29.6.1" }, "engines": { - "node": ">=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz", + "integrity": "sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "jest-worker": "^29.6.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@mui/material": "^5.0.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { + "node-notifier": { "optional": true } } }, - "node_modules/@mui/lab/node_modules/@mui/base": { - "version": "5.0.0-beta.4", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", - "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", + "node_modules/@jest/reporters/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": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "@popperjs/core": "^2.11.8", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" }, "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 - } + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@mui/material": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.12.1.tgz", - "integrity": "sha512-m+G9J6+FzIMhRqKV2y30yONH97wX107z9EWgiNCeS1/+y1CnytFZNG1ENdOuaJo1NimCRnmB/iXPvoOaSo6dOg==", + "node_modules/@jest/reporters/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": { - "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-alpha.126", - "@mui/core-downloads-tracker": "^5.12.1", - "@mui/system": "^5.12.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.12.0", - "@types/react-transition-group": "^4.4.5", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "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" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/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" }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", + "node_modules/@jest/reporters/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/reporters/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/reporters/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": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", - "prop-types": "^15.8.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "dependencies": { + "@sinclair/typebox": "^0.27.8" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", + "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz", + "integrity": "sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==", + "dependencies": { + "@jest/console": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@mui/styled-engine": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", - "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", + "node_modules/@jest/test-sequencer": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz", + "integrity": "sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==", "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" + "@jest/test-result": "^29.6.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz", + "integrity": "sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/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" }, - "peerDependencies": { - "@emotion/react": "^11.4.1", - "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@mui/system": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", - "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", + "node_modules/@jest/transform/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": { - "@babel/runtime": "^7.22.5", - "@mui/private-theming": "^5.13.1", - "@mui/styled-engine": "^5.13.2", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "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" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/@mui/types": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", - "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", - "peerDependencies": { - "@types/react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@mui/utils": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", - "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", + "node_modules/@jest/transform/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": { - "@babel/runtime": "^7.22.5", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0" + "node": ">=7.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, + "node_modules/@jest/transform/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/transform/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==" + }, + "node_modules/@jest/transform/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": ">=8" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@jest/transform/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": ">=8" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@jest/types": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", + "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@jest/schemas": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "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==", "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "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": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@pkgr/utils/node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "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==", "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "dev": true + "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/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" + "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/@reduxjs/toolkit": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", - "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", + "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": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/@remix-run/router": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", - "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==", "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } + "node": ">=6.0.0" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.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": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "node": ">=6.0.0" } }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, + "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/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "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==", - "dev": true, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/@rollup/pluginutils/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==", + "node_modules/@jridgewell/trace-mapping/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/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, - "node_modules/@sentry-internal/tracing": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.3.tgz", - "integrity": "sha512-/RkBj/0zQKGsW/UYg6hufrLHHguncLfu4610FCPWpVp0K5Yu5ou8/Aw8D76G3ZxD2TiuSNGwX0o7TYN371ZqTQ==", + "node_modules/@mui/base": { + "version": "5.0.0-alpha.126", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.126.tgz", + "integrity": "sha512-I5e52A0Muv9Gaoy2GcqbYrQ6dpRyC2UXeA00brT3HuW0nF0E4fiTOIqdNTN+N5gyaYK0z3O6jtLt/97CCrIxVA==", "dependencies": { - "@sentry/core": "7.59.3", - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3", - "tslib": "^2.4.1 || ^1.9.3" + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.12.0", + "@popperjs/core": "^2.11.7", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" }, "engines": { - "node": ">=8" + "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/@sentry/browser": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.59.3.tgz", - "integrity": "sha512-rTsePz1zEhiouX24TqjzYdY8PsBNU2EGUSHK9jCKml5i/eKTqQabnwdxHgIC4/wcs1nGOabRg/Iel6l4y4mCjA==", - "dependencies": { - "@sentry-internal/tracing": "7.59.3", - "@sentry/core": "7.59.3", - "@sentry/replay": "7.59.3", - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" + "node_modules/@mui/core-downloads-tracker": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.12.1.tgz", + "integrity": "sha512-rNiQYHtkXljcvCEnhWrJzie1ifff5O98j3uW7ZlchFgD8HWxEcz/QoxZvo+sCKC9aayAgxi9RsVn2VjCyp5CrA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" } }, - "node_modules/@sentry/core": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.59.3.tgz", - "integrity": "sha512-cGBOwT9gziIn50fnlBH1WGQlGcHi7wrbvOCyrex4MxKnn1LSBYWBhwU0ymj8DI/9MyPrGDNGkrgpV0WJWBSClg==", + "node_modules/@mui/icons-material": { + "version": "5.11.16", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", + "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", "dependencies": { - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3", - "tslib": "^2.4.1 || ^1.9.3" + "@babel/runtime": "^7.21.0" }, "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@sentry/react": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.59.3.tgz", - "integrity": "sha512-2TmJ/su8NBQad4PpyJoJ8Er6bzc1jgzgwKSYpI5xHNT6FOFxI4cGIbfrYNqXBjPTvFHwC8WFyN+XZ0K42GFgqQ==", + "node_modules/@mui/lab": { + "version": "5.0.0-alpha.134", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.134.tgz", + "integrity": "sha512-GhvuM2dNOi6hzjbeGEocWVozgyyeUn7RBmZhLFtniROauxmPCZMcTsEU+GAxmpyYppqHuI8flP6tGKgMuEAK/g==", "dependencies": { - "@sentry/browser": "7.59.3", - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3", - "hoist-non-react-statics": "^3.3.2", - "tslib": "^2.4.1 || ^1.9.3" + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-beta.4", + "@mui/system": "^5.13.5", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" }, "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" }, "peerDependencies": { - "react": "15.x || 16.x || 17.x || 18.x" + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } } }, - "node_modules/@sentry/replay": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.59.3.tgz", - "integrity": "sha512-o0Z9XD46ua4kex8P2zcahNLARm+joLU6e8bTwjdmfsLS/A2yH1RhJ/VlcAEpPR2IzSYLXz3ApJ/XiqLPTNSu1w==", + "node_modules/@mui/lab/node_modules/@mui/base": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", + "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", "dependencies": { - "@sentry/core": "7.59.3", - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3" + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "@popperjs/core": "^2.11.8", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@sentry/types": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.59.3.tgz", - "integrity": "sha512-HQ/Pd3YHyIa4HM0bGfOsfI4ZF+sLVs6II9VtlS4hsVporm4ETl3Obld5HywO3aVYvWOk5j/bpAW9JYsxXjRG5A==", - "engines": { - "node": ">=8" + "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/@sentry/utils": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.59.3.tgz", - "integrity": "sha512-Q57xauMKuzd6S+POA1fmulfjzTsb/z118TNAfZZNkHqVB48hHBqgzdhbEBmN4jPCSKV2Cx7VJUoDZxJfzQyLUQ==", + "node_modules/@mui/material": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.12.1.tgz", + "integrity": "sha512-m+G9J6+FzIMhRqKV2y30yONH97wX107z9EWgiNCeS1/+y1CnytFZNG1ENdOuaJo1NimCRnmB/iXPvoOaSo6dOg==", "dependencies": { - "@sentry/types": "7.59.3", - "tslib": "^2.4.1 || ^1.9.3" + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-alpha.126", + "@mui/core-downloads-tracker": "^5.12.1", + "@mui/system": "^5.12.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.12.0", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", - "dev": true + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "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" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dev": true, + "node_modules/@mui/private-theming": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", + "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.13.1", + "prop-types": "^15.8.1" + }, + "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" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, + "node_modules/@mui/styled-engine": { + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", + "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, "engines": { - "node": ">=10.13.0" + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, + "node_modules/@mui/system": { + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", + "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@babel/runtime": "^7.22.5", + "@mui/private-theming": "^5.13.1", + "@mui/styled-engine": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "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" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } } }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" + "node_modules/@mui/types": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "peerDependencies": { + "@types/react": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, + "node_modules/@mui/utils": { + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", + "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", "dependencies": { - "@types/node": "*" + "@babel/runtime": "^7.22.5", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^18.2.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" } }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" + "node_modules/@pkgr/utils/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "node_modules/@pkgr/utils/node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", "dev": true }, - "node_modules/@types/http-proxy": { - "version": "1.17.10", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz", - "integrity": "sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==", - "dev": true, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@reduxjs/toolkit": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", + "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", "dependencies": { - "@types/node": "*" + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } } }, - "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==", - "dev": true + "node_modules/@remix-run/router": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", + "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==", + "engines": { + "node": ">=14" + } }, - "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/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } } }, - "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/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, - "peer": true - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" - }, - "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/@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==" + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": 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==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "node_modules/@rollup/pluginutils/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/react": { - "version": "17.0.58", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", - "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", + "node_modules/@sentry-internal/tracing": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.3.tgz", + "integrity": "sha512-/RkBj/0zQKGsW/UYg6hufrLHHguncLfu4610FCPWpVp0K5Yu5ou8/Aw8D76G3ZxD2TiuSNGwX0o7TYN371ZqTQ==", "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "@sentry/core": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", - "devOptional": true, + "node_modules/@sentry/browser": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.59.3.tgz", + "integrity": "sha512-rTsePz1zEhiouX24TqjzYdY8PsBNU2EGUSHK9jCKml5i/eKTqQabnwdxHgIC4/wcs1nGOabRg/Iel6l4y4mCjA==", "dependencies": { - "@types/react": "^17" + "@sentry-internal/tracing": "7.59.3", + "@sentry/core": "7.59.3", + "@sentry/replay": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/react-is": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", - "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", + "node_modules/@sentry/core": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.59.3.tgz", + "integrity": "sha512-cGBOwT9gziIn50fnlBH1WGQlGcHi7wrbvOCyrex4MxKnn1LSBYWBhwU0ymj8DI/9MyPrGDNGkrgpV0WJWBSClg==", "dependencies": { - "@types/react": "*" + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" } }, - "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/@sentry/react": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.59.3.tgz", + "integrity": "sha512-2TmJ/su8NBQad4PpyJoJ8Er6bzc1jgzgwKSYpI5xHNT6FOFxI4cGIbfrYNqXBjPTvFHwC8WFyN+XZ0K42GFgqQ==", "dependencies": { - "@types/react": "*" + "@sentry/browser": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "hoist-non-react-statics": "^3.3.2", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": "15.x || 16.x || 17.x || 18.x" } }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, + "node_modules/@sentry/replay": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.59.3.tgz", + "integrity": "sha512-o0Z9XD46ua4kex8P2zcahNLARm+joLU6e8bTwjdmfsLS/A2yH1RhJ/VlcAEpPR2IzSYLXz3ApJ/XiqLPTNSu1w==", "dependencies": { - "@types/node": "*" + "@sentry/core": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==" + "node_modules/@sentry/types": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.59.3.tgz", + "integrity": "sha512-HQ/Pd3YHyIa4HM0bGfOsfI4ZF+sLVs6II9VtlS4hsVporm4ETl3Obld5HywO3aVYvWOk5j/bpAW9JYsxXjRG5A==", + "engines": { + "node": ">=8" + } }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, + "node_modules/@sentry/utils": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.59.3.tgz", + "integrity": "sha512-Q57xauMKuzd6S+POA1fmulfjzTsb/z118TNAfZZNkHqVB48hHBqgzdhbEBmN4jPCSKV2Cx7VJUoDZxJfzQyLUQ==", "dependencies": { - "@types/express": "*" + "@sentry/types": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", - "dev": true, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", "dependencies": { - "@types/mime": "*", - "@types/node": "*" + "type-detect": "4.0.8" } }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dependencies": { - "@types/node": "*" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", - "dev": true - }, - "node_modules/@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" - }, - "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", "dev": true, "dependencies": { - "@types/node": "*" + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" } }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, + "node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", "dependencies": { - "@types/yargs-parser": "*" + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" } }, - "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==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.0.0.tgz", - "integrity": "sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==", + "node_modules/@testing-library/dom/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": { - "@eslint-community/regexpp": "^4.5.0", - "@typescript-eslint/scope-manager": "6.0.0", - "@typescript-eslint/type-utils": "6.0.0", - "@typescript-eslint/utils": "6.0.0", - "@typescript-eslint/visitor-keys": "6.0.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.5.0", - "ts-api-utils": "^1.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@typescript-eslint/eslint-plugin/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==", + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dependencies": { - "yallist": "^4.0.0" + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/dom/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/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@testing-library/dom/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": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "node_modules/@testing-library/dom/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/@testing-library/dom/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.0.0.tgz", - "integrity": "sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==", + "node_modules/@testing-library/dom/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": { - "@typescript-eslint/scope-manager": "6.0.0", - "@typescript-eslint/types": "6.0.0", - "@typescript-eslint/typescript-estree": "6.0.0", - "@typescript-eslint/visitor-keys": "6.0.0", - "debug": "^4.3.4" + "has-flag": "^4.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.0.0.tgz", - "integrity": "sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==", + "node_modules/@testing-library/jest-dom/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": { - "@typescript-eslint/types": "6.0.0", - "@typescript-eslint/visitor-keys": "6.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.0.0.tgz", - "integrity": "sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==", + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dependencies": { - "@typescript-eslint/typescript-estree": "6.0.0", - "@typescript-eslint/utils": "6.0.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.0.0.tgz", - "integrity": "sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==", "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.0.0.tgz", - "integrity": "sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==", + "node_modules/@testing-library/jest-dom/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": { - "@typescript-eslint/types": "6.0.0", - "@typescript-eslint/visitor-keys": "6.0.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.0", - "ts-api-utils": "^1.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=7.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/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==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/@testing-library/jest-dom/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/@testing-library/jest-dom/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": ">=10" + "node": ">=8" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@testing-library/jest-dom/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": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/utils": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.0.0.tgz", - "integrity": "sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==", + "node_modules/@testing-library/react": { + "version": "12.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", + "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", "dependencies": { - "@eslint-community/eslint-utils": "^4.3.0", - "@types/json-schema": "^7.0.11", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "6.0.0", - "@typescript-eslint/types": "6.0.0", - "@typescript-eslint/typescript-estree": "6.0.0", - "eslint-scope": "^5.1.1", - "semver": "^7.5.0" + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0", + "@types/react-dom": "<18.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=12" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "react": "<18.0.0", + "react-dom": "<18.0.0" } }, - "node_modules/@typescript-eslint/utils/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==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=10.13.0" } }, - "node_modules/@typescript-eslint/utils/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/@types/aria-query": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", + "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==" }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.0.0.tgz", - "integrity": "sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==", + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", "dependencies": { - "@typescript-eslint/types": "6.0.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@babel/types": "^7.0.0" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dependencies": { + "@babel/types": "^7.20.7" + } }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" + "@types/node": "*" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "node_modules/@types/eslint": { + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", + "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dependencies": { - "@xtuc/long": "4.2.2" + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "node_modules/@types/express-serve-static-core": { + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@types/node": "*" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" } }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "node_modules/@types/http-proxy": { + "version": "1.17.10", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz", + "integrity": "sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==", "dev": true, "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } + "@types/node": "*" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "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/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, + "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==", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peerDependencies": { - "acorn": "^8" + "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==", + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/@types/jest": { + "version": "29.5.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", + "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, + "node_modules/@types/jest/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": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "ajv": "^8.0.0" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } + "peer": true }, - "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/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true }, - "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/@types/node": { + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" + }, + "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/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + }, + "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/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/react": { + "version": "17.0.58", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", + "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, + "node_modules/@types/react-dom": { + "version": "17.0.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", + "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "@types/react": "^17" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "node_modules/@types/react-is": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", + "dependencies": { + "@types/react": "*" + } }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dev": true, - "peer": true, + "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==", "dependencies": { - "dequal": "^2.0.3" + "@types/react": "*" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/node": "*" } }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" + "@types/express": "*" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/mime": "*", + "@types/node": "*" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/node": "*" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "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/testing-library__jest-dom": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.8.tgz", + "integrity": "sha512-NRfJE9Cgpmu4fx716q9SYmU4jxxhYRU1BQo239Txt/9N3EC745XZX1Yl7h/SBIDlo1ANVOCRB4YDXjaQdoKCHQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "@types/jest": "*" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true, - "peer": true + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "node_modules/@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", "dev": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, - "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==", + "node_modules/@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", "dev": true, - "engines": { - "node": ">= 4.0.0" + "dependencies": { + "@types/node": "*" } }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "@types/yargs-parser": "*" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, + "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/@typescript-eslint/eslint-plugin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.0.0.tgz", + "integrity": "sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==", + "dependencies": { + "@eslint-community/regexpp": "^4.5.0", + "@typescript-eslint/scope-manager": "6.0.0", + "@typescript-eslint/type-utils": "6.0.0", + "@typescript-eslint/utils": "6.0.0", + "@typescript-eslint/visitor-keys": "6.0.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.5.0", + "ts-api-utils": "^1.0.1" + }, "engines": { - "node": ">= 0.4" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", - "dev": true, - "peer": true, + "node_modules/@typescript-eslint/eslint-plugin/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==", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/axios": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", - "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "peer": true, - "dependencies": { - "dequal": "^2.0.3" - } + "node_modules/@typescript-eslint/eslint-plugin/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/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, + "node_modules/@typescript-eslint/parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.0.0.tgz", + "integrity": "sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==", "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "@typescript-eslint/scope-manager": "6.0.0", + "@typescript-eslint/types": "6.0.0", + "@typescript-eslint/typescript-estree": "6.0.0", + "@typescript-eslint/visitor-keys": "6.0.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 8.9" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/babel-plugin-import": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.13.6.tgz", - "integrity": "sha512-N7FYnGh0DFsvDRkAPsvFq/metVfVD7P2h1rokOPpEH4cZbdRHCW+2jbXt0nnuqowkm/xhh2ww1anIdEpfYa7ZA==", - "dev": true, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.0.0.tgz", + "integrity": "sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==", "dependencies": { - "@babel/helper-module-imports": "^7.0.0" + "@typescript-eslint/types": "6.0.0", + "@typescript-eslint/visitor-keys": "6.0.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "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/@typescript-eslint/type-utils": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.0.0.tgz", + "integrity": "sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==", "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "@typescript-eslint/typescript-estree": "6.0.0", + "@typescript-eslint/utils": "6.0.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=10", - "npm": ">=6" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "node_modules/@typescript-eslint/types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.0.0.tgz", + "integrity": "sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==", + "engines": { + "node": "^16.0.0 || >=18.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dev": true, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.0.0.tgz", + "integrity": "sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "@typescript-eslint/types": "6.0.0", + "@typescript-eslint/visitor-keys": "6.0.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.0", + "ts-api-utils": "^1.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, + "node_modules/@typescript-eslint/typescript-estree/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==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "yallist": "^4.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10" } }, - "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==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=0.6" + "node": ">=10" } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, + "node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/utils": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.0.0.tgz", + "integrity": "sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.3.0", + "@types/json-schema": "^7.0.11", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "6.0.0", + "@typescript-eslint/types": "6.0.0", + "@typescript-eslint/typescript-estree": "6.0.0", + "eslint-scope": "^5.1.1", + "semver": "^7.5.0" + }, "engines": { - "node": "*" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "node_modules/@typescript-eslint/utils/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==", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=10" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, + "node_modules/@typescript-eslint/utils/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/@typescript-eslint/visitor-keys": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.0.0.tgz", + "integrity": "sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==", + "dependencies": { + "@typescript-eslint/types": "6.0.0", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">= 0.8" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dependencies": { - "ms": "2.0.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "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==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, - "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/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" + "@xtuc/ieee754": "^1.2.0" } }, - "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/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "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" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "@xtuc/long": "4.2.2" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, - "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/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001480", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", - "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==", - "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" + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true } - ] + } }, - "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/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "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==", + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=0.8.0" + "node": ">=0.4.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "debug": "4" }, "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 6.0.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "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/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "color-name": "1.1.3" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "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/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } }, - "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==", + "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==", "dependencies": { - "delayed-stream": "~1.0.0" + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "node_modules/ansi-escapes/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==", "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, - "engines": { - "node": ">=4.0.0" + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "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/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, + "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==", "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 8" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dependencies": { - "ms": "2.0.0" + "dequal": "^2.0.3" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/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==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { - "safe-buffer": "5.2.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==" - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" } }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true, + "peer": true + }, + "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/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "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, - "dependencies": { - "is-glob": "^4.0.3" - }, "engines": { - "node": ">=10.13.0" + "node": ">= 4.0.0" } }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "node_modules/axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/axios": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", + "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, + "peer": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "dequal": "^2.0.3" + } + }, + "node_modules/babel-jest": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz", + "integrity": "sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==", + "dependencies": { + "@jest/transform": "^29.6.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, + "node_modules/babel-jest/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": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/core-js-compat": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", - "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", - "dev": true, + "node_modules/babel-jest/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": { - "browserslist": "^4.21.5" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/babel-jest/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": { - "@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" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "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==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "node_modules/babel-jest/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/babel-jest/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": ">=8" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, + "node_modules/babel-jest/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/css-declaration-sorter": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">= 8.9" }, "peerDependencies": { - "postcss": "^8.0.9" + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "node_modules/css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "node_modules/babel-plugin-import": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.13.6.tgz", + "integrity": "sha512-N7FYnGh0DFsvDRkAPsvFq/metVfVD7P2h1rokOPpEH4cZbdRHCW+2jbXt0nnuqowkm/xhh2ww1anIdEpfYa7ZA==", "dev": true, "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "@babel/helper-module-imports": "^7.0.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": ">=8" } }, - "node_modules/css-loader/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==", - "dev": true, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "dependencies": { - "yallist": "^4.0.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "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==", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" }, "engines": { - "node": ">=10" + "node": ">=10", + "npm": ">=6" } }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dev": true, "dependencies": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" }, "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "@babel/helper-define-polyfill-provider": "^0.3.3" }, "peerDependencies": { - "ajv": "^8.8.2" + "@babel/core": "^7.0.0-0" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", - "dev": true, + "node_modules/babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "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==" }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "engines": { - "node": ">=8.0.0" + "node": ">=0.6" } }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">=8" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8" } }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "ms": "2.0.0" } }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", "dev": true, "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "peer": true + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "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==", + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "dependencies": { - "ms": "2.1.2" + "big-integer": "^1.6.44" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 5.10.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "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" + } + ], "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + "bin": { + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-browser/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "engines": { - "node": ">=14.18.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/default-browser/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" } }, - "node_modules/default-browser/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-browser/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" + "run-applescript": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "engines": { "node": ">=12" }, @@ -5288,1747 +5368,1683 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-browser/node_modules/strip-final-newline": { + "node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "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": ">=0.4.0" + "node": ">=6" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, - "engines": { - "node": ">= 0.8" + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "peer": true, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "node_modules/caniuse-lite": { + "version": "1.0.30001480", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", + "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==", + "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" + } + ] }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "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==", "dependencies": { - "path-type": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true + "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/dns-packet": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz", - "integrity": "sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "esutils": "^2.0.2" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "dependencies": { - "utila": "~0.4" + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" } }, - "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==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "source-map": "~0.6.0" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">= 10.0" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, + "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==", "dependencies": { - "domelementtype": "^2.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=12" } }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": ">=6" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, + "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/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "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==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "color-name": "1.1.3" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "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/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dev": true, + "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==", "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.367", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", - "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "peer": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "engines": { - "node": ">= 4" + "node": ">= 6" } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "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==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=4.0.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.6" } }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/env-cmd": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", - "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "commander": "^4.0.0", - "cross-spawn": "^7.0.0" - }, - "bin": { - "env-cmd": "bin/env-cmd.js" - }, + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/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==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=0.8" } }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "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==", - "dependencies": { - "is-arrayish": "^0.2.1" + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" } }, - "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "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==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/es-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "has": "^1.0.3" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 12.13.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, - "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" - }, "engines": { - "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "node_modules/core-js-compat": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", + "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", "dev": true, "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" + "browserslist": "^4.21.5" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "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" }, - "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" + "engines": { + "node": ">=10" } }, - "node_modules/eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "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==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">= 8" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/css-declaration-sorter": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", + "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "node_modules/css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", "dev": true, - "peer": true, "dependencies": { - "debug": "^3.2.7" + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" }, "engines": { - "node": ">=4" + "node": ">= 12.13.0" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/css-loader/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==", "dev": true, - "peer": true, "dependencies": { - "ms": "^2.1.1" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "node_modules/css-loader/node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, - "peer": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "engines": { + "node": ">=10" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "node_modules/css-minimizer-webpack-plugin": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", "dev": true, - "peer": true, - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", - "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 14.15.0" }, "funding": { - "url": "https://opencollective.com/prettier" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "prettier": ">=3.0.0" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "@types/eslint": { + "@parcel/css": { "optional": true }, - "eslint-config-prettier": { + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { "optional": true } } }, - "node_modules/eslint-plugin-react": { - "version": "7.33.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz", - "integrity": "sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "peer": true, - "engines": { - "node": ">=10" + "dependencies": { + "fast-deep-equal": "^3.1.3" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "ajv": "^8.8.2" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/eslint-plugin-react/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.10.0" } }, - "node_modules/eslint/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" - }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, "engines": { - "node": ">=8" + "node": ">= 6" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint/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/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" }, - "node_modules/eslint/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" + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/eslint/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/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^10 || ^12 || >=14.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, "engines": { - "node": ">=4.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "css-tree": "^1.1.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "cssom": "~0.3.6" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "peer": true + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/data-urls/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "punycode": "^2.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/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==", + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "ms": "2.1.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", "dependencies": { - "estraverse": "^5.1.0" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" }, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { - "node": ">=4.0" + "node": ">=0.10.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/default-browser/node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, + "node_modules/default-browser/node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "engines": { - "node": ">= 0.6" + "node": ">=14.18.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/default-browser/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "engines": { - "node": ">=0.8.x" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, + "node_modules/default-browser/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node_modules/default-browser/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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==" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + "node_modules/default-browser/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "execa": "^5.0.0" }, "engines": { - "node": ">=8.6.0" + "node": ">= 10" } }, - "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/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" + "node": ">=8" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { - "websocket-driver": ">=0.5.1" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=0.4.0" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "dependencies": { - "minimatch": "^5.0.1" + "engines": { + "node": ">= 0.8" } }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, "engines": { - "node": ">=10" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "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" - }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "engines": { "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { - "ms": "2.0.0" + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/dns-packet": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz", + "integrity": "sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==", "dev": true, "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "engines": { + "node": ">=6.0.0" } }, - "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/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "utila": "~0.4" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "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==", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, "funding": [ { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "type": "github", + "url": "https://github.com/sponsors/fb55" } - ], - "engines": { - "node": ">=4.0" + ] + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "engines": { + "node": ">=12" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "dependencies": { - "is-callable": "^1.1.3" + "engines": { + "node": ">=12" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" + "node": ">= 4" }, "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "engines": { - "node": ">= 0.6" + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "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==", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "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==" + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "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==", + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.10.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/electron-to-chromium": { + "version": "1.4.367", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", + "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==" }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "peer": true }, - "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==", + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">= 4" } }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "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": ">= 0.8" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.13.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "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" - }, - "engines": { - "node": "*" - }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/env-cmd": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", + "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", "dependencies": { - "is-glob": "^4.0.1" + "commander": "^4.0.0", + "cross-spawn": "^7.0.0" + }, + "bin": { + "env-cmd": "bin/env-cmd.js" }, "engines": { - "node": ">= 6" + "node": ">=8.0.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "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==", + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, "engines": { "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, + "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==", "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "is-arrayish": "^0.2.1" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dependencies": { - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "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==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" }, - "node_modules/handle-thing": { + "node_modules/es-set-tostringtag": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/has-property-descriptors": { + "node_modules/es-shim-unscopables": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "has": "^1.0.3" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -7036,1790 +7052,1763 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "bin": { - "he": "bin/he" - } - }, - "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==", - "dependencies": { - "react-is": "^16.7.0" + "engines": { + "node": ">=4.0" } }, - "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/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "optional": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/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==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, + "node_modules/eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" }, "bin": { - "html-minifier-terser": "cli.js" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", "dev": true, + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, "engines": { - "node": ">= 12" + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" } }, - "node_modules/html-webpack-plugin": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz", - "integrity": "sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==", + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" + "node": "^10.12.0 || >=12.0.0" }, "peerDependencies": { - "webpack": "^5.20.0" + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" } }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, + "peer": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" + "ms": "^2.1.1" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, + "peer": true, "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" + "debug": "^3.2.7" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" + "node": ">=4" }, "peerDependenciesMeta": { - "@types/express": { + "eslint": { "optional": true } } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "ms": "^2.1.1" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, + "peer": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=4" }, "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" } }, - "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==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, + "peer": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" }, "engines": { - "node": ">=8" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, "engines": { - "node": ">=0.8.19" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "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==", + "node_modules/eslint-plugin-react": { + "version": "7.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz", + "integrity": "sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==", + "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==" - }, - "node_modules/install": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", - "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, "engines": { - "node": ">= 0.10" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=4.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "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-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dependencies": { - "has-bigints": "^1.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, + "node_modules/eslint/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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, + "node_modules/eslint/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": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "node_modules/eslint/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": { - "has": "^1.0.3" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, + "node_modules/eslint/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/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dependencies": { - "has-tostringtag": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dependencies": { - "is-extglob": "^2.1.1" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/eslint/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/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "bin": { - "is-docker": "cli.js" + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "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==", + "node_modules/eslint/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": ">=0.12.0" + "node": ">=8" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, + "node_modules/espree": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", "dependencies": { - "has-tostringtag": "^1.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "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==", - "engines": { - "node": ">=8" - } + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { - "isobject": "^3.0.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" } }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "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/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.6" } }, - "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==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.x" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { - "has-tostringtag": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz", + "integrity": "sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==", "dependencies": { - "has-symbols": "^1.0.2" + "@jest/expect-utils": "^29.6.1", + "@types/node": "*", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "2.0.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + }, + "node_modules/fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", "dependencies": { - "is-docker": "^2.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "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/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4.9.1" } }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dev": true, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" + "reusify": "^1.0.4" } }, - "node_modules/jake/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/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.8.0" } }, - "node_modules/jake/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, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "bser": "2.1.1" } }, - "node_modules/jake/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/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dependencies": { - "color-name": "~1.1.4" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=7.0.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/jake/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/jake/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/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "minimatch": "^5.0.1" } }, - "node_modules/jake/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==", + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0" } }, - "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "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==", - "dev": true, + "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": { - "color-convert": "^2.0.1" + "to-regex-range": "^5.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==", + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.8" } }, - "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==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "ms": "2.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/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, + "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/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "@types/node": "*", - "jest-util": "^29.5.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/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/jest-worker/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==", - "dev": true, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dependencies": { - "has-flag": "^4.0.0" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^10.12.0 || >=12.0.0" } }, - "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/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "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 - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, - "bin": { - "json5": "lib/cli.js" - }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "engines": { + "node": "*" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" } }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "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, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=10" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, + "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==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true, - "peer": true + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, - "peer": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", - "dev": true, - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, + "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==", "engines": { - "node": ">=6" + "node": ">=6.9.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, + "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==", "engines": { - "node": ">= 0.8.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "engines": { - "node": ">=6.11.5" + "node": ">=8.0.0" } }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, + "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": ">=8.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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.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.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "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/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "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" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { - "tslib": "^2.0.3" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "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==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "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/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.8" + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "semver": "^6.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/memfs": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.0.tgz", - "integrity": "sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==", + "node_modules/graceful-fs": { + "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==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, "dependencies": { - "fs-monkey": "^1.0.3" + "duplexer": "^0.1.2" }, "engines": { - "node": ">= 4.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "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==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, "engines": { - "node": ">= 8" + "node": ">= 0.4.0" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, + "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_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "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==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dependencies": { - "mime-db": "1.52.0" + "get-intrinsic": "^1.1.1" }, - "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==", - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz", - "integrity": "sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==", - "dependencies": { - "schema-utils": "^4.0.0" - }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "engines": { - "node": ">= 12.13.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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==", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "react-is": "^16.7.0" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "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/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "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==" + "node_modules/hpack.js/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==", + "dev": true }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" + "safe-buffer": "~5.1.0" } }, - "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==", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=12" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "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/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/html-webpack-plugin": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz", + "integrity": "sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==", "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dependencies": { - "path-key": "^3.0.0" + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "webpack": "^5.20.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "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" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.0.0" } }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">= 0.4" + "node": ">= 6" } }, - "node_modules/object.fromentries": { + "node_modules/http-proxy-middleware": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "agent-base": "6", + "debug": "4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 6" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "engines": { - "node": ">= 0.8" + "node": ">= 4" } }, - "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==", - "dependencies": { - "wrappy": "1" + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "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==", "dependencies": { - "mimic-fn": "^2.1.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" @@ -8828,3088 +8817,3032 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.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==", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, + "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==", "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/install": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", + "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==", "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/p-try": { + "node_modules/interpret": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "engines": { + "node": ">= 10" } }, - "node_modules/parent-module": { - "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==", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dependencies": { - "callsites": "^3.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } + "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/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { "node": ">=8" } }, - "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==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "node_modules/is-core-module": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "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==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, "engines": { - "node": ">=8.6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "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/postcss": { - "version": "8.4.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.22.tgz", - "integrity": "sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=6" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" + "is-extglob": "^2.1.1" }, - "peerDependencies": { - "postcss": "^8.2.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dev": true, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=14.16" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, + "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": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.12.0" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", - "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^4.0.0 || ^5.0.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-loader/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.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==", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, "engines": { - "node": ">= 10.13.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "isobject": "^3.0.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/postcss-loader/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/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.2" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" + "call-bind": "^1.0.2" }, - "engines": { - "node": "^10 || ^12 || >= 14" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "is-docker": "^2.0.0" }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=8" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "node_modules/istanbul-lib-report/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": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, + "node_modules/istanbul-lib-report/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": { - "postcss-value-parser": "^4.2.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dependencies": { - "postcss-value-parser": "^4.2.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=10" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "bin": { + "jake": "bin/cli.js" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": ">=10" } }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "node_modules/jake/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": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "node_modules/jake/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": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/jake/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": { - "postcss-value-parser": "^4.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=7.0.0" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "node_modules/jake/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/jake/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, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "node_modules/jake/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": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, + "node_modules/jest": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz", + "integrity": "sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "@jest/core": "^29.6.1", + "@jest/types": "^29.6.1", + "import-local": "^3.0.2", + "jest-cli": "^29.6.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", - "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", - "bin": { - "prettier": "bin/prettier.cjs" + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "node_modules/jest-circus": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz", + "integrity": "sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==", "dependencies": { - "fast-diff": "^1.1.2" + "@jest/environment": "^29.6.1", + "@jest/expect": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.1", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.1", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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, + "node_modules/jest-circus/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": ">=6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, + "node_modules/jest-circus/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": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/process-nextick-args": { + "node_modules/jest-circus/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "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==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" + "node": ">=7.0.0" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "node_modules/jest-circus/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/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "node_modules/jest-circus/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": ">=6" + "node": ">=8" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "side-channel": "^1.0.4" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=0.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "safe-buffer": "^5.1.0" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, + "node_modules/jest-circus/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": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, + "node_modules/jest-circus/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": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, + "node_modules/jest-cli": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz", + "integrity": "sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==", + "dependencies": { + "@jest/core": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "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==", + "node_modules/jest-cli/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": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/jest-cli/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": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": "17.0.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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/react-lazy-load-image-component": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/react-lazy-load-image-component/-/react-lazy-load-image-component-1.5.6.tgz", - "integrity": "sha512-M0jeJtOlTHgThOfgYM9krSqYbR6ShxROy/KVankwbw9/amPKG1t5GSGN1sei6Cyu8+QJVuyAUvQ+LFtCVTTlKw==", + "node_modules/jest-cli/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": { - "lodash.debounce": "^4.0.8", - "lodash.throttle": "^4.1.1" + "color-name": "~1.1.4" }, - "peerDependencies": { - "react": "^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x", - "react-dom": "^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/react-loading-skeleton": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/react-loading-skeleton/-/react-loading-skeleton-3.2.1.tgz", - "integrity": "sha512-e1KwEOuBa1REXWoseELIJXlsqWTCHL5IQnqhVhI33WmnuTK7LK1DXl4mmcOLsWVcwqXeOATU9VFJEjz2ytZSng==", - "peerDependencies": { - "react": ">=16.8.0" + "node_modules/jest-cli/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-cli/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/react-redux": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", - "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "node_modules/jest-cli/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": { - "@babel/runtime": "^7.12.1", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/use-sync-external-store": "^0.0.3", - "hoist-non-react-statics": "^3.3.2", - "react-is": "^18.0.0", - "use-sync-external-store": "^1.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz", + "integrity": "sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.1", + "@jest/types": "^29.6.1", + "babel-jest": "^29.6.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.1", + "jest-environment-node": "^29.6.1", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-runner": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@types/react": "^16.8 || ^17.0 || ^18.0", - "@types/react-dom": "^16.8 || ^17.0 || ^18.0", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0", - "react-native": ">=0.59", - "redux": "^4" + "@types/node": "*", + "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { + "@types/node": { "optional": true }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - }, - "redux": { + "ts-node": { "optional": true } } }, - "node_modules/react-router": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", - "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", + "node_modules/jest-config/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": { - "@remix-run/router": "1.5.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" + "node": ">=8" }, - "peerDependencies": { - "react": ">=16.8" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/react-router-dom": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", - "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", + "node_modules/jest-config/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": { - "@remix-run/router": "1.5.0", - "react-router": "6.10.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/react-spinners": { - "version": "0.13.8", - "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.13.8.tgz", - "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==", - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + "node_modules/jest-config/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/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "node_modules/jest-config/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-config/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-config/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, + "node_modules/jest-config/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/jest-config/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": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "node_modules/jest-diff": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz", + "integrity": "sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==", "dependencies": { - "picomatch": "^2.2.1" + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" }, "engines": { - "node": ">=8.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, + "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": { - "resolve": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/redux": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", - "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "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": { - "@babel/runtime": "^7.9.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/redux-persist": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", - "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", - "peerDependencies": { - "redux": ">4.0.0" + "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/redux-thunk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", - "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", - "peerDependencies": { - "redux": "^4" - } + "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/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "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/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "regenerate": "^1.4.2" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, + "node_modules/jest-diff/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": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, + "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": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, + "node_modules/jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dependencies": { - "jsesc": "~0.5.0" + "detect-newline": "^3.0.0" }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, "engines": { - "node": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, + "node_modules/jest-each": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz", + "integrity": "sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==", "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.6.1", + "pretty-format": "^29.6.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/reselect": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "node_modules/jest-each/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": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "color-convert": "^2.0.1" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, + "node_modules/jest-each/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": { - "resolve-from": "^5.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, + "node_modules/jest-each/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": ">=8" + "node": ">=7.0.0" } }, - "node_modules/resolve-from": { + "node_modules/jest-each/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-each/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/jest-each/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": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/jest-each/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": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=8" } }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "node_modules/jest-environment-jsdom": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.1.tgz", + "integrity": "sha512-PoY+yLaHzVRhVEjcVKSfJ7wXmJW4UqPYNhR05h7u/TK0ouf6DmRNZFBL/Z00zgQMyWGMBXn69/FmOvhEJu8cIw==", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" + "dependencies": { + "@jest/environment": "^29.6.1", + "@jest/fake-timers": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.6.1", + "jest-util": "^29.6.1", + "jsdom": "^20.0.0" }, "engines": { - "node": ">=10.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, + "node_modules/jest-environment-node": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz", + "integrity": "sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==", "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" + "@jest/environment": "^29.6.1", + "@jest/fake-timers": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.1", + "jest-util": "^29.6.1" }, - "peerDependencies": { - "rollup": "^2.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/rollup-plugin-terser/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, + "node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, + "node_modules/jest-haste-map": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz", + "integrity": "sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==", "dependencies": { + "@jest/types": "^29.6.1", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.1", + "jest-worker": "^29.6.1", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, + "node_modules/jest-leak-detector": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz", + "integrity": "sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==", "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/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" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dependencies": { - "execa": "^5.0.0" - }, + "node_modules/jest-leak-detector/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": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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/jest-leak-detector/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "queue-microtask": "^1.2.2" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, + "node_modules/jest-matcher-utils": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz", + "integrity": "sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "chalk": "^4.0.0", + "jest-diff": "^29.6.1", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "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": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, + "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": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8.9.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, + "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": { - "node-forge": "^1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "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/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node_modules/jest-matcher-utils/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/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "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": { - "randombytes": "^2.1.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, + "node_modules/jest-message-util": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz", + "integrity": "sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==", "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "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": { - "ms": "2.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, + "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": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, + "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": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.6" + "node": ">=7.0.0" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "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/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, + "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": ">= 0.6" + "node": ">=8" } }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "node_modules/jest-message-util/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/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, + "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": { - "kind-of": "^6.0.2" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "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==", + "node_modules/jest-mock": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz", + "integrity": "sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==", "dependencies": { - "shebang-regex": "^3.0.0" + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-util": "^29.6.1" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "engines": { - "node": ">=8" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, + "node_modules/jest-resolve": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz", + "integrity": "sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==" - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "dev": true, + "node_modules/jest-resolve-dependencies": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz", + "integrity": "sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==", "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.6.1" }, "engines": { - "node": ">= 10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/jest-resolve/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/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, + "node_modules/jest-resolve/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": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/source-list-map": { + "node_modules/jest-resolve/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "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==", + "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": ">=0.10.0" + "node": ">=7.0.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==", - "dev": true, + "node_modules/jest-resolve/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-resolve/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": ">=0.10.0" + "node": ">=8" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/jest-resolve/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": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/jest-runner": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz", + "integrity": "sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==", + "dependencies": { + "@jest/console": "^29.6.1", + "@jest/environment": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.6.1", + "jest-haste-map": "^29.6.1", + "jest-leak-detector": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-resolve": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-util": "^29.6.1", + "jest-watcher": "^29.6.1", + "jest-worker": "^29.6.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, + "node_modules/jest-runner/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": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, + "node_modules/jest-runner/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": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/statuses": { + "node_modules/jest-runner/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, + "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": ">= 0.8" + "node": ">=7.0.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } + "node_modules/jest-runner/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/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/jest-runner/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/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, + "node_modules/jest-runner/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": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, + "node_modules/jest-runtime": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz", + "integrity": "sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==", "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "@jest/environment": "^29.6.1", + "@jest/fake-timers": "^29.6.1", + "@jest/globals": "^29.6.1", + "@jest/source-map": "^29.6.0", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-mock": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/jest-runtime/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": { - "ansi-regex": "^5.0.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "peer": true, + "node_modules/jest-runtime/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": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/strip-comments": { + "node_modules/jest-runtime/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "dev": true, + "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": ">=10" + "node": ">=7.0.0" } }, - "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==", - "engines": { - "node": ">=6" - } + "node_modules/jest-runtime/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/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/jest-runtime/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" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-loader": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.2.tgz", - "integrity": "sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==", - "dev": true, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": ">=8" } }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, + "node_modules/jest-runtime/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": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "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/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" + "node_modules/jest-snapshot": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz", + "integrity": "sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.1", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.1", + "semver": "^7.5.3" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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==", + "node_modules/jest-snapshot/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": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, + "node_modules/jest-snapshot/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": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/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==", - "dev": true, - "engines": { - "node": ">= 10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "node_modules/jest-snapshot/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": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": ">=7.0.0" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } + "node_modules/jest-snapshot/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/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true, + "node_modules/jest-snapshot/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/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dev": true, + "node_modules/jest-snapshot/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==", "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true, + "node_modules/jest-snapshot/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/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/terser": { - "version": "5.16.9", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz", - "integrity": "sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==", + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" + "lru-cache": "^6.0.0" }, "bin": { - "terser": "bin/terser" + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "node_modules/jest-snapshot/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": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "node": ">=8" } }, - "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "node_modules/jest-snapshot/node_modules/yallist": { "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" - } + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "node_modules/jest-util": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz", + "integrity": "sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==", "dependencies": { + "@jest/types": "^29.6.1", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "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": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/terser-webpack-plugin/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/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": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/terser/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/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/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "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/thread-loader": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", - "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", - "dev": true, + "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" + } + }, + "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": { - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" + "node": ">=8" } }, - "node_modules/thread-loader/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", - "dev": true, + "node_modules/jest-validate": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz", + "integrity": "sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@jest/types": "^29.6.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.1" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/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": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "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/jest-validate/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": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/jest-validate/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": { - "is-number": "^7.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8.0" + "node": ">=7.0.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } + "node_modules/jest-validate/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/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "dev": true, + "node_modules/jest-validate/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": ">=6" + "node": ">=8" } }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", "dependencies": { - "punycode": "^2.1.0" + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "node_modules/jest-validate/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": ">=16.13.0" + "node": ">=10" }, - "peerDependencies": { - "typescript": ">=4.2.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "peer": true, + "node_modules/jest-validate/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": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "peer": true, + "node_modules/jest-watcher": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz", + "integrity": "sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==", "dependencies": { - "minimist": "^1.2.0" + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.1", + "string-length": "^4.0.1" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/jest-watcher/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": { - "prelude-ls": "^1.2.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/jest-watcher/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/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, + "node_modules/jest-watcher/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": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.6" + "node": ">=7.0.0" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/jest-watcher/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-watcher/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/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node_modules/jest-watcher/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": ">=4.2.0" + "node": ">=8" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, + "node_modules/jest-worker": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", + "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "@types/node": "*", + "jest-util": "^29.6.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, + "node_modules/jest-worker/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": ">=4" + "node": ">=8" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, + "node_modules/jest-worker/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==", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } + "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/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "dependencies": { - "crypto-random-string": "^2.0.0" + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=12" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "node_modules/jsdom/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "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" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" + "node": ">=10.0.0" }, "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" } }, - "node_modules/util-deprecate": { + "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "node_modules/utila": { + "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/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, - "node_modules/utils-merge": { + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">= 0.4.0" + "node": ">=6" } }, - "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==", + "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, - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "node_modules/jsx-ast-utils": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", + "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "dev": true, "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { - "node": ">=10.13.0" + "node": ">=4.0" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } }, - "node_modules/webpack": { - "version": "5.79.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.79.0.tgz", - "integrity": "sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true, + "peer": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, + "peer": true, "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" + "language-subtag-registry": "~0.3.2" } }, - "node_modules/webpack-bundle-analyzer/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/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "node_modules/webpack-bundle-analyzer/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, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/webpack-bundle-analyzer/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/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/webpack-bundle-analyzer/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/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/webpack-bundle-analyzer/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==", - "dev": true, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "engines": { - "node": ">= 10" + "node": ">=6.11.5" } }, - "node_modules/webpack-bundle-analyzer/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/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, "engines": { - "node": ">=8" + "node": ">=8.9.0" } }, - "node_modules/webpack-bundle-analyzer/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/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "has-flag": "^4.0.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "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/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" + "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } + "loose-envify": "cli.js" } }, - "node_modules/webpack-cli/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/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "engines": { - "node": ">= 10" + "dependencies": { + "tslib": "^2.0.3" } }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "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/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "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": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "tmpl": "1.0.5" } }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.0.tgz", + "integrity": "sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3" + "fs-monkey": "^1.0.3" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "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==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=8.6" } }, - "node_modules/webpack-dev-server": { - "version": "4.13.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz", - "integrity": "sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug==", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" + "mime-db": "1.52.0" }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz", + "integrity": "sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ==", + "dependencies": { + "schema-utils": "^4.0.0" }, "engines": { "node": ">= 12.13.0" @@ -11919,22 +11852,13 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } + "webpack": "^5.0.0" } }, - "node_modules/webpack-dev-server/node_modules/ajv": { + "node_modules/mini-css-extract-plugin/node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -11946,11 +11870,10 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -11958,17 +11881,15 @@ "ajv": "^8.8.2" } }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -11983,141 +11904,212 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10.0.0" + "node": "*" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, "engines": { - "node": ">=10.13.0" + "node": ">=10" } }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", - "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "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==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "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==", "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=0.8.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">= 0.6" } }, - "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "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/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" }, - "bin": { - "node-which": "bin/node-which" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "path-key": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "boolbase": "^1.0.0" }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, + "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/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", - "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", - "dev": true, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dependencies": { - "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "define-properties": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -12126,5905 +12118,12042 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/workbox-background-sync": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz", - "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==", - "dev": true, - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "7.0.0" + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" } }, - "node_modules/workbox-broadcast-update": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz", - "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==", - "dev": true, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { - "workbox-core": "7.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/workbox-build": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.0.0.tgz", - "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==", + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "7.0.0", - "workbox-broadcast-update": "7.0.0", - "workbox-cacheable-response": "7.0.0", - "workbox-core": "7.0.0", - "workbox-expiration": "7.0.0", - "workbox-google-analytics": "7.0.0", - "workbox-navigation-preload": "7.0.0", - "workbox-precaching": "7.0.0", - "workbox-range-requests": "7.0.0", - "workbox-recipes": "7.0.0", - "workbox-routing": "7.0.0", - "workbox-strategies": "7.0.0", - "workbox-streams": "7.0.0", - "workbox-sw": "7.0.0", - "workbox-window": "7.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">=16.0.0" + "node": ">= 0.4" } }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, - "peerDependencies": { - "ajv": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { - "whatwg-url": "^7.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz", - "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==", - "dev": true, - "dependencies": { - "workbox-core": "7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/workbox-core": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.0.0.tgz", - "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "node_modules/workbox-expiration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.0.0.tgz", - "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { - "idb": "^7.0.1", - "workbox-core": "7.0.0" + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/workbox-google-analytics": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz", - "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==", + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, - "dependencies": { - "workbox-background-sync": "7.0.0", - "workbox-core": "7.0.0", - "workbox-routing": "7.0.0", - "workbox-strategies": "7.0.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/workbox-navigation-preload": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz", - "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==", - "dev": true, + "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==", "dependencies": { - "workbox-core": "7.0.0" + "wrappy": "1" } }, - "node_modules/workbox-precaching": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.0.0.tgz", - "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==", - "dev": true, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { - "workbox-core": "7.0.0", - "workbox-routing": "7.0.0", - "workbox-strategies": "7.0.0" + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/workbox-range-requests": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz", - "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { - "workbox-core": "7.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/workbox-recipes": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.0.0.tgz", - "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==", + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, - "dependencies": { - "workbox-cacheable-response": "7.0.0", - "workbox-core": "7.0.0", - "workbox-expiration": "7.0.0", - "workbox-precaching": "7.0.0", - "workbox-routing": "7.0.0", - "workbox-strategies": "7.0.0" + "bin": { + "opener": "bin/opener-bin.js" } }, - "node_modules/workbox-routing": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.0.0.tgz", - "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==", - "dev": true, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dependencies": { - "workbox-core": "7.0.0" - } - }, - "node_modules/workbox-strategies": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.0.0.tgz", - "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==", - "dev": true, + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "workbox-core": "7.0.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/workbox-streams": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.0.0.tgz", - "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "dependencies": { - "workbox-core": "7.0.0", - "workbox-routing": "7.0.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/workbox-sw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz", - "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==", - "dev": true + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } }, - "node_modules/workbox-webpack-plugin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-7.0.0.tgz", - "integrity": "sha512-R1ZzCHPfzeJjLK2/TpKUhxSQ3fFDCxlWxgRhhSjMQLz3G2MlBnyw/XeYb34e7SGgSv0qG22zEhMIzjMNqNeKbw==", + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "7.0.0" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "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==", + "dependencies": { + "callsites": "^3.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/workbox-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "engines": { + "node": ">= 0.8" } }, - "node_modules/workbox-window": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz", - "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "7.0.0" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "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==" + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, + "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==", "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/yallist": { + "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "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==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "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==", "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { - "node": ">=10" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } - } - }, - "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" }, - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" } }, - "@babel/code-frame": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", - "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", - "requires": { - "@babel/highlight": "^7.18.6" + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@babel/compat-data": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", - "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", - "dev": true - }, - "@babel/core": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", - "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.4", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.4", - "@babel/types": "^7.21.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", - "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "node_modules/postcss": { + "version": "8.4.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.22.tgz", + "integrity": "sha512-XseknLAfRHzVWjCEtdviapiBtfLdgyzExD50Rg2ePaucEesyh8Wv4VPdW0nbyDa1ydbrAxV19jvMT4+LFmcNUA==", "dev": true, - "requires": { - "@babel/types": "^7.21.4", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/helper-compilation-targets": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", - "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", "dev": true, - "requires": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-validator-option": "^7.21.0", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", - "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", - "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@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==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@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==", + "node_modules/postcss-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz", + "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==", "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" } }, - "@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==", + "node_modules/postcss-loader/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==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "dev": true, - "requires": { - "@babel/types": "^7.21.0" + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "@babel/helper-module-imports": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", - "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", - "requires": { - "@babel/types": "^7.21.4" + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "@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==", + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", "dev": true, - "requires": { - "@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" + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@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==", + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", "dev": true, - "requires": { - "@babel/types": "^7.20.2" + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", "dev": true, - "requires": { - "@babel/types": "^7.20.0" + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@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==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "requires": { - "@babel/types": "^7.18.6" + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "@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==" - }, - "@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==" - }, - "@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==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", - "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" } }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "node_modules/prettier": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz", + "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "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, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", - "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "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" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "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==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "engines": { + "node": ">= 0.10" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "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 }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } + "node_modules/pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] }, - "@babel/plugin-syntax-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", - "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "engines": { + "node": ">= 0.6" } }, - "@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" + "engines": { + "node": ">= 0.8" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", - "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "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==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } + "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==" }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/react-lazy-load-image-component": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/react-lazy-load-image-component/-/react-lazy-load-image-component-1.5.6.tgz", + "integrity": "sha512-M0jeJtOlTHgThOfgYM9krSqYbR6ShxROy/KVankwbw9/amPKG1t5GSGN1sei6Cyu8+QJVuyAUvQ+LFtCVTTlKw==", + "dependencies": { + "lodash.debounce": "^4.0.8", + "lodash.throttle": "^4.1.1" + }, + "peerDependencies": { + "react": "^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x", + "react-dom": "^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x" } }, - "@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "node_modules/react-loading-skeleton": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-loading-skeleton/-/react-loading-skeleton-3.2.1.tgz", + "integrity": "sha512-e1KwEOuBa1REXWoseELIJXlsqWTCHL5IQnqhVhI33WmnuTK7LK1DXl4mmcOLsWVcwqXeOATU9VFJEjz2ytZSng==", + "peerDependencies": { + "react": ">=16.8.0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" + "node_modules/react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } } }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "node_modules/react-router": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", + "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", + "dependencies": { + "@remix-run/router": "1.5.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/react-router-dom": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", + "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", + "dependencies": { + "@remix-run/router": "1.5.0", + "react-router": "6.10.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" + "node_modules/react-spinners": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/react-spinners/-/react-spinners-0.13.8.tgz", + "integrity": "sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==", + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" } }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" } }, - "@babel/plugin-transform-parameters": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", - "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" + "node_modules/redux-persist": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-6.0.0.tgz", + "integrity": "sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==", + "peerDependencies": { + "redux": ">4.0.0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "peerDependencies": { + "redux": "^4" } }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true }, - "@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "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/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" + "dependencies": { + "@babel/runtime": "^7.8.4" } }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" } }, - "@babel/plugin-transform-runtime": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz", - "integrity": "sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==", + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" + "bin": { + "jsesc": "bin/jsesc" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "engines": { + "node": ">= 0.10" } }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "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" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@babel/plugin-transform-typescript": { - "version": "7.21.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", - "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" } }, - "@babel/preset-env": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", - "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "requires": { - "@babel/compat-data": "^7.21.4", - "@babel/helper-compilation-targets": "^7.21.4", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", - "@babel/plugin-proposal-async-generator-functions": "^7.20.7", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.21.0", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.21.0", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.21.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.20.7", - "@babel/plugin-transform-async-to-generator": "^7.20.7", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.21.0", - "@babel/plugin-transform-classes": "^7.21.0", - "@babel/plugin-transform-computed-properties": "^7.20.7", - "@babel/plugin-transform-destructuring": "^7.21.3", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.21.0", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.20.11", - "@babel/plugin-transform-modules-commonjs": "^7.21.2", - "@babel/plugin-transform-modules-systemjs": "^7.20.11", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.21.3", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.20.5", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.20.7", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.21.4", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" + "engines": { + "node": ">= 4" } }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "@babel/preset-typescript": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz", - "integrity": "sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==", + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-syntax-jsx": "^7.21.4", - "@babel/plugin-transform-modules-commonjs": "^7.21.2", - "@babel/plugin-transform-typescript": "^7.21.3" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", - "requires": { - "regenerator-runtime": "^0.13.11" + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" } }, - "@babel/traverse": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", - "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "node_modules/rollup-plugin-terser/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, - "requires": { - "@babel/code-frame": "^7.21.4", - "@babel/generator": "^7.21.4", - "@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.4", - "@babel/types": "^7.21.4", - "debug": "^4.1.0", - "globals": "^11.1.0" + "engines": { + "node": ">=8" } }, - "@babel/types": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", - "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@emotion/babel-plugin": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", - "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", - "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.1.3" + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" } }, - "@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "requires": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "stylis": "4.2.0" - }, + "node_modules/rollup-plugin-terser/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": { - "stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", - "requires": { - "@emotion/memoize": "^0.8.1" - } - }, - "@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "@emotion/react": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", - "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - } - }, - "@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" - }, - "@emotion/styled": { - "version": "11.10.6", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", - "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.6", - "@emotion/is-prop-valid": "^1.2.0", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0" + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "@emotion/use-insertion-effect-with-fallbacks": { + "node_modules/safe-regex-test": { "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==", - "requires": {} - }, - "@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, - "@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "requires": { - "eslint-visitor-keys": "^3.3.0" + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" } }, - "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==" + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } }, - "@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", - "requires": { + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "ajv-keywords": "^3.5.2" }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "requires": { - "type-fest": "^0.20.2" - } - } + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==" + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true }, - "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.25.16" + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" } }, - "@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, - "requires": { - "@jest/schemas": "^29.4.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" - }, "dependencies": { - "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, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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, - "requires": { - "color-name": "~1.1.4" - } - }, - "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 - }, - "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 - }, - "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, - "requires": { - "has-flag": "^4.0.0" - } - } + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" } }, - "@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==" + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "@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==" + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { + "randombytes": "^2.1.0" } }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, "dependencies": { - "@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==" - } + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@mui/base": { - "version": "5.0.0-alpha.126", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.126.tgz", - "integrity": "sha512-I5e52A0Muv9Gaoy2GcqbYrQ6dpRyC2UXeA00brT3HuW0nF0E4fiTOIqdNTN+N5gyaYK0z3O6jtLt/97CCrIxVA==", - "requires": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.0", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.12.0", - "@popperjs/core": "^2.11.7", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" } }, - "@mui/core-downloads-tracker": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.12.1.tgz", - "integrity": "sha512-rNiQYHtkXljcvCEnhWrJzie1ifff5O98j3uW7ZlchFgD8HWxEcz/QoxZvo+sCKC9aayAgxi9RsVn2VjCyp5CrA==" - }, - "@mui/icons-material": { - "version": "5.11.16", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", - "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", - "requires": { - "@babel/runtime": "^7.21.0" + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" } }, - "@mui/lab": { - "version": "5.0.0-alpha.134", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.134.tgz", - "integrity": "sha512-GhvuM2dNOi6hzjbeGEocWVozgyyeUn7RBmZhLFtniROauxmPCZMcTsEU+GAxmpyYppqHuI8flP6tGKgMuEAK/g==", - "requires": { - "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-beta.4", - "@mui/system": "^5.13.5", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, "dependencies": { - "@mui/base": { - "version": "5.0.0-beta.4", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", - "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", - "requires": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.1", - "@popperjs/core": "^2.11.8", - "clsx": "^1.2.1", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - } - } + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "@mui/material": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.12.1.tgz", - "integrity": "sha512-m+G9J6+FzIMhRqKV2y30yONH97wX107z9EWgiNCeS1/+y1CnytFZNG1ENdOuaJo1NimCRnmB/iXPvoOaSo6dOg==", - "requires": { - "@babel/runtime": "^7.21.0", - "@mui/base": "5.0.0-alpha.126", - "@mui/core-downloads-tracker": "^5.12.1", - "@mui/system": "^5.12.1", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.12.0", - "@types/react-transition-group": "^4.4.5", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" - } + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, - "@mui/private-theming": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", - "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", - "requires": { - "@babel/runtime": "^7.21.0", - "@mui/utils": "^5.13.1", - "prop-types": "^15.8.1" - } + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, - "@mui/styled-engine": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", - "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", - "requires": { - "@babel/runtime": "^7.21.0", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" } }, - "@mui/system": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", - "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", - "requires": { - "@babel/runtime": "^7.22.5", - "@mui/private-theming": "^5.13.1", - "@mui/styled-engine": "^5.13.2", - "@mui/types": "^7.2.4", - "@mui/utils": "^5.13.6", - "clsx": "^1.2.1", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "@mui/types": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", - "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", - "requires": {} + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, - "@mui/utils": { - "version": "5.13.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", - "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", - "requires": { - "@babel/runtime": "^7.22.5", - "@types/prop-types": "^15.7.5", - "@types/react-is": "^18.2.0", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "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==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "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==", + "engines": { + "node": ">=8" + } }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", - "requires": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dependencies": { - "define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" - }, - "open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "requires": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - } - } + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "dev": true - }, - "@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + "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==" }, - "@reduxjs/toolkit": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", - "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", - "requires": { - "immer": "^9.0.21", - "redux": "^4.2.1", - "redux-thunk": "^2.4.2", - "reselect": "^4.1.8" + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" } }, - "@remix-run/router": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", - "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==" + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" + "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" } }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" } }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@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/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" } }, - "@sentry-internal/tracing": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.3.tgz", - "integrity": "sha512-/RkBj/0zQKGsW/UYg6hufrLHHguncLfu4610FCPWpVp0K5Yu5ou8/Aw8D76G3ZxD2TiuSNGwX0o7TYN371ZqTQ==", - "requires": { - "@sentry/core": "7.59.3", - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3", - "tslib": "^2.4.1 || ^1.9.3" + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "@sentry/browser": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.59.3.tgz", - "integrity": "sha512-rTsePz1zEhiouX24TqjzYdY8PsBNU2EGUSHK9jCKml5i/eKTqQabnwdxHgIC4/wcs1nGOabRg/Iel6l4y4mCjA==", - "requires": { - "@sentry-internal/tracing": "7.59.3", - "@sentry/core": "7.59.3", - "@sentry/replay": "7.59.3", - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3", - "tslib": "^2.4.1 || ^1.9.3" + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "@sentry/core": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.59.3.tgz", - "integrity": "sha512-cGBOwT9gziIn50fnlBH1WGQlGcHi7wrbvOCyrex4MxKnn1LSBYWBhwU0ymj8DI/9MyPrGDNGkrgpV0WJWBSClg==", - "requires": { - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3", - "tslib": "^2.4.1 || ^1.9.3" + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" } }, - "@sentry/react": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.59.3.tgz", - "integrity": "sha512-2TmJ/su8NBQad4PpyJoJ8Er6bzc1jgzgwKSYpI5xHNT6FOFxI4cGIbfrYNqXBjPTvFHwC8WFyN+XZ0K42GFgqQ==", - "requires": { - "@sentry/browser": "7.59.3", - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3", - "hoist-non-react-statics": "^3.3.2", - "tslib": "^2.4.1 || ^1.9.3" - } + "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==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true }, - "@sentry/replay": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.59.3.tgz", - "integrity": "sha512-o0Z9XD46ua4kex8P2zcahNLARm+joLU6e8bTwjdmfsLS/A2yH1RhJ/VlcAEpPR2IzSYLXz3ApJ/XiqLPTNSu1w==", - "requires": { - "@sentry/core": "7.59.3", - "@sentry/types": "7.59.3", - "@sentry/utils": "7.59.3" + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "@sentry/types": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.59.3.tgz", - "integrity": "sha512-HQ/Pd3YHyIa4HM0bGfOsfI4ZF+sLVs6II9VtlS4hsVporm4ETl3Obld5HywO3aVYvWOk5j/bpAW9JYsxXjRG5A==" - }, - "@sentry/utils": { - "version": "7.59.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.59.3.tgz", - "integrity": "sha512-Q57xauMKuzd6S+POA1fmulfjzTsb/z118TNAfZZNkHqVB48hHBqgzdhbEBmN4jPCSKV2Cx7VJUoDZxJfzQyLUQ==", - "requires": { - "@sentry/types": "7.59.3", - "tslib": "^2.4.1 || ^1.9.3" + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "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/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dev": true, - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" + "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" } }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "requires": { - "@types/node": "*" + "engines": { + "node": ">= 0.8" } }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "@types/eslint": { - "version": "8.37.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", - "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" + "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==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } + "node_modules/string-width/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==" }, - "@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.10", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz", - "integrity": "sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==", + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@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==", - "dev": true - }, - "@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/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@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/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "peer": true - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" - }, - "@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==" - }, - "@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==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "peer": true, + "engines": { + "node": ">=4" + } }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "@types/react": { - "version": "17.0.58", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", - "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "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==", + "engines": { + "node": ">=6" } }, - "@types/react-dom": { - "version": "17.0.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", - "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", - "devOptional": true, - "requires": { - "@types/react": "^17" + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "@types/react-is": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", - "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", - "requires": { - "@types/react": "*" + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@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==", - "requires": { - "@types/react": "*" + "node_modules/style-loader": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.2.tgz", + "integrity": "sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "node_modules/stylis": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" }, - "@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" - }, - "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==" + "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==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/serve-static": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", - "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "node_modules/svgo/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==", "dev": true, - "requires": { - "@types/node": "*" + "engines": { + "node": ">= 10" } }, - "@types/trusted-types": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", - "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "@types/use-sync-external-store": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } }, - "@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, - "requires": { - "@types/node": "*" + "engines": { + "node": ">=8" } }, - "@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dev": true, - "requires": { - "@types/yargs-parser": "*" + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@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==", - "dev": true + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@typescript-eslint/eslint-plugin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.0.0.tgz", - "integrity": "sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==", - "requires": { - "@eslint-community/regexpp": "^4.5.0", - "@typescript-eslint/scope-manager": "6.0.0", - "@typescript-eslint/type-utils": "6.0.0", - "@typescript-eslint/utils": "6.0.0", - "@typescript-eslint/visitor-keys": "6.0.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.5.0", - "ts-api-utils": "^1.0.1" + "node_modules/terser": { + "version": "5.16.9", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.9.tgz", + "integrity": "sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", + "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "esbuild": { + "optional": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "uglify-js": { + "optional": true } } }, - "@typescript-eslint/parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.0.0.tgz", - "integrity": "sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==", - "requires": { - "@typescript-eslint/scope-manager": "6.0.0", - "@typescript-eslint/types": "6.0.0", - "@typescript-eslint/typescript-estree": "6.0.0", - "@typescript-eslint/visitor-keys": "6.0.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.0.0.tgz", - "integrity": "sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==", - "requires": { - "@typescript-eslint/types": "6.0.0", - "@typescript-eslint/visitor-keys": "6.0.0" + "node_modules/terser-webpack-plugin/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" } }, - "@typescript-eslint/type-utils": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.0.0.tgz", - "integrity": "sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==", - "requires": { - "@typescript-eslint/typescript-estree": "6.0.0", - "@typescript-eslint/utils": "6.0.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "@typescript-eslint/types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.0.0.tgz", - "integrity": "sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==" - }, - "@typescript-eslint/typescript-estree": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.0.0.tgz", - "integrity": "sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==", - "requires": { - "@typescript-eslint/types": "6.0.0", - "@typescript-eslint/visitor-keys": "6.0.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.0", - "ts-api-utils": "^1.0.1" - }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "@typescript-eslint/utils": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.0.0.tgz", - "integrity": "sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==", - "requires": { - "@eslint-community/eslint-utils": "^4.3.0", - "@types/json-schema": "^7.0.11", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "6.0.0", - "@typescript-eslint/types": "6.0.0", - "@typescript-eslint/typescript-estree": "6.0.0", - "eslint-scope": "^5.1.1", - "semver": "^7.5.0" - }, + "node_modules/terser-webpack-plugin/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==", "dependencies": { - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "@typescript-eslint/visitor-keys": { + "node_modules/terser/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/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.0.0.tgz", - "integrity": "sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==", - "requires": { - "@typescript-eslint/types": "6.0.0", - "eslint-visitor-keys": "^3.4.1" + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "node_modules/thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "dependencies": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "node_modules/thread-loader/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "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==", + "engines": { + "node": ">=4" } }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "requires": { - "@xtuc/ieee754": "^1.2.0" + "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" + }, + "engines": { + "node": ">=8.0" } }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "requires": { - "@xtuc/long": "4.2.2" + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" } }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true, + "engines": { + "node": ">=6" } }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" } }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" } }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" } }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" + "node_modules/ts-api-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", + "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", "dev": true, - "requires": { - "envinfo": "^7.7.3" + "peer": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "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==", - "requires": { - "color-convert": "^1.9.0" + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" } }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, - "peer": true, - "requires": { - "dequal": "^2.0.3" + "engines": { + "node": ">=4" } }, - "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" + "engines": { + "node": ">=4" } }, - "array-union": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "engines": { + "node": ">=4" } }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 10.0.0" } }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true, - "peer": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "at-least-node": { + "node_modules/unpipe": { "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 - }, - "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "peer": true - }, - "axios": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", - "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", - "requires": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "engines": { + "node": ">= 0.8" } }, - "axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dev": true, - "peer": true, - "requires": { - "dequal": "^2.0.3" + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "engines": { + "node": ">=8" } }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "engines": { + "node": ">=4", + "yarn": "*" } }, - "babel-plugin-import": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.13.6.tgz", - "integrity": "sha512-N7FYnGh0DFsvDRkAPsvFq/metVfVD7P2h1rokOPpEH4cZbdRHCW+2jbXt0nnuqowkm/xhh2ww1anIdEpfYa7ZA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0" - } - }, - "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==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "balanced-match": { + "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } + "engines": { + "node": ">= 0.4.0" } }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "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, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "bin": { + "uuid": "dist/bin/uuid" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "requires": { - "big-integer": "^1.6.44" + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" } }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "dev": true }, - "bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "requires": { - "run-applescript": "^5.0.0" + "node_modules/webpack": { + "version": "5.79.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.79.0.tgz", + "integrity": "sha512-3mN4rR2Xq+INd6NnYuL9RC9GAmc1ROPKJoHhrZ4pAjdMFEkJJWrsPw8o2JjCIyQyTu7rTXYn4VG6OpyB3CobZg==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/webpack-bundle-analyzer": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", + "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/webpack-bundle-analyzer/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, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/webpack-bundle-analyzer/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, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001480", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", - "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "dependencies": { - "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==" - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/webpack-bundle-analyzer/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, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "node_modules/webpack-bundle-analyzer/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 }, - "clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "node_modules/webpack-bundle-analyzer/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==", "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "engines": { + "node": ">= 10" } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/webpack-bundle-analyzer/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, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "engines": { + "node": ">=8" } }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "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==", - "requires": { - "color-name": "1.1.3" + "node_modules/webpack-bundle-analyzer/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" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "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==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "@webpack-cli/migrate": { + "optional": true }, - "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==", - "dev": true + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true } } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/webpack-cli/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==", "dev": true, - "requires": { - "safe-buffer": "5.2.1" + "engines": { + "node": ">= 10" } }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } }, - "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==" + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.13.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.3.tgz", + "integrity": "sha512-KqqzrzMRSRy5ePz10VhjyL27K2dxqwXQLP5rAKwRJBPUahe7Z2bBWzHw37jeb8GCPKxZRO79ZdQUAPesMh/Nug==", + "dev": true, "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true + "webpack-cli": { + "optional": true } } }, - "core-js-compat": { - "version": "3.30.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", - "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "requires": { - "browserslist": "^4.21.5" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@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" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "css-declaration-sorter": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", "dev": true, - "requires": {} + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } }, - "css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "utf-8-validate": { + "optional": true } } }, - "css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, - "requires": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", - "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" } }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "requires": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" + "engines": { + "node": ">=0.8.0" } }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, - "requires": {} + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/whatwg-encoding/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==", "dev": true, - "requires": { - "css-tree": "^1.1.2" + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, - "peer": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" + "engines": { + "node": ">=12" } }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } }, - "deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, - "default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "requires": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dependencies": { - "execa": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", - "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "requires": { - "path-key": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" - } - } - }, - "default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "requires": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" + "node_modules/which-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", + "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "define-lazy-prop": { + "node_modules/wildcard": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "node_modules/workbox-background-sync": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.0.0.tgz", + "integrity": "sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==", "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/workbox-broadcast-update": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.0.0.tgz", + "integrity": "sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==", "dev": true, - "peer": true + "dependencies": { + "workbox-core": "7.0.0" + } }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true + "node_modules/workbox-build": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.0.0.tgz", + "integrity": "sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.0.0", + "workbox-broadcast-update": "7.0.0", + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-google-analytics": "7.0.0", + "workbox-navigation-preload": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-range-requests": "7.0.0", + "workbox-recipes": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0", + "workbox-streams": "7.0.0", + "workbox-sw": "7.0.0", + "workbox-window": "7.0.0" + }, + "engines": { + "node": ">=16.0.0" + } }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "dns-equal": { + "node_modules/workbox-build/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "dns-packet": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz", - "integrity": "sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==", + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" } }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "node_modules/workbox-cacheable-response": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.0.0.tgz", + "integrity": "sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==", "dev": true, - "requires": { - "utila": "~0.4" + "dependencies": { + "workbox-core": "7.0.0" } }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } + "node_modules/workbox-core": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.0.0.tgz", + "integrity": "sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==", + "dev": true }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/workbox-expiration": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.0.0.tgz", + "integrity": "sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==", "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" } }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "node_modules/workbox-google-analytics": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.0.0.tgz", + "integrity": "sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==", "dev": true, - "requires": { - "domelementtype": "^2.2.0" + "dependencies": { + "workbox-background-sync": "7.0.0", + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/workbox-navigation-preload": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.0.0.tgz", + "integrity": "sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==", "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "dependencies": { + "workbox-core": "7.0.0" } }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/workbox-precaching": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.0.0.tgz", + "integrity": "sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==", "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "node_modules/workbox-range-requests": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.0.0.tgz", + "integrity": "sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } }, - "ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "node_modules/workbox-recipes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.0.0.tgz", + "integrity": "sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==", "dev": true, - "requires": { - "jake": "^10.8.5" + "dependencies": { + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, - "electron-to-chromium": { - "version": "1.4.367", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", - "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==" + "node_modules/workbox-routing": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.0.0.tgz", + "integrity": "sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0" + } }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/workbox-strategies": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.0.0.tgz", + "integrity": "sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==", "dev": true, - "peer": true + "dependencies": { + "workbox-core": "7.0.0" + } }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true + "node_modules/workbox-streams": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.0.0.tgz", + "integrity": "sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0" + } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/workbox-sw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.0.0.tgz", + "integrity": "sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==", "dev": true }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "node_modules/workbox-webpack-plugin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-7.0.0.tgz", + "integrity": "sha512-R1ZzCHPfzeJjLK2/TpKUhxSQ3fFDCxlWxgRhhSjMQLz3G2MlBnyw/XeYb34e7SGgSv0qG22zEhMIzjMNqNeKbw==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "7.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" } }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "env-cmd": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", - "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", - "requires": { - "commander": "^4.0.0", - "cross-spawn": "^7.0.0" + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true + "node_modules/workbox-window": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.0.0.tgz", + "integrity": "sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.0.0" + } }, - "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==", - "requires": { - "is-arrayish": "^0.2.1" + "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==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "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" } }, - "es-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", - "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" - }, - "es-set-tostringtag": { + "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "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==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "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" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" + }, + "@adobe/css-tools": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", + "integrity": "sha512-E09FiIft46CmH5Qnjb0wsW54/YQd69LsxeKUOWawmws1XWvyFGURnAChH0mlr7YPFR1ofwvUQfcL0J3lMxXqPA==" + }, + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "requires": { - "has": "^1.0.3" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, + "@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "@babel/highlight": "^7.18.6" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "@babel/compat-data": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==" }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "@babel/core": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", + "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + } }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "@babel/generator": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "requires": { + "@babel/types": "^7.21.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } }, - "eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "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==", - "requires": { - "color-name": "~1.1.4" - } - }, - "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==" - }, - "eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - } + "@babel/types": "^7.18.6" } }, - "eslint-config-airbnb": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", - "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, "requires": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" } }, - "eslint-config-airbnb-base": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", - "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", - "dev": true, + "@babel/helper-compilation-targets": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" } }, - "eslint-config-prettier": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", - "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", - "requires": {} + "@babel/helper-create-class-features-plugin": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6" + } }, - "eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "@babel/helper-create-regexp-features-plugin": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", + "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", "dev": true, - "peer": true, "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.3.1" } }, - "eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, - "peer": true, "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" } }, - "eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "@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==" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, - "peer": true, "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - } + "@babel/types": "^7.18.6" } }, - "eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dev": true, - "peer": true, + "@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==", "requires": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, - "eslint-plugin-prettier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", - "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "@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==", "requires": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "@babel/types": "^7.18.6" } }, - "eslint-plugin-react": { - "version": "7.33.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz", - "integrity": "sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==", + "@babel/helper-member-expression-to-functions": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dev": true, "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } + "@babel/types": "^7.21.0" } }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "peer": true, - "requires": {} - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "@babel/helper-module-imports": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@babel/types": "^7.21.4" } }, - "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==" + "@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==", + "requires": { + "@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" + } }, - "espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, "requires": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "@babel/types": "^7.18.6" } }, - "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "@babel/helper-replace-supers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "dev": true, "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "@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==", + "requires": { + "@babel/types": "^7.20.2" + } }, - "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 + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.0" + } }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "@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==", + "requires": { + "@babel/types": "^7.18.6" + } }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true + "@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==" }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "@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==" }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "@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==" }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "dev": true, "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" } }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, + "@babel/helpers": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, - "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==" - }, - "fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" - }, - "fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "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==" + "@babel/parser": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + } }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, "requires": { - "reusify": "^1.0.4" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "dev": true, "requires": { - "flat-cache": "^3.0.4" + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, - "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==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, "requires": { - "is-callable": "^1.1.3" + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "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==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "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 - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "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==" - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "requires": { - "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" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "requires": { - "is-glob": "^4.0.1" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { - "define-properties": "^1.1.3" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "graceful-fs": { - "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==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "requires": { - "duplexer": "^0.1.2" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "@babel/plugin-syntax-jsx": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "requires": { - "function-bind": "^1.1.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } }, - "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==" + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "requires": { - "get-intrinsic": "^1.1.1" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } }, - "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==", + "@babel/plugin-syntax-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "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==" - } + "@babel/helper-plugin-utils": "^7.20.2" } }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "@babel/plugin-transform-arrow-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "@babel/helper-plugin-utils": "^7.20.2" } }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - } + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" } }, - "html-webpack-plugin": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz", - "integrity": "sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" + "@babel/helper-plugin-utils": "^7.18.6" } }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "@babel/plugin-transform-block-scoping": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dev": true, "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "@babel/helper-plugin-utils": "^7.20.2" } }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "@babel/plugin-transform-classes": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dev": true, "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" } }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "@babel/plugin-transform-computed-properties": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dev": true, "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" } }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "@babel/plugin-transform-destructuring": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", "dev": true, "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" + "@babel/helper-plugin-utils": "^7.20.2" } }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, - "requires": {} - }, - "idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } }, - "immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" + "@babel/plugin-transform-for-of": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" } }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" + "@babel/helper-plugin-utils": "^7.18.9" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "@babel/plugin-transform-modules-commonjs": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" + } }, - "install": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", - "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==" + "@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + } }, - "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", + "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", + "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.21.0" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz", + "integrity": "sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", + "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", + "@babel/plugin-proposal-async-generator-functions": "^7.20.7", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.21.0", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-async-to-generator": "^7.20.7", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-destructuring": "^7.21.3", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.21.0", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-systemjs": "^7.20.11", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.21.3", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.20.5", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.20.7", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.21.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/preset-typescript": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz", + "integrity": "sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-syntax-jsx": "^7.21.4", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-typescript": "^7.21.3" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "requires": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@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.4", + "@babel/types": "^7.21.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@emotion/babel-plugin": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", + "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/serialize": "^1.1.1", + "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.1.3" + } + }, + "@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "requires": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + }, + "dependencies": { + "stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + } + } + }, + "@emotion/hash": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/react": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", + "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0", + "@emotion/weak-memoize": "^0.3.0", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "requires": { + "@emotion/hash": "^0.9.0", + "@emotion/memoize": "^0.8.0", + "@emotion/unitless": "^0.8.0", + "@emotion/utils": "^1.2.0", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "@emotion/styled": { + "version": "11.10.6", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", + "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.10.6", + "@emotion/is-prop-valid": "^1.2.0", + "@emotion/serialize": "^1.1.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@emotion/utils": "^1.2.0" + } + }, + "@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, + "@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==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==" + }, + "@eslint/eslintrc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==" + }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + }, + "@jest/console": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz", + "integrity": "sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==", + "requires": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz", + "integrity": "sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==", + "requires": { + "@jest/console": "^29.6.1", + "@jest/reporters": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.6.1", + "jest-haste-map": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-resolve-dependencies": "^29.6.1", + "jest-runner": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "jest-watcher": "^29.6.1", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz", + "integrity": "sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==", + "requires": { + "@jest/fake-timers": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.1" + } + }, + "@jest/expect": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz", + "integrity": "sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==", + "requires": { + "expect": "^29.6.1", + "jest-snapshot": "^29.6.1" + } + }, + "@jest/expect-utils": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz", + "integrity": "sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==", + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/fake-timers": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz", + "integrity": "sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==", + "requires": { + "@jest/types": "^29.6.1", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.1", + "jest-mock": "^29.6.1", + "jest-util": "^29.6.1" + } + }, + "@jest/globals": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz", + "integrity": "sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==", + "requires": { + "@jest/environment": "^29.6.1", + "@jest/expect": "^29.6.1", + "@jest/types": "^29.6.1", + "jest-mock": "^29.6.1" + } + }, + "@jest/reporters": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz", + "integrity": "sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==", + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "jest-worker": "^29.6.1", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jest/source-map": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", + "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "requires": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz", + "integrity": "sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==", + "requires": { + "@jest/console": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz", + "integrity": "sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==", + "requires": { + "@jest/test-result": "^29.6.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz", + "integrity": "sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", + "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "requires": { + "@jest/schemas": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@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==" + }, + "@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==" + }, + "@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@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==" + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@mui/base": { + "version": "5.0.0-alpha.126", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.126.tgz", + "integrity": "sha512-I5e52A0Muv9Gaoy2GcqbYrQ6dpRyC2UXeA00brT3HuW0nF0E4fiTOIqdNTN+N5gyaYK0z3O6jtLt/97CCrIxVA==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.12.0", + "@popperjs/core": "^2.11.7", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@mui/core-downloads-tracker": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.12.1.tgz", + "integrity": "sha512-rNiQYHtkXljcvCEnhWrJzie1ifff5O98j3uW7ZlchFgD8HWxEcz/QoxZvo+sCKC9aayAgxi9RsVn2VjCyp5CrA==" + }, + "@mui/icons-material": { + "version": "5.11.16", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.11.16.tgz", + "integrity": "sha512-oKkx9z9Kwg40NtcIajF9uOXhxiyTZrrm9nmIJ4UjkU2IdHpd4QVLbCc/5hZN/y0C6qzi2Zlxyr9TGddQx2vx2A==", + "requires": { + "@babel/runtime": "^7.21.0" + } + }, + "@mui/lab": { + "version": "5.0.0-alpha.134", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.134.tgz", + "integrity": "sha512-GhvuM2dNOi6hzjbeGEocWVozgyyeUn7RBmZhLFtniROauxmPCZMcTsEU+GAxmpyYppqHuI8flP6tGKgMuEAK/g==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-beta.4", + "@mui/system": "^5.13.5", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "@mui/base": { + "version": "5.0.0-beta.4", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.4.tgz", + "integrity": "sha512-ejhtqYJpjDgHGEljjMBQWZ22yEK0OzIXNa7toJmmXsP4TT3W7xVy8bTJ0TniPDf+JNjrsgfgiFTDGdlEhV1E+g==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.1", + "@popperjs/core": "^2.11.8", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + } + } + }, + "@mui/material": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.12.1.tgz", + "integrity": "sha512-m+G9J6+FzIMhRqKV2y30yONH97wX107z9EWgiNCeS1/+y1CnytFZNG1ENdOuaJo1NimCRnmB/iXPvoOaSo6dOg==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/base": "5.0.0-alpha.126", + "@mui/core-downloads-tracker": "^5.12.1", + "@mui/system": "^5.12.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.12.0", + "@types/react-transition-group": "^4.4.5", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + } + }, + "@mui/private-theming": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.13.1.tgz", + "integrity": "sha512-HW4npLUD9BAkVppOUZHeO1FOKUJWAwbpy0VQoGe3McUYTlck1HezGHQCfBQ5S/Nszi7EViqiimECVl9xi+/WjQ==", + "requires": { + "@babel/runtime": "^7.21.0", + "@mui/utils": "^5.13.1", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.13.2", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.13.2.tgz", + "integrity": "sha512-VCYCU6xVtXOrIN8lcbuPmoG+u7FYuOERG++fpY74hPpEWkyFQG97F+/XfTQVYzlR2m7nPjnwVUgATcTCMEaMvw==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.13.6.tgz", + "integrity": "sha512-G3Xr28uLqU3DyF6r2LQkHGw/ku4P0AHzlKVe7FGXOPl7X1u+hoe2xxj8Vdiq/69II/mh9OP21i38yBWgWb7WgQ==", + "requires": { + "@babel/runtime": "^7.22.5", + "@mui/private-theming": "^5.13.1", + "@mui/styled-engine": "^5.13.2", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.13.6", + "clsx": "^1.2.1", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", + "requires": {} + }, + "@mui/utils": { + "version": "5.13.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.13.6.tgz", + "integrity": "sha512-ggNlxl5NPSbp+kNcQLmSig6WVB0Id+4gOxhx644987v4fsji+CSXc+MFYLocFB/x4oHtzCUlSzbVHlJfP/fXoQ==", + "requires": { + "@babel/runtime": "^7.22.5", + "@types/prop-types": "^15.7.5", + "@types/react-is": "^18.2.0", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "dependencies": { + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" + }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + } + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + }, + "@reduxjs/toolkit": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", + "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==", + "requires": { + "immer": "^9.0.21", + "redux": "^4.2.1", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.8" + } + }, + "@remix-run/router": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", + "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==" + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@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 + } + } + }, + "@sentry-internal/tracing": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.59.3.tgz", + "integrity": "sha512-/RkBj/0zQKGsW/UYg6hufrLHHguncLfu4610FCPWpVp0K5Yu5ou8/Aw8D76G3ZxD2TiuSNGwX0o7TYN371ZqTQ==", + "requires": { + "@sentry/core": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/browser": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.59.3.tgz", + "integrity": "sha512-rTsePz1zEhiouX24TqjzYdY8PsBNU2EGUSHK9jCKml5i/eKTqQabnwdxHgIC4/wcs1nGOabRg/Iel6l4y4mCjA==", + "requires": { + "@sentry-internal/tracing": "7.59.3", + "@sentry/core": "7.59.3", + "@sentry/replay": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/core": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.59.3.tgz", + "integrity": "sha512-cGBOwT9gziIn50fnlBH1WGQlGcHi7wrbvOCyrex4MxKnn1LSBYWBhwU0ymj8DI/9MyPrGDNGkrgpV0WJWBSClg==", + "requires": { + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/react": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.59.3.tgz", + "integrity": "sha512-2TmJ/su8NBQad4PpyJoJ8Er6bzc1jgzgwKSYpI5xHNT6FOFxI4cGIbfrYNqXBjPTvFHwC8WFyN+XZ0K42GFgqQ==", + "requires": { + "@sentry/browser": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3", + "hoist-non-react-statics": "^3.3.2", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sentry/replay": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.59.3.tgz", + "integrity": "sha512-o0Z9XD46ua4kex8P2zcahNLARm+joLU6e8bTwjdmfsLS/A2yH1RhJ/VlcAEpPR2IzSYLXz3ApJ/XiqLPTNSu1w==", + "requires": { + "@sentry/core": "7.59.3", + "@sentry/types": "7.59.3", + "@sentry/utils": "7.59.3" + } + }, + "@sentry/types": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.59.3.tgz", + "integrity": "sha512-HQ/Pd3YHyIa4HM0bGfOsfI4ZF+sLVs6II9VtlS4hsVporm4ETl3Obld5HywO3aVYvWOk5j/bpAW9JYsxXjRG5A==" + }, + "@sentry/utils": { + "version": "7.59.3", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.59.3.tgz", + "integrity": "sha512-Q57xauMKuzd6S+POA1fmulfjzTsb/z118TNAfZZNkHqVB48hHBqgzdhbEBmN4jPCSKV2Cx7VJUoDZxJfzQyLUQ==", + "requires": { + "@sentry/types": "7.59.3", + "tslib": "^2.4.1 || ^1.9.3" + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "requires": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "requires": { + "deep-equal": "^2.0.5" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "requires": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/react": { + "version": "12.1.5", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.5.tgz", + "integrity": "sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg==", + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0", + "@types/react-dom": "<18.0.0" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/aria-query": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", + "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==" + }, + "@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", + "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "requires": { + "@types/node": "*" + } + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.10", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.10.tgz", + "integrity": "sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@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==" + }, + "@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==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@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==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", + "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + }, + "dependencies": { + "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==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + } + } + }, + "@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "peer": true + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", + "dev": true + }, + "@types/node": { + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" + }, + "@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==" + }, + "@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + }, + "@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==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "@types/react": { + "version": "17.0.58", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.58.tgz", + "integrity": "sha512-c1GzVY97P0fGxwGxhYq989j4XwlcHQoto6wQISOC2v6wm3h0PORRWJFHlkRjfGsiG3y1609WdQ+J+tKxvrEd6A==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "17.0.19", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", + "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", + "requires": { + "@types/react": "^17" + } + }, + "@types/react-is": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", + "requires": { + "@types/react": "*" + } + }, + "@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==", + "requires": { + "@types/react": "*" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==" + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@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==" + }, + "@types/testing-library__jest-dom": { + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.8.tgz", + "integrity": "sha512-NRfJE9Cgpmu4fx716q9SYmU4jxxhYRU1BQo239Txt/9N3EC745XZX1Yl7h/SBIDlo1ANVOCRB4YDXjaQdoKCHQ==", + "requires": { + "@types/jest": "*" + } + }, + "@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, + "@types/trusted-types": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==", + "dev": true + }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, + "@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@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==" + }, + "@typescript-eslint/eslint-plugin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.0.0.tgz", + "integrity": "sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==", + "requires": { + "@eslint-community/regexpp": "^4.5.0", + "@typescript-eslint/scope-manager": "6.0.0", + "@typescript-eslint/type-utils": "6.0.0", + "@typescript-eslint/utils": "6.0.0", + "@typescript-eslint/visitor-keys": "6.0.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.5.0", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.0.0.tgz", + "integrity": "sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==", + "requires": { + "@typescript-eslint/scope-manager": "6.0.0", + "@typescript-eslint/types": "6.0.0", + "@typescript-eslint/typescript-estree": "6.0.0", + "@typescript-eslint/visitor-keys": "6.0.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.0.0.tgz", + "integrity": "sha512-o4q0KHlgCZTqjuaZ25nw5W57NeykZT9LiMEG4do/ovwvOcPnDO1BI5BQdCsUkjxFyrCL0cSzLjvIMfR9uo7cWg==", + "requires": { + "@typescript-eslint/types": "6.0.0", + "@typescript-eslint/visitor-keys": "6.0.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.0.0.tgz", + "integrity": "sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==", + "requires": { + "@typescript-eslint/typescript-estree": "6.0.0", + "@typescript-eslint/utils": "6.0.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.0.0.tgz", + "integrity": "sha512-Zk9KDggyZM6tj0AJWYYKgF0yQyrcnievdhG0g5FqyU3Y2DRxJn4yWY21sJC0QKBckbsdKKjYDV2yVrrEvuTgxg==" + }, + "@typescript-eslint/typescript-estree": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.0.0.tgz", + "integrity": "sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==", + "requires": { + "@typescript-eslint/types": "6.0.0", + "@typescript-eslint/visitor-keys": "6.0.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.0", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/utils": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.0.0.tgz", + "integrity": "sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==", + "requires": { + "@eslint-community/eslint-utils": "^4.3.0", + "@types/json-schema": "^7.0.11", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "6.0.0", + "@typescript-eslint/types": "6.0.0", + "@typescript-eslint/typescript-estree": "6.0.0", + "eslint-scope": "^5.1.1", + "semver": "^7.5.0" + }, + "dependencies": { + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.0.0.tgz", + "integrity": "sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==", + "requires": { + "@typescript-eslint/types": "6.0.0", + "eslint-visitor-keys": "^3.4.1" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==" + }, + "acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "requires": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} + }, + "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==", + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "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==" + } + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "requires": { + "dequal": "^2.0.3" + } + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true, + "peer": true + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "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 + }, + "autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "requires": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + }, + "axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "dev": true, + "peer": true + }, + "axios": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", + "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "peer": true, + "requires": { + "dequal": "^2.0.3" + } + }, + "babel-jest": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz", + "integrity": "sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==", + "requires": { + "@jest/transform": "^29.6.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-import": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/babel-plugin-import/-/babel-plugin-import-1.13.6.tgz", + "integrity": "sha512-N7FYnGh0DFsvDRkAPsvFq/metVfVD7P2h1rokOPpEH4cZbdRHCW+2jbXt0nnuqowkm/xhh2ww1anIdEpfYa7ZA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "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==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "requires": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "requires": { + "run-applescript": "^5.0.0" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001480", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", + "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "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==" + } + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + }, + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" + }, + "cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + }, + "clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "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==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + }, + "collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "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==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "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==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "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==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + } + } + }, + "core-js-compat": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", + "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@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" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css-declaration-sorter": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", + "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", + "dev": true, + "requires": {} + }, + "css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "css-minimizer-webpack-plugin": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "dev": true, + "requires": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "peer": true + }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "dependencies": { + "execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "requires": { + "path-key": "^4.0.0" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + } + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.5.0.tgz", + "integrity": "sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + } + } + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron-to-chromium": { + "version": "1.4.367", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", + "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==" + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "peer": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "env-cmd": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", + "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "requires": { + "commander": "^4.0.0", + "cross-spawn": "^7.0.0" + } + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "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==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==" + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "dev": true, + "requires": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + } + }, + "eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dev": true, + "requires": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + } + }, + "eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dev": true, + "peer": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + } + }, + "eslint-plugin-prettier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz", + "integrity": "sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==", + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + } + }, + "eslint-plugin-react": { + "version": "7.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz", + "integrity": "sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "peer": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==" + }, + "espree": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "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 + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + }, + "expect": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz", + "integrity": "sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==", + "requires": { + "@jest/expect-utils": "^29.6.1", + "@types/node": "*", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1" + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "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==" + }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + }, + "fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "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==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "requires": { + "bser": "2.1.1" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "requires": { + "flat-cache": "^3.0.4" + } + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "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==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "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, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "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==" + }, + "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==" + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + }, + "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==" + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "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" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "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==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "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==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "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==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "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==" + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + } + } + }, + "html-webpack-plugin": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.1.tgz", + "integrity": "sha512-cTUzZ1+NqjGEKjmVgZKLMdiFg3m9MdRXkZW2OEe69WYVi5ONLMmlnSZdXzGGMOq0C8jGDrL6EWyEDDUioHO/pA==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "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==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "install": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", + "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==" + }, + "internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "requires": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-core-module": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "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==" + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "requires": { + "is-docker": "^3.0.0" + }, + "dependencies": { + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" + } + } + }, + "is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true + }, + "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==" + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true + }, + "is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz", + "integrity": "sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==", + "requires": { + "@jest/core": "^29.6.1", + "@jest/types": "^29.6.1", + "import-local": "^3.0.2", + "jest-cli": "^29.6.1" + } + }, + "jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "jest-circus": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz", + "integrity": "sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==", + "requires": { + "@jest/environment": "^29.6.1", + "@jest/expect": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.1", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.1", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-cli": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz", + "integrity": "sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==", + "requires": { + "@jest/core": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-config": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz", + "integrity": "sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==", + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.1", + "@jest/types": "^29.6.1", + "babel-jest": "^29.6.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.1", + "jest-environment-node": "^29.6.1", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-runner": "^29.6.1", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, + "jest-diff": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz", + "integrity": "sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==", "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, + "jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "requires": { - "has-bigints": "^1.0.1" + "detect-newline": "^3.0.0" } }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "jest-each": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz", + "integrity": "sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==", "requires": { - "binary-extensions": "^2.0.0" + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.6.1", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "jest-environment-jsdom": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.1.tgz", + "integrity": "sha512-PoY+yLaHzVRhVEjcVKSfJ7wXmJW4UqPYNhR05h7u/TK0ouf6DmRNZFBL/Z00zgQMyWGMBXn69/FmOvhEJu8cIw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", - "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", - "requires": { - "has": "^1.0.3" + "@jest/environment": "^29.6.1", + "@jest/fake-timers": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.6.1", + "jest-util": "^29.6.1", + "jsdom": "^20.0.0" } }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, + "jest-environment-node": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz", + "integrity": "sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==", "requires": { - "has-tostringtag": "^1.0.0" + "@jest/environment": "^29.6.1", + "@jest/fake-timers": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.1", + "jest-util": "^29.6.1" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==" }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "jest-haste-map": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz", + "integrity": "sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==", "requires": { - "is-extglob": "^2.1.1" + "@jest/types": "^29.6.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.1", + "jest-worker": "^29.6.1", + "micromatch": "^4.0.4", + "walker": "^1.0.8" } }, - "is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "jest-leak-detector": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz", + "integrity": "sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==", "requires": { - "is-docker": "^3.0.0" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" }, "dependencies": { - "is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" + "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==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } } } }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "dev": true - }, - "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==" - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, + "jest-matcher-utils": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz", + "integrity": "sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==", "requires": { - "isobject": "^3.0.1" + "chalk": "^4.0.0", + "jest-diff": "^29.6.1", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, + "jest-message-util": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz", + "integrity": "sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==", "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, + "jest-mock": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz", + "integrity": "sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==", "requires": { - "call-bind": "^1.0.2" + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-util": "^29.6.1" } }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "requires": {} }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } + "jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==" }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, + "jest-resolve": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz", + "integrity": "sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==", "requires": { - "has-symbols": "^1.0.2" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.1", + "jest-validate": "^29.6.1", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dev": true, + "jest-resolve-dependencies": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz", + "integrity": "sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.6.1" } }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, + "jest-runner": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz", + "integrity": "sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==", "requires": { - "call-bind": "^1.0.2" + "@jest/console": "^29.6.1", + "@jest/environment": "^29.6.1", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.6.1", + "jest-haste-map": "^29.6.1", + "jest-leak-detector": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-resolve": "^29.6.1", + "jest-runtime": "^29.6.1", + "jest-util": "^29.6.1", + "jest-watcher": "^29.6.1", + "jest-worker": "^29.6.1", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "jest-runtime": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz", + "integrity": "sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==", "requires": { - "is-docker": "^2.0.0" + "@jest/environment": "^29.6.1", + "@jest/fake-timers": "^29.6.1", + "@jest/globals": "^29.6.1", + "@jest/source-map": "^29.6.0", + "@jest/test-result": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-mock": "^29.6.1", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.1", + "jest-snapshot": "^29.6.1", + "jest-util": "^29.6.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "jest-snapshot": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz", + "integrity": "sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==", + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.1", + "@jest/transform": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.1", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.1", + "jest-message-util": "^29.6.1", + "jest-util": "^29.6.1", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.1", + "semver": "^7.5.3" }, "dependencies": { "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, "requires": { "color-convert": "^2.0.1" } @@ -18033,7 +24162,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18043,7 +24171,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18051,33 +24178,67 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } }, "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, "requires": { "has-flag": "^4.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, "jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", - "dev": true, + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz", + "integrity": "sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==", "requires": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -18089,7 +24250,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -18098,7 +24258,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18108,7 +24267,6 @@ "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, "requires": { "color-name": "~1.1.4" } @@ -18116,20 +24274,157 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz", + "integrity": "sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==", + "requires": { + "@jest/types": "^29.6.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "pretty-format": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", + "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "requires": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "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==" + } + } + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz", + "integrity": "sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==", + "requires": { + "@jest/test-result": "^29.6.1", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.1", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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, "requires": { "has-flag": "^4.0.0" } @@ -18137,13 +24432,12 @@ } }, "jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", - "dev": true, + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", + "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", "requires": { "@types/node": "*", - "jest-util": "^29.5.0", + "jest-util": "^29.6.1", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -18151,14 +24445,12 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -18178,11 +24470,78 @@ "argparse": "^2.0.1" } }, + "jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "requires": {} + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-parse-better-errors": { "version": "1.0.2", @@ -18214,8 +24573,7 @@ "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonfile": { "version": "6.1.0", @@ -18251,6 +24609,11 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, "klona": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", @@ -18287,8 +24650,7 @@ "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "levn": { "version": "0.4.1", @@ -18330,7 +24692,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -18338,8 +24699,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", @@ -18395,11 +24755,15 @@ "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, "requires": { "yallist": "^3.0.2" } }, + "lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==" + }, "magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", @@ -18413,11 +24777,18 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "requires": { "semver": "^6.0.0" } }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "requires": { + "tmpl": "1.0.5" + } + }, "mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", @@ -18494,6 +24865,11 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + }, "mini-css-extract-plugin": { "version": "2.7.5", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz", @@ -18624,6 +25000,11 @@ "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, "node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", @@ -18632,8 +25013,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-range": { "version": "0.1.2", @@ -18664,6 +25044,12 @@ "boolbase": "^1.0.0" } }, + "nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -18672,20 +25058,26 @@ "object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18807,7 +25199,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -18816,7 +25207,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "requires": { "p-limit": "^2.2.0" } @@ -18834,8 +25224,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "param-case": { "version": "3.0.4", @@ -18866,6 +25255,23 @@ "lines-and-columns": "^1.1.6" } }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + }, + "dependencies": { + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + } + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -18923,11 +25329,15 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, "requires": { "find-up": "^4.0.0" } @@ -19330,12 +25740,43 @@ "renderkid": "^3.0.0" } }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "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==" + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + } + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, "prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -19376,11 +25817,22 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, + "pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==" + }, "qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -19390,6 +25842,12 @@ "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -19544,6 +26002,15 @@ "resolve": "^1.9.0" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "redux": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", @@ -19597,7 +26064,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -19654,6 +26120,11 @@ "strip-ansi": "^6.0.1" } }, + "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==" + }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -19684,7 +26155,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, "requires": { "resolve-from": "^5.0.0" }, @@ -19692,8 +26162,7 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" } } }, @@ -19702,6 +26171,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -19817,6 +26291,15 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, "scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", @@ -19855,8 +26338,7 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "send": { "version": "0.18.0", @@ -20030,7 +26512,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -20053,6 +26534,11 @@ "totalist": "^1.0.0" } }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -20135,18 +26621,46 @@ "wbuf": "^1.7.3" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "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==" + } + } + }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, + "stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "requires": { + "internal-slot": "^1.0.4" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -20156,6 +26670,32 @@ "safe-buffer": "~5.2.0" } }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "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==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "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==" + } + } + }, "string.prototype.matchall": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", @@ -20242,6 +26782,14 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "requires": { + "min-indent": "^1.0.0" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -20305,6 +26853,12 @@ } } }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", @@ -20410,6 +26964,16 @@ } } }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -20452,6 +27016,11 @@ "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==" }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -20477,6 +27046,26 @@ "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", "dev": true }, + "tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + } + } + }, "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -20530,6 +27119,11 @@ "prelude-ls": "^1.2.1" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -20650,6 +27244,16 @@ "punycode": "^2.1.0" } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -20680,12 +27284,39 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, + "w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "requires": { + "makeerror": "1.0.12" + } + }, "watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -21028,6 +27659,32 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true + }, "whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", @@ -21051,7 +27708,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -21060,11 +27716,21 @@ "is-symbol": "^1.0.3" } }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, "which-typed-array": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", - "dev": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -21339,11 +28005,53 @@ "workbox-core": "7.0.0" } }, + "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==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "requires": { + "color-name": "~1.1.4" + } + }, + "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==" + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -21351,17 +28059,52 @@ "dev": true, "requires": {} }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "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==" + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/src/frontend/main/package.json b/src/frontend/main/package.json index 24fd3f35b0..1fc7a11de2 100755 --- a/src/frontend/main/package.json +++ b/src/frontend/main/package.json @@ -6,7 +6,8 @@ "build:dev": "webpack --mode development", "build:start": "cd dist && PORT=8080 npx serve", "start": "env-cmd -f .env.dev webpack serve --open --mode development", - "start:live": "webpack serve --open --mode development --live-reload --hot" + "start:live": "webpack serve --open --mode development --live-reload --hot", + "test": "jest tests/" }, "license": "MIT", "author": { @@ -30,6 +31,7 @@ "eslint-config-airbnb": "^19.0.4", "eslint-plugin-react": "^7.33.0", "html-webpack-plugin": "^5.3.2", + "jest-environment-jsdom": "^29.6.1", "postcss": "^8.2.1", "postcss-loader": "^4.1.0", "prettier": "^3.0.0", @@ -44,13 +46,14 @@ "workbox-webpack-plugin": "^7.0.0" }, "dependencies": { - "@emotion/react": "^11.10.5", - "@emotion/styled": "^11.10.5", "@mui/icons-material": "^5.11.0", "@mui/lab": "^5.0.0-alpha.134", "@mui/material": "^5.11.1", "@reduxjs/toolkit": "^1.9.1", "@sentry/react": "^7.59.3", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^12.1.5", + "@types/jest": "^29.5.3", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "axios": "^1.2.2", @@ -59,6 +62,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "install": "^0.13.0", + "jest": "^29.6.1", "mini-css-extract-plugin": "^2.7.5", "react": "^17.0.2", "react-dom": "^17.0.2", @@ -69,5 +73,15 @@ "react-spinners": "^0.13.8", "redux": "^4.2.0", "redux-persist": "^6.0.0" + }, + "jest": { + "testEnvironment": "jsdom", + "moduleNameMapper": { + "^components\/(.*)$": "/src/components/$1", + "^.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": + "/tests/mocks/fileMock.ts", + "^.+\\.(css|less|scss|sass)$": "/tests/mocks/styleMock.ts", + "(assets|models|services)": "/tests/mocks/fileMock.ts" + } } } diff --git a/src/frontend/main/src/types/modulesDecleration.d.ts b/src/frontend/main/src/types/modulesDecleration.d.ts index e69de29bb2..efa92cd54e 100644 --- a/src/frontend/main/src/types/modulesDecleration.d.ts +++ b/src/frontend/main/src/types/modulesDecleration.d.ts @@ -0,0 +1 @@ +declare module '@testing-library/react'; diff --git a/src/frontend/main/src/utilfunctions/testUtils.ts b/src/frontend/main/src/utilfunctions/testUtils.ts new file mode 100644 index 0000000000..cd22b67be2 --- /dev/null +++ b/src/frontend/main/src/utilfunctions/testUtils.ts @@ -0,0 +1,34 @@ +import React, { PropsWithChildren } from 'react' +import { render } from '@testing-library/react' +import type { RenderOptions } from '@testing-library/react' +// import { configureStore } from '@reduxjs/toolkit' +import type { PreloadedState } from '@reduxjs/toolkit' + +// import type { AppStore, RootState } from '../app/store' +// As a basic setup, import your same slice reducers +import userReducer from '../features/users/userSlice' +import CoreModules from '../shared/CoreModules'; + +// This type interface extends the default options for render from RTL, as well +// as allows the user to specify other things such as initialState, store. +interface ExtendedRenderOptions extends Omit { + preloadedState?: PreloadedState + store?: any +} + +export function renderWithProviders( + ui: React.ReactElement, + { + preloadedState = {}, + // Automatically create a store instance if no store was passed in + store = CoreModules.configureStore({ reducer: { user: userReducer }, preloadedState }), + ...renderOptions + }: ExtendedRenderOptions = {} +) { + function Wrapper({ children }: PropsWithChildren): any { + return {children} + } + + // Return an object with the store and all of RTL's query functions + return { store, ...render(ui, { wrapper: Wrapper, ...renderOptions }) } +} \ No newline at end of file diff --git a/src/frontend/main/tests/CreateProject.test.tsx b/src/frontend/main/tests/CreateProject.test.tsx new file mode 100644 index 0000000000..d42adfa1de --- /dev/null +++ b/src/frontend/main/tests/CreateProject.test.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { act, render, screen, fireEvent, waitFor } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import PrimaryAppBar from '../src/utilities/PrimaryAppBar'; +import { Provider } from 'react-redux'; +import { store } from '../src/store/Store.js'; +import { BrowserRouter } from 'react-router-dom'; +export const renderWithRouter = (ui, { route = '/' } = {}) => { + act(() => window.history.pushState({}, 'Test page', route)); + + return { + ...render(ui, { wrapper: BrowserRouter }), + }; +}; +jest.mock('axios'); // Mock axios module + +describe('MyComponent', () => { + test('renders the app bar with correct elements', () => { + render( + + + + + , + ); + + // Check if the "EXPLORE PROJECTS" tab is rendered + const exploreTabElement = screen.getByText('EXPLORE PROJECTS'); + expect(exploreTabElement).toBeInTheDocument(); + + // Check if the "MANAGE ORGANIZATIONS" tab is rendered + const manageOrgTabElement = screen.getByText('MANAGE ORGANIZATIONS'); + expect(manageOrgTabElement).toBeInTheDocument(); + }); +}); diff --git a/src/frontend/main/tests/mocks/fileMock.ts b/src/frontend/main/tests/mocks/fileMock.ts new file mode 100644 index 0000000000..9dc5fc1e4a --- /dev/null +++ b/src/frontend/main/tests/mocks/fileMock.ts @@ -0,0 +1 @@ +module.exports = ''; diff --git a/src/frontend/main/tsconfig.json b/src/frontend/main/tsconfig.json index 5ba2ad6552..ff388b6558 100644 --- a/src/frontend/main/tsconfig.json +++ b/src/frontend/main/tsconfig.json @@ -12,14 +12,16 @@ "skipLibCheck": true, "esModuleInterop": false, "allowSyntheticDefaultImports": true, - "strict": true, + "strict": false, "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", + "module": "NodeNext", + // "moduleResolution": "Node", + "moduleResolution": "NodeNext", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, - "jsx": "react-jsx", + // "jsx": "react-jsx", + "jsx": "react", "baseUrl": "./src/", "noImplicitAny": false, //FIXME: Change This "true" to "false" To Integrate Types Instead Of "Any" Types. "strictNullChecks": true, @@ -35,7 +37,8 @@ // ".eslintrc.cjs", // ".eslintrc.js", "src", - "src/**/*.ts" + "src/**/*.ts", + "tests" ], "exclude": [ "node_modules", diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index 5ea3fa12a7..18b29ad745 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -1,17 +1,16 @@ -const { EnvironmentPlugin } = require("webpack"); -const HtmlWebPackPlugin = require("html-webpack-plugin"); -const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); +const { EnvironmentPlugin } = require('webpack'); +const HtmlWebPackPlugin = require('html-webpack-plugin'); +const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin'); const TerserPlugin = require('terser-webpack-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); const path = require('path'); -const deps = require("./package.json").dependencies; -const MiniCssExtractPlugin = require("mini-css-extract-plugin"); +const deps = require('./package.json').dependencies; +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const WorkboxWebpackPlugin = require('workbox-webpack-plugin'); // Add the WorkboxWebpackPlugin -const CopyPlugin = require("copy-webpack-plugin"); +const CopyPlugin = require('copy-webpack-plugin'); //const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; module.exports = function (webpackEnv) { - const isEnvDevelopment = webpackEnv === 'development'; const isEnvProduction = webpackEnv === 'production'; @@ -21,18 +20,18 @@ module.exports = function (webpackEnv) { mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development', // Stop compilation early in production // bail: isEnvProduction, - devtool: isEnvProduction ? 'source-map' : isEnvDevelopment && 'inline-source-map', + devtool: isEnvProduction ? 'source-map' : isEnvDevelopment && 'eval-source-map', output: { publicPath: `${process.env.FRONTEND_MAIN_URL}/`, - path: path.resolve(__dirname, "dist"), - filename: "[name].[contenthash].bundle.js", - clean:true + path: path.resolve(__dirname, 'dist'), + filename: '[name].[contenthash].bundle.js', + clean: true, }, resolve: { - extensions: [".tsx", ".ts", ".jsx", ".js", ".json"], + extensions: ['.tsx', '.ts', '.jsx', '.js', '.json'], }, devServer: { - host: "0.0.0.0", + host: '0.0.0.0', port: `${new URL(process.env.FRONTEND_MAIN_URL).port}`, historyApiFallback: true, allowedHosts: [`${process.env.FRONTEND_MAIN_URL}`], @@ -50,23 +49,20 @@ module.exports = function (webpackEnv) { }, { test: /\.m?js/, - type: "javascript/auto", + type: 'javascript/auto', resolve: { fullySpecified: false, }, }, { test: /\.(css|s[ac]ss)$/i, - use: ["style-loader", "css-loader", "postcss-loader"], + use: ['style-loader', 'css-loader', 'postcss-loader'], }, { test: /\.(ts|tsx|js|jsx)$/, include: path.resolve(__dirname, './src'), exclude: /node_modules/, - use: [ - 'thread-loader', - 'babel-loader' - ], + use: ['thread-loader', 'babel-loader'], }, ], }, @@ -75,13 +71,13 @@ module.exports = function (webpackEnv) { runtimeChunk: 'single', usedExports: true, splitChunks: { - cacheGroups: { - vendor: { - test: /[\\/]node_modules[\\/]/, - name: 'vendors', - chunks: 'all', - }, + cacheGroups: { + vendor: { + test: /[\\/]node_modules[\\/]/, + name: 'vendors', + chunks: 'all', }, + }, }, minimize: isEnvProduction, minimizer: [ @@ -108,12 +104,12 @@ module.exports = function (webpackEnv) { ecma: 5, comments: false, ascii__only: true, - } + }, }, - + // Use multi-process parallel running to improve the build speed parallel: true, - + // Enable file caching cache: true, }, @@ -125,15 +121,15 @@ module.exports = function (webpackEnv) { plugins: [ new CopyPlugin({ patterns: [ - { from: "./public/", to: "./" }, + { from: './public/', to: './' }, // { from: "other", to: "public" }, ], }), - // Add the WorkboxWebpackPlugin to generate the service worker and handle caching - new WorkboxWebpackPlugin.GenerateSW({ + // Add the WorkboxWebpackPlugin to generate the service worker and handle caching + new WorkboxWebpackPlugin.GenerateSW({ clientsClaim: true, skipWaiting: true, - maximumFileSizeToCacheInBytes:50000000 + maximumFileSizeToCacheInBytes: 50000000, }), //new BundleAnalyzerPlugin(), new MiniCssExtractPlugin({ @@ -141,28 +137,28 @@ module.exports = function (webpackEnv) { chunkFilename: 'static/css/[name].[contenthash:8].chunk.css', }), new ModuleFederationPlugin({ - name: "fmtm", - filename: "remoteEntry.js", + name: 'fmtm', + filename: 'remoteEntry.js', remotes: { - map: `fmtm_openlayer_map@${process.env.FRONTEND_MAP_URL}/remoteEntry.js`, + map: `fmtm_openlayer_map@${process.env.FRONTEND_MAP_URL}/remoteEntry.js`, }, exposes: { - "./ThemeSlice": "./src/store/slices/ThemeSlice.ts", - "./HomeSlice": "./src/store/slices/HomeSlice.ts", - "./CommonSlice": "./src/store/slices/CommonSlice.ts", - "./LoginSlice": "./src/store/slices/LoginSlice.ts", - "./ProjectSlice": "./src/store/slices/ProjectSlice.ts", - "./CreateProjectSlice": "./src/store/slices/CreateProjectSlice.ts", - "./Store": "./src/store/Store.js", - "./BasicCard": "./src/utilities/BasicCard.tsx", - "./CustomizedMenus": "./src/utilities/CustomizedMenus.tsx", - "./CustomizedSnackbar": "./src/utilities/CustomizedSnackbar.jsx", - "./PrimaryAppBar": "./src/utilities/PrimaryAppBar.tsx", - "./environment": "./src/environment.ts", - "./WindowDimension": "./src/hooks/WindowDimension.tsx", - "./OnScroll": "./src/hooks/OnScroll.tsx", - "./CoreModules": "./src/shared/CoreModules.js", - "./AssetModules": "./src/shared/AssetModules.js" + './ThemeSlice': './src/store/slices/ThemeSlice.ts', + './HomeSlice': './src/store/slices/HomeSlice.ts', + './CommonSlice': './src/store/slices/CommonSlice.ts', + './LoginSlice': './src/store/slices/LoginSlice.ts', + './ProjectSlice': './src/store/slices/ProjectSlice.ts', + './CreateProjectSlice': './src/store/slices/CreateProjectSlice.ts', + './Store': './src/store/Store.js', + './BasicCard': './src/utilities/BasicCard.tsx', + './CustomizedMenus': './src/utilities/CustomizedMenus.tsx', + './CustomizedSnackbar': './src/utilities/CustomizedSnackbar.jsx', + './PrimaryAppBar': './src/utilities/PrimaryAppBar.tsx', + './environment': './src/environment.ts', + './WindowDimension': './src/hooks/WindowDimension.tsx', + './OnScroll': './src/hooks/OnScroll.tsx', + './CoreModules': './src/shared/CoreModules.js', + './AssetModules': './src/shared/AssetModules.js', }, shared: { ...deps, @@ -170,9 +166,9 @@ module.exports = function (webpackEnv) { singleton: true, requiredVersion: deps.react, }, - "react-dom": { + 'react-dom': { singleton: true, - requiredVersion: deps["react-dom"], + requiredVersion: deps['react-dom'], // requiredVersion: deps["react-dom", "@material-ui/core", "@material-ui/icons"], }, }, @@ -182,28 +178,30 @@ module.exports = function (webpackEnv) { {}, { inject: true, - template: "./src/index.html", + template: './src/index.html', favicon: './src/assets/images/favicon.ico', }, // Only for production - isEnvProduction ? { - minify: { - removeComments: true, - collapseWhitespace: true, - removeRedundantAttributes: true, - useShortDoctype: true, - removeEmptyAttributes: true, - removeStyleLinkTypeAttributes: true, - keepClosingSlash: true, - minifyJS: true, - minifyCSS: true, - minifyURLs: true - } - } : undefined - ) + isEnvProduction + ? { + minify: { + removeComments: true, + collapseWhitespace: true, + removeRedundantAttributes: true, + useShortDoctype: true, + removeEmptyAttributes: true, + removeStyleLinkTypeAttributes: true, + keepClosingSlash: true, + minifyJS: true, + minifyCSS: true, + minifyURLs: true, + }, + } + : undefined, + ), ), - new EnvironmentPlugin(["API_URL", "FRONTEND_MAIN_URL", "FRONTEND_MAP_URL"]), + new EnvironmentPlugin(['API_URL', 'FRONTEND_MAIN_URL', 'FRONTEND_MAP_URL']), ], - } + }; }; From 34b1429d71e26c25f180c6ce48a51ffe3a352c60 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 26 Jul 2023 11:48:05 +0545 Subject: [PATCH 078/222] Feat: Prettier Auto Formatted Files --- src/frontend/main/src/App.jsx | 78 +++--- src/frontend/main/src/api/LoginService.ts | 185 ++++++------- src/frontend/main/src/shared/AssetModules.js | 127 +++++---- src/frontend/main/src/shared/CoreModules.js | 256 +++++++++--------- src/frontend/main/src/store/Store.js | 91 +++---- .../main/src/utilities/BasicDialog.tsx | 72 ++--- src/frontend/main/src/utilities/BasicTabs.tsx | 161 ++++++----- src/frontend/main/src/views/Create.tsx | 191 ++++++------- .../main/src/views/CreateOrganization.tsx | 17 +- 9 files changed, 571 insertions(+), 607 deletions(-) diff --git a/src/frontend/main/src/App.jsx b/src/frontend/main/src/App.jsx index f2a7d7d101..83427f4a6b 100755 --- a/src/frontend/main/src/App.jsx +++ b/src/frontend/main/src/App.jsx @@ -1,50 +1,58 @@ -import React from "react"; -import ReactDOM from "react-dom"; -import { RouterProvider } from 'react-router-dom' +import React from 'react'; +import ReactDOM from 'react-dom'; +import { RouterProvider } from 'react-router-dom'; import { store, persistor } from './store/Store'; -import { Provider } from "react-redux"; -import routes from "./routes"; -import { PersistGate } from "redux-persist/integration/react"; -import "./index.css"; -import 'react-loading-skeleton/dist/skeleton.css' -import * as Sentry from "@sentry/react"; -import environment from "./environment"; +import { Provider } from 'react-redux'; +import routes from './routes'; +import { PersistGate } from 'redux-persist/integration/react'; +import './index.css'; +import 'react-loading-skeleton/dist/skeleton.css'; +import * as Sentry from '@sentry/react'; +import environment from './environment'; // import 'swiper/css'; // import 'swiper/css/navigation'; // import 'swiper/css/pagination'; { - environment.nodeEnv !== 'development' ? Sentry.init({ - dsn: environment.main_url === 'fmtm.hotosm.org' ? "https://35c80d0894e441f593c5ac5dfa1094a0@o68147.ingest.sentry.io/4505557311356928" : "https://35c80d0894e441f593c5ac5dfa1094a0@o68147.ingest.sentry.io/4505557311356928", - integrations: [ - new Sentry.BrowserTracing({ - // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled - tracePropagationTargets: ["https://fmtm.naxa.com.np/", "https://fmtm.hotosm.org/"], - }), - new Sentry.Replay(), - ], - // Performance Monitoring - tracesSampleRate: 1.0, // Capture 100% of the transactions, reduce in production! - // Session Replay - replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. - replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. - }) : null -}; - + environment.nodeEnv !== 'development' + ? Sentry.init({ + dsn: + environment.main_url === 'fmtm.hotosm.org' + ? 'https://35c80d0894e441f593c5ac5dfa1094a0@o68147.ingest.sentry.io/4505557311356928' + : 'https://35c80d0894e441f593c5ac5dfa1094a0@o68147.ingest.sentry.io/4505557311356928', + integrations: [ + new Sentry.BrowserTracing({ + // Set 'tracePropagationTargets' to control for which URLs distributed tracing should be enabled + tracePropagationTargets: ['https://fmtm.naxa.com.np/', 'https://fmtm.hotosm.org/'], + }), + new Sentry.Replay(), + ], + // Performance Monitoring + tracesSampleRate: 1.0, // Capture 100% of the transactions, reduce in production! + // Session Replay + replaysSessionSampleRate: 0.1, // This sets the sample rate at 10%. You may want to change it to 100% while in development and then sample at a lower rate in production. + replaysOnErrorSampleRate: 1.0, // If you're not already sampling the entire session, change the sample rate to 100% when sampling sessions where errors occur. + }) + : null; +} ReactDOM.render( - - , document.getElementById("app")); + , + document.getElementById('app'), +); if ('serviceWorker' in navigator) { window.addEventListener('load', () => { - navigator.serviceWorker.register('/service-worker.js').then(registration => { - console.log('ServiceWorker registered: ', registration); - }).catch(error => { - console.log('ServiceWorker registration failed: ', error); - }); + navigator.serviceWorker + .register('/service-worker.js') + .then((registration) => { + console.log('ServiceWorker registered: ', registration); + }) + .catch((error) => { + console.log('ServiceWorker registration failed: ', error); + }); }); -} \ No newline at end of file +} diff --git a/src/frontend/main/src/api/LoginService.ts b/src/frontend/main/src/api/LoginService.ts index ad23985e05..882acf6485 100755 --- a/src/frontend/main/src/api/LoginService.ts +++ b/src/frontend/main/src/api/LoginService.ts @@ -1,110 +1,97 @@ import axios from 'axios'; import { LoginActions } from '../store/slices/LoginSlice'; -import {SignInModel, SingUpModel } from '../models/login/loginModel'; +import { SignInModel, SingUpModel } from '../models/login/loginModel'; import { CommonActions } from '../store/slices/CommonSlice'; -export const SignUpService: Function = (url: string, body:SingUpModel) => { +export const SignUpService: Function = (url: string, body: SingUpModel) => { + return async (dispatch) => { + dispatch(CommonActions.SetLoading(true)); - return async (dispatch) => { + const createUser = async (url, body) => { + try { + const createUserData = await axios.post(url, body); + const resp: any = createUserData.data; + dispatch(CommonActions.SetLoading(false)); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: 'User Successfully Created.', + variant: 'success', + duration: 2000, + }), + ); + } catch (error: any) { + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: error?.response?.data?.detail || 'Error in creating user.', + variant: 'error', + duration: 2000, + }), + ); + dispatch(CommonActions.SetLoading(false)); + } + }; - dispatch(CommonActions.SetLoading(true)) + await createUser(url, body); + }; +}; - const createUser= async (url,body) => { - try { - const createUserData = await axios.post(url,body) - const resp: any = createUserData.data; - dispatch(CommonActions.SetLoading(false)) - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: 'User Successfully Created.', - variant: "success", - duration: 2000, - }) - ); - } catch (error:any) { - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: error?.response?.data?.detail ||'Error in creating user.', - variant: "error", - duration: 2000, - }) - ); - dispatch(CommonActions.SetLoading(false)) - } - } - - await createUser(url,body); - - - } - -} +export const SignInService: Function = (url: string, body: SignInModel) => { + return async (dispatch) => { + dispatch(CommonActions.SetLoading(true)); -export const SignInService: Function = (url: string, body:SignInModel) => { - - return async (dispatch) => { + const signIn = async (url, body) => { + try { + const fetchUsers = await axios.get(url); + const resp: any = fetchUsers.data; + const userIndex = resp.findIndex((user) => user.username.toString() == body.username.toString()); - dispatch(CommonActions.SetLoading(true)) - - const signIn= async (url,body) => { - - try { - const fetchUsers = await axios.get(url) - const resp: any = fetchUsers.data; - const userIndex = resp.findIndex(user=>user.username.toString() == body.username.toString()) - - if (userIndex!= -1 ) { - if (resp[userIndex].hasOwnProperty('id')) { - dispatch(LoginActions.SetLoginToken(resp[userIndex])) - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: 'Successfully Logged in.', - variant: "success", - duration: 2000, - }) - ); - dispatch(CommonActions.SetLoading(false)) - }else{ - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: 'User does\'t exist', - variant: "error", - duration: 2000, - }) - ); - dispatch(CommonActions.SetLoading(false)) - } - - }else{ - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: 'User does\'t exist', - variant: "error", - duration: 2000, - }) - ); - dispatch(CommonActions.SetLoading(false)) - } - - } catch (error) { - CommonActions.SetSnackBar({ - open: true, - message: 'User does\'t exist', - variant: "error", - duration: 2000, - }) - dispatch(CommonActions.SetLoading(false)) - } + if (userIndex != -1) { + if (resp[userIndex].hasOwnProperty('id')) { + dispatch(LoginActions.SetLoginToken(resp[userIndex])); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: 'Successfully Logged in.', + variant: 'success', + duration: 2000, + }), + ); + dispatch(CommonActions.SetLoading(false)); + } else { + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: "User does't exist", + variant: 'error', + duration: 2000, + }), + ); + dispatch(CommonActions.SetLoading(false)); + } + } else { + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: "User does't exist", + variant: 'error', + duration: 2000, + }), + ); + dispatch(CommonActions.SetLoading(false)); } + } catch (error) { + CommonActions.SetSnackBar({ + open: true, + message: "User does't exist", + variant: 'error', + duration: 2000, + }); + dispatch(CommonActions.SetLoading(false)); + } + }; - await signIn(url,body); - - - } - -} + await signIn(url, body); + }; +}; diff --git a/src/frontend/main/src/shared/AssetModules.js b/src/frontend/main/src/shared/AssetModules.js index 8fe6ef7b35..6265b26dc7 100755 --- a/src/frontend/main/src/shared/AssetModules.js +++ b/src/frontend/main/src/shared/AssetModules.js @@ -1,69 +1,68 @@ - import { - LocationOn, - AutoAwesome, - Search as SearchIcon, - Close as CloseIcon, - Person as PersonIcon, - Login as LoginIcon, - Menu as MenuIcon, - KeyboardArrowDown as KeyboardArrowDownIcon, - DarkMode as DarkModeIcon, - LightMode as LightModeIcon, - Link as LinkIcon, - Rectangle as RectangleIcon, - AccessTimeFilled as AccessTimeFilledIcon, - Lock as LockIcon, - Fullscreen as FullscreenIcon, - MyLocation as MyLocationIcon, - GridView as GridViewIcon, - Add as AddIcon, - FormatAlignCenter as FormatAlignCenterIcon, - Remove as RemoveIcon, - KeyboardDoubleArrowUp as KeyboardDoubleArrowUpIcon, - KeyboardDoubleArrowDown as KeyboardDoubleArrowDownIcon, - Verified as VerifiedIcon, - LockOpen as LockOpenIcon, - Description as DescriptionIcon, - FileDownload as FileDownloadIcon, - Share as ShareIcon, - ExitToApp as ExitToAppIcon, - SettingsSuggest as SettingsSuggestIcon, - ArrowBack as ArrowBackIcon + LocationOn, + AutoAwesome, + Search as SearchIcon, + Close as CloseIcon, + Person as PersonIcon, + Login as LoginIcon, + Menu as MenuIcon, + KeyboardArrowDown as KeyboardArrowDownIcon, + DarkMode as DarkModeIcon, + LightMode as LightModeIcon, + Link as LinkIcon, + Rectangle as RectangleIcon, + AccessTimeFilled as AccessTimeFilledIcon, + Lock as LockIcon, + Fullscreen as FullscreenIcon, + MyLocation as MyLocationIcon, + GridView as GridViewIcon, + Add as AddIcon, + FormatAlignCenter as FormatAlignCenterIcon, + Remove as RemoveIcon, + KeyboardDoubleArrowUp as KeyboardDoubleArrowUpIcon, + KeyboardDoubleArrowDown as KeyboardDoubleArrowDownIcon, + Verified as VerifiedIcon, + LockOpen as LockOpenIcon, + Description as DescriptionIcon, + FileDownload as FileDownloadIcon, + Share as ShareIcon, + ExitToApp as ExitToAppIcon, + SettingsSuggest as SettingsSuggestIcon, + ArrowBack as ArrowBackIcon, } from '@mui/icons-material'; import { styled, alpha } from '@mui/material/styles'; export default { - ExitToAppIcon, - ShareIcon, - VerifiedIcon, - LockOpenIcon, - DescriptionIcon, - FileDownloadIcon, - LocationOn, - AutoAwesome, - SearchIcon, - styled, - alpha, - CloseIcon, - PersonIcon, - LoginIcon, - KeyboardArrowDownIcon, - DarkModeIcon, - LightModeIcon, - MenuIcon, - LinkIcon, - RectangleIcon, - AccessTimeFilledIcon, - LockIcon, - FullscreenIcon, - MyLocationIcon, - GridViewIcon, - AddIcon, - FormatAlignCenterIcon, - RemoveIcon, - KeyboardDoubleArrowUpIcon, - KeyboardDoubleArrowDownIcon, - SettingsSuggestIcon, - ArrowBackIcon -} \ No newline at end of file + ExitToAppIcon, + ShareIcon, + VerifiedIcon, + LockOpenIcon, + DescriptionIcon, + FileDownloadIcon, + LocationOn, + AutoAwesome, + SearchIcon, + styled, + alpha, + CloseIcon, + PersonIcon, + LoginIcon, + KeyboardArrowDownIcon, + DarkModeIcon, + LightModeIcon, + MenuIcon, + LinkIcon, + RectangleIcon, + AccessTimeFilledIcon, + LockIcon, + FullscreenIcon, + MyLocationIcon, + GridViewIcon, + AddIcon, + FormatAlignCenterIcon, + RemoveIcon, + KeyboardDoubleArrowUpIcon, + KeyboardDoubleArrowDownIcon, + SettingsSuggestIcon, + ArrowBackIcon, +}; diff --git a/src/frontend/main/src/shared/CoreModules.js b/src/frontend/main/src/shared/CoreModules.js index d7171e9e0c..4f3bc7950f 100755 --- a/src/frontend/main/src/shared/CoreModules.js +++ b/src/frontend/main/src/shared/CoreModules.js @@ -1,133 +1,139 @@ - import { - Card, - CardContent, - Typography, - Stack, - Button, - InputBase, - Input, - Dialog, - DialogActions, - DialogContent, - DialogTitle, - Slide, - IconButton, - Tabs, - Tab, - Divider, - List, - ListItem, - ListItemText, - Menu, - Alert as MuiAlert, - Snackbar, - AppBar, - Toolbar, - Grid, - Pagination, - CssBaseline, - Paper, - Container, - TextField, - FormControlLabel, - Select, - MenuItem, - FormControl, - FormLabel, - FormGroup, - Box, - Avatar, - InputAdornment, - InputLabel, - Tooltip, - Breadcrumbs, - CardMedia, -} from "@mui/material"; -import {LoadingButton} from "@mui/lab"; + Card, + CardContent, + Typography, + Stack, + Button, + InputBase, + Input, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + Slide, + IconButton, + Tabs, + Tab, + Divider, + List, + ListItem, + ListItemText, + Menu, + Alert as MuiAlert, + Snackbar, + AppBar, + Toolbar, + Grid, + Pagination, + CssBaseline, + Paper, + Container, + TextField, + FormControlLabel, + Select, + MenuItem, + FormControl, + FormLabel, + FormGroup, + Box, + Avatar, + InputAdornment, + InputLabel, + Tooltip, + Breadcrumbs, + CardMedia, +} from '@mui/material'; +import { LoadingButton } from '@mui/lab'; import { createTheme, ThemeProvider } from '@mui/material/styles'; import axios from 'axios'; -import { PersistGate } from "redux-persist/integration/react"; +import { PersistGate } from 'redux-persist/integration/react'; // import { Navigation as SwiperNavigation, Pagination as SwiperPagination } from "swiper"; // import { Swiper, SwiperSlide } from 'swiper/react'; -import Skeleton, { SkeletonTheme } from 'react-loading-skeleton' -import { useNavigate, useParams, Link, Outlet, RouterProvider,useLocation,createBrowserRouter } from "react-router-dom"; +import Skeleton, { SkeletonTheme } from 'react-loading-skeleton'; +import { + useNavigate, + useParams, + Link, + Outlet, + RouterProvider, + useLocation, + createBrowserRouter, +} from 'react-router-dom'; import { useSelector, useDispatch, Provider } from 'react-redux'; -import { createSlice, configureStore, getDefaultMiddleware } from "@reduxjs/toolkit"; -import { combineReducers } from 'redux' -import LoadingBar from "../components/createproject/LoadingBar"; -import { TaskActions } from "../store/slices/TaskSlice"; +import { createSlice, configureStore, getDefaultMiddleware } from '@reduxjs/toolkit'; +import { combineReducers } from 'redux'; +import LoadingBar from '../components/createproject/LoadingBar'; +import { TaskActions } from '../store/slices/TaskSlice'; export default { - Provider, - PersistGate, - RouterProvider, - createBrowserRouter, - Card, - CardContent, - useNavigate, - useParams, - useSelector, - useDispatch, - Stack, - Typography, - Button, - InputBase, - Input, - Skeleton, - SkeletonTheme, - createSlice, - configureStore, - combineReducers, - useLocation, - getDefaultMiddleware, - Dialog, - DialogActions, - DialogContent, - DialogTitle, - Slide, - IconButton, - Tabs, - Tab, - Divider, - List, - ListItem, - ListItemText, - Menu, - MuiAlert, - Snackbar, - AppBar, - Toolbar, - Link, - Grid, - Pagination, - ThemeProvider, - CssBaseline, - Paper, - createTheme, - Outlet, - Container, - // SwiperNavigation, - // SwiperPagination, - // Swiper, - // SwiperSlide, - axios, - TextField, - FormControlLabel, - Select, - MenuItem, - FormControl, - FormLabel, - FormGroup, - Box, - Avatar, - InputAdornment, - InputLabel, - Tooltip, - Breadcrumbs, - CardMedia, - LoadingBar, - TaskActions, - LoadingButton, - -} \ No newline at end of file + Provider, + PersistGate, + RouterProvider, + createBrowserRouter, + Card, + CardContent, + useNavigate, + useParams, + useSelector, + useDispatch, + Stack, + Typography, + Button, + InputBase, + Input, + Skeleton, + SkeletonTheme, + createSlice, + configureStore, + combineReducers, + useLocation, + getDefaultMiddleware, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + Slide, + IconButton, + Tabs, + Tab, + Divider, + List, + ListItem, + ListItemText, + Menu, + MuiAlert, + Snackbar, + AppBar, + Toolbar, + Link, + Grid, + Pagination, + ThemeProvider, + CssBaseline, + Paper, + createTheme, + Outlet, + Container, + // SwiperNavigation, + // SwiperPagination, + // Swiper, + // SwiperSlide, + axios, + TextField, + FormControlLabel, + Select, + MenuItem, + FormControl, + FormLabel, + FormGroup, + Box, + Avatar, + InputAdornment, + InputLabel, + Tooltip, + Breadcrumbs, + CardMedia, + LoadingBar, + TaskActions, + LoadingButton, +}; diff --git a/src/frontend/main/src/store/Store.js b/src/frontend/main/src/store/Store.js index 1824142561..1d07423c7e 100755 --- a/src/frontend/main/src/store/Store.js +++ b/src/frontend/main/src/store/Store.js @@ -1,54 +1,44 @@ -import HomeSlice from "./slices/HomeSlice"; -import ThemeSlice from "./slices/ThemeSlice"; +import HomeSlice from './slices/HomeSlice'; +import ThemeSlice from './slices/ThemeSlice'; // import projectSlice from 'map/Project'; import CoreModules from '../shared/CoreModules'; -import { - persistStore, - persistReducer, - FLUSH, - REHYDRATE, - PAUSE, - PERSIST, - PURGE, - REGISTER, -} from 'redux-persist' +import { persistStore, persistReducer, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; -import ProjectSlice from "./slices/ProjectSlice"; -import CreateProjectSlice from "./slices/CreateProjectSlice"; -import CommonSlice from "./slices/CommonSlice"; -import LoginSlice from "./slices/LoginSlice"; -import OrganizationSlice from "./slices/organizationSlice.ts" -import SubmissionSlice from "./slices/SubmissionSlice.ts" -import TaskSlice from "./slices/TaskSlice.ts" +import ProjectSlice from './slices/ProjectSlice'; +import CreateProjectSlice from './slices/CreateProjectSlice'; +import CommonSlice from './slices/CommonSlice'; +import LoginSlice from './slices/LoginSlice'; +import OrganizationSlice from './slices/organizationSlice.ts'; +import SubmissionSlice from './slices/SubmissionSlice.ts'; +import TaskSlice from './slices/TaskSlice.ts'; const reducers = CoreModules.combineReducers({ - project: persistReducer( - { - key: 'project', - storage, - blacklist: ['projectBuildingGeojson'], - - }, - ProjectSlice.reducer - ), - // project: ProjectSlice.reducer, - login: persistReducer( - { - key: 'login', - storage, - }, - LoginSlice.reducer - ), - //you can persist your auth reducer here similar to project reducer - home: HomeSlice.reducer, - theme: ThemeSlice.reducer, - createproject: CreateProjectSlice.reducer, - organization: OrganizationSlice.reducer, - // added common slice in order to handle all the common things like snackbar etc - common: CommonSlice.reducer, - submission: SubmissionSlice.reducer, - task: TaskSlice.reducer -}) + project: persistReducer( + { + key: 'project', + storage, + blacklist: ['projectBuildingGeojson'], + }, + ProjectSlice.reducer, + ), + // project: ProjectSlice.reducer, + login: persistReducer( + { + key: 'login', + storage, + }, + LoginSlice.reducer, + ), + //you can persist your auth reducer here similar to project reducer + home: HomeSlice.reducer, + theme: ThemeSlice.reducer, + createproject: CreateProjectSlice.reducer, + organization: OrganizationSlice.reducer, + // added common slice in order to handle all the common things like snackbar etc + common: CommonSlice.reducer, + submission: SubmissionSlice.reducer, + task: TaskSlice.reducer, +}); // const middleware = routerMiddleware(history); // const middleware = [ @@ -59,9 +49,8 @@ const reducers = CoreModules.combineReducers({ // ]; export const store = CoreModules.configureStore({ - reducer: reducers, - // middleware: middleware - -}) + reducer: reducers, + // middleware: middleware +}); -export const persistor = persistStore(store) +export const persistor = persistStore(store); diff --git a/src/frontend/main/src/utilities/BasicDialog.tsx b/src/frontend/main/src/utilities/BasicDialog.tsx index 6a61f4492f..6533ff11ab 100755 --- a/src/frontend/main/src/utilities/BasicDialog.tsx +++ b/src/frontend/main/src/utilities/BasicDialog.tsx @@ -4,54 +4,38 @@ import CoreModules from '../shared/CoreModules'; import AssetModules from '../shared/AssetModules'; const Transition = React.forwardRef(function Transition( - props: TransitionProps & { - children: React.ReactElement; - }, - ref: React.Ref, + props: TransitionProps & { + children: React.ReactElement; + }, + ref: React.Ref, ) { - return ; + return ; }); export default function BasicDialog({ open, onClose, title, iconCloseMode, actionsButton, element }) { - - return ( + return ( + + - - - { - iconCloseMode && - - - - - - } - {title} - - - {element} - - - { - iconCloseMode != true && actionsButton - } - - + {iconCloseMode && ( + + + + + + )} + {title} - ); + {element} + {iconCloseMode != true && actionsButton} + + + ); } diff --git a/src/frontend/main/src/utilities/BasicTabs.tsx b/src/frontend/main/src/utilities/BasicTabs.tsx index f9e062c966..1d6660a6c6 100755 --- a/src/frontend/main/src/utilities/BasicTabs.tsx +++ b/src/frontend/main/src/utilities/BasicTabs.tsx @@ -4,100 +4,91 @@ import windowDimention from '../hooks/WindowDimension'; import CoreModules from '../shared/CoreModules'; function TabPanel(props) { - const { children, value, index, ...other } = props; - return ( -

- ); + const { children, value, index, ...other } = props; + return ( + + ); } TabPanel.propTypes = { - children: PropTypes.node, - index: PropTypes.number.isRequired, - value: PropTypes.number.isRequired, + children: PropTypes.node, + index: PropTypes.number.isRequired, + value: PropTypes.number.isRequired, }; function a11yProps(index) { - return { - id: `simple-tab-${index}`, - 'aria-controls': `simple-tabpanel-${index}`, - }; + return { + id: `simple-tab-${index}`, + 'aria-controls': `simple-tabpanel-${index}`, + }; } export default function BasicTabs({ listOfData }) { - const defaultTheme: any = CoreModules.useSelector(state => state.theme.hotTheme) - const [value, setValue] = React.useState(0); - const { type } = windowDimention(); - const variant: any = type == 's' ? 'fullWidth' : type == 'xs' ? 'fullWidth' : 'standard' - - const handleChange = (event, newValue) => { - setValue(newValue); - }; + const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const [value, setValue] = React.useState(0); + const { type } = windowDimention(); + const variant: any = type == 's' ? 'fullWidth' : type == 'xs' ? 'fullWidth' : 'standard'; - return ( - - - - { - listOfData.map((item, index) => { - return ( - { + setValue(newValue); + }; - sx={{ - fontFamily: defaultTheme.typography.h1.fontFamily, - fontSize: defaultTheme.typography.fontSize, - mt: 0.8, mb: 1, - mr: 1, - '&:hover': { - backgroundColor: defaultTheme.palette.primary['primary_rgb'] - } - }} - label={item.label - } {...a11yProps(0)} - /> - ) - }) - } - - - { - listOfData.map((item, index) => { - return ( - - { - item.element - } - - ) - }) - } - - ); + return ( + + + + {listOfData.map((item, index) => { + return ( + + ); + })} + + + {listOfData.map((item, index) => { + return ( + + {item.element} + + ); + })} + + ); } diff --git a/src/frontend/main/src/views/Create.tsx b/src/frontend/main/src/views/Create.tsx index c9ab8c88dd..ab24102d99 100755 --- a/src/frontend/main/src/views/Create.tsx +++ b/src/frontend/main/src/views/Create.tsx @@ -1,104 +1,107 @@ -import React, {useState } from "react"; -import '../styles/login.css' -import enviroment from "../environment"; -import CoreModules from "../shared/CoreModules"; -import {SignUpService} from '../api/LoginService' -import { useCallback } from "react"; -import { SingUpModel } from "../models/login/loginModel"; - /* +import React, { useState } from 'react'; +import '../styles/login.css'; +import enviroment from '../environment'; +import CoreModules from '../shared/CoreModules'; +import { SignUpService } from '../api/LoginService'; +import { useCallback } from 'react'; +import { SingUpModel } from '../models/login/loginModel'; +/* Create a simple input element in React that calls a function when onFocusOut is triggered */ - - - const Create = () => { - const defaultTheme:any = CoreModules.useSelector(state => state.theme.hotTheme) - const token:any = CoreModules.useSelector(state=>state.login.loginToken) - const dispatch = CoreModules.useDispatch() - //dispatch function to perform redux state mutation - const navigate = CoreModules.useNavigate(); - const initalUserForm = { - username:'', - password:'', - confirmPassword:'' - } - const [userForm,setUserForm] = useState(initalUserForm) - const btnStyles = { - padding: 8, - width: "100%", - borderRadius: 7, - fontFamily: defaultTheme.typography.subtitle2.fontFamily, - } - const handleOnChange = (e)=>{ - const value = e.target.value; - const name = e.target.name; - setUserForm(prev => { - const newValues = {...prev} - newValues[name] = value; - return newValues - }) - } - - + const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const token: any = CoreModules.useSelector((state) => state.login.loginToken); + const dispatch = CoreModules.useDispatch(); + //dispatch function to perform redux state mutation + const navigate = CoreModules.useNavigate(); + const initalUserForm = { + username: '', + password: '', + confirmPassword: '', + }; + const [userForm, setUserForm] = useState(initalUserForm); + const btnStyles = { + padding: 8, + width: '100%', + borderRadius: 7, + fontFamily: defaultTheme.typography.subtitle2.fontFamily, + }; + const handleOnChange = (e) => { + const value = e.target.value; + const name = e.target.name; + setUserForm((prev) => { + const newValues = { ...prev }; + newValues[name] = value; + return newValues; + }); + }; - const handleOnSubmit = useCallback(async()=>{ - const body:SingUpModel = {...userForm} - setUserForm(initalUserForm) - await dispatch(SignUpService(`${enviroment.baseApiUrl}/users/`,body)) - setTimeout(() => { - navigate('/login') - }, 500); - },[initalUserForm]) + const handleOnSubmit = useCallback(async () => { + const body: SingUpModel = { ...userForm }; + setUserForm(initalUserForm); + await dispatch(SignUpService(`${enviroment.baseApiUrl}/users/`, body)); + setTimeout(() => { + navigate('/login'); + }, 500); + }, [initalUserForm]); - return ( + return ( + + - - - - CREATE ACCOUNT - - - - - - sign up - - Already have an account ? Sign in - - + CREATE ACCOUNT - ) -} + + + + + sign up + + + Already have an account ?{' '} + + Sign in + + + + + ); +}; export default Create; diff --git a/src/frontend/main/src/views/CreateOrganization.tsx b/src/frontend/main/src/views/CreateOrganization.tsx index fa5ef4f30f..06fdf23403 100644 --- a/src/frontend/main/src/views/CreateOrganization.tsx +++ b/src/frontend/main/src/views/CreateOrganization.tsx @@ -8,14 +8,15 @@ import { PostOrganizationDataService } from '../api/OrganizationService'; import { useNavigate, useParams, useSearchParams } from 'react-router-dom'; import { OrganizationAction } from '../store/slices/organizationSlice'; - const CreateOrganizationForm = () => { const dispatch = useDispatch(); const navigate = useNavigate(); const [searchParams, setSearchParams] = useSearchParams(); const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); const postOrganizationData: any = CoreModules.useSelector((state) => state.organization.postOrganizationData); - const postOrganizationDataLoading: any = CoreModules.useSelector((state) => state.organization.postOrganizationDataLoading); + const postOrganizationDataLoading: any = CoreModules.useSelector( + (state) => state.organization.postOrganizationDataLoading, + ); const organizationFormData: any = CoreModules.useSelector((state) => state.organization.organizationFormData); const submission = () => { @@ -38,18 +39,15 @@ const CreateOrganizationForm = () => { useEffect(() => { if (postOrganizationData) { - dispatch(OrganizationAction.postOrganizationData(null)) - dispatch(OrganizationAction.SetOrganizationFormData({})) - if (searchParams.get("popup") === 'true') { + dispatch(OrganizationAction.postOrganizationData(null)); + dispatch(OrganizationAction.SetOrganizationFormData({})); + if (searchParams.get('popup') === 'true') { window.close(); } else { navigate('/organization'); } } - - - }, [postOrganizationData]) - + }, [postOrganizationData]); return ( { > Upload Logo - Date: Wed, 26 Jul 2023 17:28:02 +0545 Subject: [PATCH 079/222] Fix: Console issue for MUI --- src/frontend/main/src/App.jsx | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/frontend/main/src/App.jsx b/src/frontend/main/src/App.jsx index 83427f4a6b..ed00425ac9 100755 --- a/src/frontend/main/src/App.jsx +++ b/src/frontend/main/src/App.jsx @@ -9,9 +9,23 @@ import './index.css'; import 'react-loading-skeleton/dist/skeleton.css'; import * as Sentry from '@sentry/react'; import environment from './environment'; -// import 'swiper/css'; -// import 'swiper/css/navigation'; -// import 'swiper/css/pagination'; + +// Added Fix of Console Error of MUI Issue +const consoleError = console.error; +const SUPPRESSED_WARNINGS = [ + 'MUI: The `value` provided to the Tabs component is invalid.', + 'React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead.', + 'Using kebab-case for css properties in objects is not supported. Did you mean WebkitBoxOrient?', + 'Using kebab-case for css properties in objects is not supported. Did you mean WebkitLineClamp?', + 'If you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.%s', +]; + +console.error = function filterWarnings(msg, ...args) { + if (!SUPPRESSED_WARNINGS.some((entry) => msg.includes(entry))) { + consoleError(msg, ...args); + } +}; + { environment.nodeEnv !== 'development' ? Sentry.init({ From 11000c123e8d18eebd944632ab74c86f20e54b5b Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 26 Jul 2023 17:28:24 +0545 Subject: [PATCH 080/222] Fix: Test Cases Fix and Webpack with Store Persist Changes --- .../fmtm_openlayer_map/webpack.config.js | 3 +- src/frontend/main/package-lock.json | 76 +++++++++++++++---- src/frontend/main/src/store/Store.js | 41 +++++----- .../main/tests/CreateProject.test.tsx | 27 +++++++ src/frontend/main/webpack.config.js | 12 +-- 5 files changed, 114 insertions(+), 45 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/webpack.config.js b/src/frontend/fmtm_openlayer_map/webpack.config.js index 37008bfa75..ae94cefc54 100755 --- a/src/frontend/fmtm_openlayer_map/webpack.config.js +++ b/src/frontend/fmtm_openlayer_map/webpack.config.js @@ -15,14 +15,13 @@ module.exports = (webpackEnv) => { mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development', // Stop compilation early in production // bail: isEnvProduction, - devtool: isEnvProduction ? 'source-map' : isEnvDevelopment && 'inline-source-map', + devtool: isEnvProduction ? 'source-map' : isEnvDevelopment && 'eval-source-map', output: { publicPath: `${process.env.FRONTEND_MAP_URL}/`, path: path.resolve(__dirname, "dist"), filename: "[name].[contenthash].bundle.js", clean:true }, - devtool: "source-map", resolve: { extensions: [".tsx", ".ts", ".jsx", ".js", ".json"], }, diff --git a/src/frontend/main/package-lock.json b/src/frontend/main/package-lock.json index 5a15f7109e..1f267c1a87 100644 --- a/src/frontend/main/package-lock.json +++ b/src/frontend/main/package-lock.json @@ -9,8 +9,6 @@ "version": "0.1.0", "license": "MIT", "dependencies": { - "@emotion/react": "^11.10.5", - "@emotion/styled": "^11.10.5", "@mui/icons-material": "^5.11.0", "@mui/lab": "^5.0.0-alpha.134", "@mui/material": "^5.11.1", @@ -1853,6 +1851,8 @@ "version": "11.10.6", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "optional": true, + "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", @@ -1887,7 +1887,9 @@ "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==" + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==", + "optional": true, + "peer": true }, "node_modules/@emotion/is-prop-valid": { "version": "1.2.1", @@ -1906,6 +1908,8 @@ "version": "11.10.6", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "optional": true, + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.6", @@ -1929,6 +1933,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "optional": true, + "peer": true, "dependencies": { "@emotion/hash": "^0.9.0", "@emotion/memoize": "^0.8.0", @@ -1946,6 +1952,8 @@ "version": "11.10.6", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "optional": true, + "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.6", @@ -1967,12 +1975,16 @@ "node_modules/@emotion/unitless": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==", + "optional": true, + "peer": true }, "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==", + "optional": true, + "peer": true, "peerDependencies": { "react": ">=16.8.0" } @@ -3911,7 +3923,8 @@ "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==" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "devOptional": true }, "node_modules/@types/prettier": { "version": "2.7.3", @@ -5082,6 +5095,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "optional": true, + "peer": true, "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -5913,6 +5928,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "devOptional": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -8054,7 +8070,9 @@ "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==" + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "optional": true, + "peer": true }, "node_modules/find-up": { "version": "4.1.0", @@ -14248,6 +14266,8 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "optional": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -14578,7 +14598,9 @@ "node_modules/stylis": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==", + "optional": true, + "peer": true }, "node_modules/supports-color": { "version": "5.5.0", @@ -16309,6 +16331,7 @@ "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "devOptional": true, "engines": { "node": ">= 6" } @@ -17574,6 +17597,8 @@ "version": "11.10.6", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.6.tgz", "integrity": "sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==", + "optional": true, + "peer": true, "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", @@ -17610,7 +17635,9 @@ "@emotion/hash": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==", + "optional": true, + "peer": true }, "@emotion/is-prop-valid": { "version": "1.2.1", @@ -17629,6 +17656,8 @@ "version": "11.10.6", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.6.tgz", "integrity": "sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==", + "optional": true, + "peer": true, "requires": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.6", @@ -17644,6 +17673,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "optional": true, + "peer": true, "requires": { "@emotion/hash": "^0.9.0", "@emotion/memoize": "^0.8.0", @@ -17661,6 +17692,8 @@ "version": "11.10.6", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", + "optional": true, + "peer": true, "requires": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.6", @@ -17673,12 +17706,16 @@ "@emotion/unitless": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==", + "optional": true, + "peer": true }, "@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==", + "optional": true, + "peer": true, "requires": {} }, "@emotion/utils": { @@ -19068,7 +19105,8 @@ "@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==" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "devOptional": true }, "@types/prettier": { "version": "2.7.3", @@ -19963,6 +20001,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "optional": true, + "peer": true, "requires": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -20585,6 +20625,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "devOptional": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -22166,7 +22207,9 @@ "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "optional": true, + "peer": true }, "find-up": { "version": "4.1.0", @@ -26564,7 +26607,9 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "optional": true, + "peer": true }, "source-map-js": { "version": "1.0.2", @@ -26815,7 +26860,9 @@ "stylis": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" + "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==", + "optional": true, + "peer": true }, "supports-color": { "version": "5.5.0", @@ -28084,7 +28131,8 @@ "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "devOptional": true }, "yargs": { "version": "17.7.2", diff --git a/src/frontend/main/src/store/Store.js b/src/frontend/main/src/store/Store.js index 1d07423c7e..cbabb4e31b 100755 --- a/src/frontend/main/src/store/Store.js +++ b/src/frontend/main/src/store/Store.js @@ -2,7 +2,7 @@ import HomeSlice from './slices/HomeSlice'; import ThemeSlice from './slices/ThemeSlice'; // import projectSlice from 'map/Project'; import CoreModules from '../shared/CoreModules'; -import { persistStore, persistReducer, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE } from 'redux-persist'; +import { persistStore, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import ProjectSlice from './slices/ProjectSlice'; import CreateProjectSlice from './slices/CreateProjectSlice'; @@ -11,24 +11,22 @@ import LoginSlice from './slices/LoginSlice'; import OrganizationSlice from './slices/organizationSlice.ts'; import SubmissionSlice from './slices/SubmissionSlice.ts'; import TaskSlice from './slices/TaskSlice.ts'; +import { persistReducer } from 'redux-persist'; -const reducers = CoreModules.combineReducers({ - project: persistReducer( - { - key: 'project', - storage, - blacklist: ['projectBuildingGeojson'], - }, - ProjectSlice.reducer, - ), - // project: ProjectSlice.reducer, - login: persistReducer( +export default function persist(key, whitelist, reducer) { + return persistReducer( { - key: 'login', + key, storage, + whitelist, }, - LoginSlice.reducer, - ), + reducer, + ); +} + +const reducers = CoreModules.combineReducers({ + project: persist('project', ['project'], ProjectSlice.reducer), + login: persist('login', ['login'], LoginSlice.reducer), //you can persist your auth reducer here similar to project reducer home: HomeSlice.reducer, theme: ThemeSlice.reducer, @@ -39,18 +37,13 @@ const reducers = CoreModules.combineReducers({ submission: SubmissionSlice.reducer, task: TaskSlice.reducer, }); -// const middleware = routerMiddleware(history); - -// const middleware = [ -// ...CoreModules.getDefaultMiddleware({ serializableCheck: { -// ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER], -// }, }), -// // add any other middleware here -// ]; export const store = CoreModules.configureStore({ reducer: reducers, - // middleware: middleware + // middleware: [], + middleware: CoreModules.getDefaultMiddleware({ + serializableCheck: false, + }), }); export const persistor = persistStore(store); diff --git a/src/frontend/main/tests/CreateProject.test.tsx b/src/frontend/main/tests/CreateProject.test.tsx index d42adfa1de..bbe5546901 100644 --- a/src/frontend/main/tests/CreateProject.test.tsx +++ b/src/frontend/main/tests/CreateProject.test.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { act, render, screen, fireEvent, waitFor } from '@testing-library/react'; import '@testing-library/jest-dom'; import PrimaryAppBar from '../src/utilities/PrimaryAppBar'; +import MainView from '../src/views/MainView'; import { Provider } from 'react-redux'; import { store } from '../src/store/Store.js'; import { BrowserRouter } from 'react-router-dom'; @@ -12,9 +13,35 @@ export const renderWithRouter = (ui, { route = '/' } = {}) => { ...render(ui, { wrapper: BrowserRouter }), }; }; +global.console = { + ...console, + // uncomment to ignore a specific log level + // log: jest.fn(), + // debug: jest.fn(), + // info: jest.fn(), + // warn: jest.fn(), + error: jest.fn(), +}; jest.mock('axios'); // Mock axios module describe('MyComponent', () => { + test('renders the app bar with correct elements', () => { + render( + + + + + , + ); + + // Check if the "EXPLORE PROJECTS" tab is rendered + const exploreTabElement = screen.getByText('EXPLORE PROJECTS'); + expect(exploreTabElement).toBeInTheDocument(); + + // Check if the "MANAGE ORGANIZATIONS" tab is rendered + const manageOrgTabElement = screen.getByText('MANAGE ORGANIZATIONS'); + expect(manageOrgTabElement).toBeInTheDocument(); + }); test('renders the app bar with correct elements', () => { render( diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index 18b29ad745..3cbd634476 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -126,11 +126,13 @@ module.exports = function (webpackEnv) { ], }), // Add the WorkboxWebpackPlugin to generate the service worker and handle caching - new WorkboxWebpackPlugin.GenerateSW({ - clientsClaim: true, - skipWaiting: true, - maximumFileSizeToCacheInBytes: 50000000, - }), + ...(isEnvProduction + ? new WorkboxWebpackPlugin.GenerateSW({ + clientsClaim: true, + skipWaiting: true, + maximumFileSizeToCacheInBytes: 50000000, + }) + : []), //new BundleAnalyzerPlugin(), new MiniCssExtractPlugin({ filename: 'static/css/[name].[contenthash:8].css', From 528d0a60218924fd463a2915d70298f4d8c20edb Mon Sep 17 00:00:00 2001 From: Aayam Date: Thu, 27 Jul 2023 11:26:10 +0545 Subject: [PATCH 081/222] fix: submission logic to download json file of task changed --- src/backend/app/submission/submission_crud.py | 1 - src/backend/app/submission/submission_routes.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 6652b42146..6d4c08157b 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -337,7 +337,6 @@ def download_submission(db: Session, project_id: int, task_id: int, export_json: # Get ODK Form with odk credentials from the project. xform = get_odk_form(odk_credentials) - if not export_json: file_path = f"{project_id}_submissions.zip" diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index 0924788942..fbe5bd55c6 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -98,7 +98,7 @@ async def download_submission( task_id: The ID of the task. This parameter is optional. If task_id is provided, this endpoint returns the submissions made for this task. """ - if not (task_id and export_json): + if not (task_id or export_json): file = submission_crud.download_submission_for_project(db, project_id) return FileResponse(file) From a215677948defc9904e816a024813de6ee350736 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 27 Jul 2023 13:27:54 +0545 Subject: [PATCH 082/222] Feat: test Integration Setup For App.tsx --- .../OpenLayersComponent/Layers/VectorLayer.js | 2 +- src/frontend/main/package.json | 3 +- src/frontend/main/setupTests.js | 4 ++ src/frontend/main/src/hooks/useForm.tsx | 2 +- .../main/src/utilfunctions/testUtils.js | 17 ++++++ .../main/src/utilfunctions/testUtils.ts | 34 ----------- src/frontend/main/src/views/Login.tsx | 2 +- src/frontend/main/tests/App.test.tsx | 38 +++++++++++++ .../main/tests/CreateProject.test.tsx | 56 +++---------------- src/frontend/main/tests/mocks/styleMock.ts | 1 + 10 files changed, 73 insertions(+), 86 deletions(-) create mode 100644 src/frontend/main/setupTests.js create mode 100644 src/frontend/main/src/utilfunctions/testUtils.js delete mode 100644 src/frontend/main/src/utilfunctions/testUtils.ts create mode 100644 src/frontend/main/tests/App.test.tsx create mode 100644 src/frontend/main/tests/mocks/styleMock.ts diff --git a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js index 8bb9148ca3..cbc7ed2748 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js +++ b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js @@ -1,7 +1,7 @@ /* eslint-disable no-console */ /* eslint-disable consistent-return */ /* eslint-disable react/forbid-prop-types */ -import { useEffect, useState } from 'react'; +import React,{ useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { get } from 'ol/proj'; import Style from 'ol/style/Style'; diff --git a/src/frontend/main/package.json b/src/frontend/main/package.json index 1fc7a11de2..6b3485c8d3 100755 --- a/src/frontend/main/package.json +++ b/src/frontend/main/package.json @@ -82,6 +82,7 @@ "/tests/mocks/fileMock.ts", "^.+\\.(css|less|scss|sass)$": "/tests/mocks/styleMock.ts", "(assets|models|services)": "/tests/mocks/fileMock.ts" - } + }, + "setupFilesAfterEnv": ["./setupTests.js"] } } diff --git a/src/frontend/main/setupTests.js b/src/frontend/main/setupTests.js new file mode 100644 index 0000000000..a6c98574b8 --- /dev/null +++ b/src/frontend/main/setupTests.js @@ -0,0 +1,4 @@ +global.console = { + ...console, + error: jest.fn(), +}; diff --git a/src/frontend/main/src/hooks/useForm.tsx b/src/frontend/main/src/hooks/useForm.tsx index 086c330d74..572a376b8d 100755 --- a/src/frontend/main/src/hooks/useForm.tsx +++ b/src/frontend/main/src/hooks/useForm.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; const useForm = (initialState, callback, validate) => { const [values, setValues] = useState(initialState); diff --git a/src/frontend/main/src/utilfunctions/testUtils.js b/src/frontend/main/src/utilfunctions/testUtils.js new file mode 100644 index 0000000000..73aa55feb9 --- /dev/null +++ b/src/frontend/main/src/utilfunctions/testUtils.js @@ -0,0 +1,17 @@ +import React from 'react'; +import { Provider } from 'react-redux'; +import { store } from '../store/Store.js'; +import { BrowserRouter } from 'react-router-dom'; +import { act, render } from '@testing-library/react'; +export const renderWithRouter = (ui, { route = '/' } = {}) => { + act(() => window.history.pushState({}, 'Test page', route)); + + return { + ...render(ui, { wrapper: BrowserRouter }), + }; +}; +export const ReduxProviders = ({ children, props = { locale: 'en' }, localStore = null }) => ( + + {children} + +); diff --git a/src/frontend/main/src/utilfunctions/testUtils.ts b/src/frontend/main/src/utilfunctions/testUtils.ts deleted file mode 100644 index cd22b67be2..0000000000 --- a/src/frontend/main/src/utilfunctions/testUtils.ts +++ /dev/null @@ -1,34 +0,0 @@ -import React, { PropsWithChildren } from 'react' -import { render } from '@testing-library/react' -import type { RenderOptions } from '@testing-library/react' -// import { configureStore } from '@reduxjs/toolkit' -import type { PreloadedState } from '@reduxjs/toolkit' - -// import type { AppStore, RootState } from '../app/store' -// As a basic setup, import your same slice reducers -import userReducer from '../features/users/userSlice' -import CoreModules from '../shared/CoreModules'; - -// This type interface extends the default options for render from RTL, as well -// as allows the user to specify other things such as initialState, store. -interface ExtendedRenderOptions extends Omit { - preloadedState?: PreloadedState - store?: any -} - -export function renderWithProviders( - ui: React.ReactElement, - { - preloadedState = {}, - // Automatically create a store instance if no store was passed in - store = CoreModules.configureStore({ reducer: { user: userReducer }, preloadedState }), - ...renderOptions - }: ExtendedRenderOptions = {} -) { - function Wrapper({ children }: PropsWithChildren): any { - return {children} - } - - // Return an object with the store and all of RTL's query functions - return { store, ...render(ui, { wrapper: Wrapper, ...renderOptions }) } -} \ No newline at end of file diff --git a/src/frontend/main/src/views/Login.tsx b/src/frontend/main/src/views/Login.tsx index 42dd13cce3..6f78479b7c 100755 --- a/src/frontend/main/src/views/Login.tsx +++ b/src/frontend/main/src/views/Login.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import '../styles/login.css'; import enviroment from '../environment'; import CoreModules from '../shared/CoreModules'; diff --git a/src/frontend/main/tests/App.test.tsx b/src/frontend/main/tests/App.test.tsx new file mode 100644 index 0000000000..4fcd22857f --- /dev/null +++ b/src/frontend/main/tests/App.test.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { screen } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import MainView from '../src/views/MainView'; +import { store } from '../src/store/Store.js'; +import { renderWithRouter } from '../src/utilfunctions/testUtils'; +import { Provider } from 'react-redux'; + +describe('Frontend Application Running', () => { + it('renders App.jsx without errors', () => { + // Render the App component in a virtual DOM environment + const { container } = renderWithRouter( + + + , + ); + + // Assert that the component renders without any errors + expect(container).toBeDefined(); + }); +}); +describe('MyComponent', () => { + test('renders the app bar with correct elements', () => { + renderWithRouter( + + + , + ); + + // Check if the "EXPLORE PROJECTS" tab is rendered + const exploreTabElement = screen.getByText('EXPLORE PROJECTS'); + expect(exploreTabElement).toBeInTheDocument(); + + // Check if the "MANAGE ORGANIZATIONS" tab is rendered + const manageOrgTabElement = screen.getByText('MANAGE ORGANIZATIONS'); + expect(manageOrgTabElement).toBeInTheDocument(); + }); +}); diff --git a/src/frontend/main/tests/CreateProject.test.tsx b/src/frontend/main/tests/CreateProject.test.tsx index bbe5546901..50f232df5c 100644 --- a/src/frontend/main/tests/CreateProject.test.tsx +++ b/src/frontend/main/tests/CreateProject.test.tsx @@ -1,62 +1,22 @@ import React from 'react'; -import { act, render, screen, fireEvent, waitFor } from '@testing-library/react'; import '@testing-library/jest-dom'; -import PrimaryAppBar from '../src/utilities/PrimaryAppBar'; import MainView from '../src/views/MainView'; import { Provider } from 'react-redux'; import { store } from '../src/store/Store.js'; -import { BrowserRouter } from 'react-router-dom'; -export const renderWithRouter = (ui, { route = '/' } = {}) => { - act(() => window.history.pushState({}, 'Test page', route)); +import { renderWithRouter } from '../src/utilfunctions/testUtils'; - return { - ...render(ui, { wrapper: BrowserRouter }), - }; -}; -global.console = { - ...console, - // uncomment to ignore a specific log level - // log: jest.fn(), - // debug: jest.fn(), - // info: jest.fn(), - // warn: jest.fn(), - error: jest.fn(), -}; jest.mock('axios'); // Mock axios module -describe('MyComponent', () => { - test('renders the app bar with correct elements', () => { - render( +describe('Frontend Application Running', () => { + it('renders App.jsx without errors', () => { + // Render the App component in a virtual DOM environment + const { container } = renderWithRouter( - - - + , ); - // Check if the "EXPLORE PROJECTS" tab is rendered - const exploreTabElement = screen.getByText('EXPLORE PROJECTS'); - expect(exploreTabElement).toBeInTheDocument(); - - // Check if the "MANAGE ORGANIZATIONS" tab is rendered - const manageOrgTabElement = screen.getByText('MANAGE ORGANIZATIONS'); - expect(manageOrgTabElement).toBeInTheDocument(); - }); - test('renders the app bar with correct elements', () => { - render( - - - - - , - ); - - // Check if the "EXPLORE PROJECTS" tab is rendered - const exploreTabElement = screen.getByText('EXPLORE PROJECTS'); - expect(exploreTabElement).toBeInTheDocument(); - - // Check if the "MANAGE ORGANIZATIONS" tab is rendered - const manageOrgTabElement = screen.getByText('MANAGE ORGANIZATIONS'); - expect(manageOrgTabElement).toBeInTheDocument(); + // Assert that the component renders without any errors + expect(container).toBeDefined(); }); }); diff --git a/src/frontend/main/tests/mocks/styleMock.ts b/src/frontend/main/tests/mocks/styleMock.ts new file mode 100644 index 0000000000..9dc5fc1e4a --- /dev/null +++ b/src/frontend/main/tests/mocks/styleMock.ts @@ -0,0 +1 @@ +module.exports = ''; From 59a67da59cb920bf54f0c91c3f8e8138fcae8120 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 27 Jul 2023 16:37:16 +0545 Subject: [PATCH 083/222] update category --- src/backend/app/projects/project_routes.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 054794dba0..94b23ab5b1 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -740,7 +740,8 @@ async def update_project_category( current_category = project.xform_title if current_category == category: - raise HTTPException(status_code=400, detail="Current category is same as new category") + if not upload: + raise HTTPException(status_code=400, detail="Current category is same as new category") if upload: From cce8c2d9060fb3e29be04b8e4bf499035d1c6c91 Mon Sep 17 00:00:00 2001 From: mahesh-naxa Date: Thu, 27 Jul 2023 16:38:13 +0545 Subject: [PATCH 084/222] add: github actions for frontend tests --- .github/workflows/frontend_test.yml | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/frontend_test.yml diff --git a/.github/workflows/frontend_test.yml b/.github/workflows/frontend_test.yml new file mode 100644 index 0000000000..6606cd935f --- /dev/null +++ b/.github/workflows/frontend_test.yml @@ -0,0 +1,31 @@ +name: Frontend Tests + +on: + push: + paths: + - "src/frontend/**" # Trigger the workflow only when files within srv/frontend change + - ".github/workflows/**" # Also trigger if github workflow changes + workflow_dispatch: + +jobs: + test: + name: Run Frontend Tests + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: "18" # Change this to your preferred Node.js version + + - name: Test Frontend Main + run: | + cd src/frontend/main + npm install + + - name: Run Tests + run: | + npm run test From 9ee5db9193e026a518af0fc2f767ac068843299f Mon Sep 17 00:00:00 2001 From: mahesh-naxa Date: Thu, 27 Jul 2023 16:40:35 +0545 Subject: [PATCH 085/222] typo: missed project directory --- .github/workflows/frontend_test.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/frontend_test.yml b/.github/workflows/frontend_test.yml index 6606cd935f..ed407a6ed5 100644 --- a/.github/workflows/frontend_test.yml +++ b/.github/workflows/frontend_test.yml @@ -4,7 +4,7 @@ on: push: paths: - "src/frontend/**" # Trigger the workflow only when files within srv/frontend change - - ".github/workflows/**" # Also trigger if github workflow changes + - ".github/workflows/**" # Also trigger if github workflow changes workflow_dispatch: jobs: @@ -25,7 +25,4 @@ jobs: run: | cd src/frontend/main npm install - - - name: Run Tests - run: | npm run test From 1ed5aa0b22bc7069404e36d0be538cc45c5510f8 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 27 Jul 2023 16:43:53 +0545 Subject: [PATCH 086/222] upgrade osm-fieldwork version to 0.3.3 --- src/backend/pdm.lock | 31 ++++++++++++++++++++++++++----- src/backend/pyproject.toml | 2 +- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index 99369c7726..72ea5680a8 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -253,6 +253,12 @@ version = "0.14.0" requires_python = ">=3.7" summary = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +[[package]] +name = "haversine" +version = "2.8.0" +requires_python = ">=3.5" +summary = "Calculate the distance between 2 points on Earth." + [[package]] name = "httpcore" version = "0.16.3" @@ -431,7 +437,7 @@ dependencies = [ [[package]] name = "osm-fieldwork" -version = "0.3.2" +version = "0.3.3" requires_python = ">=3.9" summary = "Convert CSV files from ODK Central to OSM format." dependencies = [ @@ -440,6 +446,7 @@ dependencies = [ "epdb>=0.15.1", "geodex>=0.1.2", "geojson>=2.5.0", + "haversine>=2.8.0", "overpy>=0.6", "progress>=1.6", "pymbtiles>=0.5.0", @@ -447,6 +454,7 @@ dependencies = [ "requests>=2.28.2", "segno>=1.5.2", "shapely>=1.8.5", + "thefuzz>=0.19.0", "xmltodict>=0.13.0", ] @@ -819,6 +827,11 @@ version = "2.3.0" requires_python = ">=3.7" summary = "ANSI color formatting for output in terminal" +[[package]] +name = "thefuzz" +version = "0.19.0" +summary = "Fuzzy string matching in python" + [[package]] name = "tomli" version = "2.0.1" @@ -909,7 +922,7 @@ summary = "Backport of pathlib-compatible object wrapper for zip files" lock_version = "4.2" cross_platform = true groups = ["default", "dev"] -content_hash = "sha256:1fc6cfe35039ddc838a4e1a087b2136c3af90b31e2debc1cd7a6292f4fdc3f19" +content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971a7e5f87" [metadata.files] "alembic 1.8.1" = [ @@ -1267,6 +1280,10 @@ content_hash = "sha256:1fc6cfe35039ddc838a4e1a087b2136c3af90b31e2debc1cd7a6292f4 {url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {url = "https://files.pythonhosted.org/packages/f5/38/3af3d3633a34a3316095b39c8e8fb4853a28a536e55d347bd8d8e9a14b03/h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, ] +"haversine 2.8.0" = [ + {url = "https://files.pythonhosted.org/packages/b9/6b/0a774af6a2eea772aa99e5fbc7af7711eba02ff0dee3e71838c1b5926ef5/haversine-2.8.0.tar.gz", hash = "sha256:cca39afd2ae5f1e6ed9231b332395bb8afb2e0a64edf70c238c176492e60c150"}, + {url = "https://files.pythonhosted.org/packages/d7/e0/07dd3462f1dee6d486042366d9256592a3f988bb9de92cc7c54e21749ca2/haversine-2.8.0-py2.py3-none-any.whl", hash = "sha256:524529d6c39619a513629b68331ce8153ccfc7c30049ed43405c27b12614e8f6"}, +] "httpcore 0.16.3" = [ {url = "https://files.pythonhosted.org/packages/04/7e/ef97af4623024e8159993b3114ce208de4f677098ae058ec5882a1bf7605/httpcore-0.16.3-py3-none-any.whl", hash = "sha256:da1fb708784a938aa084bde4feb8317056c55037247c787bd7e19eb2c2949dc0"}, {url = "https://files.pythonhosted.org/packages/61/42/5c456b02816845d163fab0f32936b6a5b649f3f915beff6f819f4f6c90b2/httpcore-0.16.3.tar.gz", hash = "sha256:c5d6f04e2fc530f39e0c077e6a30caa53f1451096120f1f38b954afd0b17c0cb"}, @@ -1597,9 +1614,9 @@ content_hash = "sha256:1fc6cfe35039ddc838a4e1a087b2136c3af90b31e2debc1cd7a6292f4 {url = "https://files.pythonhosted.org/packages/1c/a6/8ce4d2ef2c29be3235c08bb00e0b81e29d38ebc47d82b17af681bf662b74/openpyxl-3.0.9-py2.py3-none-any.whl", hash = "sha256:8f3b11bd896a95468a4ab162fc4fcd260d46157155d1f8bfaabb99d88cfcf79f"}, {url = "https://files.pythonhosted.org/packages/9e/19/c45fb7a40cd46e03e36d60d1db26a50a795fa0b6b8a2a8094f4ac0c71ae5/openpyxl-3.0.9.tar.gz", hash = "sha256:40f568b9829bf9e446acfffce30250ac1fa39035124d55fc024025c41481c90f"}, ] -"osm-fieldwork 0.3.2" = [ - {url = "https://files.pythonhosted.org/packages/c3/a9/cfac107a291f954f954218ed66e26a0a829fdc008eb1bcad0d435afedf5d/osm-fieldwork-0.3.2.tar.gz", hash = "sha256:98170f62984b2d83b8602e4f4c2af280a2e1ccab358d2f3ac2a22fe00892925e"}, - {url = "https://files.pythonhosted.org/packages/d5/cd/504f7cfe0a685a86d67253b1cf4ccbd83a4d1480236b71be1e80163c0c31/osm_fieldwork-0.3.2-py3-none-any.whl", hash = "sha256:60b867c8436188f05ae7f40a4cd7e661dfbd31845fb32ef2bb7529ade7dcda00"}, +"osm-fieldwork 0.3.3" = [ + {url = "https://files.pythonhosted.org/packages/26/46/9d1af7f4216d3581de8367ecf792932fb333b69746b80d9dc364d11bb29f/osm-fieldwork-0.3.3.tar.gz", hash = "sha256:2519f345445fe75a6943c303b258351b6358e900a940e4a80414b3652b0a4e99"}, + {url = "https://files.pythonhosted.org/packages/d1/72/8b5f0b80e17fa02e61fe3979c7986331c85d19cab227e3e8f295b0feaa30/osm_fieldwork-0.3.3-py3-none-any.whl", hash = "sha256:67b9ff2bd01f602971be2e98fc5407db0d483fc21d5f456147c29516a43e1a9e"}, ] "osm-login-python 0.0.4" = [ {url = "https://files.pythonhosted.org/packages/d1/81/9c36618b20b570ddcf6fd7770a528a5d93f5b1f853d7ef81e536fdd39f76/osm-login-python-0.0.4.tar.gz", hash = "sha256:f10c9bc91978aebb38c5083502d42d78463b617d4a9a05d9a8bdc44550de32b8"}, @@ -2022,6 +2039,10 @@ content_hash = "sha256:1fc6cfe35039ddc838a4e1a087b2136c3af90b31e2debc1cd7a6292f4 {url = "https://files.pythonhosted.org/packages/67/e1/434566ffce04448192369c1a282931cf4ae593e91907558eaecd2e9f2801/termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, {url = "https://files.pythonhosted.org/packages/b8/85/147a0529b4e80b6b9d021ca8db3a820fcac53ec7374b87073d004aaf444c/termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, ] +"thefuzz 0.19.0" = [ + {url = "https://files.pythonhosted.org/packages/24/7c/2acf47d228b0c0879468b4e2fd15a14eb58bd97897b4bb8a9a7ed47d22f7/thefuzz-0.19.0-py2.py3-none-any.whl", hash = "sha256:4fcdde8e40f5ca5e8106bc7665181f9598a9c8b18b0a4d38c41a095ba6788972"}, + {url = "https://files.pythonhosted.org/packages/d2/bd/aecf6079c3843cfff370d37138d4f0b36ffdffa94549c20e6d74eda799f9/thefuzz-0.19.0.tar.gz", hash = "sha256:6f7126db2f2c8a54212b05e3a740e45f4291c497d75d20751728f635bb74aa3d"}, +] "tomli 2.0.1" = [ {url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 33cf2b7189..0ddbdbead8 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -46,7 +46,7 @@ dependencies = [ "SQLAlchemy-Utils==0.40.0", "bcrypt==4.0.1", "segno==1.5.2", - "osm-fieldwork==0.3.2", + "osm-fieldwork==0.3.3", "sentry-sdk==1.9.6" ] requires-python = ">=3.10" From 3937be5467158190b2b7c85e71c937cd3d2fe6fe Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 28 Jul 2023 10:55:51 +0545 Subject: [PATCH 087/222] fix: workbox webpack fix for loop --- src/frontend/main/src/App.jsx | 25 +++++++++++++------------ src/frontend/main/webpack.config.js | 12 +++++++----- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/frontend/main/src/App.jsx b/src/frontend/main/src/App.jsx index ed00425ac9..68cb93451a 100755 --- a/src/frontend/main/src/App.jsx +++ b/src/frontend/main/src/App.jsx @@ -57,16 +57,17 @@ ReactDOM.render( , document.getElementById('app'), ); - -if ('serviceWorker' in navigator) { - window.addEventListener('load', () => { - navigator.serviceWorker - .register('/service-worker.js') - .then((registration) => { - console.log('ServiceWorker registered: ', registration); - }) - .catch((error) => { - console.log('ServiceWorker registration failed: ', error); - }); - }); +if (process.env.NODE_ENV === 'production') { + if ('serviceWorker' in navigator) { + window.addEventListener('load', () => { + navigator.serviceWorker + .register('/service-worker.js') + .then((registration) => { + console.log('ServiceWorker registered: ', registration); + }) + .catch((error) => { + console.log('ServiceWorker registration failed: ', error); + }); + }); + } } diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index 3cbd634476..1b027bdf97 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -127,11 +127,13 @@ module.exports = function (webpackEnv) { }), // Add the WorkboxWebpackPlugin to generate the service worker and handle caching ...(isEnvProduction - ? new WorkboxWebpackPlugin.GenerateSW({ - clientsClaim: true, - skipWaiting: true, - maximumFileSizeToCacheInBytes: 50000000, - }) + ? [ + new WorkboxWebpackPlugin.GenerateSW({ + clientsClaim: true, + skipWaiting: true, + maximumFileSizeToCacheInBytes: 50000000, + }), + ] : []), //new BundleAnalyzerPlugin(), new MiniCssExtractPlugin({ From 573ac9bd4452cc5332db018659e18b9707aef047 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 28 Jul 2023 11:12:27 +0545 Subject: [PATCH 088/222] fix: update category api --- src/backend/app/central/central_crud.py | 14 ++++++++++---- src/backend/app/projects/project_crud.py | 9 ++++++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/backend/app/central/central_crud.py b/src/backend/app/central/central_crud.py index a2b1cc2cb6..3b05b78dab 100644 --- a/src/backend/app/central/central_crud.py +++ b/src/backend/app/central/central_crud.py @@ -221,8 +221,10 @@ def create_odk_xform( xform_id: str, filespec: str, odk_credentials: project_schemas.ODKCentral = None, - draft: bool = False, - upload_media = True + create_draft: bool = False, + upload_media = True, + convert_to_draft_when_publishing = True + ): """Create an XForm on a remote ODK Central server.""" title = os.path.basename(os.path.splitext(filespec)[0]) @@ -248,7 +250,7 @@ def create_odk_xform( status_code=500, detail={"message": "Connection failed to odk central"} ) from e - result = xform.createForm(project_id, xform_id, filespec, draft) + result = xform.createForm(project_id, xform_id, filespec, create_draft) if result != 200 and result != 409: return result @@ -257,7 +259,11 @@ def create_odk_xform( # This modifies an existing published XForm to be in draft mode. # An XForm must be in draft mode to upload an attachment. if upload_media: - result = xform.uploadMedia(project_id, title, data) + result = xform.uploadMedia(project_id, + title, + data, + convert_to_draft_when_publishing + ) result = xform.publishForm(project_id, title) return result diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 7c96504b5f..cb43e7f531 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -2014,11 +2014,18 @@ async def update_project_form( # Create an odk xform result = central_crud.create_odk_xform( - odk_id, task, xform, odk_credentials, True, True + odk_id, + task, + xform, + odk_credentials, + True, + True, + False ) return True + async def update_odk_credentials(project_instance: project_schemas.BETAProjectUpload, odk_central_cred: project_schemas.ODKCentral, odkid: int, db: Session): From 0bfa6a4661c4d128aaf5ae8b81fdbe31a259de06 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 28 Jul 2023 13:40:05 +0545 Subject: [PATCH 089/222] feat: removed serviceworker in development --- src/frontend/main/src/App.jsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/frontend/main/src/App.jsx b/src/frontend/main/src/App.jsx index 68cb93451a..9ff009b600 100755 --- a/src/frontend/main/src/App.jsx +++ b/src/frontend/main/src/App.jsx @@ -71,3 +71,10 @@ if (process.env.NODE_ENV === 'production') { }); } } +if (process.env.NODE_ENV === 'development') { + navigator.serviceWorker.getRegistrations().then(function (registrations) { + for (let registration of registrations) { + registration.unregister(); + } + }); +} From b78731b58ee91e59ce738f22a800bea06f6a56e4 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 28 Jul 2023 14:02:15 +0545 Subject: [PATCH 090/222] content type updated for download form --- src/backend/app/projects/project_routes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 94b23ab5b1..9a074ee47a 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -709,7 +709,7 @@ async def download_form(project_id: int, headers = { "Content-Disposition": "attachment; filename=submission_data.xls", - "Content-Type": "application/json", + "Content-Type": "application/media", } if not project.form_xls: project_category = project.xform_title From 174c1170c67c68b5b4a17ab689e3ff520628396d Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 28 Jul 2023 15:27:41 +0545 Subject: [PATCH 091/222] Fix: download project form --- src/frontend/fmtm_openlayer_map/src/api/Project.js | 7 ++++++- src/frontend/fmtm_openlayer_map/src/views/Home.jsx | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/api/Project.js b/src/frontend/fmtm_openlayer_map/src/api/Project.js index 30157630e7..0c3ab65e85 100755 --- a/src/frontend/fmtm_openlayer_map/src/api/Project.js +++ b/src/frontend/fmtm_openlayer_map/src/api/Project.js @@ -58,9 +58,14 @@ export const DownloadProjectForm = (url,payload) => { const fetchProjectForm = async (url,payload) => { try { - const response = await CoreModules.axios.get(url, { + let response; + if(payload=== 'form'){ + response = await CoreModules.axios.get(url,{responseType : 'blob'}); + }else{ + response = await CoreModules.axios.get(url, { responseType : 'blob', }); + } var a = document.createElement("a"); a.href = window.URL.createObjectURL(response.data); a.download=`Project_form.${payload=== 'form'? '.xls':'.geojson'}`; diff --git a/src/frontend/fmtm_openlayer_map/src/views/Home.jsx b/src/frontend/fmtm_openlayer_map/src/views/Home.jsx index 798d3e7520..87679d28e7 100755 --- a/src/frontend/fmtm_openlayer_map/src/views/Home.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Home.jsx @@ -211,7 +211,7 @@ const Home = () => { if (downloadType === 'form') { dispatch( DownloadProjectForm( - `${environment.baseApiUrl}/projects/download_form/${decodedId}`, downloadType + `${environment.baseApiUrl}/projects/download_form/${decodedId}/`, downloadType ) ); } else if (downloadType === 'geojson') { From 5be297620ad0c510ed2e63b37a63b3091a8dd803 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 28 Jul 2023 17:33:53 +0545 Subject: [PATCH 092/222] data are moved in form_Data from parameters in update_category api --- src/backend/app/projects/project_routes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 9a074ee47a..31101d47eb 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -724,8 +724,8 @@ async def download_form(project_id: int, @router.post("/update_category") async def update_project_category( # background_tasks: BackgroundTasks, - project_id: int, - category: str, + project_id: int = Form(...), + category: str = Form(...), upload: Optional[UploadFile] = File(None), db: Session = Depends(database.get_db), ): From 20c7142eebbf17d12bf3d6537faf0bf1b991b0d2 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sat, 29 Jul 2023 09:15:04 +0545 Subject: [PATCH 093/222] fix: upload geojson type Polygon --- src/backend/app/projects/project_crud.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index cb43e7f531..9b85c7c689 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -450,6 +450,12 @@ def remove_z_dimension(coord): features = [boundary] elif boundary["type"] == "FeatureCollection": features = boundary["features"] + elif boundary["type"] == "Polygon": + features = [{ + "type": "Feature", + "properties": {}, + "geometry": boundary, + }] else: raise HTTPException( status_code=400, detail=f"Invalid GeoJSON type: {boundary['type']}" @@ -752,6 +758,12 @@ def remove_z_dimension(coord): features = [boundary] elif boundary["type"] == "FeatureCollection": features = boundary["features"] + elif boundary["type"] == "Polygon": + features = [{ + "type": "Feature", + "properties": {}, + "geometry": boundary, + }] else: # Delete the created Project db.delete(db_project) From 50b6bba1c7a53489cc93967bf7329537b4d84caf Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 2 Aug 2023 10:53:54 +0545 Subject: [PATCH 094/222] fix: task aplit algorithm, seek to the first object of in memory file --- src/backend/app/projects/project_routes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 31101d47eb..de99b93250 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -343,6 +343,7 @@ async def task_split( ): # read entire file + await upload.seek(0) content = await upload.read() result = await project_crud.split_into_tasks(db, content) From 4bb0470927ec28b8eb7951a921e692b339af4a38 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 2 Aug 2023 11:38:50 +0545 Subject: [PATCH 095/222] num_buildings params added in split algorithm for the dynamic no of buildings in each cluster --- src/backend/app/db/split_algorithm.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/app/db/split_algorithm.sql b/src/backend/app/db/split_algorithm.sql index 90fe315e15..66943ce793 100644 --- a/src/backend/app/db/split_algorithm.sql +++ b/src/backend/app/db/split_algorithm.sql @@ -194,7 +194,7 @@ WITH splitpolygonswithcontents AS ( ) ,clusteredbuildingsnocombineduid AS ( SELECT *, - ST_ClusterKMeans(geom, cast((b.numfeatures / 5) + 1 as integer)) + ST_ClusterKMeans(geom, cast((b.numfeatures / :num_buildings) + 1 as integer)) over (partition by polyid) as cid FROM buildingstocluster b ) From fdf2c7b938c55fa17613a2aa2c5364a95a601083 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 2 Aug 2023 11:39:46 +0545 Subject: [PATCH 096/222] dynamic no of buildings passed in task split api --- src/backend/app/projects/project_crud.py | 7 +++++-- src/backend/app/projects/project_routes.py | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 9b85c7c689..9476a6ce4f 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -598,7 +598,7 @@ def get_osm_extracts(boundary: str): async def split_into_tasks( - db: Session, boundary: str + db: Session, boundary: str, no_of_buildings:int ): project_id = uuid.uuid4() @@ -655,7 +655,10 @@ async def split_into_tasks( with open('app/db/split_algorithm.sql', 'r') as sql_file: query = sql_file.read() - result = db.execute(query) + # Execute the query with the parameter using the `params` parameter + result = db.execute(query, params={'num_buildings': no_of_buildings}) + + # result = db.execute(query) data = result.fetchall()[0] final_geojson = data['jsonb_build_object'] diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index de99b93250..115c551b49 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -339,6 +339,7 @@ async def upload_multi_project_boundary( @router.post("/task_split") async def task_split( upload: UploadFile = File(...), + no_of_buildings: int = Form(50), db: Session = Depends(database.get_db) ): @@ -346,7 +347,7 @@ async def task_split( await upload.seek(0) content = await upload.read() - result = await project_crud.split_into_tasks(db, content) + result = await project_crud.split_into_tasks(db, content, no_of_buildings) return result From 28d63ec7a73197353daccd154fecc13dc815c8e7 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 2 Aug 2023 12:44:45 +0545 Subject: [PATCH 097/222] Fix: osm xml convert fix for task id --- src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx index b5eec50e8d..3879a1da4a 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx @@ -58,7 +58,7 @@ const ProjectInfo = () => { const handleConvert = () => { dispatch( fetchConvertToOsmDetails( - `${environment.baseApiUrl}/submission/convert-to-osm?project_id=${decodedId}&task_id=${selectedTask}` + `${environment.baseApiUrl}/submission/convert-to-osm?project_id=${decodedId}&${selectedTask ?`task_id=${selectedTask}`:''}` ) ); }; From 8c3537b93c5e4ecab74eec18a8204245a593d984 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 2 Aug 2023 13:14:39 +0545 Subject: [PATCH 098/222] Feat: Edit Form Category --- .../fmtm_openlayer_map/src/api/Project.js | 1 + src/frontend/main/src/App.jsx | 14 +- .../main/src/api/CreateProjectService.ts | 870 +++++++++--------- .../components/createproject/DataExtract.tsx | 192 ++-- .../src/components/editproject/UpdateForm.tsx | 142 ++- src/frontend/main/src/store/Store.js | 4 +- .../main/src/store/slices/LoginSlice.ts | 39 +- .../main/src/store/slices/ProjectSlice.ts | 100 +- .../main/src/utilfunctions/compareUtils.js | 29 +- src/frontend/main/src/views/EditProject.tsx | 44 +- 10 files changed, 746 insertions(+), 689 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/api/Project.js b/src/frontend/fmtm_openlayer_map/src/api/Project.js index 0c3ab65e85..f38d9b3ca0 100755 --- a/src/frontend/fmtm_openlayer_map/src/api/Project.js +++ b/src/frontend/fmtm_openlayer_map/src/api/Project.js @@ -39,6 +39,7 @@ export const ProjectById = (url, existingProjectList) => { total_tasks:resp.total_tasks, tasks_mapped:resp.tasks_mapped, tasks_validated:resp.tasks_validated, + xform_title:resp.xform_title, tasks_bad:resp.tasks_bad}) ); } catch (error) { diff --git a/src/frontend/main/src/App.jsx b/src/frontend/main/src/App.jsx index 9ff009b600..9711c6d7b4 100755 --- a/src/frontend/main/src/App.jsx +++ b/src/frontend/main/src/App.jsx @@ -71,10 +71,10 @@ if (process.env.NODE_ENV === 'production') { }); } } -if (process.env.NODE_ENV === 'development') { - navigator.serviceWorker.getRegistrations().then(function (registrations) { - for (let registration of registrations) { - registration.unregister(); - } - }); -} +// if (process.env.NODE_ENV === 'development') { +// navigator.serviceWorker.getRegistrations().then(function (registrations) { +// for (let registration of registrations) { +// registration.unregister(); +// } +// }); +// } diff --git a/src/frontend/main/src/api/CreateProjectService.ts b/src/frontend/main/src/api/CreateProjectService.ts index 8b1304b751..2779e0394c 100755 --- a/src/frontend/main/src/api/CreateProjectService.ts +++ b/src/frontend/main/src/api/CreateProjectService.ts @@ -1,474 +1,452 @@ import axios from 'axios'; import { CreateProjectActions } from '../store/slices/CreateProjectSlice'; -import { ProjectDetailsModel, FormCategoryListModel, OrganisationListModel } from '../models/createproject/createProjectModel'; -import enviroment from "../environment"; +import { + ProjectDetailsModel, + FormCategoryListModel, + OrganisationListModel, +} from '../models/createproject/createProjectModel'; +import enviroment from '../environment'; import { CommonActions } from '../store/slices/CommonSlice'; - -const CreateProjectService: Function = (url: string, payload: any, fileUpload: any, formUpload: any, dataExtractFile: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.CreateProjectLoading(true)) - dispatch(CommonActions.SetLoading(true)) - - const postCreateProjectDetails = async (url, payload, fileUpload, formUpload) => { - - try { - const postNewProjectDetails = await axios.post(url, payload) - const resp: ProjectDetailsModel = postNewProjectDetails.data; - await dispatch(CreateProjectActions.PostProjectDetails(resp)); - - if (payload.splitting_algorithm === 'Choose Area as Tasks') { - await dispatch(UploadAreaService(`${enviroment.baseApiUrl}/projects/${resp.id}/upload_multi_polygon`, fileUpload)); - } else if (payload.splitting_algorithm === 'Use natural Boundary') { - await dispatch(UploadAreaService(`${enviroment.baseApiUrl}/projects/task_split/${resp.id}/`, fileUpload)); - } else { - await dispatch(UploadAreaService(`${enviroment.baseApiUrl}/projects/${resp.id}/upload_multi_polygon`, fileUpload)); - // await dispatch(UploadAreaService(`${enviroment.baseApiUrl}/projects/${resp.id}/upload`, fileUpload, { dimension: payload.dimension })); - } - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: 'Project Successfully Created Now Generating QR For Project', - variant: "success", - duration: 2000, - }) - ); - await dispatch(GenerateProjectQRService(`${enviroment.baseApiUrl}/projects/${resp.id}/generate`, payload, formUpload, dataExtractFile)); - dispatch(CommonActions.SetLoading(false)) - dispatch(CreateProjectActions.CreateProjectLoading(true)) - - - } catch (error: any) { - dispatch(CommonActions.SetLoading(false)) - dispatch(CreateProjectActions.CreateProjectLoading(true)) - - // Added Snackbar toast for error message - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: JSON.stringify(error?.response?.data?.detail) || 'Something went wrong.', - variant: "error", - duration: 2000, - }) - ); - //END - dispatch(CreateProjectActions.CreateProjectLoading(false)); - } finally { - dispatch(CreateProjectActions.CreateProjectLoading(false)) - - } +const CreateProjectService: Function = ( + url: string, + payload: any, + fileUpload: any, + formUpload: any, + dataExtractFile: any, +) => { + return async (dispatch) => { + dispatch(CreateProjectActions.CreateProjectLoading(true)); + dispatch(CommonActions.SetLoading(true)); + + const postCreateProjectDetails = async (url, payload, fileUpload, formUpload) => { + try { + const postNewProjectDetails = await axios.post(url, payload); + const resp: ProjectDetailsModel = postNewProjectDetails.data; + await dispatch(CreateProjectActions.PostProjectDetails(resp)); + + if (payload.splitting_algorithm === 'Choose Area as Tasks') { + await dispatch( + UploadAreaService(`${enviroment.baseApiUrl}/projects/${resp.id}/upload_multi_polygon`, fileUpload), + ); + } else if (payload.splitting_algorithm === 'Use natural Boundary') { + await dispatch(UploadAreaService(`${enviroment.baseApiUrl}/projects/task_split/${resp.id}/`, fileUpload)); + } else { + await dispatch( + UploadAreaService(`${enviroment.baseApiUrl}/projects/${resp.id}/upload_multi_polygon`, fileUpload), + ); + // await dispatch(UploadAreaService(`${enviroment.baseApiUrl}/projects/${resp.id}/upload`, fileUpload, { dimension: payload.dimension })); } - - await postCreateProjectDetails(url, payload, fileUpload, formUpload); - - } - -} + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: 'Project Successfully Created Now Generating QR For Project', + variant: 'success', + duration: 2000, + }), + ); + await dispatch( + GenerateProjectQRService( + `${enviroment.baseApiUrl}/projects/${resp.id}/generate`, + payload, + formUpload, + dataExtractFile, + ), + ); + dispatch(CommonActions.SetLoading(false)); + dispatch(CreateProjectActions.CreateProjectLoading(true)); + } catch (error: any) { + dispatch(CommonActions.SetLoading(false)); + dispatch(CreateProjectActions.CreateProjectLoading(true)); + + // Added Snackbar toast for error message + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: JSON.stringify(error?.response?.data?.detail) || 'Something went wrong.', + variant: 'error', + duration: 2000, + }), + ); + //END + dispatch(CreateProjectActions.CreateProjectLoading(false)); + } finally { + dispatch(CreateProjectActions.CreateProjectLoading(false)); + } + }; + + await postCreateProjectDetails(url, payload, fileUpload, formUpload); + }; +}; const FormCategoryService: Function = (url: string) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.GetFormCategoryLoading(true)) - - const getFormCategoryList = async (url) => { - - try { - const getFormCategoryListResponse = await axios.get(url) - const resp: FormCategoryListModel = getFormCategoryListResponse.data; - dispatch(CreateProjectActions.GetFormCategoryList(resp)); - - } catch (error) { - dispatch(CreateProjectActions.GetFormCategoryListLoading(false)); - } - } - - await getFormCategoryList(url); - - } - -} + return async (dispatch) => { + dispatch(CreateProjectActions.GetFormCategoryLoading(true)); + + const getFormCategoryList = async (url) => { + try { + const getFormCategoryListResponse = await axios.get(url); + const resp: FormCategoryListModel = getFormCategoryListResponse.data; + dispatch(CreateProjectActions.GetFormCategoryList(resp)); + } catch (error) { + dispatch(CreateProjectActions.GetFormCategoryListLoading(false)); + } + }; + + await getFormCategoryList(url); + }; +}; const UploadAreaService: Function = (url: string, filePayload: any, payload: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.UploadAreaLoading(true)) - const postUploadArea = async (url, filePayload, payload) => { - - try { - const areaFormData = new FormData(); - areaFormData.append('upload', filePayload); - if (payload?.dimension) { - areaFormData.append('dimension', payload?.dimension); - } - const postNewProjectDetails = await axios.post(url, areaFormData, - { - headers: { - "Content-Type": "multipart/form-data", - } - }); - // const resp: UploadAreaDetailsModel = postNewProjectDetails.data; - await dispatch(CreateProjectActions.UploadAreaLoading(false)) - await dispatch(CreateProjectActions.PostUploadAreaSuccess(postNewProjectDetails.data)) - - } catch (error: any) { - console.log(error, 'error'); - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: JSON.stringify(error?.response?.data?.detail) || 'Something Went Wrong.', - variant: "error", - duration: 2000, - }) - ); - dispatch(CreateProjectActions.UploadAreaLoading(false)) - } + return async (dispatch) => { + dispatch(CreateProjectActions.UploadAreaLoading(true)); + const postUploadArea = async (url, filePayload, payload) => { + try { + const areaFormData = new FormData(); + areaFormData.append('upload', filePayload); + if (payload?.dimension) { + areaFormData.append('dimension', payload?.dimension); } - - await postUploadArea(url, filePayload, payload); - - } - -} + const postNewProjectDetails = await axios.post(url, areaFormData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + // const resp: UploadAreaDetailsModel = postNewProjectDetails.data; + await dispatch(CreateProjectActions.UploadAreaLoading(false)); + await dispatch(CreateProjectActions.PostUploadAreaSuccess(postNewProjectDetails.data)); + } catch (error: any) { + console.log(error, 'error'); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: JSON.stringify(error?.response?.data?.detail) || 'Something Went Wrong.', + variant: 'error', + duration: 2000, + }), + ); + dispatch(CreateProjectActions.UploadAreaLoading(false)); + } + }; + + await postUploadArea(url, filePayload, payload); + }; +}; const GenerateProjectQRService: Function = (url: string, payload: any, formUpload: any, dataExtractFile: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.GenerateProjectQRLoading(true)) - dispatch(CommonActions.SetLoading(true)) - - const postUploadArea = async (url, payload: any, formUpload) => { - // debugger; - console.log(formUpload, 'formUpload'); - console.log(payload, 'payload'); - try { - const isPolygon = payload.data_extractWays === 'Polygon'; - const generateApiFormData = new FormData(); - if (payload.form_ways === 'Upload a Custom Form') { - generateApiFormData.append('extract_polygon', isPolygon.toString()); - generateApiFormData.append('upload', formUpload); - if (dataExtractFile) { - generateApiFormData.append('data_extracts', dataExtractFile); - } - } else { - generateApiFormData.append('extract_polygon', isPolygon.toString()); - generateApiFormData.append('upload', ''); - if (dataExtractFile) { - generateApiFormData.append('data_extracts', dataExtractFile); - } - - } - const postNewProjectDetails = await axios.post(url, generateApiFormData, - { - headers: { - "Content-Type": "multipart/form-data", - } - }); - const resp: string = postNewProjectDetails.data; - await dispatch(CreateProjectActions.GenerateProjectQRLoading(false)) - dispatch(CommonActions.SetLoading(false)) - await dispatch(CreateProjectActions.ClearCreateProjectFormData()) - await dispatch(CreateProjectActions.GenerateProjectQRSuccess(resp)) - - } catch (error: any) { - dispatch(CommonActions.SetLoading(false)) - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: JSON.stringify(error?.response?.data?.detail), - variant: "error", - duration: 2000, - }) - ); - dispatch(CreateProjectActions.GenerateProjectQRLoading(false)) - } + return async (dispatch) => { + dispatch(CreateProjectActions.GenerateProjectQRLoading(true)); + dispatch(CommonActions.SetLoading(true)); + + const postUploadArea = async (url, payload: any, formUpload) => { + // debugger; + console.log(formUpload, 'formUpload'); + console.log(payload, 'payload'); + try { + const isPolygon = payload.data_extractWays === 'Polygon'; + const generateApiFormData = new FormData(); + if (payload.form_ways === 'Upload a Custom Form') { + generateApiFormData.append('extract_polygon', isPolygon.toString()); + generateApiFormData.append('upload', formUpload); + if (dataExtractFile) { + generateApiFormData.append('data_extracts', dataExtractFile); + } + } else { + generateApiFormData.append('extract_polygon', isPolygon.toString()); + generateApiFormData.append('upload', ''); + if (dataExtractFile) { + generateApiFormData.append('data_extracts', dataExtractFile); + } } - - await postUploadArea(url, payload, formUpload); - - } - -} + const postNewProjectDetails = await axios.post(url, generateApiFormData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + const resp: string = postNewProjectDetails.data; + await dispatch(CreateProjectActions.GenerateProjectQRLoading(false)); + dispatch(CommonActions.SetLoading(false)); + await dispatch(CreateProjectActions.ClearCreateProjectFormData()); + await dispatch(CreateProjectActions.GenerateProjectQRSuccess(resp)); + } catch (error: any) { + dispatch(CommonActions.SetLoading(false)); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: JSON.stringify(error?.response?.data?.detail), + variant: 'error', + duration: 2000, + }), + ); + dispatch(CreateProjectActions.GenerateProjectQRLoading(false)); + } + }; + + await postUploadArea(url, payload, formUpload); + }; +}; const OrganisationService: Function = (url: string) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.GetOrganisationListLoading(true)) - - const getOrganisationList = async (url) => { - try { - const getOrganisationListResponse = await axios.get(url) - const resp: OrganisationListModel = getOrganisationListResponse.data; - dispatch(CreateProjectActions.GetOrganisationList(resp)); - - } catch (error) { - dispatch(CreateProjectActions.GetOrganizationListLoading(false)); - } - } - - await getOrganisationList(url); - - } - -} + return async (dispatch) => { + dispatch(CreateProjectActions.GetOrganisationListLoading(true)); + + const getOrganisationList = async (url) => { + try { + const getOrganisationListResponse = await axios.get(url); + const resp: OrganisationListModel = getOrganisationListResponse.data; + dispatch(CreateProjectActions.GetOrganisationList(resp)); + } catch (error) { + dispatch(CreateProjectActions.GetOrganizationListLoading(false)); + } + }; + + await getOrganisationList(url); + }; +}; const UploadCustomXLSFormService: Function = (url: string, payload: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.UploadCustomXLSFormLoading(true)) - - const postUploadCustomXLSForm = async (url, payload) => { - - try { - const customXLSFormData = new FormData(); - customXLSFormData.append('upload', payload[0]); - const postCustomXLSForm = await axios.post(url, customXLSFormData, - { - headers: { - "Content-Type": "multipart/form-data", - } - }); - await dispatch(CreateProjectActions.UploadCustomXLSFormLoading(false)) - await dispatch(CreateProjectActions.UploadCustomXLSFormSuccess(postCustomXLSForm.data)) - - } catch (error: any) { - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: JSON.stringify(error.response.data.detail) || "Something Went Wrong", - variant: "error", - duration: 2000, - }) - ); - dispatch(CreateProjectActions.UploadCustomXLSFormLoading(false)) - } - } - - await postUploadCustomXLSForm(url, payload); - - } - -} + return async (dispatch) => { + dispatch(CreateProjectActions.UploadCustomXLSFormLoading(true)); + + const postUploadCustomXLSForm = async (url, payload) => { + try { + const customXLSFormData = new FormData(); + customXLSFormData.append('upload', payload[0]); + const postCustomXLSForm = await axios.post(url, customXLSFormData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + await dispatch(CreateProjectActions.UploadCustomXLSFormLoading(false)); + await dispatch(CreateProjectActions.UploadCustomXLSFormSuccess(postCustomXLSForm.data)); + } catch (error: any) { + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: JSON.stringify(error.response.data.detail) || 'Something Went Wrong', + variant: 'error', + duration: 2000, + }), + ); + dispatch(CreateProjectActions.UploadCustomXLSFormLoading(false)); + } + }; + + await postUploadCustomXLSForm(url, payload); + }; +}; const GenerateProjectLog: Function = (url: string, params: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.GenerateProjectLogLoading(true)) - - const getGenerateProjectLog = async (url, params) => { - try { - const getGenerateProjectLogResponse = await axios.get(url, { params }) - const resp: OrganisationListModel = getGenerateProjectLogResponse.data; - dispatch(CreateProjectActions.SetGenerateProjectLog(resp)); - - } catch (error) { - dispatch(CreateProjectActions.GenerateProjectLogLoading(false)); - } - } - - await getGenerateProjectLog(url, params); - - } - -} + return async (dispatch) => { + dispatch(CreateProjectActions.GenerateProjectLogLoading(true)); + + const getGenerateProjectLog = async (url, params) => { + try { + const getGenerateProjectLogResponse = await axios.get(url, { params }); + const resp: OrganisationListModel = getGenerateProjectLogResponse.data; + dispatch(CreateProjectActions.SetGenerateProjectLog(resp)); + } catch (error) { + dispatch(CreateProjectActions.GenerateProjectLogLoading(false)); + } + }; + + await getGenerateProjectLog(url, params); + }; +}; const GetDividedTaskFromGeojson: Function = (url: string, payload: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.SetDividedTaskFromGeojsonLoading(true)) - - const getDividedTaskFromGeojson = async (url, payload) => { - try { - const dividedTaskFormData = new FormData(); - dividedTaskFormData.append("upload", payload.geojson); - dividedTaskFormData.append("dimension", payload.dimension); - const getGetDividedTaskFromGeojsonResponse = await axios.post(url, dividedTaskFormData) - const resp: OrganisationListModel = getGetDividedTaskFromGeojsonResponse.data; - dispatch(CreateProjectActions.SetDividedTaskGeojson(resp)); - dispatch(CreateProjectActions.SetDividedTaskFromGeojsonLoading(false)); - } catch (error) { - dispatch(CreateProjectActions.SetDividedTaskFromGeojsonLoading(false)); - } finally { - dispatch(CreateProjectActions.SetDividedTaskFromGeojsonLoading(false)); - } - } - - await getDividedTaskFromGeojson(url, payload); - - } - -} + return async (dispatch) => { + dispatch(CreateProjectActions.SetDividedTaskFromGeojsonLoading(true)); + + const getDividedTaskFromGeojson = async (url, payload) => { + try { + const dividedTaskFormData = new FormData(); + dividedTaskFormData.append('upload', payload.geojson); + dividedTaskFormData.append('dimension', payload.dimension); + const getGetDividedTaskFromGeojsonResponse = await axios.post(url, dividedTaskFormData); + const resp: OrganisationListModel = getGetDividedTaskFromGeojsonResponse.data; + dispatch(CreateProjectActions.SetDividedTaskGeojson(resp)); + dispatch(CreateProjectActions.SetDividedTaskFromGeojsonLoading(false)); + } catch (error) { + dispatch(CreateProjectActions.SetDividedTaskFromGeojsonLoading(false)); + } finally { + dispatch(CreateProjectActions.SetDividedTaskFromGeojsonLoading(false)); + } + }; + + await getDividedTaskFromGeojson(url, payload); + }; +}; const GetIndividualProjectDetails: Function = (url: string, payload: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.SetIndividualProjectDetailsLoading(true)) - - const getIndividualProjectDetails = async (url, payload) => { - try { - const getIndividualProjectDetailsResponse = await axios.get(url, { params: payload }) - const resp: ProjectDetailsModel = getIndividualProjectDetailsResponse.data; - const formattedOutlineGeojson = { type: 'FeatureCollection', features: [{ ...resp.outline_geojson, id: 1 }] } - const modifiedResponse = { - ...resp, - name: resp.project_info?.[0].name, - description: resp.project_info?.[0].description, - short_description: resp.project_info?.[0].short_description, - outline_geojson: formattedOutlineGeojson - } - - dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); - dispatch(CreateProjectActions.SetIndividualProjectDetailsLoading(false)); - } catch (error) { - dispatch(CreateProjectActions.SetIndividualProjectDetailsLoading(false)); - } finally { - dispatch(CreateProjectActions.SetIndividualProjectDetailsLoading(false)); - } - } - - await getIndividualProjectDetails(url, payload); - } -} + return async (dispatch) => { + dispatch(CreateProjectActions.SetIndividualProjectDetailsLoading(true)); + + const getIndividualProjectDetails = async (url, payload) => { + try { + const getIndividualProjectDetailsResponse = await axios.get(url, { params: payload }); + const resp: ProjectDetailsModel = getIndividualProjectDetailsResponse.data; + const formattedOutlineGeojson = { type: 'FeatureCollection', features: [{ ...resp.outline_geojson, id: 1 }] }; + const modifiedResponse = { + ...resp, + name: resp.project_info?.[0].name, + description: resp.project_info?.[0].description, + short_description: resp.project_info?.[0].short_description, + outline_geojson: formattedOutlineGeojson, + }; + + dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); + dispatch(CreateProjectActions.SetIndividualProjectDetailsLoading(false)); + } catch (error) { + dispatch(CreateProjectActions.SetIndividualProjectDetailsLoading(false)); + } finally { + dispatch(CreateProjectActions.SetIndividualProjectDetailsLoading(false)); + } + }; + + await getIndividualProjectDetails(url, payload); + }; +}; const TaskSplittingPreviewService: Function = (url: string, fileUpload: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(true)) - - const getTaskSplittingGeojson = async (url, fileUpload) => { - try { - const taskSplittingFileFormData = new FormData(); - taskSplittingFileFormData.append("upload", fileUpload); - const getTaskSplittingResponse = await axios.post(url, taskSplittingFileFormData) - const resp: OrganisationListModel = getTaskSplittingResponse.data; - dispatch(CreateProjectActions.GetTaskSplittingPreview(resp)); - dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(false)); - - } catch (error) { - dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(false)); - } finally { - dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(false)); - } - } - - await getTaskSplittingGeojson(url, fileUpload); - - } - -} + return async (dispatch) => { + dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(true)); + + const getTaskSplittingGeojson = async (url, fileUpload) => { + try { + const taskSplittingFileFormData = new FormData(); + taskSplittingFileFormData.append('upload', fileUpload); + const getTaskSplittingResponse = await axios.post(url, taskSplittingFileFormData); + const resp: OrganisationListModel = getTaskSplittingResponse.data; + dispatch(CreateProjectActions.GetTaskSplittingPreview(resp)); + dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(false)); + } catch (error) { + dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(false)); + } finally { + dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(false)); + } + }; + + await getTaskSplittingGeojson(url, fileUpload); + }; +}; const PatchProjectDetails: Function = (url: string, payload: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.SetPatchProjectDetailsLoading(true)) - - const patchProjectDetails = async (url, payload) => { - try { - const getIndividualProjectDetailsResponse = await axios.patch(url, payload) - const resp: ProjectDetailsModel = getIndividualProjectDetailsResponse.data; - // dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); - dispatch(CreateProjectActions.SetPatchProjectDetails(resp)); - dispatch(CreateProjectActions.SetPatchProjectDetailsLoading(false)); - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: 'Project Successfully Edited', - variant: "success", - duration: 2000, - }) - ); - } catch (error) { - dispatch(CreateProjectActions.SetPatchProjectDetailsLoading(false)); - } finally { - dispatch(CreateProjectActions.SetPatchProjectDetailsLoading(false)); - } - } - - await patchProjectDetails(url, payload); - - } - -} + return async (dispatch) => { + dispatch(CreateProjectActions.SetPatchProjectDetailsLoading(true)); + + const patchProjectDetails = async (url, payload) => { + try { + const getIndividualProjectDetailsResponse = await axios.patch(url, payload); + const resp: ProjectDetailsModel = getIndividualProjectDetailsResponse.data; + // dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); + dispatch(CreateProjectActions.SetPatchProjectDetails(resp)); + dispatch(CreateProjectActions.SetPatchProjectDetailsLoading(false)); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: 'Project Successfully Edited', + variant: 'success', + duration: 2000, + }), + ); + } catch (error) { + dispatch(CreateProjectActions.SetPatchProjectDetailsLoading(false)); + } finally { + dispatch(CreateProjectActions.SetPatchProjectDetailsLoading(false)); + } + }; + + await patchProjectDetails(url, payload); + }; +}; const PostFormUpdate: Function = (url: string, payload: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.SetPostFormUpdateLoading(true)) - - const postFormUpdate = async (url, payload) => { - try { - const formFormData = new FormData(); - formFormData.append('form', payload); - const postFormUpdateResponse = await axios.post(url, formFormData) - const resp: ProjectDetailsModel = postFormUpdateResponse.data; - // dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); - // dispatch(CreateProjectActions.SetPostFormUpdate(resp)); - dispatch(CreateProjectActions.SetPostFormUpdateLoading(false)); - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: 'Form Successfully Updated', - variant: "success", - duration: 2000, - }) - ); - } catch (error) { - dispatch(CreateProjectActions.SetPostFormUpdateLoading(false)); - } finally { - dispatch(CreateProjectActions.SetPostFormUpdateLoading(false)); - } + return async (dispatch) => { + dispatch(CreateProjectActions.SetPostFormUpdateLoading(true)); + + const postFormUpdate = async (url, payload) => { + try { + const formFormData = new FormData(); + formFormData.append('project_id', payload.project_id); + if (payload.category) { + formFormData.append('category', payload.category); } - - await postFormUpdate(url, payload); - - } - -} + if (payload.upload) { + formFormData.append('upload', payload.upload); + } + const postFormUpdateResponse = await axios.post(url, formFormData); + const resp: ProjectDetailsModel = postFormUpdateResponse.data; + // dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); + // dispatch(CreateProjectActions.SetPostFormUpdate(resp)); + dispatch(CreateProjectActions.SetPostFormUpdateLoading(false)); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: 'Form Successfully Updated', + variant: 'success', + duration: 2000, + }), + ); + } catch (error) { + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: error.response.data.detail, + variant: 'success', + duration: 2000, + }), + ); + dispatch(CreateProjectActions.SetPostFormUpdateLoading(false)); + } finally { + dispatch(CreateProjectActions.SetPostFormUpdateLoading(false)); + } + }; + + await postFormUpdate(url, payload); + }; +}; const EditProjectBoundaryService: Function = (url: string, geojsonUpload: any, dimension: any) => { - - return async (dispatch) => { - dispatch(CreateProjectActions.SetEditProjectBoundaryServiceLoading(true)) - - const postFormUpdate = async (url, geojsonUpload, dimension) => { - try { - const editBoundaryFormData = new FormData(); - editBoundaryFormData.append('upload', geojsonUpload); - if (dimension) { - editBoundaryFormData.append('dimension', dimension); - } - const postBoundaryUpdateResponse = await axios.post(url, editBoundaryFormData) - const resp: unknown = postBoundaryUpdateResponse.data; - // dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); - // dispatch(CreateProjectActions.SetPostFormUpdate(resp)); - dispatch(CreateProjectActions.SetEditProjectBoundaryServiceLoading(false)); - dispatch( - CommonActions.SetSnackBar({ - open: true, - message: 'Project Boundary Successfully Updated', - variant: "success", - duration: 2000, - }) - ); - } catch (error) { - dispatch(CreateProjectActions.SetEditProjectBoundaryServiceLoading(false)); - } finally { - dispatch(CreateProjectActions.SetEditProjectBoundaryServiceLoading(false)); - } + return async (dispatch) => { + dispatch(CreateProjectActions.SetEditProjectBoundaryServiceLoading(true)); + + const postFormUpdate = async (url, geojsonUpload, dimension) => { + try { + const editBoundaryFormData = new FormData(); + editBoundaryFormData.append('upload', geojsonUpload); + if (dimension) { + editBoundaryFormData.append('dimension', dimension); } - - await postFormUpdate(url, geojsonUpload, dimension); - - } - -} - + const postBoundaryUpdateResponse = await axios.post(url, editBoundaryFormData); + const resp: unknown = postBoundaryUpdateResponse.data; + // dispatch(CreateProjectActions.SetIndividualProjectDetails(modifiedResponse)); + // dispatch(CreateProjectActions.SetPostFormUpdate(resp)); + dispatch(CreateProjectActions.SetEditProjectBoundaryServiceLoading(false)); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: 'Project Boundary Successfully Updated', + variant: 'success', + duration: 2000, + }), + ); + } catch (error) { + dispatch(CreateProjectActions.SetEditProjectBoundaryServiceLoading(false)); + } finally { + dispatch(CreateProjectActions.SetEditProjectBoundaryServiceLoading(false)); + } + }; + + await postFormUpdate(url, geojsonUpload, dimension); + }; +}; export { - UploadAreaService, - CreateProjectService, - FormCategoryService, - GenerateProjectQRService, - OrganisationService, - UploadCustomXLSFormService, - GenerateProjectLog, - GetDividedTaskFromGeojson, - TaskSplittingPreviewService, - GetIndividualProjectDetails, - PatchProjectDetails, - PostFormUpdate, - EditProjectBoundaryService -} + UploadAreaService, + CreateProjectService, + FormCategoryService, + GenerateProjectQRService, + OrganisationService, + UploadCustomXLSFormService, + GenerateProjectLog, + GetDividedTaskFromGeojson, + TaskSplittingPreviewService, + GetIndividualProjectDetails, + PatchProjectDetails, + PostFormUpdate, + EditProjectBoundaryService, +}; diff --git a/src/frontend/main/src/components/createproject/DataExtract.tsx b/src/frontend/main/src/components/createproject/DataExtract.tsx index a4fae5af8d..7ba19b5e07 100755 --- a/src/frontend/main/src/components/createproject/DataExtract.tsx +++ b/src/frontend/main/src/components/createproject/DataExtract.tsx @@ -12,9 +12,15 @@ import DefineAreaMap from 'map/DefineAreaMap'; import DataExtractValidation from './validation/DataExtractValidation'; // import { SelectPicker } from 'rsuite'; -let generateProjectLogIntervalCb:any = null; +let generateProjectLogIntervalCb: any = null; -const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile,setDataExtractFile,setDataExtractFileValue }) => { +const DataExtract: React.FC = ({ + geojsonFile, + setGeojsonFile, + dataExtractFile, + setDataExtractFile, + setDataExtractFileValue, +}) => { const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); const navigate = useNavigate(); @@ -38,7 +44,7 @@ const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile const dataExtractOptions = dataExtractOptionsList.map((item) => ({ label: item, value: item })); const formCategoryData = formCategoryList.map((item) => ({ label: item.title, value: item.title })); // //we use use-selector from redux to get state of dividedTaskGeojson from createProject slice - + // Fetching form category list useEffect(() => { dispatch(FormCategoryService(`${enviroment.baseApiUrl}/central/list-forms`)); @@ -46,9 +52,9 @@ const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile // END const submission = () => { - // const previousValues = location.state.values; - dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, ...values })); - navigate('/select-form'); + // const previousValues = location.state.values; + dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, ...values })); + navigate('/select-form'); // navigate("/select-form", { replace: true, state: { values: values } }); }; @@ -67,7 +73,7 @@ const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile submission, DataExtractValidation, ); - + return ( = ({ geojsonFile,setGeojsonFile,dataExtractFile sx={{ display: 'flex', flexDirection: { xs: 'column', md: 'row' } }} > - + = ({ geojsonFile,setGeojsonFile,dataExtractFile }} > {/* onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'xform_title', value: e.target.value }))} > */} - {formCategoryData?.map((form) => ( - {form.label} - ))} + {formCategoryData?.map((form) => {form.label})} {errors.xform_title && ( @@ -160,87 +164,90 @@ const DataExtract: React.FC = ({ geojsonFile,setGeojsonFile,dataExtractFile }} > {/* onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'xform_title', value: e.target.value }))} > */} - {dataExtractOptions?.map((form) => ( - {form.label} - ))} + {dataExtractOptions?.map((form) => {form.label})} {errors.data_extract_options && ( {errors.data_extract_options} )} - - {/* Area Geojson File Upload For Create Project */} - {values.data_extract_options === 'Upload Custom Data Extract' && - Upload Custom Data Extract - - + {/* Area Geojson File Upload For Create Project */} + {values.data_extract_options === 'Upload Custom Data Extract' && ( + + Upload Custom Data Extract + + { + setDataExtractFile(e.target.files[0]); + handleCustomChange('data_extractFile', e.target.files[0]); + }} + /> + {dataExtractFile?.name} + + {errors.data_extractFile && ( + + {errors.data_extractFile} + + )} + + )} + + {values.data_extract_options === 'Data Extract Ways' && ( + + + Data Extract Type + + { - handleCustomChange('data_extractWays', e.target.value); - dispatch( - CreateProjectActions.SetIndividualProjectDetailsData({ - ...projectDetails, - data_extractWays: e.target.value, - }), - ); - }} - > - {/* onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'xform_title', value: e.target.value }))} > */} - {selectExtractWays?.map((form) => ( - {form.label} - ))} - - {errors.data_extractWays && ( - - {errors.data_extractWays} - - )} - } + > + {/* onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'xform_title', value: e.target.value }))} > */} + {selectExtractWays?.map((form) => {form.label})} + + {errors.data_extractWays && ( + + {errors.data_extractWays} + + )} + + )} + + + + + - - - - - = ({ geojsonFile,setGeojsonFile,dataExtractFile {/* END */} {/* Submit Button For Create Project on Area Upload */} - - } - variant="contained" - color="error" + + } + variant="contained" + color="error" > Next - {/* END */} diff --git a/src/frontend/main/src/components/editproject/UpdateForm.tsx b/src/frontend/main/src/components/editproject/UpdateForm.tsx index caee5df379..428e475d03 100644 --- a/src/frontend/main/src/components/editproject/UpdateForm.tsx +++ b/src/frontend/main/src/components/editproject/UpdateForm.tsx @@ -1,52 +1,116 @@ -import React, { useState } from 'react' +import React, { useEffect, useState } from 'react'; import CoreModules from '../../shared/CoreModules'; import environment from '../../environment'; -import { PostFormUpdate } from '../../api/CreateProjectService'; +import { FormCategoryService, PostFormUpdate } from '../../api/CreateProjectService'; +import { MenuItem } from '@mui/material'; +import { diffObject } from '../../utilfunctions/compareUtils.js'; -const UpdateForm = ({projectId}) => { +const UpdateForm = ({ projectId }) => { const dispatch = CoreModules.useDispatch(); const [uploadForm, setUploadForm] = useState(null); + const [selectedFormCategory, setSelectedFormCategory] = useState(null); const formUpdateLoading: any = CoreModules.useSelector((state) => state.createproject.formUpdateLoading); - // //we use use selector from redux to get all state of defaultTheme from theme slice - const onSubmit=()=>{ - dispatch(PostFormUpdate(`${environment.baseApiUrl}/projects/update-form/${projectId}`,uploadForm)); - } + + const formCategoryList = CoreModules.useSelector((state: any) => state.createproject.formCategoryList); + const previousXform_title = CoreModules.useSelector((state: any) => state.project.projectInfo.xform_title); + const formCategoryData = formCategoryList.map((item) => ({ label: item.title, value: item.title })); + + const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + //we use use selector from redux to get all state of defaultTheme from theme slice + + // Fetching form category list + useEffect(() => { + dispatch(FormCategoryService(`${environment.baseApiUrl}/central/list-forms`)); + }, []); + + const onSubmit = () => { + const diffPayload = diffObject({ category: previousXform_title }, { category: selectedFormCategory }); + console.log(diffPayload, 'diffPayload'); + + dispatch( + PostFormUpdate(`${environment.baseApiUrl}/projects/update_category`, { + ...(Object.keys(diffPayload).length > 0 ? diffPayload : { category: selectedFormCategory }), + project_id: projectId, + upload: uploadForm, + }), + ); + }; + useEffect(() => { + setSelectedFormCategory(previousXform_title); + }, [previousXform_title]); + return ( - - Upload .xls/.xlsx/.xml Form - - { - setUploadForm(e.target.files[0]); - }} - inputProps={{ "accept":".xml, .xls, .xlsx" }} - - /> - {/* {customFormFile?.name} */} - - {/* {!values.uploaded_form && ( + + + Form Category + + { + setSelectedFormCategory(e.target.value); + // handleCustomChange('xform_title', e.target.value); + // dispatch( + // CreateProjectActions.SetIndividualProjectDetailsData({ + // ...projectDetails, + // xform_title: e.target.value, + // }), + // ); + }} + inputProps={{ shrink: selectedFormCategory ? true : false }} + > + {/* onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'xform_title', value: e.target.value }))} > */} + {formCategoryData?.map((form) => ( + + {form.label} + + ))} + + {/* {errors.xform_title && ( + + {errors.xform_title} + + )} */} + + Upload .xls/.xlsx/.xml Form + + { + setUploadForm(e.target.files[0]); + }} + inputProps={{ accept: '.xml, .xls, .xlsx' }} + /> + {/* {customFormFile?.name} */} + + {/* {!values.uploaded_form && ( Form File is required. )} */} - - } - variant="contained" - color="error" - onClick={onSubmit} - > - Submit - - - + + } + variant="contained" + color="error" + onClick={onSubmit} + > + Submit + + - ) -} + ); +}; -export default UpdateForm \ No newline at end of file +export default UpdateForm; diff --git a/src/frontend/main/src/store/Store.js b/src/frontend/main/src/store/Store.js index cbabb4e31b..cc17828c6c 100755 --- a/src/frontend/main/src/store/Store.js +++ b/src/frontend/main/src/store/Store.js @@ -25,8 +25,8 @@ export default function persist(key, whitelist, reducer) { } const reducers = CoreModules.combineReducers({ - project: persist('project', ['project'], ProjectSlice.reducer), - login: persist('login', ['login'], LoginSlice.reducer), + project: persist('project', ['project', 'projectInfo'], ProjectSlice.reducer), + login: persist('login', ['loginToken', 'authDetails'], LoginSlice.reducer), //you can persist your auth reducer here similar to project reducer home: HomeSlice.reducer, theme: ThemeSlice.reducer, diff --git a/src/frontend/main/src/store/slices/LoginSlice.ts b/src/frontend/main/src/store/slices/LoginSlice.ts index 75826c3746..85a39ccd1c 100755 --- a/src/frontend/main/src/store/slices/LoginSlice.ts +++ b/src/frontend/main/src/store/slices/LoginSlice.ts @@ -1,27 +1,24 @@ - -import CoreModules from "../../shared/CoreModules"; +import CoreModules from '../../shared/CoreModules'; import storage from 'redux-persist/lib/storage'; const LoginSlice = CoreModules.createSlice({ - name: 'login', - initialState: { - loginToken: null, - authDetails: null, + name: 'login', + initialState: { + loginToken: null, + authDetails: null, + }, + reducers: { + SetLoginToken(state, action) { + state.loginToken = action.payload; }, - reducers: { - SetLoginToken(state, action) { - state.loginToken = action.payload - }, - signOut(state, action) { - storage.removeItem('persist:login') - state.loginToken = action.payload - }, - setAuthDetails(state, action) { - state.authDetails = action.payload - }, - - } -}) - + signOut(state, action) { + storage.removeItem('persist:login'); + state.loginToken = action.payload; + }, + setAuthDetails(state, action) { + state.authDetails = action.payload; + }, + }, +}); export const LoginActions = LoginSlice.actions; export default LoginSlice; diff --git a/src/frontend/main/src/store/slices/ProjectSlice.ts b/src/frontend/main/src/store/slices/ProjectSlice.ts index 04c71ec02c..52d45b5500 100755 --- a/src/frontend/main/src/store/slices/ProjectSlice.ts +++ b/src/frontend/main/src/store/slices/ProjectSlice.ts @@ -1,55 +1,53 @@ -import { createSlice } from "@reduxjs/toolkit"; -import storage from "redux-persist/lib/storage"; - +import { createSlice } from '@reduxjs/toolkit'; +import storage from 'redux-persist/lib/storage'; const ProjectSlice = createSlice({ - name: 'project', - initialState: { - projectLoading: true, - projectTaskBoundries: [], - newProjectTrigger: false, - projectInfo: {}, - projectSubmissionLoading: false, - projectSubmission: [], - projectBuildingGeojsonLoading: false, - projectBuildingGeojson: [], - downloadProjectFormLoading: { type: 'form', loading: false }, - }, - reducers: { - SetProjectTaskBoundries(state, action) { - state.projectTaskBoundries = action.payload - }, - SetProjectLoading(state, action) { - state.projectLoading = action.payload - }, - SetProjectInfo(state, action) { - state.projectInfo = action.payload - }, - SetNewProjectTrigger(state, action) { - state.newProjectTrigger = !state.newProjectTrigger - }, - clearProjects(state, action) { - storage.removeItem('persist:project') - state.projectTaskBoundries = action.payload - }, - GetProjectSubmissionLoading(state, action) { - state.projectSubmissionLoading = action.payload - }, - SetProjectSubmission(state, action) { - state.projectSubmission = action.payload - }, - GetProjectBuildingGeojsonLoading(state, action) { - state.projectSubmissionLoading = action.payload - }, - SetProjectBuildingGeojson(state, action) { - state.projectBuildingGeojson = action.payload - }, - SetDownloadProjectFormLoading(state, action) { - state.downloadProjectFormLoading = action.payload - }, - } -}) - + name: 'project', + initialState: { + projectLoading: true, + projectTaskBoundries: [], + newProjectTrigger: false, + projectInfo: {}, + projectSubmissionLoading: false, + projectSubmission: [], + projectBuildingGeojsonLoading: false, + projectBuildingGeojson: [], + downloadProjectFormLoading: { type: 'form', loading: false }, + }, + reducers: { + SetProjectTaskBoundries(state, action) { + state.projectTaskBoundries = action.payload; + }, + SetProjectLoading(state, action) { + state.projectLoading = action.payload; + }, + SetProjectInfo(state, action) { + state.projectInfo = action.payload; + }, + SetNewProjectTrigger(state, action) { + state.newProjectTrigger = !state.newProjectTrigger; + }, + clearProjects(state, action) { + storage.removeItem('persist:project'); + state.projectTaskBoundries = action.payload; + }, + GetProjectSubmissionLoading(state, action) { + state.projectSubmissionLoading = action.payload; + }, + SetProjectSubmission(state, action) { + state.projectSubmission = action.payload; + }, + GetProjectBuildingGeojsonLoading(state, action) { + state.projectSubmissionLoading = action.payload; + }, + SetProjectBuildingGeojson(state, action) { + state.projectBuildingGeojson = action.payload; + }, + SetDownloadProjectFormLoading(state, action) { + state.downloadProjectFormLoading = action.payload; + }, + }, +}); export const ProjectActions = ProjectSlice.actions; -export default ProjectSlice; \ No newline at end of file +export default ProjectSlice; diff --git a/src/frontend/main/src/utilfunctions/compareUtils.js b/src/frontend/main/src/utilfunctions/compareUtils.js index 2d7f0f563e..ba6d7e1bf4 100755 --- a/src/frontend/main/src/utilfunctions/compareUtils.js +++ b/src/frontend/main/src/utilfunctions/compareUtils.js @@ -1,16 +1,15 @@ -function diffObject(a, b) { - const diffObj = Object.keys(b).reduce((diff, key) => { - if (a[key] === b[key]) return diff; - return { - ...diff, - [key]: b[key], - }; - }, {}); - return diffObj; - } - function diffArray(array1, array2) { - return array1.filter((object1) => !array2.some((object2) => object1.id === object2.id)); - } +function diffObject(firstObject, secondObject) { + const diffObj = Object.keys(secondObject).reduce((diff, key) => { + if (firstObject[key] === secondObject[key]) return diff; + return { + ...diff, + [key]: secondObject[key], + }; + }, {}); + return diffObj; +} +function diffArray(array1, array2) { + return array1.filter((object1) => !array2.some((object2) => object1.id === object2.id)); +} - - export { diffArray,diffObject }; \ No newline at end of file +export { diffArray, diffObject }; diff --git a/src/frontend/main/src/views/EditProject.tsx b/src/frontend/main/src/views/EditProject.tsx index 956d886da1..7f1dde15cc 100755 --- a/src/frontend/main/src/views/EditProject.tsx +++ b/src/frontend/main/src/views/EditProject.tsx @@ -14,7 +14,7 @@ const EditProject: React.FC = () => { const dispatch = CoreModules.useDispatch(); const [selectedTab, setSelectedTab] = useState('project-description'); const params = CoreModules.useParams(); - const navigate = useNavigate() + const navigate = useNavigate(); const encodedProjectId = params.projectId; const decodedProjectId = environment.decode(encodedProjectId); const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); @@ -22,7 +22,7 @@ const EditProject: React.FC = () => { const tabHover = { '&:hover': { background: defaultTheme.palette.grey.light, - cursor: 'pointer' + cursor: 'pointer', }, }; useEffect(() => { @@ -31,8 +31,7 @@ const EditProject: React.FC = () => { if (decodedProjectId) { dispatch(GetIndividualProjectDetails(`${environment.baseApiUrl}/projects/${decodedProjectId}`)); } - }, [decodedProjectId]) - + }, [decodedProjectId]); return (
@@ -46,27 +45,42 @@ const EditProject: React.FC = () => { }} color="info" > - - + + Back - + Edit Project - {SidebarContent.map((content) => - setSelectedTab(content.slug)} sx={{ p: 1, ...tabHover, backgroundColor: selectedTab === content.slug ? defaultTheme.palette.grey.light : 'white' }} variant="subtitle2"> + {SidebarContent.map((content) => ( + setSelectedTab(content.slug)} + sx={{ + p: 1, + ...tabHover, + backgroundColor: selectedTab === content.slug ? defaultTheme.palette.grey.light : 'white', + }} + variant="subtitle2" + > {content.name} - )} + ))} {selectedTab === 'project-description' ? : null} From 0a2fd43daa51984c753b175b85f8e2d78a50294f Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 2 Aug 2023 14:08:13 +0545 Subject: [PATCH 099/222] fix : indentation service --- src/frontend/main/src/api/HomeService.ts | 62 +++++++++++------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/src/frontend/main/src/api/HomeService.ts b/src/frontend/main/src/api/HomeService.ts index 17179599f4..c1372a5f92 100755 --- a/src/frontend/main/src/api/HomeService.ts +++ b/src/frontend/main/src/api/HomeService.ts @@ -3,38 +3,34 @@ import { HomeActions } from '../store/slices/HomeSlice'; import { HomeProjectCardModel } from '../models/home/homeModel'; export const HomeSummaryService: Function = (url: string) => { + return async (dispatch) => { + dispatch(HomeActions.HomeProjectLoading(true)); - return async (dispatch) => { - dispatch(HomeActions.HomeProjectLoading(true)) + const fetchHomeSummaries = async (url) => { + try { + const fetchHomeData = await axios.get(url); + const resp: HomeProjectCardModel = fetchHomeData.data; + // let resp = new Array(10).fill({ + // id: 1234, + // priority: "MEDIUM", + // title: "Naivasha", + // location_str: "Lake Naivasha, Kenya", + // description: "HOT demo", + // total_tasks: 320, + // tasks_mapped: 0, + // tasks_validated: 0, + // contributors: 0, + // tasks_bad: 0, + // priority_str: 'HIGH', + // num_contributors: 12 + // }) + dispatch(HomeActions.SetHomeProjectSummary(resp)); + dispatch(HomeActions.HomeProjectLoading(false)); + } catch (error) { + dispatch(HomeActions.HomeProjectLoading(false)); + } + }; - const fetchHomeSummaries = async (url) => { - - try { - const fetchHomeData = await axios.get(url) - const resp: HomeProjectCardModel = fetchHomeData.data; - // let resp = new Array(10).fill({ - // id: 1234, - // priority: "MEDIUM", - // title: "Naivasha", - // location_str: "Lake Naivasha, Kenya", - // description: "HOT demo", - // total_tasks: 320, - // tasks_mapped: 0, - // tasks_validated: 0, - // contributors: 0, - // tasks_bad: 0, - // priority_str: 'HIGH', - // num_contributors: 12 - // }) - dispatch(HomeActions.SetHomeProjectSummary(resp)) - dispatch(HomeActions.HomeProjectLoading(false)) - } catch (error) { - dispatch(HomeActions.HomeProjectLoading(false)) - } - } - - await fetchHomeSummaries(url); - - } - -} + await fetchHomeSummaries(url); + }; +}; From 0b99adebb190676343de7b3f2599b3221475a46f Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 2 Aug 2023 14:57:58 +0545 Subject: [PATCH 100/222] feat: login osm added --- src/frontend/main/src/utilfunctions/login.ts | 96 ++++++++++--------- .../main/src/utilities/PrimaryAppBar.tsx | 10 +- .../main/src/utilities/ProtectedRoute.jsx | 9 +- 3 files changed, 62 insertions(+), 53 deletions(-) diff --git a/src/frontend/main/src/utilfunctions/login.ts b/src/frontend/main/src/utilfunctions/login.ts index 547731e563..7df26b3ee4 100644 --- a/src/frontend/main/src/utilfunctions/login.ts +++ b/src/frontend/main/src/utilfunctions/login.ts @@ -1,5 +1,5 @@ -import environment from "../environment"; -import { createPopup } from "./createPopup"; +import environment from '../environment'; +import { createPopup } from './createPopup'; declare global { interface Window { authComplete: any; @@ -8,52 +8,54 @@ declare global { // Code taken from https://github.com/mapbox/osmcha-frontend/blob/master/src/utils/create_popup.js - export const createLoginWindow = (redirectTo) => { const popup = createPopup('OSM auth', ''); - fetch(`${environment.baseApiUrl}/auth/osm_login/`).then((resp) => resp.json()).then((resp) => { - //@ts-ignore - popup.location = resp.login_url; - // Perform token exchange. - // Get the URL from which you want to extract parameters - const url = new URL(resp.login_url); - - // Get the search parameters from the URL - const searchParams = new URLSearchParams(url.search); - - // Retrieve individual parameters by name - const responseState = searchParams.get('state'); - window.authComplete = (authCode, state) => { - let callback_url = `${environment.baseApiUrl}/auth/callback/?code=${authCode}&state=${state}`; - - try { - if (responseState === state) { - fetch(callback_url).then((resp) => resp.json()).then((res) => { - - fetch(`${environment.baseApiUrl}/auth/me/`, { - headers: { - "access-token": res.access_token.access_token - } - }).then((resp) => resp.json()).then((userRes) => { - const params = new URLSearchParams({ - username: userRes.user_data.username, - osm_oauth_token: res.access_token.access_token, - id: userRes.user_data.id, - picture: userRes.user_data.img_url, - redirect_to: redirectTo, - }).toString(); - let redirectUrl = `/osmauth?${params}`; - window.location.href = redirectUrl; - }); - - - }); - } else { - throw new Error('States do not match'); + fetch(`${environment.baseApiUrl}/auth/osm_login/`) + .then((resp) => resp.json()) + .then((resp) => { + //@ts-ignore + popup.location = resp.login_url; + // Perform token exchange. + // Get the URL from which you want to extract parameters + const url = new URL(resp.login_url); + + // Get the search parameters from the URL + const searchParams = new URLSearchParams(url.search); + + // Retrieve individual parameters by name + const responseState = searchParams.get('state'); + window.authComplete = (authCode, state) => { + let callback_url = `${environment.baseApiUrl}/auth/callback/?code=${authCode}&state=${state}`; + + try { + if (responseState === state) { + fetch(callback_url) + .then((resp) => resp.json()) + .then((res) => { + fetch(`${environment.baseApiUrl}/auth/me/`, { + headers: { + 'access-token': res.access_token.access_token, + }, + }) + .then((resp) => resp.json()) + .then((userRes) => { + const params = new URLSearchParams({ + username: userRes.user_data.username, + osm_oauth_token: res.access_token.access_token, + id: userRes.user_data.id, + picture: userRes.user_data.img_url, + redirect_to: redirectTo, + }).toString(); + let redirectUrl = `/osmauth?${params}`; + window.location.href = redirectUrl; + }); + }); + } else { + throw new Error('States do not match'); + } + } catch (error) { + console.log(error, 'error'); } - } catch (error) { - console.log(error, 'error'); - } - }; - }); + }; + }); }; diff --git a/src/frontend/main/src/utilities/PrimaryAppBar.tsx b/src/frontend/main/src/utilities/PrimaryAppBar.tsx index 62d46eee2d..87888a8dde 100755 --- a/src/frontend/main/src/utilities/PrimaryAppBar.tsx +++ b/src/frontend/main/src/utilities/PrimaryAppBar.tsx @@ -173,18 +173,18 @@ export default function PrimaryAppBar() { color="info" onClick={() => createLoginWindow('/')} > - Test OSM Sign in + Sign in - + {/* Sign in - - + */} + {/* Sign up - + */} )} diff --git a/src/frontend/main/src/utilities/ProtectedRoute.jsx b/src/frontend/main/src/utilities/ProtectedRoute.jsx index 37c9469f5d..7957c2d027 100644 --- a/src/frontend/main/src/utilities/ProtectedRoute.jsx +++ b/src/frontend/main/src/utilities/ProtectedRoute.jsx @@ -1,10 +1,17 @@ import { Navigate } from 'react-router-dom'; import React from 'react'; import CoreModules from '../shared/CoreModules'; +import { createLoginWindow } from '../utilfunctions/login'; + const ProtectedRoute = ({ children }) => { const token = CoreModules.useSelector((state) => state.login.loginToken); if (token == null) { - return ; + if (process.env.NODE_ENV === 'development') { + return ; + } else { + createLoginWindow('/'); + return ; + } } return children; }; From a2929a9bf1798cbf8bf6110318e23e961ef2718a Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 2 Aug 2023 17:15:40 +0545 Subject: [PATCH 101/222] Feat: Task Splitting Algorithm Integrated --- .../main/src/api/CreateProjectService.ts | 4 +- .../components/createproject/DefineTasks.tsx | 146 +++++++--- .../src/store/slices/CreateProjectSlice.ts | 251 +++++++++--------- 3 files changed, 234 insertions(+), 167 deletions(-) diff --git a/src/frontend/main/src/api/CreateProjectService.ts b/src/frontend/main/src/api/CreateProjectService.ts index 2779e0394c..80c97f7489 100755 --- a/src/frontend/main/src/api/CreateProjectService.ts +++ b/src/frontend/main/src/api/CreateProjectService.ts @@ -304,7 +304,7 @@ const GetIndividualProjectDetails: Function = (url: string, payload: any) => { }; }; -const TaskSplittingPreviewService: Function = (url: string, fileUpload: any) => { +const TaskSplittingPreviewService: Function = (url: string, fileUpload: any, no_of_buildings: string) => { return async (dispatch) => { dispatch(CreateProjectActions.GetTaskSplittingPreviewLoading(true)); @@ -312,6 +312,8 @@ const TaskSplittingPreviewService: Function = (url: string, fileUpload: any) => try { const taskSplittingFileFormData = new FormData(); taskSplittingFileFormData.append('upload', fileUpload); + taskSplittingFileFormData.append('no_of_buildings', no_of_buildings); + const getTaskSplittingResponse = await axios.post(url, taskSplittingFileFormData); const resp: OrganisationListModel = getTaskSplittingResponse.data; dispatch(CreateProjectActions.GetTaskSplittingPreview(resp)); diff --git a/src/frontend/main/src/components/createproject/DefineTasks.tsx b/src/frontend/main/src/components/createproject/DefineTasks.tsx index 4aa9fe7100..e013d71292 100755 --- a/src/frontend/main/src/components/createproject/DefineTasks.tsx +++ b/src/frontend/main/src/components/createproject/DefineTasks.tsx @@ -14,8 +14,12 @@ import DefineTaskValidation from './validation/DefineTaskValidation'; // const DefineAreaMap = React.lazy(() => import('map/DefineAreaMap')); // const DefineAreaMap = React.lazy(() => import('map/DefineAreaMap')); -const alogrithmList = [{id:1,value:'Divide on Square',label:'Divide on Square'}, {id:2,value:'Choose Area as Tasks',label:'Choose Area as Tasks'},{id:3,value:'Task Splitting Algorithm',label:'Task Splitting Algorithm'}]; -const DefineTasks: React.FC = ({geojsonFile,setGeojsonFile}) => { +const alogrithmList = [ + { id: 1, value: 'Divide on Square', label: 'Divide on Square' }, + { id: 2, value: 'Choose Area as Tasks', label: 'Choose Area as Tasks' }, + { id: 3, value: 'Task Splitting Algorithm', label: 'Task Splitting Algorithm' }, +]; +const DefineTasks: React.FC = ({ geojsonFile, setGeojsonFile }) => { const navigate = useNavigate(); const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); @@ -33,7 +37,7 @@ const DefineTasks: React.FC = ({geojsonFile,setGeojsonFile}) => { const submission = () => { // const previousValues = location.state.values; - if(formValues.splitting_algorithm === 'Divide on Square'){ + if (formValues.splitting_algorithm === 'Divide on Square') { generateTasksOnMap(); } dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, ...formValues })); @@ -55,14 +59,16 @@ const DefineTasks: React.FC = ({geojsonFile,setGeojsonFile}) => { }), ); }; - + const generateTaskWithSplittingAlgorithm = () => { dispatch( - TaskSplittingPreviewService(`${enviroment.baseApiUrl}/projects/task_split/`,geojsonFile), + TaskSplittingPreviewService( + `${enviroment.baseApiUrl}/projects/task_split`, + geojsonFile, + formValues?.no_of_buildings, + ), ); }; - - // 'Use natural Boundary' const inputFormStyles = () => { @@ -76,13 +82,14 @@ const DefineTasks: React.FC = ({geojsonFile,setGeojsonFile}) => { }; const dividedTaskGeojson = CoreModules.useSelector((state) => state.createproject.dividedTaskGeojson); const parsedTaskGeojsonCount = - dividedTaskGeojson?.features?.length || JSON?.parse(dividedTaskGeojson)?.features?.length; + dividedTaskGeojson?.features?.length || JSON?.parse(dividedTaskGeojson)?.features?.length; // // passing payloads for creating project from form whenever user clicks submit on upload area passing previous project details form aswell - const algorithmListData =alogrithmList; + const algorithmListData = alogrithmList; const dividedTaskLoading = CoreModules.useSelector((state) => state.createproject.dividedTaskLoading); - const taskSplittingGeojsonLoading = CoreModules.useSelector((state) => state.createproject.taskSplittingGeojsonLoading); + const taskSplittingGeojsonLoading = CoreModules.useSelector( + (state) => state.createproject.taskSplittingGeojsonLoading, + ); - return ( = ({geojsonFile,setGeojsonFile}) => { }} > {algorithmListData?.map((listData) => ( - {listData.label} + + {listData.label} + ))} {errors.splitting_algorithm && ( @@ -180,35 +189,81 @@ const DefineTasks: React.FC = ({geojsonFile,setGeojsonFile}) => { )} } - variant="contained" - color="error" - > - - Generate Tasks + disabled={formValues?.dimension < 10} + onClick={generateTasksOnMap} + loading={dividedTaskLoading} + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + Generate Tasks - )} - {formValues.splitting_algorithm === 'Task Splitting Algorithm' ? - } - variant="contained" - color="error" + {formValues.splitting_algorithm === 'Task Splitting Algorithm' ? ( + <> + + Average No. of Building in Task + + * + + + + + { + handleCustomChange('no_of_buildings', e.target.value); + }} + // onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'no_of_buildings', value: e.target.value }))} + // helperText={errors.username} + InputProps={{ inputProps: { min: 9 } }} + FormHelperTextProps={inputFormStyles()} + /> + {errors.no_of_buildings && ( + + {errors.no_of_buildings} + + )} + + } + variant="contained" + color="error" > - - Generate Tasks - :null} + Generate Tasks + + + + ) : null} + {parsedTaskGeojsonCount ? (

Total Tasks:

@@ -219,7 +274,14 @@ const DefineTasks: React.FC = ({geojsonFile,setGeojsonFile}) => { {/* Submit Button For Create Project on Area Upload */} {/* Previous Button */} @@ -230,7 +292,13 @@ const DefineTasks: React.FC = ({geojsonFile,setGeojsonFile}) => { {/* END */} - + Next @@ -238,7 +306,7 @@ const DefineTasks: React.FC = ({geojsonFile,setGeojsonFile}) => { {/* END */} - + ); }; diff --git a/src/frontend/main/src/store/slices/CreateProjectSlice.ts b/src/frontend/main/src/store/slices/CreateProjectSlice.ts index 4d7bd09493..319b83034b 100755 --- a/src/frontend/main/src/store/slices/CreateProjectSlice.ts +++ b/src/frontend/main/src/store/slices/CreateProjectSlice.ts @@ -1,132 +1,129 @@ -import CoreModules from "../../shared/CoreModules"; - +import CoreModules from '../../shared/CoreModules'; const CreateProject = CoreModules.createSlice({ - name: 'createproject', - initialState: { - editProjectDetails: { name: '', description: '', short_description: '' }, - editProjectResponse: null, - projectDetails: { dimension: 10 }, - projectDetailsResponse: null, - projectDetailsLoading: false, - projectArea: null, - projectAreaLoading: false, - formCategoryList: [], - generateQrLoading: false, - organizationList: [], - organizationListLoading: false, - generateQrSuccess: null, - generateProjectLogLoading: false, - generateProjectLog: null, - createProjectStep: 1, - dividedTaskLoading: false, - dividedTaskGeojson: false, - formUpdateLoading: false, - taskSplittingGeojsonLoading: false, - taskSplittingGeojson: null, - updateBoundaryLoading: false, - }, - reducers: { - SetProjectDetails(state, action) { - state.projectDetails = { ...state.projectDetails, [action.payload.key]: action.payload.value } - }, - CreateProjectLoading(state, action) { - state.projectDetailsLoading = action.payload - }, - PostProjectDetails(state, action) { - state.projectDetailsResponse = action.payload - }, - ClearCreateProjectFormData(state) { - // state.projectDetailsResponse = null - state.projectDetails = {} - state.projectArea = null - }, - UploadAreaLoading(state, action) { - state.projectAreaLoading = action.payload - }, - PostUploadAreaSuccess(state, action) { - state.projectArea = action.payload - }, - GetFormCategoryLoading(state, action) { - state.formCategoryLoading = action.payload - }, - GetFormCategoryList(state, action) { - state.formCategoryList = action.payload - }, - SetFormCategory(state, action) { - state.formCategoryList = action.payload - }, - SetIndividualProjectDetailsData(state, action) { - state.projectDetails = action.payload - }, - GenerateProjectQRLoading(state, action) { - state.generateQrLoading = action.payload - }, - GetOrganisationList(state, action) { - state.organizationList = action.payload - }, - GetOrganisationListLoading(state, action) { - state.organizationListLoading = action.payload - }, - GenerateProjectQRSuccess(state, action) { - if (action.payload.status === 'SUCCESS') { - state.generateQrSuccess = null - } else { - state.generateQrSuccess = action.payload - } - }, - SetGenerateProjectQRSuccess(state, action) { - state.generateQrSuccess = action.payload - - }, - GenerateProjectLogLoading(state, action) { - state.generateProjectLogLoading = action.payload - }, - SetGenerateProjectLog(state, action) { - state.generateProjectLog = action.payload - }, - SetCreateProjectFormStep(state, action) { - state.createProjectStep = action.payload - }, - GetDividedTaskFromGeojsonLoading(state, action) { - state.dividedTaskLoading = action.payload - }, - SetDividedTaskGeojson(state, action) { - state.dividedTaskGeojson = action.payload - }, - SetDividedTaskFromGeojsonLoading(state, action) { - state.dividedTaskLoading = action.payload - }, - //EDIT Project - - SetIndividualProjectDetails(state, action) { - state.editProjectDetails = action.payload - }, - SetIndividualProjectDetailsLoading(state, action) { - state.projectDetailsLoading = action.payload - }, - SetPatchProjectDetails(state, action) { - state.editProjectResponse = action.payload - }, - SetPatchProjectDetailsLoading(state, action) { - state.editProjectDetailsLoading = action.payload - }, - SetPostFormUpdateLoading(state, action) { - state.formUpdateLoading = action.payload - }, - GetTaskSplittingPreviewLoading(state, action) { - state.taskSplittingGeojsonLoading = action.payload - }, - GetTaskSplittingPreview(state, action) { - state.dividedTaskGeojson = action.payload - state.taskSplittingGeojson = action.payload - }, - SetEditProjectBoundaryServiceLoading(state, action) { - state.updateBoundaryLoading = action.payload - }, - } -}) + name: 'createproject', + initialState: { + editProjectDetails: { name: '', description: '', short_description: '' }, + editProjectResponse: null, + projectDetails: { dimension: 10, no_of_buildings: 5 }, + projectDetailsResponse: null, + projectDetailsLoading: false, + projectArea: null, + projectAreaLoading: false, + formCategoryList: [], + generateQrLoading: false, + organizationList: [], + organizationListLoading: false, + generateQrSuccess: null, + generateProjectLogLoading: false, + generateProjectLog: null, + createProjectStep: 1, + dividedTaskLoading: false, + dividedTaskGeojson: false, + formUpdateLoading: false, + taskSplittingGeojsonLoading: false, + taskSplittingGeojson: null, + updateBoundaryLoading: false, + }, + reducers: { + SetProjectDetails(state, action) { + state.projectDetails = { ...state.projectDetails, [action.payload.key]: action.payload.value }; + }, + CreateProjectLoading(state, action) { + state.projectDetailsLoading = action.payload; + }, + PostProjectDetails(state, action) { + state.projectDetailsResponse = action.payload; + }, + ClearCreateProjectFormData(state) { + // state.projectDetailsResponse = null + state.projectDetails = {}; + state.projectArea = null; + }, + UploadAreaLoading(state, action) { + state.projectAreaLoading = action.payload; + }, + PostUploadAreaSuccess(state, action) { + state.projectArea = action.payload; + }, + GetFormCategoryLoading(state, action) { + state.formCategoryLoading = action.payload; + }, + GetFormCategoryList(state, action) { + state.formCategoryList = action.payload; + }, + SetFormCategory(state, action) { + state.formCategoryList = action.payload; + }, + SetIndividualProjectDetailsData(state, action) { + state.projectDetails = action.payload; + }, + GenerateProjectQRLoading(state, action) { + state.generateQrLoading = action.payload; + }, + GetOrganisationList(state, action) { + state.organizationList = action.payload; + }, + GetOrganisationListLoading(state, action) { + state.organizationListLoading = action.payload; + }, + GenerateProjectQRSuccess(state, action) { + if (action.payload.status === 'SUCCESS') { + state.generateQrSuccess = null; + } else { + state.generateQrSuccess = action.payload; + } + }, + SetGenerateProjectQRSuccess(state, action) { + state.generateQrSuccess = action.payload; + }, + GenerateProjectLogLoading(state, action) { + state.generateProjectLogLoading = action.payload; + }, + SetGenerateProjectLog(state, action) { + state.generateProjectLog = action.payload; + }, + SetCreateProjectFormStep(state, action) { + state.createProjectStep = action.payload; + }, + GetDividedTaskFromGeojsonLoading(state, action) { + state.dividedTaskLoading = action.payload; + }, + SetDividedTaskGeojson(state, action) { + state.dividedTaskGeojson = action.payload; + }, + SetDividedTaskFromGeojsonLoading(state, action) { + state.dividedTaskLoading = action.payload; + }, + //EDIT Project + SetIndividualProjectDetails(state, action) { + state.editProjectDetails = action.payload; + }, + SetIndividualProjectDetailsLoading(state, action) { + state.projectDetailsLoading = action.payload; + }, + SetPatchProjectDetails(state, action) { + state.editProjectResponse = action.payload; + }, + SetPatchProjectDetailsLoading(state, action) { + state.editProjectDetailsLoading = action.payload; + }, + SetPostFormUpdateLoading(state, action) { + state.formUpdateLoading = action.payload; + }, + GetTaskSplittingPreviewLoading(state, action) { + state.taskSplittingGeojsonLoading = action.payload; + }, + GetTaskSplittingPreview(state, action) { + state.dividedTaskGeojson = action.payload; + state.taskSplittingGeojson = action.payload; + }, + SetEditProjectBoundaryServiceLoading(state, action) { + state.updateBoundaryLoading = action.payload; + }, + }, +}); export const CreateProjectActions = CreateProject.actions; -export default CreateProject; \ No newline at end of file +export default CreateProject; From 1f84c96e4132c0547164a07ffe599cf215f7bbbe Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 10:56:25 +0545 Subject: [PATCH 102/222] api to conflate data --- .../app/submission/submission_routes.py | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index fbe5bd55c6..58bc7f4f5e 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -145,4 +145,49 @@ async def get_submission_count( project_id: int, db: Session = Depends(database.get_db), ): - return await submission_crud.get_submission_count_of_a_project(db, project_id) \ No newline at end of file + return await submission_crud.get_submission_count_of_a_project(db, project_id) + + +@router.post("/conflate_data") +async def conflate_osm_date( + extracts: UploadFile = File(...), + upload: UploadFile = File(...), + db: Session = Depends(database.get_db), + ): + + await upload.seek(0) + content = await upload.read() + + await extracts.seek(0) + data_extracts = await extracts.read() + + data_extracts = json.loads(data_extracts.decode()) + + + # Data extracts file + data_extracts_file = "/tmp/data_extracts_file.geojson" + # Write to file + with open(data_extracts_file, 'w') as f: + json.dump(data_extracts, f) + + # Output file + outfile = "/tmp/output_file.osm" + + # JSON FILE PATH + jsoninfile = "/tmp/json_infile.json" + + # Write to file + content = content.decode() + with open(jsoninfile, 'w') as f: + f.write(content) + + osmoutfile, jsonoutfile = await convert_json_to_osm(jsoninfile) + + odkf = OsmFile(outfile) # output file + + osm = odkf.loadFile(osmoutfile) # input file + + odk_merge = OdkMerge(data_extracts_file,None) + data = odk_merge.conflateData(osm) + + return data \ No newline at end of file From 6784cefc500f4128ce1e7ae51534c1ba20fc47f8 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 10:57:09 +0545 Subject: [PATCH 103/222] remove extra osm tag at the end from osm xml --- src/backend/app/submission/submission_routes.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index 58bc7f4f5e..1174c530a8 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -183,6 +183,20 @@ async def conflate_osm_date( osmoutfile, jsonoutfile = await convert_json_to_osm(jsoninfile) + # Read the contents of osmoutfile + with open(osmoutfile, 'r') as f: + osmoutfile_data = f.read() + + # Find the last index of the closing tag + last_osm_index = osmoutfile_data.rfind('') + + # Remove the extra closing tag from the end + processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] + + # Write the modified XML data back to the file + with open(osmoutfile, 'w') as f: + f.write(processed_xml_string) + odkf = OsmFile(outfile) # output file osm = odkf.loadFile(osmoutfile) # input file From a739deec9d267f28276395319eda94d9bf6077fa Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 10:59:56 +0545 Subject: [PATCH 104/222] fix: coonvert to osm function updated if the submission is not present --- src/backend/app/submission/submission_crud.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 6d4c08157b..bb5614fdb0 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -145,6 +145,9 @@ async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): # Get the submission data from ODK Central file = xform.getSubmissions(odk_id, form_id, None, False, True) + if file is None: + return None, None + with open(file_path, "wb") as f: f.write(file) @@ -221,16 +224,21 @@ async def convert_to_osm(db: Session, project_id: int, task_id: int): # Create a new ZIP file for the extracted files final_zip_file_path = f"{project_name}_{form_category}_osm.zip" + # Remove the ZIP file if it already exists + if os.path.exists(final_zip_file_path): + os.remove(final_zip_file_path) + for task in tasks: xml_form_id = f"{project_name}_{form_category}_{task}".split("_")[2] # Get the osm xml and geojson files for the task osmoutfile, jsonoutfile = await convert_to_osm_for_task(odkid, xml_form_id, xform) - # Add the files to the ZIP file - with zipfile.ZipFile(final_zip_file_path, mode="a") as final_zip_file: - final_zip_file.write(osmoutfile) - final_zip_file.write(jsonoutfile) + if osmoutfile and jsonoutfile: + # Add the files to the ZIP file + with zipfile.ZipFile(final_zip_file_path, mode="a") as final_zip_file: + final_zip_file.write(osmoutfile) + final_zip_file.write(jsonoutfile) return FileResponse(final_zip_file_path) From 9e60d9694a5e69f0e6787ac51db5dfdcee9edcff Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 11:10:43 +0545 Subject: [PATCH 105/222] convert to osm function updated --- src/backend/app/submission/submission_crud.py | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index bb5614fdb0..d379293a5f 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -137,19 +137,7 @@ def create_zip_file(files, output_file_path): return output_file_path -async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): - - # This file stores the submission data. - file_path = f"/tmp/{odk_id}_{form_id}.json" - - # Get the submission data from ODK Central - file = xform.getSubmissions(odk_id, form_id, None, False, True) - - if file is None: - return None, None - - with open(file_path, "wb") as f: - f.write(file) +async def convert_json_to_osm(file_path): jsonin = JsonDump() infile = Path(file_path) @@ -189,7 +177,24 @@ async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): jsonin.finishGeoJson() logger.info("Wrote OSM XML file: %r" % osmoutfile) logger.info("Wrote GeoJson file: %r" % jsonoutfile) + return osmoutfile, jsonoutfile + + +async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): + + # This file stores the submission data. + file_path = f"/tmp/{odk_id}_{form_id}.json" + + # Get the submission data from ODK Central + file = xform.getSubmissions(odk_id, form_id, None, False, True) + + if file is None: + return None, None + + with open(file_path, "wb") as f: + f.write(file) + osmoutfile, jsonoutfile = convert_json_to_osm(file_path) return osmoutfile, jsonoutfile From 4c207e536a6597d4dfc583b3e47b71f9782c31db Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 11:11:31 +0545 Subject: [PATCH 106/222] convert json to osm function awaited --- src/backend/app/submission/submission_crud.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index d379293a5f..48f857a01d 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -194,7 +194,7 @@ async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): with open(file_path, "wb") as f: f.write(file) - osmoutfile, jsonoutfile = convert_json_to_osm(file_path) + osmoutfile, jsonoutfile = await convert_json_to_osm(file_path) return osmoutfile, jsonoutfile From 6c74e847fedcb480a8c13284244f58235938fee9 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 3 Aug 2023 13:29:20 +0545 Subject: [PATCH 107/222] Fix: issue on project info --- .../components/ProjectInfo/ProjectInfomap.jsx | 40 ++++++++++++++++++- .../fmtm_openlayer_map/src/views/Tasks.jsx | 10 ++--- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index 7621c185e8..d85e358dab 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -12,6 +12,7 @@ import { ProjectBuildingGeojsonService } from "../../api/SubmissionService"; import environment from "fmtm/environment"; import { getStyles } from "../MapComponent/OpenLayersComponent/helpers/styleUtils"; import { ProjectActions } from "fmtm/ProjectSlice"; +import { ProjectById } from "../../api/Project"; export const defaultStyles = { lineColor: "#000000", @@ -131,15 +132,52 @@ const ProjectInfomap = () => { zoom: 4, maxZoom: 25, }); + const state = CoreModules.useSelector((state) => state.project); useEffect(() => { return () => { dispatch(ProjectActions.SetProjectBuildingGeojson(null)); }; }, []); + useEffect(() => { + dispatch(ProjectActions.SetNewProjectTrigger()); + if ( + state.projectTaskBoundries.findIndex( + (project) => project.id == environment.decode(encodedId) + ) == -1 + ) { + dispatch(ProjectActions.SetProjectTaskBoundries([])) + + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + // dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${environment.decode(encodedId)}/features`)) + } else { + dispatch(ProjectActions.SetProjectTaskBoundries([])) + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + } + if (Object.keys(state.projectInfo).length == 0) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } else { + if (state.projectInfo.id != environment.decode(encodedId)) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } + } + }, [params.id]); useEffect(() => { - if (!projectTaskBoundries && projectTaskBoundries?.length>0) return + if (!projectTaskBoundries) return + if ( projectTaskBoundries?.length<1) return const taskGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ diff --git a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx index c814862198..b266b722bd 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx @@ -162,26 +162,26 @@ const TasksSubmission = () => { - + {/* Project Details SideBar Button for Creating Project */} - Monitoring - + */} {/* END */} {/* Upload Area SideBar Button for uploading Area page */} - Convert - + */} handleDownload('csv')} sx={{width:'unset'}} From 8dec2510d18bf21b4484ae4cf38825ad705faa65 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 3 Aug 2023 14:13:05 +0545 Subject: [PATCH 108/222] Feat: Hashtag added on project details --- .../createproject/FormSelection.tsx | 48 +++++++++------- .../createproject/ProjectDetailsForm.tsx | 57 +++++++++++++++---- 2 files changed, 71 insertions(+), 34 deletions(-) diff --git a/src/frontend/main/src/components/createproject/FormSelection.tsx b/src/frontend/main/src/components/createproject/FormSelection.tsx index ea8e7c3d37..5e0ec1a34f 100755 --- a/src/frontend/main/src/components/createproject/FormSelection.tsx +++ b/src/frontend/main/src/components/createproject/FormSelection.tsx @@ -14,9 +14,9 @@ import LoadingBar from './LoadingBar'; import environment from '../../environment'; // import { SelectPicker } from 'rsuite'; -let generateProjectLogIntervalCb:any = null; +let generateProjectLogIntervalCb: any = null; -const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, customFormInputValue,dataExtractFile }) => { +const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, customFormInputValue, dataExtractFile }) => { const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); const navigate = useNavigate(); @@ -64,7 +64,15 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom const newDividedTaskGeojson = JSON.stringify(dividedTaskGeojson); const parsedNewDividedTaskGeojson = JSON.parse(newDividedTaskGeojson); const exparsedNewDividedTaskGeojson = JSON.stringify(parsedNewDividedTaskGeojson); - var newUpdatedTaskGeojsonFile = new File([exparsedNewDividedTaskGeojson], "AOI.geojson", {type: "application/geo+json" }) + var newUpdatedTaskGeojsonFile = new File([exparsedNewDividedTaskGeojson], 'AOI.geojson', { + type: 'application/geo+json', + }); + const hashtags = projectDetails.hashtags; + const arrayHashtag = hashtags + .split('#') + .map((item) => item.trim()) + .filter(Boolean); + // console.log(f,'file F'); // setGeojsonFile(f); dispatch( @@ -93,10 +101,11 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom form_ways: projectDetails.form_ways, // "uploaded_form": projectDetails.uploaded_form, data_extractWays: projectDetails.data_extractWays, + hashtags: arrayHashtag, }, newUpdatedTaskGeojsonFile, customFormFile, - dataExtractFile + dataExtractFile, ), ); // navigate("/select-form", { replace: true, state: { values: values } }); @@ -107,7 +116,7 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom dispatch(FormCategoryService(`${enviroment.baseApiUrl}/central/list-forms`)); return () => { clearInterval(generateProjectLogIntervalCb); - generateProjectLogIntervalCb = null + generateProjectLogIntervalCb = null; dispatch(CreateProjectActions.SetGenerateProjectLog(null)); }; }, []); @@ -129,7 +138,7 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom useEffect(() => { if (generateQrSuccess && generateProjectLog?.status === 'SUCCESS') { clearInterval(generateProjectLogIntervalCb); - const encodedProjectId = environment.encode(projectDetailsResponse?.id) + const encodedProjectId = environment.encode(projectDetailsResponse?.id); navigate(`/project_details/${encodedProjectId}`); dispatch( CommonActions.SetSnackBar({ @@ -235,9 +244,7 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom }} // onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'form_ways', value: e.target.value }))} > - {selectFormWays?.map((form) => ( - {form.label} - ))} + {selectFormWays?.map((form) => {form.label})} {errors.form_ways && ( @@ -258,13 +265,11 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom { setCustomFormFile(e.target.files[0]); }} - inputProps={{ "accept":".xml, .xls, .xlsx" }} - + inputProps={{ accept: '.xml, .xls, .xlsx' }} /> {customFormFile?.name} @@ -329,19 +334,18 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom {/* END */} {/* Submit Button For Create Project on Area Upload */} - - } - variant="contained" - color="error" + + } + variant="contained" + color="error" > Submit - {/* END */} diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index c69f6a1328..7a35125a0a 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -37,10 +37,6 @@ const ProjectDetailsForm: React.FC = () => { // dispatch(OrganisationService(`${environment.baseApiUrl}/organization/`)); }, []); - - - - const submission = () => { // submitForm(); dispatch(CreateProjectActions.SetIndividualProjectDetailsData(values)); @@ -54,8 +50,6 @@ const ProjectDetailsForm: React.FC = () => { CreateProjectValidation, ); - - const inputFormStyles = () => { return { style: { @@ -73,11 +67,11 @@ const ProjectDetailsForm: React.FC = () => { dispatch(OrganisationService(`${environment.baseApiUrl}/organization/`)); }; useEffect(() => { - window.addEventListener("focus", onFocus); - onFocus() + window.addEventListener('focus', onFocus); + onFocus(); // Calls onFocus when the window first loads return () => { - window.removeEventListener("focus", onFocus); + window.removeEventListener('focus', onFocus); // window.removeEventListener("blur", onBlur); }; }, []); @@ -139,7 +133,9 @@ const ProjectDetailsForm: React.FC = () => { }} > {organizationList?.map((org) => ( - {org.label} + + {org.label} + ))} { aria-label="download qrcode" > @@ -295,6 +297,37 @@ const ProjectDetailsForm: React.FC = () => { {/* END */} + {/* Project Name Form Input For Create Project */} + + + Hashtag + + { + handleCustomChange('hashtags', e.target.value); + }} + helperText={errors.odk_central_url} + FormHelperTextProps={inputFormStyles()} + /> + {/* {errors.name} * */} + + {/* END */} + {/* Short Description Form Input For Create Project */} @@ -375,7 +408,7 @@ const ProjectDetailsForm: React.FC = () => { - + ); }; export default ProjectDetailsForm; From 34753fc5c91c2c7be4621002f2746e77a6b7261c Mon Sep 17 00:00:00 2001 From: "Deepak Pradhan (Varun)" <37866666+varun2948@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:34:52 +0545 Subject: [PATCH 109/222] Revert "Feat hashtag" --- .../components/ProjectInfo/ProjectInfomap.jsx | 40 +------------ .../fmtm_openlayer_map/src/views/Tasks.jsx | 10 ++-- .../createproject/FormSelection.tsx | 34 ++++++----- .../createproject/ProjectDetailsForm.tsx | 57 ++++--------------- 4 files changed, 34 insertions(+), 107 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index d85e358dab..7621c185e8 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -12,7 +12,6 @@ import { ProjectBuildingGeojsonService } from "../../api/SubmissionService"; import environment from "fmtm/environment"; import { getStyles } from "../MapComponent/OpenLayersComponent/helpers/styleUtils"; import { ProjectActions } from "fmtm/ProjectSlice"; -import { ProjectById } from "../../api/Project"; export const defaultStyles = { lineColor: "#000000", @@ -132,52 +131,15 @@ const ProjectInfomap = () => { zoom: 4, maxZoom: 25, }); - const state = CoreModules.useSelector((state) => state.project); useEffect(() => { return () => { dispatch(ProjectActions.SetProjectBuildingGeojson(null)); }; }, []); - useEffect(() => { - dispatch(ProjectActions.SetNewProjectTrigger()); - if ( - state.projectTaskBoundries.findIndex( - (project) => project.id == environment.decode(encodedId) - ) == -1 - ) { - dispatch(ProjectActions.SetProjectTaskBoundries([])) - - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - // dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${environment.decode(encodedId)}/features`)) - } else { - dispatch(ProjectActions.SetProjectTaskBoundries([])) - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - } - if (Object.keys(state.projectInfo).length == 0) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } else { - if (state.projectInfo.id != environment.decode(encodedId)) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } - } - }, [params.id]); useEffect(() => { - if (!projectTaskBoundries) return - if ( projectTaskBoundries?.length<1) return + if (!projectTaskBoundries && projectTaskBoundries?.length>0) return const taskGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ diff --git a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx index b266b722bd..c814862198 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx @@ -162,26 +162,26 @@ const TasksSubmission = () => { - + {/* Project Details SideBar Button for Creating Project */} - {/* Monitoring - */} + {/* END */} {/* Upload Area SideBar Button for uploading Area page */} - {/* Convert - */} + handleDownload('csv')} sx={{width:'unset'}} diff --git a/src/frontend/main/src/components/createproject/FormSelection.tsx b/src/frontend/main/src/components/createproject/FormSelection.tsx index 46ba781235..03339dd6fc 100755 --- a/src/frontend/main/src/components/createproject/FormSelection.tsx +++ b/src/frontend/main/src/components/createproject/FormSelection.tsx @@ -23,6 +23,9 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo const dispatch = CoreModules.useDispatch(); // //dispatch function to perform redux state mutation + const formCategoryList = CoreModules.useSelector((state: any) => state.createproject.formCategoryList); + // //we use use-selector from redux to get all state of formCategory from createProject slice + const projectDetails = CoreModules.useSelector((state: any) => state.createproject.projectDetails); // //we use use-selector from redux to get all state of projectDetails from createProject slice @@ -31,8 +34,11 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo dispatch(FormCategoryService(`${enviroment.baseApiUrl}/central/list-forms`)); }, []); // END + const selectExtractWaysList = ['Centroid', 'Polygon']; + const selectExtractWays = selectExtractWaysList.map((item) => ({ label: item, value: item })); const selectFormWaysList = ['Use Existing Form', 'Upload a Custom Form']; const selectFormWays = selectFormWaysList.map((item) => ({ label: item, value: item })); + const formCategoryData = formCategoryList.map((item) => ({ label: item.title, value: item.title })); const userDetails: any = CoreModules.useSelector((state) => state.login.loginToken); // //we use use-selector from redux to get all state of loginToken from login slice @@ -58,15 +64,7 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo const newDividedTaskGeojson = JSON.stringify(dividedTaskGeojson); const parsedNewDividedTaskGeojson = JSON.parse(newDividedTaskGeojson); const exparsedNewDividedTaskGeojson = JSON.stringify(parsedNewDividedTaskGeojson); - var newUpdatedTaskGeojsonFile = new File([exparsedNewDividedTaskGeojson], 'AOI.geojson', { - type: 'application/geo+json', - }); - const hashtags = projectDetails.hashtags; - const arrayHashtag = hashtags - .split('#') - .map((item) => item.trim()) - .filter(Boolean); - + var newUpdatedTaskGeojsonFile = new File([exparsedNewDividedTaskGeojson], "AOI.geojson", { type: "application/geo+json" }) // console.log(f,'file F'); // setGeojsonFile(f); dispatch( @@ -95,11 +93,10 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo form_ways: projectDetails.form_ways, // "uploaded_form": projectDetails.uploaded_form, data_extractWays: projectDetails.data_extractWays, - hashtags: arrayHashtag, }, newUpdatedTaskGeojsonFile, customFormFile, - dataExtractFile, + dataExtractFile ), ); // navigate("/select-form", { replace: true, state: { values: values } }); @@ -110,7 +107,7 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo dispatch(FormCategoryService(`${enviroment.baseApiUrl}/central/list-forms`)); return () => { clearInterval(generateProjectLogIntervalCb); - generateProjectLogIntervalCb = null; + generateProjectLogIntervalCb = null dispatch(CreateProjectActions.SetGenerateProjectLog(null)); }; }, []); @@ -132,7 +129,7 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo useEffect(() => { if (generateQrSuccess && generateProjectLog?.status === 'SUCCESS') { clearInterval(generateProjectLogIntervalCb); - const encodedProjectId = environment.encode(projectDetailsResponse?.id); + const encodedProjectId = environment.encode(projectDetailsResponse?.id) navigate(`/project_details/${encodedProjectId}`); dispatch( CommonActions.SetSnackBar({ @@ -236,12 +233,10 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo }), ); }} - // onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'form_ways', value: e.target.value }))} + // onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'form_ways', value: e.target.value }))} > {selectFormWays?.map((form) => ( - - {form.label} - + {form.label} ))} {errors.form_ways && ( @@ -263,11 +258,13 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo { setCustomFormFile(e.target.files[0]); }} - inputProps={{ accept: '.xml, .xls, .xlsx' }} + inputProps={{ "accept": ".xml, .xls, .xlsx" }} + /> {customFormFile?.name} @@ -344,6 +341,7 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo > Submit + {/* END */} diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index 7a35125a0a..c69f6a1328 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -37,6 +37,10 @@ const ProjectDetailsForm: React.FC = () => { // dispatch(OrganisationService(`${environment.baseApiUrl}/organization/`)); }, []); + + + + const submission = () => { // submitForm(); dispatch(CreateProjectActions.SetIndividualProjectDetailsData(values)); @@ -50,6 +54,8 @@ const ProjectDetailsForm: React.FC = () => { CreateProjectValidation, ); + + const inputFormStyles = () => { return { style: { @@ -67,11 +73,11 @@ const ProjectDetailsForm: React.FC = () => { dispatch(OrganisationService(`${environment.baseApiUrl}/organization/`)); }; useEffect(() => { - window.addEventListener('focus', onFocus); - onFocus(); + window.addEventListener("focus", onFocus); + onFocus() // Calls onFocus when the window first loads return () => { - window.removeEventListener('focus', onFocus); + window.removeEventListener("focus", onFocus); // window.removeEventListener("blur", onBlur); }; }, []); @@ -133,9 +139,7 @@ const ProjectDetailsForm: React.FC = () => { }} > {organizationList?.map((org) => ( - - {org.label} - + {org.label} ))} { aria-label="download qrcode" > @@ -297,37 +295,6 @@ const ProjectDetailsForm: React.FC = () => { {/* END */} - {/* Project Name Form Input For Create Project */} - - - Hashtag - - { - handleCustomChange('hashtags', e.target.value); - }} - helperText={errors.odk_central_url} - FormHelperTextProps={inputFormStyles()} - /> - {/* {errors.name} * */} - - {/* END */} - {/* Short Description Form Input For Create Project */} @@ -408,7 +375,7 @@ const ProjectDetailsForm: React.FC = () => { - + ); }; export default ProjectDetailsForm; From 21d11b24d219361aca816f2f7a4cabe003db99fe Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 14:37:35 +0545 Subject: [PATCH 110/222] feat: submission json of a project --- src/backend/app/submission/submission_crud.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 48f857a01d..af8c263381 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -328,6 +328,47 @@ def extract_files(zip_file_path): return final_zip_file_path +def get_project_submission(db: Session, project_id: int): + project_info = project_crud.get_project(db, project_id) + + # Return empty list if project is not found + if not project_info: + raise HTTPException(status_code=404, detail="Project not found") + + odkid = project_info.odkid + project_name = project_info.project_name_prefix + form_category = project_info.xform_title + project_tasks = project_info.tasks + + # ODK Credentials + odk_credentials = project_schemas.ODKCentral( + odk_central_url=project_info.odk_central_url, + odk_central_user=project_info.odk_central_user, + odk_central_password=project_info.odk_central_password, + ) + + # Get ODK Form with odk credentials from the project. + xform = get_odk_form(odk_credentials) + + submissions = [] + + task_list = [x.id for x in project_tasks] + for id in task_list: + xml_form_id = f"{project_name}_{form_category}_{id}".split("_")[ + 2] + file = xform.getSubmissions( + odkid, xml_form_id, None, False, True) + if not file: + json_data = None + else: + json_data = json.loads(file) + json_data_value = json_data.get('value') + if json_data_value: + submissions.extend(json_data_value) + + return submissions + + def download_submission(db: Session, project_id: int, task_id: int, export_json: bool): project_info = project_crud.get_project(db, project_id) From b761869fcc4006c61ea00c23502e3aff056e0e7b Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 14:37:51 +0545 Subject: [PATCH 111/222] removed print statements --- src/backend/app/submission/submission_crud.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index af8c263381..4f089d4890 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -422,8 +422,6 @@ def download_submission(db: Session, project_id: int, task_id: int, export_json: extracted_files = [] for file_path in files: - print(file_path,'---filepath') - print(files,'---files') with zipfile.ZipFile(file_path, "r") as zip_file: zip_file.extractall( os.path.splitext(file_path)[0] @@ -462,7 +460,6 @@ def download_submission(db: Session, project_id: int, task_id: int, export_json: 2] file = xform.getSubmissions( odkid, xml_form_id, None, False, True) - print(file,'----file') if not file: json_data = None else: From 21259b730bfe7378b1fae2cdeaec0caf5d0ac99f Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 14:39:09 +0545 Subject: [PATCH 112/222] get extracted data of a project --- src/backend/app/projects/project_crud.py | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 9476a6ce4f..d0aa9970e1 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -2052,3 +2052,30 @@ async def update_odk_credentials(project_instance: project_schemas.BETAProjectUp db.commit() db.refresh(project_instance) + +async def get_extracted_data_from_db(db:Session, project_id:int, outfile:str): + + """Get the geojson of those features for this project""" + + query = f'''SELECT jsonb_build_object( + 'type', 'FeatureCollection', + 'features', jsonb_agg(feature) + ) + FROM ( + SELECT jsonb_build_object( + 'type', 'Feature', + 'id', id, + 'geometry', ST_AsGeoJSON(geometry)::jsonb, + 'properties', properties + ) AS feature + FROM features + WHERE project_id={project_id} + ) features;''' + + result = db.execute(query) + features = result.fetchone()[0] + + # Update outfile containing osm extracts with the new geojson contents containing title in the properties. + with open(outfile, "w") as jsonfile: + jsonfile.truncate(0) + dump(features, jsonfile) From d2893806b9aa910c4a36f951764aa4db816bab2d Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 3 Aug 2023 14:40:04 +0545 Subject: [PATCH 113/222] updated conflate data api --- .../app/submission/submission_routes.py | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index 1174c530a8..593232903c 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -15,11 +15,17 @@ # You should have received a copy of the GNU General Public License # along with FMTM. If not, see . # - -from fastapi import APIRouter, Depends +import os +import json +from fastapi import APIRouter, Depends, UploadFile, File, HTTPException, Response from fastapi.logger import logger as logger from sqlalchemy.orm import Session from fastapi.responses import FileResponse +from .submission_crud import convert_json_to_osm +from osm_fieldwork.odk_merge import OdkMerge +from osm_fieldwork.osmfile import OsmFile +from ..projects import project_crud + from ..db import database from . import submission_crud @@ -150,58 +156,51 @@ async def get_submission_count( @router.post("/conflate_data") async def conflate_osm_date( - extracts: UploadFile = File(...), - upload: UploadFile = File(...), + project_id: int, db: Session = Depends(database.get_db), ): - await upload.seek(0) - content = await upload.read() - - await extracts.seek(0) - data_extracts = await extracts.read() + # Submission JSON + submission = submission_crud.get_project_submission(db, project_id) - data_extracts = json.loads(data_extracts.decode()) - - - # Data extracts file + # Data extracta file data_extracts_file = "/tmp/data_extracts_file.geojson" - # Write to file - with open(data_extracts_file, 'w') as f: - json.dump(data_extracts, f) + + await project_crud.get_extracted_data_from_db(db, project_id, data_extracts_file) # Output file outfile = "/tmp/output_file.osm" - # JSON FILE PATH jsoninfile = "/tmp/json_infile.json" - # Write to file - content = content.decode() + # # Delete if these files already exist + if os.path.exists(outfile): + os.remove(outfile) + if os.path.exists(jsoninfile): + os.remove(jsoninfile) + + # Write the submission to a file with open(jsoninfile, 'w') as f: - f.write(content) + f.write(json.dumps(submission)) + # Convert the submission to osm xml format osmoutfile, jsonoutfile = await convert_json_to_osm(jsoninfile) - # Read the contents of osmoutfile + # Remove the extra closing tag from the end of the file with open(osmoutfile, 'r') as f: osmoutfile_data = f.read() - # Find the last index of the closing tag last_osm_index = osmoutfile_data.rfind('') - # Remove the extra closing tag from the end processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] - + # Write the modified XML data back to the file with open(osmoutfile, 'w') as f: f.write(processed_xml_string) - odkf = OsmFile(outfile) # output file - - osm = odkf.loadFile(osmoutfile) # input file - + odkf = OsmFile(outfile) + osm = odkf.loadFile(osmoutfile) odk_merge = OdkMerge(data_extracts_file,None) data = odk_merge.conflateData(osm) - return data \ No newline at end of file + return data From 84fffc1819a3c4a610c939bbd6d99f53ae84e247 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 3 Aug 2023 14:51:54 +0545 Subject: [PATCH 114/222] feat: HashTag Project Create --- .../components/ProjectInfo/ProjectInfomap.jsx | 2 +- .../fmtm_openlayer_map/src/views/Tasks.jsx | 2 +- .../createproject/FormSelection.tsx | 54 +++++++++--------- .../createproject/ProjectDetailsForm.tsx | 57 +++++++++++++++---- 4 files changed, 75 insertions(+), 40 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index d85e358dab..d0fa0fa51f 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -336,4 +336,4 @@ const ProjectInfomap = () => { ); }; -export default ProjectInfomap; +export default ProjectInfomap; \ No newline at end of file diff --git a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx index b266b722bd..968c6129d7 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx @@ -259,4 +259,4 @@ const TasksSubmission = () => { } -export default TasksSubmission; +export default TasksSubmission; \ No newline at end of file diff --git a/src/frontend/main/src/components/createproject/FormSelection.tsx b/src/frontend/main/src/components/createproject/FormSelection.tsx index ea8e7c3d37..46ba781235 100755 --- a/src/frontend/main/src/components/createproject/FormSelection.tsx +++ b/src/frontend/main/src/components/createproject/FormSelection.tsx @@ -14,18 +14,15 @@ import LoadingBar from './LoadingBar'; import environment from '../../environment'; // import { SelectPicker } from 'rsuite'; -let generateProjectLogIntervalCb:any = null; +let generateProjectLogIntervalCb: any = null; -const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, customFormInputValue,dataExtractFile }) => { +const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, customFormInputValue, dataExtractFile }) => { const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); const navigate = useNavigate(); const dispatch = CoreModules.useDispatch(); // //dispatch function to perform redux state mutation - const formCategoryList = CoreModules.useSelector((state: any) => state.createproject.formCategoryList); - // //we use use-selector from redux to get all state of formCategory from createProject slice - const projectDetails = CoreModules.useSelector((state: any) => state.createproject.projectDetails); // //we use use-selector from redux to get all state of projectDetails from createProject slice @@ -34,11 +31,8 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom dispatch(FormCategoryService(`${enviroment.baseApiUrl}/central/list-forms`)); }, []); // END - const selectExtractWaysList = ['Centroid', 'Polygon']; - const selectExtractWays = selectExtractWaysList.map((item) => ({ label: item, value: item })); const selectFormWaysList = ['Use Existing Form', 'Upload a Custom Form']; const selectFormWays = selectFormWaysList.map((item) => ({ label: item, value: item })); - const formCategoryData = formCategoryList.map((item) => ({ label: item.title, value: item.title })); const userDetails: any = CoreModules.useSelector((state) => state.login.loginToken); // //we use use-selector from redux to get all state of loginToken from login slice @@ -64,7 +58,15 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom const newDividedTaskGeojson = JSON.stringify(dividedTaskGeojson); const parsedNewDividedTaskGeojson = JSON.parse(newDividedTaskGeojson); const exparsedNewDividedTaskGeojson = JSON.stringify(parsedNewDividedTaskGeojson); - var newUpdatedTaskGeojsonFile = new File([exparsedNewDividedTaskGeojson], "AOI.geojson", {type: "application/geo+json" }) + var newUpdatedTaskGeojsonFile = new File([exparsedNewDividedTaskGeojson], 'AOI.geojson', { + type: 'application/geo+json', + }); + const hashtags = projectDetails.hashtags; + const arrayHashtag = hashtags + .split('#') + .map((item) => item.trim()) + .filter(Boolean); + // console.log(f,'file F'); // setGeojsonFile(f); dispatch( @@ -93,10 +95,11 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom form_ways: projectDetails.form_ways, // "uploaded_form": projectDetails.uploaded_form, data_extractWays: projectDetails.data_extractWays, + hashtags: arrayHashtag, }, newUpdatedTaskGeojsonFile, customFormFile, - dataExtractFile + dataExtractFile, ), ); // navigate("/select-form", { replace: true, state: { values: values } }); @@ -107,7 +110,7 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom dispatch(FormCategoryService(`${enviroment.baseApiUrl}/central/list-forms`)); return () => { clearInterval(generateProjectLogIntervalCb); - generateProjectLogIntervalCb = null + generateProjectLogIntervalCb = null; dispatch(CreateProjectActions.SetGenerateProjectLog(null)); }; }, []); @@ -129,7 +132,7 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom useEffect(() => { if (generateQrSuccess && generateProjectLog?.status === 'SUCCESS') { clearInterval(generateProjectLogIntervalCb); - const encodedProjectId = environment.encode(projectDetailsResponse?.id) + const encodedProjectId = environment.encode(projectDetailsResponse?.id); navigate(`/project_details/${encodedProjectId}`); dispatch( CommonActions.SetSnackBar({ @@ -236,7 +239,9 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom // onChange={(e) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'form_ways', value: e.target.value }))} > {selectFormWays?.map((form) => ( - {form.label} + + {form.label} + ))} {errors.form_ways && ( @@ -258,13 +263,11 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom { setCustomFormFile(e.target.files[0]); }} - inputProps={{ "accept":".xml, .xls, .xlsx" }} - + inputProps={{ accept: '.xml, .xls, .xlsx' }} /> {customFormFile?.name} @@ -329,19 +332,18 @@ const FormSelection: React.FC = ({ customFormFile,setCustomFormFile, custom {/* END */} {/* Submit Button For Create Project on Area Upload */} - - } - variant="contained" - color="error" + + } + variant="contained" + color="error" > Submit - {/* END */} diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index c69f6a1328..7a35125a0a 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -37,10 +37,6 @@ const ProjectDetailsForm: React.FC = () => { // dispatch(OrganisationService(`${environment.baseApiUrl}/organization/`)); }, []); - - - - const submission = () => { // submitForm(); dispatch(CreateProjectActions.SetIndividualProjectDetailsData(values)); @@ -54,8 +50,6 @@ const ProjectDetailsForm: React.FC = () => { CreateProjectValidation, ); - - const inputFormStyles = () => { return { style: { @@ -73,11 +67,11 @@ const ProjectDetailsForm: React.FC = () => { dispatch(OrganisationService(`${environment.baseApiUrl}/organization/`)); }; useEffect(() => { - window.addEventListener("focus", onFocus); - onFocus() + window.addEventListener('focus', onFocus); + onFocus(); // Calls onFocus when the window first loads return () => { - window.removeEventListener("focus", onFocus); + window.removeEventListener('focus', onFocus); // window.removeEventListener("blur", onBlur); }; }, []); @@ -139,7 +133,9 @@ const ProjectDetailsForm: React.FC = () => { }} > {organizationList?.map((org) => ( - {org.label} + + {org.label} + ))} { aria-label="download qrcode" >
@@ -295,6 +297,37 @@ const ProjectDetailsForm: React.FC = () => { {/* END */} + {/* Project Name Form Input For Create Project */} + + + Hashtag + + { + handleCustomChange('hashtags', e.target.value); + }} + helperText={errors.odk_central_url} + FormHelperTextProps={inputFormStyles()} + /> + {/* {errors.name} * */} + + {/* END */} + {/* Short Description Form Input For Create Project */} @@ -375,7 +408,7 @@ const ProjectDetailsForm: React.FC = () => { - + ); }; export default ProjectDetailsForm; From 4ded537e01c8edc28c82c98e0341a57540c5df60 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 3 Aug 2023 17:44:10 +0545 Subject: [PATCH 115/222] feat: Log Status added on UI --- .../createproject/FormSelection.tsx | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/frontend/main/src/components/createproject/FormSelection.tsx b/src/frontend/main/src/components/createproject/FormSelection.tsx index 46ba781235..0fdcd6702c 100755 --- a/src/frontend/main/src/components/createproject/FormSelection.tsx +++ b/src/frontend/main/src/components/createproject/FormSelection.tsx @@ -130,7 +130,17 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo } }, [generateQrSuccess]); useEffect(() => { - if (generateQrSuccess && generateProjectLog?.status === 'SUCCESS') { + if (generateQrSuccess && generateProjectLog?.status === 'FAILED') { + clearInterval(generateProjectLogIntervalCb); + dispatch( + CommonActions.SetSnackBar({ + open: true, + message: `QR Generation Failed. ${generateProjectLog?.message}`, + variant: 'error', + duration: 10000, + }), + ); + } else if (generateQrSuccess && generateProjectLog?.status === 'SUCCESS') { clearInterval(generateProjectLogIntervalCb); const encodedProjectId = environment.encode(projectDetailsResponse?.id); navigate(`/project_details/${encodedProjectId}`); @@ -285,6 +295,15 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo + + Status: + + {generateProjectLog.status} + + Date: Fri, 4 Aug 2023 13:37:14 +0545 Subject: [PATCH 116/222] error handling for generate files for tasks --- src/backend/app/projects/project_crud.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 9476a6ce4f..b74153e687 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -1388,9 +1388,12 @@ def generate_appuser_files( tasks_list = tasks_crud.get_task_lists(db, project_id) for task in tasks_list: - generate_task_files(db, project_id, task, - xlsform, form_type, odk_credentials) - + try: + generate_task_files(db, project_id, task, + xlsform, form_type, odk_credentials) + except Exception as e: + logger.warning(str(e)) + continue # Update background task status to COMPLETED update_background_task_status_in_database( db, background_task_id, 4 From da37acf9dc081648fac320e320e3a8601f8c2173 Mon Sep 17 00:00:00 2001 From: sam Date: Fri, 4 Aug 2023 09:52:30 +0100 Subject: [PATCH 117/222] build: update fmtm_openlayers_map package lockfile --- .../fmtm_openlayer_map/package-lock.json | 200 ++++++------------ 1 file changed, 69 insertions(+), 131 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/package-lock.json b/src/frontend/fmtm_openlayer_map/package-lock.json index 88cef17300..f1695f14e9 100644 --- a/src/frontend/fmtm_openlayer_map/package-lock.json +++ b/src/frontend/fmtm_openlayer_map/package-lock.json @@ -1,12 +1,12 @@ { "name": "fmtm_openlayer_map", - "version": "1.0.0", + "version": "0.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "fmtm_openlayer_map", - "version": "1.0.0", + "version": "0.1.0", "license": "MIT", "dependencies": { "css-minimizer-webpack-plugin": "^5.0.0", @@ -2253,7 +2253,6 @@ "version": "8.21.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz", "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==", - "dev": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2263,7 +2262,6 @@ "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -2272,8 +2270,7 @@ "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "node_modules/@types/express": { "version": "4.17.17", @@ -2465,7 +2462,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -2474,26 +2470,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -2503,14 +2495,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -2522,7 +2512,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -2531,7 +2520,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } @@ -2539,14 +2527,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -2562,7 +2548,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -2575,7 +2560,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -2587,7 +2571,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -2601,7 +2584,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -2646,14 +2628,12 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/accepts": { "version": "1.3.8", @@ -2683,7 +2663,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, "peerDependencies": { "acorn": "^8" } @@ -3193,7 +3172,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, "engines": { "node": ">=6.0" } @@ -4026,7 +4004,6 @@ "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -4091,8 +4068,7 @@ "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "node_modules/escalade": { "version": "3.1.1", @@ -4120,7 +4096,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -4133,7 +4108,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -4145,7 +4119,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -4154,7 +4127,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, "engines": { "node": ">=4.0" } @@ -4187,7 +4159,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, "engines": { "node": ">=0.8.x" } @@ -4599,8 +4570,7 @@ "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "node_modules/globals": { "version": "11.12.0", @@ -5296,8 +5266,7 @@ "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==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -5473,7 +5442,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, "engines": { "node": ">=6.11.5" } @@ -5647,7 +5615,6 @@ "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" } @@ -5656,7 +5623,6 @@ "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" }, @@ -5748,8 +5714,7 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/no-case": { "version": "3.0.4", @@ -7812,7 +7777,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, "engines": { "node": ">=6" } @@ -8113,7 +8077,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -8140,7 +8103,6 @@ "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -8555,7 +8517,6 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, "engines": { "node": ">=10.13.0" } @@ -8564,7 +8525,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -10140,7 +10100,8 @@ "@material-ui/types": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", - "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==" + "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", + "requires": {} }, "@material-ui/utils": { "version": "4.11.3", @@ -10221,7 +10182,6 @@ "version": "8.21.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz", "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==", - "dev": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -10231,7 +10191,6 @@ "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, "requires": { "@types/eslint": "*", "@types/estree": "*" @@ -10240,8 +10199,7 @@ "@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "@types/express": { "version": "4.17.17", @@ -10433,7 +10391,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -10442,26 +10399,22 @@ "@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -10471,14 +10424,12 @@ "@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -10490,7 +10441,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } @@ -10499,7 +10449,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, "requires": { "@xtuc/long": "4.2.2" } @@ -10507,14 +10456,12 @@ "@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -10530,7 +10477,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -10543,7 +10489,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -10555,7 +10500,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -10569,7 +10513,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -10579,7 +10522,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true + "dev": true, + "requires": {} }, "@webpack-cli/info": { "version": "1.5.0", @@ -10594,19 +10538,18 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true + "dev": true, + "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "accepts": { "version": "1.3.8", @@ -10627,7 +10570,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true + "requires": {} }, "acorn-walk": { "version": "8.2.0", @@ -10674,7 +10617,8 @@ "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "ansi-html-community": { "version": "0.0.8", @@ -10994,8 +10938,7 @@ "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "ci-info": { "version": "3.8.0", @@ -11201,7 +11144,8 @@ "css-declaration-sorter": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz", - "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==" + "integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==", + "requires": {} }, "css-loader": { "version": "6.7.3", @@ -11413,7 +11357,8 @@ "cssnano-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", - "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==" + "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", + "requires": {} }, "csso": { "version": "5.0.5", @@ -11607,7 +11552,6 @@ "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -11653,8 +11597,7 @@ "es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "escalade": { "version": "3.1.1", @@ -11676,7 +11619,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -11686,7 +11628,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -11694,16 +11635,14 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { "version": "2.0.3", @@ -11726,8 +11665,7 @@ "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, "execa": { "version": "5.1.1", @@ -12042,8 +11980,7 @@ "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, "globals": { "version": "11.12.0", @@ -12287,7 +12224,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -12546,8 +12484,7 @@ "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==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { "version": "0.4.1", @@ -12705,8 +12642,7 @@ "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" }, "loader-utils": { "version": "2.0.4", @@ -12843,14 +12779,12 @@ "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 + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "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, "requires": { "mime-db": "1.52.0" } @@ -12915,8 +12849,7 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "no-case": { "version": "3.0.4", @@ -13000,7 +12933,8 @@ "ol-layerswitcher": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ol-layerswitcher/-/ol-layerswitcher-4.1.1.tgz", - "integrity": "sha512-uqIqZCr/23GoOIOl2T1iPzcVBPweJZgkVHTrn8DLNCa3cCuX+aJzz0DhkA+qJjm5NqXO5uCvB7zpk9vWtRWmsQ==" + "integrity": "sha512-uqIqZCr/23GoOIOl2T1iPzcVBPweJZgkVHTrn8DLNCa3cCuX+aJzz0DhkA+qJjm5NqXO5uCvB7zpk9vWtRWmsQ==", + "requires": {} }, "ol-mapbox-style": { "version": "9.5.0", @@ -13272,22 +13206,26 @@ "postcss-discard-comments": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", - "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==" + "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", + "requires": {} }, "postcss-discard-duplicates": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", - "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==" + "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", + "requires": {} }, "postcss-discard-empty": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", - "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==" + "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", + "requires": {} }, "postcss-discard-overridden": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz", - "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==" + "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==", + "requires": {} }, "postcss-loader": { "version": "4.3.0", @@ -13399,7 +13337,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -13433,7 +13372,8 @@ "postcss-normalize-charset": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz", - "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==" + "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==", + "requires": {} }, "postcss-normalize-display-values": { "version": "6.0.0", @@ -14288,7 +14228,8 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true + "dev": true, + "requires": {} }, "stylehacks": { "version": "6.0.0", @@ -14382,8 +14323,7 @@ "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" }, "terser": { "version": "5.16.9", @@ -14583,7 +14523,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -14607,7 +14546,6 @@ "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -14639,7 +14577,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -14716,7 +14653,8 @@ "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} } } }, @@ -14893,8 +14831,7 @@ "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" }, "websocket-driver": { "version": "0.7.4", @@ -14936,7 +14873,8 @@ "version": "8.12.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", - "dev": true + "dev": true, + "requires": {} }, "xml-utils": { "version": "1.3.0", From be2da98e1e75462b15e4ba22c3aa967861c4ce9f Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 4 Aug 2023 15:10:30 +0545 Subject: [PATCH 118/222] fix: central api create odk form --- src/backend/app/central/central_crud.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/backend/app/central/central_crud.py b/src/backend/app/central/central_crud.py index 3b05b78dab..159e4035ce 100644 --- a/src/backend/app/central/central_crud.py +++ b/src/backend/app/central/central_crud.py @@ -230,20 +230,15 @@ def create_odk_xform( title = os.path.basename(os.path.splitext(filespec)[0]) # result = xform.createForm(project_id, title, filespec, True) # Pass odk credentials of project in xform - if odk_credentials: - url = odk_credentials.odk_central_url - user = odk_credentials.odk_central_user - pw = odk_credentials.odk_central_password - - else: - logger.debug("ODKCentral connection variables not set in function") - logger.debug("Attempting extraction from environment variables") - url = settings.ODK_CENTRAL_URL - user = settings.ODK_CENTRAL_USER - pw = settings.ODK_CENTRAL_PASSWD + if not odk_credentials: + odk_credentials = project_schemas.ODKCentral( + odk_central_url=settings.ODK_CENTRAL_URL, + odk_central_user=settings.ODK_CENTRAL_USER, + odk_central_password=settings.ODK_CENTRAL_PASSWD, + ) try: - xform = OdkForm(url, user, pw) + xform = get_odk_form(odk_credentials) except Exception as e: logger.error(e) raise HTTPException( @@ -386,7 +381,9 @@ def generate_updated_xform( ] = extract if "data" in inst: if "data" == inst: - xml["h:html"]["h:head"]["model"]["instance"]["data"]["@id"] = xform + xml["h:html"]["h:head"]["model"]["instance"]["data"]["@id"] = id + # xml["h:html"]["h:head"]["model"]["instance"]["data"]["@id"] = xform + else: xml["h:html"]["h:head"]["model"]["instance"][0]["data"]["@id"] = id except Exception: From fb7a4877ee7b40b6bdbf8afe76f5b1b66f14f151 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 4 Aug 2023 15:11:31 +0545 Subject: [PATCH 119/222] fix: check for valid geometry in task generate --- src/backend/app/projects/project_crud.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index b74153e687..00c1306f80 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -1156,12 +1156,13 @@ def generate_task_files( # Update those features and set task_id query = f'''UPDATE features SET task_id={task_id} - WHERE id in ( - - SELECT id - FROM features - WHERE project_id={project_id} and ST_Intersects(geometry, '{task.outline}'::Geometry) - + WHERE id IN ( + SELECT id + FROM features + WHERE project_id={project_id} + AND ST_IsValid(geometry) + AND ST_IsValid('{task.outline}'::Geometry) + AND ST_Intersects(geometry, '{task.outline}'::Geometry) )''' result = db.execute(query) From 23baa6e70e8cc7f13019b15499a92b304c32198d Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 4 Aug 2023 16:22:29 +0545 Subject: [PATCH 120/222] fix: if osm is None, return None --- src/backend/app/submission/submission_routes.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index 593232903c..3f5f6d73f7 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -200,7 +200,8 @@ async def conflate_osm_date( odkf = OsmFile(outfile) osm = odkf.loadFile(osmoutfile) - odk_merge = OdkMerge(data_extracts_file,None) - data = odk_merge.conflateData(osm) - - return data + if osm: + odk_merge = OdkMerge(data_extracts_file,None) + data = odk_merge.conflateData(osm) + return data + return [] \ No newline at end of file From ac8eb43a83d93406d29ba98938ad6f974b8d4e6f Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 7 Aug 2023 10:33:11 +0545 Subject: [PATCH 121/222] feat: draw in progress --- .../OpenLayersComponent/Layers/VectorLayer.js | 33 ++++++++++++++++--- .../src/views/DefineAreaMap.jsx | 29 ++++++++++++++-- .../components/createproject/UploadArea.tsx | 13 ++++---- 3 files changed, 61 insertions(+), 14 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js index cbc7ed2748..4c1c9d4f5b 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js +++ b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js @@ -12,11 +12,13 @@ import OLVectorLayer from 'ol/layer/Vector'; import { defaultStyles, getStyles } from '../helpers/styleUtils'; import { isExtentValid } from '../helpers/layerUtils'; import { + Draw, Modify, Select, defaults as defaultInteractions, } from 'ol/interaction.js'; + const selectElement = 'singleselect'; const selectedCountry = new Style({ @@ -48,6 +50,7 @@ const VectorLayer = ({ mapOnClick, setStyle, onModify, + onDraw, }) => { const [vectorLayer, setVectorLayer] = useState(null); @@ -69,22 +72,42 @@ const VectorLayer = ({ modify.on('modifyend',function(e){ var geoJSONFormat = new GeoJSON(); - // Step 3: Convert features to GeoJSON var geoJSONString = geoJSONFormat.writeFeatures(vectorLayer.getSource().getFeatures(),{ dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857'}); - // Step 4: Log the GeoJSON string - console.log(geoJSONString,'geojsonString'); onModify(geoJSONString); - // console.log(JSON.stringify(geoJSONString),'geojsonString Stringify'); }); map.addInteraction(modify); map.addInteraction(select); - // map.addInteraction(defaultInteractions().extend([select, modify])); return () => { // map.removeInteraction(defaultInteractions().extend([select, modify])) } }, [map,vectorLayer,onModify]) + // Modify Feature + useEffect(() => { + if(!map) return; + if(!vectorLayer) return; + if(!onDraw) return; + const vectorLayerSource = vectorLayer.getSource(); + const draw = new Draw({ + source: vectorLayerSource, + type: 'Polygon', + }); + draw.on('drawend',function(e){ + var geoJSONFormat = new GeoJSON(); + + var geoJSONString = geoJSONFormat.writeFeatures(vectorLayer.getSource().getFeatures(),{ dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857'}); + console.log(geoJSONString,'geojsonString'); + onDraw(geoJSONString); + }); + map.addInteraction(draw); + + return () => { + // map.removeInteraction(defaultInteractions().extend([select, modify])) + } + }, [map,vectorLayer,onDraw]) + + useEffect(() => { if (!map) return; diff --git a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx index 61b811a183..150eb2f53b 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx @@ -6,6 +6,21 @@ import { VectorLayer } from "../components/MapComponent/OpenLayersComponent/Laye import CoreModules from "fmtm/CoreModules"; import { CreateProjectActions } from "fmtm/CreateProjectSlice"; +const testGeojson = { + type: "FeatureCollection", + features: [ + { + type: "Feature", + properties: {}, + geometry: { + type: "Polygon", + coordinates: [ + + ], + }, + }, + ],} + const DefineAreaMap = ({ uploadedGeojson,setGeojsonFile,uploadedDataExtractFile }) => { const dispatch = CoreModules.useDispatch(); const[dataExtractedGeojson, setDataExtractedGeojson] = useState(null); @@ -57,6 +72,17 @@ const DefineAreaMap = ({ uploadedGeojson,setGeojsonFile,uploadedDataExtractFile }} > + {}} + zoomToLayer + /> {dividedTaskGeojson && ( {}} zoomToLayer /> )} diff --git a/src/frontend/main/src/components/createproject/UploadArea.tsx b/src/frontend/main/src/components/createproject/UploadArea.tsx index 48a6c1ecdb..db62663aef 100755 --- a/src/frontend/main/src/components/createproject/UploadArea.tsx +++ b/src/frontend/main/src/components/createproject/UploadArea.tsx @@ -4,17 +4,16 @@ import FormControl from '@mui/material/FormControl'; import FormGroup from '@mui/material/FormGroup'; import { useNavigate, Link } from 'react-router-dom'; import { CreateProjectActions } from '../../store/slices/CreateProjectSlice'; -// @ts-ignore +// @ts-ignore const DefineAreaMap = React.lazy(() => import('map/DefineAreaMap')); -const UploadArea: React.FC = ({geojsonFile,setGeojsonFile,setInputValue,inputValue}:any) => { +const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue, inputValue }: any) => { const navigate = useNavigate(); const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); const dispatch = CoreModules.useDispatch(); // //dispatch function to perform redux state mutation - // // passing payloads for creating project from form whenever user clicks submit on upload area passing previous project details form aswell const onCreateProjectSubmission = () => { if (!geojsonFile) return; @@ -22,7 +21,7 @@ const UploadArea: React.FC = ({geojsonFile,setGeojsonFile,setInputValue,inp dispatch(CreateProjectActions.SetCreateProjectFormStep('select-form')); navigate('/define-tasks'); }; - + return ( = ({geojsonFile,setGeojsonFile,setInputValue,inp Upload GEOJSON { dispatch(CreateProjectActions.SetDividedTaskGeojson(null)); setGeojsonFile(e.target.files[0]); }} - inputProps={{ "accept":".geojson, .json" }} + inputProps={{ accept: '.geojson, .json' }} /> {geojsonFile?.name} @@ -94,7 +93,7 @@ const UploadArea: React.FC = ({geojsonFile,setGeojsonFile,setInputValue,inp {/* END */} - + {}} /> ); }; From 160e97d38ca194c26f7a0b6d20134cf60e4e1237 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 7 Aug 2023 10:45:45 +0545 Subject: [PATCH 122/222] upgrade version of osm-fieldwork to 0.3.4 --- src/backend/pdm.lock | 384 ++++++++++++++++++++++++++++++++++++- src/backend/pyproject.toml | 5 +- 2 files changed, 382 insertions(+), 7 deletions(-) diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index 72ea5680a8..1de191a5b1 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -72,6 +72,14 @@ version = "2023.5.7" requires_python = ">=3.6" summary = "Python package for providing Mozilla's CA Bundle." +[[package]] +name = "cffi" +version = "1.15.1" +summary = "Foreign Function Interface for Python calling C code." +dependencies = [ + "pycparser", +] + [[package]] name = "charset-normalizer" version = "3.1.0" @@ -127,6 +135,15 @@ dependencies = [ "numpy>=1.16", ] +[[package]] +name = "cryptography" +version = "41.0.3" +requires_python = ">=3.7" +summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +dependencies = [ + "cffi>=1.12", +] + [[package]] name = "cycler" version = "0.11.0" @@ -157,6 +174,15 @@ version = "0.7.1" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" summary = "XML bomb protection for Python stdlib modules" +[[package]] +name = "deprecated" +version = "1.2.14" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +summary = "Python @deprecated decorator to deprecate old python classes, functions or methods." +dependencies = [ + "wrapt<2,>=1.10", +] + [[package]] name = "epdb" version = "0.15.1" @@ -202,6 +228,11 @@ dependencies = [ "starlette>=0.12.9", ] +[[package]] +name = "flatdict" +version = "4.0.1" +summary = "Python module for interacting with nested dicts as a single level dict with delimited keys." + [[package]] name = "fonttools" version = "4.39.3" @@ -241,6 +272,24 @@ dependencies = [ "pydantic", ] +[[package]] +name = "gitdb" +version = "4.0.10" +requires_python = ">=3.7" +summary = "Git Object Database" +dependencies = [ + "smmap<6,>=3.0.1", +] + +[[package]] +name = "gitpython" +version = "3.1.32" +requires_python = ">=3.7" +summary = "GitPython is a Python library used to interact with Git repositories" +dependencies = [ + "gitdb<5,>=4.0.1", +] + [[package]] name = "greenlet" version = "2.0.2" @@ -426,6 +475,22 @@ version = "3.2.2" requires_python = ">=3.6" summary = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +[[package]] +name = "ogr" +version = "0.45.0" +requires_python = ">=3.9" +summary = "One API for multiple git forges." +dependencies = [ + "Deprecated", + "GitPython", + "PyGithub", + "PyYAML", + "cryptography", + "python-gitlab", + "requests", + "urllib3", +] + [[package]] name = "openpyxl" version = "3.0.9" @@ -437,16 +502,18 @@ dependencies = [ [[package]] name = "osm-fieldwork" -version = "0.3.3" +version = "0.3.4" requires_python = ">=3.9" summary = "Convert CSV files from ODK Central to OSM format." dependencies = [ "PyYAML>=6.0", "codetiming>=1.4.0", "epdb>=0.15.1", + "flatdict>=4.0.1", "geodex>=0.1.2", "geojson>=2.5.0", "haversine>=2.8.0", + "ogr>=0.44.0", "overpy>=0.6", "progress>=1.6", "pymbtiles>=0.5.0", @@ -569,6 +636,17 @@ name = "pure-eval" version = "0.2.2" summary = "Safely evaluate AST nodes without side effects" +[[package]] +name = "py-cpuinfo" +version = "9.0.0" +summary = "Get CPU info with pure Python" + +[[package]] +name = "pycparser" +version = "2.21" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +summary = "C parser in Python" + [[package]] name = "pydantic" version = "1.10.2" @@ -583,17 +661,55 @@ name = "pygeotile" version = "1.0.6" summary = "Python package to handle tiles and points of different projections, in particular WGS 84 (Latitude, Longitude), Spherical Mercator (Meters), Pixel Pyramid and Tiles (TMS, Google, QuadTree)" +[[package]] +name = "pygithub" +version = "1.59.1" +requires_python = ">=3.7" +summary = "Use the full Github API v3" +dependencies = [ + "deprecated", + "pyjwt[crypto]>=2.4.0", + "pynacl>=1.4.0", + "requests>=2.14.0", +] + [[package]] name = "pygments" version = "2.15.1" requires_python = ">=3.7" summary = "Pygments is a syntax highlighting package written in Python." +[[package]] +name = "pyjwt" +version = "2.8.0" +requires_python = ">=3.7" +summary = "JSON Web Token implementation in Python" + +[[package]] +name = "pyjwt" +version = "2.8.0" +extras = ["crypto"] +requires_python = ">=3.7" +summary = "JSON Web Token implementation in Python" +dependencies = [ + "cryptography>=3.4.0", + "pyjwt==2.8.0", +] + [[package]] name = "pymbtiles" version = "0.5.0" summary = "MapBox Mbtiles Utilities" +[[package]] +name = "pynacl" +version = "1.5.0" +requires_python = ">=3.6" +summary = "Python binding to the Networking and Cryptography (NaCl) library" +dependencies = [ + "cffi>=1.4.1", +] + [[package]] name = "pyparsing" version = "3.0.9" @@ -629,6 +745,16 @@ dependencies = [ "six>=1.5", ] +[[package]] +name = "python-gitlab" +version = "3.15.0" +requires_python = ">=3.7.0" +summary = "Interact with GitLab API" +dependencies = [ + "requests-toolbelt>=0.10.1", + "requests>=2.25.0", +] + [[package]] name = "python-json-logger" version = "2.0.6" @@ -707,6 +833,15 @@ dependencies = [ "requests>=2.0.0", ] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +summary = "A utility belt for advanced users of python-requests" +dependencies = [ + "requests<3.0.0,>=2.0.1", +] + [[package]] name = "rfc3986" version = "1.5.0" @@ -752,6 +887,12 @@ version = "1.16.0" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" summary = "Python 2 and 3 compatibility utilities" +[[package]] +name = "smmap" +version = "5.0.0" +requires_python = ">=3.6" +summary = "A pure Python implementation of a sliding window memory map manager" + [[package]] name = "sniffio" version = "1.3.0" @@ -889,6 +1030,12 @@ name = "wcwidth" version = "0.2.6" summary = "Measures the displayed width of unicode strings in a terminal" +[[package]] +name = "wrapt" +version = "1.15.0" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +summary = "Module for decorators, wrappers and monkey patching." + [[package]] name = "xarray" version = "2023.4.2" @@ -922,7 +1069,7 @@ summary = "Backport of pathlib-compatible object wrapper for zip files" lock_version = "4.2" cross_platform = true groups = ["default", "dev"] -content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971a7e5f87" +content_hash = "sha256:709c4ccb101fc9c592202971146c876a0e1d4aa0654e98b3b6e4bf2ee19a878d" [metadata.files] "alembic 1.8.1" = [ @@ -984,6 +1131,72 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/93/71/752f7a4dd4c20d6b12341ed1732368546bc0ca9866139fe812f6009d9ac7/certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, {url = "https://files.pythonhosted.org/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, ] +"cffi 1.15.1" = [ + {url = "https://files.pythonhosted.org/packages/00/05/23a265a3db411b0bfb721bf7a116c7cecaf3eb37ebd48a6ea4dfb0a3244d/cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {url = "https://files.pythonhosted.org/packages/03/7b/259d6e01a6083acef9d3c8c88990c97d313632bb28fa84d6ab2bb201140a/cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {url = "https://files.pythonhosted.org/packages/0e/65/0d7b5dad821ced4dcd43f96a362905a68ce71e6b5f5cfd2fada867840582/cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {url = "https://files.pythonhosted.org/packages/0e/e2/a23af3d81838c577571da4ff01b799b0c2bbde24bd924d97e228febae810/cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {url = "https://files.pythonhosted.org/packages/10/72/617ee266192223a38b67149c830bd9376b69cf3551e1477abc72ff23ef8e/cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {url = "https://files.pythonhosted.org/packages/18/8f/5ff70c7458d61fa8a9752e5ee9c9984c601b0060aae0c619316a1e1f1ee5/cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {url = "https://files.pythonhosted.org/packages/1d/76/bcebbbab689f5f6fc8a91e361038a3001ee2e48c5f9dbad0a3b64a64cc9e/cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {url = "https://files.pythonhosted.org/packages/22/c6/df826563f55f7e9dd9a1d3617866282afa969fe0d57decffa1911f416ed8/cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {url = "https://files.pythonhosted.org/packages/23/8b/2e8c2469eaf89f7273ac685164949a7e644cdfe5daf1c036564208c3d26b/cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {url = "https://files.pythonhosted.org/packages/2b/a8/050ab4f0c3d4c1b8aaa805f70e26e84d0e27004907c5b8ecc1d31815f92a/cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {url = "https://files.pythonhosted.org/packages/2d/86/3ca57cddfa0419f6a95d1c8478f8f622ba597e3581fd501bbb915b20eb75/cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {url = "https://files.pythonhosted.org/packages/2e/7a/68c35c151e5b7a12650ecc12fdfb85211aa1da43e9924598451c4a0a3839/cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {url = "https://files.pythonhosted.org/packages/32/2a/63cb8c07d151de92ff9d897b2eb27ba6a0e78dda8e4c5f70d7b8c16cd6a2/cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {url = "https://files.pythonhosted.org/packages/32/bd/d0809593f7976828f06a492716fbcbbfb62798bbf60ea1f65200b8d49901/cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {url = "https://files.pythonhosted.org/packages/37/5a/c37631a86be838bdd84cc0259130942bf7e6e32f70f4cab95f479847fb91/cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {url = "https://files.pythonhosted.org/packages/3a/12/d6066828014b9ccb2bbb8e1d9dc28872d20669b65aeb4a86806a0757813f/cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {url = "https://files.pythonhosted.org/packages/3a/75/a162315adeaf47e94a3b7f886a8e31d77b9e525a387eef2d6f0efc96a7c8/cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {url = "https://files.pythonhosted.org/packages/3f/fa/dfc242febbff049509e5a35a065bdc10f90d8c8585361c2c66b9c2f97a01/cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {url = "https://files.pythonhosted.org/packages/43/a0/cc7370ef72b6ee586369bacd3961089ab3d94ae712febf07a244f1448ffd/cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {url = "https://files.pythonhosted.org/packages/47/51/3049834f07cd89aceef27f9c56f5394ca6725ae6a15cff5fbdb2f06a24ad/cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {url = "https://files.pythonhosted.org/packages/47/97/137f0e3d2304df2060abb872a5830af809d7559a5a4b6a295afb02728e65/cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {url = "https://files.pythonhosted.org/packages/50/34/4cc590ad600869502c9838b4824982c122179089ed6791a8b1c95f0ff55e/cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {url = "https://files.pythonhosted.org/packages/5b/1a/e1ee5bed11d8b6540c05a8e3c32448832d775364d4461dd6497374533401/cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {url = "https://files.pythonhosted.org/packages/5d/4e/4e0bb5579b01fdbfd4388bd1eb9394a989e1336203a4b7f700d887b233c1/cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {url = "https://files.pythonhosted.org/packages/5d/6f/3a2e167113eabd46ed300ff3a6a1e9277a3ad8b020c4c682f83e9326fcf7/cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {url = "https://files.pythonhosted.org/packages/69/bf/335f8d95510b1a26d7c5220164dc739293a71d5540ecd54a2f66bac3ecb8/cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {url = "https://files.pythonhosted.org/packages/71/d7/0fe0d91b0bbf610fb7254bb164fa8931596e660d62e90fb6289b7ee27b09/cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {url = "https://files.pythonhosted.org/packages/77/b7/d3618d612be01e184033eab90006f8ca5b5edafd17bf247439ea4e167d8a/cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {url = "https://files.pythonhosted.org/packages/79/4b/33494eb0adbcd884656c48f6db0c98ad8a5c678fb8fb5ed41ab546b04d8c/cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {url = "https://files.pythonhosted.org/packages/7c/3e/5d823e5bbe00285e479034bcad44177b7353ec9fdcd7795baac5ccf82950/cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {url = "https://files.pythonhosted.org/packages/85/1f/a3c533f8d377da5ca7edb4f580cc3edc1edbebc45fac8bb3ae60f1176629/cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {url = "https://files.pythonhosted.org/packages/87/4b/64e8bd9d15d6b22b6cb11997094fbe61edf453ea0a97c8675cb7d1c3f06f/cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {url = "https://files.pythonhosted.org/packages/87/ee/ddc23981fc0f5e7b5356e98884226bcb899f95ebaefc3e8e8b8742dd7e22/cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {url = "https://files.pythonhosted.org/packages/88/89/c34caf63029fb7628ec2ebd5c88ae0c9bd17db98c812e4065a4d020ca41f/cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {url = "https://files.pythonhosted.org/packages/91/bc/b7723c2fe7a22eee71d7edf2102cd43423d5f95ff3932ebaa2f82c7ec8d0/cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {url = "https://files.pythonhosted.org/packages/93/d0/2e2b27ea2f69b0ec9e481647822f8f77f5fc23faca2dd00d1ff009940eb7/cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {url = "https://files.pythonhosted.org/packages/9f/52/1e2b43cfdd7d9a39f48bc89fcaee8d8685b1295e205a4f1044909ac14d89/cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {url = "https://files.pythonhosted.org/packages/a4/42/54bdf22cf6c8f95113af645d0bd7be7f9358ea5c2d57d634bb11c6b4d0b2/cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {url = "https://files.pythonhosted.org/packages/a8/16/06b84a7063a4c0a2b081030fdd976022086da9c14e80a9ed4ba0183a98a9/cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {url = "https://files.pythonhosted.org/packages/a9/ba/e082df21ebaa9cb29f2c4e1d7e49a29b90fcd667d43632c6674a16d65382/cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {url = "https://files.pythonhosted.org/packages/aa/02/ab15b3aa572759df752491d5fa0f74128cd14e002e8e3257c1ab1587810b/cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {url = "https://files.pythonhosted.org/packages/ad/26/7b3a73ab7d82a64664c7c4ea470e4ec4a3c73bb4f02575c543a41e272de5/cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {url = "https://files.pythonhosted.org/packages/af/cb/53b7bba75a18372d57113ba934b27d0734206c283c1dfcc172347fbd9f76/cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {url = "https://files.pythonhosted.org/packages/af/da/9441d56d7dd19d07dcc40a2a5031a1f51c82a27cee3705edf53dadcac398/cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {url = "https://files.pythonhosted.org/packages/b3/b8/89509b6357ded0cbacc4e430b21a4ea2c82c2cdeb4391c148b7c7b213bed/cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {url = "https://files.pythonhosted.org/packages/b5/7d/df6c088ef30e78a78b0c9cca6b904d5abb698afb5bc8f5191d529d83d667/cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {url = "https://files.pythonhosted.org/packages/b5/80/ce5ba093c2475a73df530f643a61e2969a53366e372b24a32f08cd10172b/cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {url = "https://files.pythonhosted.org/packages/b7/8b/06f30caa03b5b3ac006de4f93478dbd0239e2a16566d81a106c322dc4f79/cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {url = "https://files.pythonhosted.org/packages/b9/4a/dde4d093a3084d0b0eadfb2703f71e31a5ced101a42c839ac5bbbd1710f2/cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {url = "https://files.pythonhosted.org/packages/c1/25/16a082701378170559bb1d0e9ef2d293cece8dc62913d79351beb34c5ddf/cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {url = "https://files.pythonhosted.org/packages/c2/0b/3b09a755ddb977c167e6d209a7536f6ade43bb0654bad42e08df1406b8e4/cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {url = "https://files.pythonhosted.org/packages/c5/ff/3f9d73d480567a609e98beb0c64359f8e4f31cb6a407685da73e5347b067/cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {url = "https://files.pythonhosted.org/packages/c6/3d/dd085bb831b22ce4d0b7ba8550e6d78960f02f770bbd1314fea3580727f8/cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {url = "https://files.pythonhosted.org/packages/c9/e3/0a52838832408cfbbf3a59cb19bcd17e64eb33795c9710ca7d29ae10b5b7/cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {url = "https://files.pythonhosted.org/packages/d3/56/3e94aa719ae96eeda8b68b3ec6e347e0a23168c6841dc276ccdcdadc9f32/cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {url = "https://files.pythonhosted.org/packages/d3/e1/e55ca2e0dd446caa2cc8f73c2b98879c04a1f4064ac529e1836683ca58b8/cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {url = "https://files.pythonhosted.org/packages/da/ff/ab939e2c7b3f40d851c0f7192c876f1910f3442080c9c846532993ec3cef/cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {url = "https://files.pythonhosted.org/packages/df/02/aef53d4aa43154b829e9707c8c60bab413cd21819c4a36b0d7aaa83e2a61/cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {url = "https://files.pythonhosted.org/packages/e8/ff/c4b7a358526f231efa46a375c959506c87622fb4a2c5726e827c55e6adf2/cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {url = "https://files.pythonhosted.org/packages/ea/be/c4ad40ad441ac847b67c7a37284ae3c58f39f3e638c6b0f85fb662233825/cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {url = "https://files.pythonhosted.org/packages/ed/a3/c5f01988ddb70a187c3e6112152e01696188c9f8a4fa4c68aa330adbb179/cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {url = "https://files.pythonhosted.org/packages/ef/41/19da352d341963d29a33bdb28433ba94c05672fb16155f794fad3fd907b0/cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {url = "https://files.pythonhosted.org/packages/f9/96/fc9e118c47b7adc45a0676f413b4a47554e5f3b6c99b8607ec9726466ef1/cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {url = "https://files.pythonhosted.org/packages/ff/fe/ac46ca7b00e9e4f9c62e7928a11bc9227c86e2ff43526beee00cdfb4f0e8/cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, +] "charset-normalizer 3.1.0" = [ {url = "https://files.pythonhosted.org/packages/00/47/f14533da238134f5067fb1d951eb03d5c4be895d6afb11c7ebd07d111acb/charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, {url = "https://files.pythonhosted.org/packages/01/c7/0407de35b70525dba2a58a2724a525cf882ee76c3d2171d834463c5d2881/charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, @@ -1134,6 +1347,31 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/f9/ca/e9208ba62f5c14d950273d2d4da75aa9f3879809d6813b058514fc5dcccb/contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, {url = "https://files.pythonhosted.org/packages/fa/56/ab73a8bab463df907ac2c2249bfee428900e2b88e28ccf5ab059c106e07c/contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, ] +"cryptography 41.0.3" = [ + {url = "https://files.pythonhosted.org/packages/00/d7/51516ad1da024d331ed2f4f0f8836ec8373e4a6b3e3ac190753f1cd6fffe/cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, + {url = "https://files.pythonhosted.org/packages/0e/c2/6b4463782ad828f89f45fd073adfaaca67eb71249488deeda00ae475f002/cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, + {url = "https://files.pythonhosted.org/packages/10/47/c6bc7aa374e74af9694eae95d4fecea2777ef4c309f5c4b404c7262a87d1/cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, + {url = "https://files.pythonhosted.org/packages/21/74/a7ebb5bcf733b1626e4778941e505792d7f655e799ff3bdbd9a176516ee2/cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, + {url = "https://files.pythonhosted.org/packages/30/56/5f4eee57ccd577c261b516bfcbe17492838e2bc4e2e92ea93bbb57666fbd/cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, + {url = "https://files.pythonhosted.org/packages/46/74/f9eba8c947f57991b5dd5e45797fdc68cc70e444c32e6b952b512d42aba5/cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, + {url = "https://files.pythonhosted.org/packages/5c/83/50d61ceaf324d73dd2e41c38c7a9d0e522be4a31fca2a0fa70f39b2e4c50/cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, + {url = "https://files.pythonhosted.org/packages/6c/02/2f4f33c5284ddee77efe89248a059dba27bead01a812a76729d51b0bcb3d/cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, + {url = "https://files.pythonhosted.org/packages/79/18/5495f896421da0f5ae58f6cfaf6866269aa9b240206175fcefe1467a0d6b/cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, + {url = "https://files.pythonhosted.org/packages/7d/43/587996ab411ca9cc7b75927856783f1791390d57ab7dc5f2c24df61e3f9a/cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, + {url = "https://files.pythonhosted.org/packages/8e/5d/2bf54672898375d081cb24b30baeb7793568ae5d958ef781349e9635d1c8/cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, + {url = "https://files.pythonhosted.org/packages/91/68/5c33bb0115b3413a974dd4d23625b99ed22522582b513f82e93ce00f954c/cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, + {url = "https://files.pythonhosted.org/packages/9a/90/4c779507b50c9adf3f11f973f22d80a83097100cf9e1766b21ec4cd0bba2/cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, + {url = "https://files.pythonhosted.org/packages/9e/ac/e26bd0f1c96444c3332fcc32ecbdcfccc0356b8f0cc4db9047ddccb4d7c1/cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, + {url = "https://files.pythonhosted.org/packages/a2/e6/2331e5bde68343b820a9e5d937b2e22a0f81ba68e87b74dbbdd98944da4e/cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, + {url = "https://files.pythonhosted.org/packages/ac/1b/0768c89d513bdefecc1f5ebb12df87e810d8a043c35c37a8cc7f3bef28c6/cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, + {url = "https://files.pythonhosted.org/packages/b7/d9/b3500bc80cc1ce775c987689c1bd2d9f75513df7ab78bdec0c6bad368ae5/cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, + {url = "https://files.pythonhosted.org/packages/cc/65/65e6719b0038e2fece9311d39372f1f4293c32e8951edff78db857d62fc3/cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, + {url = "https://files.pythonhosted.org/packages/d2/36/6fa85e93c92888e6e0afa233adbf22a0747ed3448032c5a92326dbb6faec/cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, + {url = "https://files.pythonhosted.org/packages/ef/a4/5131f125a7c413b89c01cff9712c6405a4ac46909deba67d74209a45d973/cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, + {url = "https://files.pythonhosted.org/packages/f6/09/b20b8c54f53fdd10c6971ce2eab32aecbabc2a7ab7621839653460f988fc/cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, + {url = "https://files.pythonhosted.org/packages/f6/c3/3eff8181cd23aa5b33ead7c5086fbc9dee3f794fe782274ef1c61b16d613/cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, + {url = "https://files.pythonhosted.org/packages/ff/62/4b7f7d0e8c69ee9dc79238362af05df77ee7020123d922847665937e42d2/cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, +] "cycler 0.11.0" = [ {url = "https://files.pythonhosted.org/packages/34/45/a7caaacbfc2fa60bee42effc4bcc7d7c6dbe9c349500e04f65a861c15eb9/cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, {url = "https://files.pythonhosted.org/packages/5c/f9/695d6bedebd747e5eb0fe8fad57b72fdf25411273a39791cde838d5a8f51/cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, @@ -1169,6 +1407,10 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +"deprecated 1.2.14" = [ + {url = "https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {url = "https://files.pythonhosted.org/packages/92/14/1e41f504a246fc224d2ac264c227975427a85caf37c3979979edb9b1b232/Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] "epdb 0.15.1" = [ {url = "https://files.pythonhosted.org/packages/60/d3/e74d7f5f6476b6392f596750b533ff3b3897dd2ef361521661e061ce7766/epdb-0.15.1.tar.gz", hash = "sha256:f59e9d54866faad6fcbd8fcfc634b85e8fde2b045b13d10f2f8d083f6cbd2668"}, {url = "https://files.pythonhosted.org/packages/b2/94/27737a2a97422d2bfb70982f06b5b3fdab66b8221a978b752ce938092a50/epdb-0.15.1-py2-none-any.whl", hash = "sha256:749c7bc9c23e01f1e5238684178b7d61c323647e063ec7f3603678552856e559"}, @@ -1194,6 +1436,9 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/0f/8d/eb73397313152277934e6d9891786affe12704ddfb5a1ae1e9a869c98c53/FastAPI_SQLAlchemy-0.2.1-py3-none-any.whl", hash = "sha256:d3bfc6d9388a73a2c3726bc6bd7764cd82debfa71c16e3991c544b9701f48d96"}, {url = "https://files.pythonhosted.org/packages/d5/1d/c08c99b2be52d822323840a7acc8f17df5bc3963e5e3431b4cedc0838b2f/FastAPI-SQLAlchemy-0.2.1.tar.gz", hash = "sha256:7a9d44e46cbc73c3f5ee8c444f7e0bcd3d01370a878740abd4cd4d2e900ce9af"}, ] +"flatdict 4.0.1" = [ + {url = "https://files.pythonhosted.org/packages/3e/0d/424de6e5612f1399ff69bf86500d6a62ff0a4843979701ae97f120c7f1fe/flatdict-4.0.1.tar.gz", hash = "sha256:cd32f08fd31ed21eb09ebc76f06b6bd12046a24f77beb1fd0281917e47f26742"}, +] "fonttools 4.39.3" = [ {url = "https://files.pythonhosted.org/packages/16/07/1c7547e27f559ec078801d522cc4d5127cdd4ef8e831c8ddcd9584668a07/fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"}, {url = "https://files.pythonhosted.org/packages/39/d7/ab05ae34dd57dd657e492d95ce7ec6bfebfb3bfcdc7316660ac5a13fcfee/fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"}, @@ -1214,6 +1459,14 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/66/ca/a94596d9a658ba6d78e9e28212cad4b0ef5aa1d01cf77b978e218c1ae2f4/geojson-pydantic-0.4.3.tar.gz", hash = "sha256:34c9e43509012ef6ad7b0f600aa856da23fb13edbf55964dcca4a00a267385e0"}, {url = "https://files.pythonhosted.org/packages/d4/19/9f58c73ea99c438e1bb00c25a1e215933667301819440eee5f803a7bb9dd/geojson_pydantic-0.4.3-py3-none-any.whl", hash = "sha256:716cff5bbb2d3abafb7f45f40b22cb74858a4e282126c7a5871fbee3b888924f"}, ] +"gitdb 4.0.10" = [ + {url = "https://files.pythonhosted.org/packages/21/a6/35f83efec687615c711fe0a09b67e58f6d1254db27b1013119de46f450bd/gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {url = "https://files.pythonhosted.org/packages/4b/47/dc98f3d5d48aa815770e31490893b92c5f1cd6c6cf28dd3a8ae0efffac14/gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] +"gitpython 3.1.32" = [ + {url = "https://files.pythonhosted.org/packages/67/50/742c2fb60989b76ccf7302c7b1d9e26505d7054c24f08cc7ec187faaaea7/GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, + {url = "https://files.pythonhosted.org/packages/87/56/6dcdfde2f3a747988d1693100224fb88fc1d3bbcb3f18377b2a3ef53a70a/GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, +] "greenlet 2.0.2" = [ {url = "https://files.pythonhosted.org/packages/07/ef/6bfa2ea34f76dea02833d66d28ae7cf4729ddab74ee93ee069c7f1d47c4f/greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, {url = "https://files.pythonhosted.org/packages/08/b1/0615df6393464d6819040124eb7bdff6b682f206a464b4537964819dcab4/greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, @@ -1610,13 +1863,17 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/6d/fa/fbf4001037904031639e6bfbfc02badfc7e12f137a8afa254df6c4c8a670/oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, {url = "https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, ] +"ogr 0.45.0" = [ + {url = "https://files.pythonhosted.org/packages/04/76/6613f90360bf862a0c26ce55c3eec8953df084e1153983298a2bc15fa62c/ogr-0.45.0-py2.py3-none-any.whl", hash = "sha256:fd63698041ae07e1569a16f1628d3c7a6a446b917ea2804af3a79780085fb447"}, + {url = "https://files.pythonhosted.org/packages/ad/70/dc6cb4610dd60aeb91fd1df411759373a7111b1b053798cff08accf2ea47/ogr-0.45.0.tar.gz", hash = "sha256:dea49f664a9b9197f9af7404f105dea53f33ab8395d595e4c0a42de6fbcc076e"}, +] "openpyxl 3.0.9" = [ {url = "https://files.pythonhosted.org/packages/1c/a6/8ce4d2ef2c29be3235c08bb00e0b81e29d38ebc47d82b17af681bf662b74/openpyxl-3.0.9-py2.py3-none-any.whl", hash = "sha256:8f3b11bd896a95468a4ab162fc4fcd260d46157155d1f8bfaabb99d88cfcf79f"}, {url = "https://files.pythonhosted.org/packages/9e/19/c45fb7a40cd46e03e36d60d1db26a50a795fa0b6b8a2a8094f4ac0c71ae5/openpyxl-3.0.9.tar.gz", hash = "sha256:40f568b9829bf9e446acfffce30250ac1fa39035124d55fc024025c41481c90f"}, ] -"osm-fieldwork 0.3.3" = [ - {url = "https://files.pythonhosted.org/packages/26/46/9d1af7f4216d3581de8367ecf792932fb333b69746b80d9dc364d11bb29f/osm-fieldwork-0.3.3.tar.gz", hash = "sha256:2519f345445fe75a6943c303b258351b6358e900a940e4a80414b3652b0a4e99"}, - {url = "https://files.pythonhosted.org/packages/d1/72/8b5f0b80e17fa02e61fe3979c7986331c85d19cab227e3e8f295b0feaa30/osm_fieldwork-0.3.3-py3-none-any.whl", hash = "sha256:67b9ff2bd01f602971be2e98fc5407db0d483fc21d5f456147c29516a43e1a9e"}, +"osm-fieldwork 0.3.4" = [ + {url = "https://files.pythonhosted.org/packages/61/80/82ec3082520d277f27764ee7bafbc66c8ebf7ae7f2a9a217e5b03f0a6290/osm_fieldwork-0.3.4-py3-none-any.whl", hash = "sha256:70e2fee90987424f376ced55d694dc9b1472ffdda93efbe5ef68f0c09df59934"}, + {url = "https://files.pythonhosted.org/packages/a5/b1/35c9e1f24b62e84c5acfab0e75d9c5b2f850dfd7178d8d1dfc5bddcf8a22/osm-fieldwork-0.3.4.tar.gz", hash = "sha256:0054b2a58f3c551789c5c2a37c13a9fe5fcdf209f61bba1272a4a3cebf97b34c"}, ] "osm-login-python 0.0.4" = [ {url = "https://files.pythonhosted.org/packages/d1/81/9c36618b20b570ddcf6fd7770a528a5d93f5b1f853d7ef81e536fdd39f76/osm-login-python-0.0.4.tar.gz", hash = "sha256:f10c9bc91978aebb38c5083502d42d78463b617d4a9a05d9a8bdc44550de32b8"}, @@ -1770,6 +2027,14 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/2b/27/77f9d5684e6bce929f5cfe18d6cfbe5133013c06cb2fbf5933670e60761d/pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, {url = "https://files.pythonhosted.org/packages/97/5a/0bc937c25d3ce4e0a74335222aee05455d6afa2888032185f8ab50cdf6fd/pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, ] +"py-cpuinfo 9.0.0" = [ + {url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"}, + {url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"}, +] +"pycparser 2.21" = [ + {url = "https://files.pythonhosted.org/packages/5e/0b/95d387f5f4433cb0f53ff7ad859bd2c6051051cebbb564f139a999ab46de/pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {url = "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, +] "pydantic 1.10.2" = [ {url = "https://files.pythonhosted.org/packages/13/e3/5b83cba317390c9125e049a5328b8e19475098362d398a65936aaab3f00f/pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, {url = "https://files.pythonhosted.org/packages/22/53/196c9a5752e30d682e493d7c00ea0a02377446578e577ae5e085010dc0bd/pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, @@ -1811,14 +2076,34 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 "pygeotile 1.0.6" = [ {url = "https://files.pythonhosted.org/packages/cf/43/4efe7a429e75b946dace4493e012990d135ac1b063d4e8fa710f04a6f191/pyGeoTile-1.0.6.tar.gz", hash = "sha256:64b1cfac77a392e81e2220412872cd0fb4988c25e136f8aed7c03ced59134ff9"}, ] +"pygithub 1.59.1" = [ + {url = "https://files.pythonhosted.org/packages/2c/71/aff5465d9e3d448a5d4beab1dc7c8dec72037e3ae7e0d856ee08538dc934/PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {url = "https://files.pythonhosted.org/packages/fb/30/203d3420960853e399de3b85d6613cea1cf17c1cf7fc9716f7ee7e17e0fc/PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, +] "pygments 2.15.1" = [ {url = "https://files.pythonhosted.org/packages/34/a7/37c8d68532ba71549db4212cb036dbd6161b40e463aba336770e80c72f84/Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, {url = "https://files.pythonhosted.org/packages/89/6b/2114e54b290824197006e41be3f9bbe1a26e9c39d1f5fa20a6d62945a0b3/Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, ] +"pyjwt 2.8.0" = [ + {url = "https://files.pythonhosted.org/packages/2b/4f/e04a8067c7c96c364cef7ef73906504e2f40d690811c021e1a1901473a19/PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {url = "https://files.pythonhosted.org/packages/30/72/8259b2bccfe4673330cea843ab23f86858a419d8f1493f66d413a76c7e3b/PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] "pymbtiles 0.5.0" = [ {url = "https://files.pythonhosted.org/packages/75/ff/9ae83bb0cf6c504d675b917eae3ad9e9f919fda3fea51de9f737ac0ccf27/pymbtiles-0.5.0.tar.gz", hash = "sha256:b4eb2c470d2eb3d94627cdc8a8ae448b8899af2dd696f9a5eca706ddf8293b58"}, {url = "https://files.pythonhosted.org/packages/82/ba/a05974655e73d7937b8e5438bf7ca5dba0b7d84dc67e98fb40c81dc92fca/pymbtiles-0.5.0-py3-none-any.whl", hash = "sha256:91c1c2fa3e25f581d563a60e705105f7277b0dbb9ff727c8c28cb66f0f891c84"}, ] +"pynacl 1.5.0" = [ + {url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, + {url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, +] "pyparsing 3.0.9" = [ {url = "https://files.pythonhosted.org/packages/6c/10/a7d0fa5baea8fe7b50f448ab742f26f52b80bfca85ac2be9d35cdd9a3246/pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {url = "https://files.pythonhosted.org/packages/71/22/207523d16464c40a0310d2d4d8926daffa00ac1f5b1576170a32db749636/pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, @@ -1835,6 +2120,10 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, {url = "https://files.pythonhosted.org/packages/4c/c4/13b4776ea2d76c115c1d1b84579f3764ee6d57204f6be27119f13a61d0a9/python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, ] +"python-gitlab 3.15.0" = [ + {url = "https://files.pythonhosted.org/packages/22/53/248b87282df591d74ba3d38c3c3ced2b5087248c0ccfb6b3a947bb1034c3/python-gitlab-3.15.0.tar.gz", hash = "sha256:c9e65eb7612a9fbb8abf0339972eca7fd7a73d4da66c9b446ffe528930aff534"}, + {url = "https://files.pythonhosted.org/packages/38/51/3c7dd08272658e5490d0c0b6c94af15bd0c0649e7ad23c9ed0db1d276143/python_gitlab-3.15.0-py3-none-any.whl", hash = "sha256:8f8d1c0d387f642eb1ac7bf5e8e0cd8b3dd49c6f34170cee3c7deb7d384611f3"}, +] "python-json-logger 2.0.6" = [ {url = "https://files.pythonhosted.org/packages/23/8a/b211a13ce19b3f571fe04cb654b806dc9c7405625647cb8f0c0cbb208f6f/python-json-logger-2.0.6.tar.gz", hash = "sha256:ed33182c2b438a366775c25c1219ebbd5bd7f71694c644d6b3b3861e19565ae3"}, {url = "https://files.pythonhosted.org/packages/79/4b/5f2f886c6e140b16054eb52dcd43743c1ee5a253a3fe7b6e4a66b1d4e53a/python_json_logger-2.0.6-py3-none-any.whl", hash = "sha256:3af8e5b907b4a5b53cae249205ee3a3d3472bd7ad9ddfaec136eec2f2faf4995"}, @@ -1908,6 +2197,10 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/6f/bb/5deac77a9af870143c684ab46a7934038a53eb4aa975bc0687ed6ca2c610/requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, {url = "https://files.pythonhosted.org/packages/95/52/531ef197b426646f26b53815a7d2a67cb7a331ef098bb276db26a68ac49f/requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, ] +"requests-toolbelt 1.0.0" = [ + {url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, + {url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, +] "rfc3986 1.5.0" = [ {url = "https://files.pythonhosted.org/packages/79/30/5b1b6c28c105629cc12b33bdcbb0b11b5bb1880c6cfbd955f9e792921aa8/rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, {url = "https://files.pythonhosted.org/packages/c4/e5/63ca2c4edf4e00657584608bee1001302bbf8c5f569340b78304f2f446cb/rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, @@ -1964,6 +2257,10 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, {url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, ] +"smmap 5.0.0" = [ + {url = "https://files.pythonhosted.org/packages/21/2d/39c6c57032f786f1965022563eec60623bb3e1409ade6ad834ff703724f3/smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, + {url = "https://files.pythonhosted.org/packages/6d/01/7caa71608bc29952ae09b0be63a539e50d2484bc37747797a66a60679856/smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, +] "sniffio 1.3.0" = [ {url = "https://files.pythonhosted.org/packages/c3/a0/5dba8ed157b0136607c7f2151db695885606968d1fae123dc3391e0cfdbf/sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, {url = "https://files.pythonhosted.org/packages/cd/50/d49c388cae4ec10e8109b1b833fd265511840706808576df3ada99ecb0ac/sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, @@ -2142,6 +2439,83 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/20/f4/c0584a25144ce20bfcf1aecd041768b8c762c1eb0aa77502a3f0baa83f11/wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, {url = "https://files.pythonhosted.org/packages/5e/5f/1e4bd82a9cc1f17b2c2361a2d876d4c38973a997003ba5eb400e8a932b6c/wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, ] +"wrapt 1.15.0" = [ + {url = "https://files.pythonhosted.org/packages/0c/6e/f80c23efc625c10460240e31dcb18dd2b34b8df417bc98521fbfd5bc2e9a/wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {url = "https://files.pythonhosted.org/packages/0f/9a/179018bb3f20071f39597cd38fc65d6285d7b89d57f6c51f502048ed28d9/wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {url = "https://files.pythonhosted.org/packages/12/5a/fae60a8bc9b07a3a156989b79e14c58af05ab18375749ee7c12b2f0dddbd/wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {url = "https://files.pythonhosted.org/packages/18/f6/659d7c431a57da9c9a86945834ab2bf512f1d9ebefacea49135a0135ef1a/wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {url = "https://files.pythonhosted.org/packages/1e/3c/cb96dbcafbf3a27413fb15e0a1997c4610283f895dc01aca955cd2fda8b9/wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {url = "https://files.pythonhosted.org/packages/20/01/baec2650208284603961d61f53ee6ae8e3eff63489c7230dff899376a6f6/wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {url = "https://files.pythonhosted.org/packages/21/42/36c98e9c024978f52c218f22eba1addd199a356ab16548af143d3a72ac0d/wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {url = "https://files.pythonhosted.org/packages/23/0a/9964d7141b8c5e31c32425d3412662a7873aaf0c0964166f4b37b7db51b6/wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {url = "https://files.pythonhosted.org/packages/29/41/f05bf85417473cf6fe4eec7396c63762e5a457a42102bd1b8af059af6586/wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {url = "https://files.pythonhosted.org/packages/2b/fb/c31489631bb94ac225677c1090f787a4ae367614b5277f13dbfde24b2b69/wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {url = "https://files.pythonhosted.org/packages/2d/47/16303c59a890696e1a6fd82ba055fc4e0f793fb4815b5003f1f85f7202ce/wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {url = "https://files.pythonhosted.org/packages/2e/ce/90dcde9ff9238689f111f07b46da2db570252445a781ea147ff668f651b0/wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {url = "https://files.pythonhosted.org/packages/31/e6/6ac59c5570a7b9aaecb10de39f70dacd0290620330277e60b29edcf8bc9a/wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {url = "https://files.pythonhosted.org/packages/39/ee/2b8d608f2bcf86242daadf5b0b746c11d3657b09892345f10f171b5ca3ac/wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {url = "https://files.pythonhosted.org/packages/44/a1/40379212a0b678f995fdb4f4f28aeae5724f3212cdfbf97bee8e6fba3f1b/wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {url = "https://files.pythonhosted.org/packages/45/90/a959fa50084d7acc2e628f093c9c2679dd25085aa5085a22592e028b3e06/wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {url = "https://files.pythonhosted.org/packages/47/dd/bee4d33058656c0b2e045530224fcddd9492c354af5d20499e5261148dcb/wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {url = "https://files.pythonhosted.org/packages/48/65/0061e7432ca4b635e96e60e27e03a60ddaca3aeccc30e7415fed0325c3c2/wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {url = "https://files.pythonhosted.org/packages/4a/7b/c63103817bd2f3b0145608ef642ce90d8b6d1e5780d218bce92e93045e06/wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {url = "https://files.pythonhosted.org/packages/50/eb/af864a01300878f69b4949f8381ad57d5519c1791307e9fd0bc7f5ab50a5/wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {url = "https://files.pythonhosted.org/packages/54/21/282abeb456f22d93533b2d373eeb393298a30b0cb0683fa8a4ed77654273/wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {url = "https://files.pythonhosted.org/packages/55/20/90f5affc2c879db408124ce14b9443b504f961e47a517dff4f24a00df439/wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {url = "https://files.pythonhosted.org/packages/5d/c4/3cc25541ec0404dd1d178e7697a34814d77be1e489cd6f8cb055ac688314/wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {url = "https://files.pythonhosted.org/packages/65/be/3ae5afe9d78d97595b28914fa7e375ebc6329549d98f02768d5a08f34937/wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {url = "https://files.pythonhosted.org/packages/6b/b0/bde5400fdf6d18cb7ef527831de0f86ac206c4da1670b67633e5a547b05f/wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {url = "https://files.pythonhosted.org/packages/78/f2/106d90140a93690eab240fae76759d62dae639fcec1bd098eccdb83aa38f/wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {url = "https://files.pythonhosted.org/packages/7f/b6/6dc0ddacd20337b4ce6ab0d6b0edc7da3898f85c4f97df7f30267e57509e/wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {url = "https://files.pythonhosted.org/packages/81/1e/0bb8f01c6ac5baba66ef1ab65f4644bede856c3c7aede18c896be222151c/wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {url = "https://files.pythonhosted.org/packages/88/f1/4dfaa1ad111d2a48429dca133e46249922ee2f279e9fdd4ab5b149cd6c71/wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {url = "https://files.pythonhosted.org/packages/8a/1c/740c3ad1b7754dd7213f4df09ccdaf6b19e36da5ff3a269444ba9e103f1b/wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {url = "https://files.pythonhosted.org/packages/8f/87/ba6dc86e8edb28fd1e314446301802751bd3157e9780385c9eef633994b9/wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {url = "https://files.pythonhosted.org/packages/94/55/91dd3a7efbc1db2b07bbfc490d48e8484852c355d55e61e8b1565d7725f6/wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {url = "https://files.pythonhosted.org/packages/96/37/a33c1220e8a298ab18eb070b6a59e4ccc3f7344b434a7ac4bd5d4bdccc97/wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {url = "https://files.pythonhosted.org/packages/9b/50/383c155a05e3e0361d209e3f55ec823f3736c7a46b29923ea33ab85e8d70/wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {url = "https://files.pythonhosted.org/packages/9d/40/fee1288d654c80fe1bc5ecee1c8d58f761a39bb30c73f1ce106701dd8b0a/wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {url = "https://files.pythonhosted.org/packages/a2/3e/ee671ac60945154dfa3a406b8cb5cef2e3b4fa31c7d04edeb92716342026/wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {url = "https://files.pythonhosted.org/packages/a4/af/8552671e4e7674fcae14bd3976dd9dc6a2b7294730e4a9a94597ac292a21/wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {url = "https://files.pythonhosted.org/packages/a6/32/f4868adc994648fac4cfe347bcc1381c9afcb1602c8ba0910f36b96c5449/wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {url = "https://files.pythonhosted.org/packages/a7/da/04883b14284c437eac98c7ad2959197f02acbabd57d5ea8ff4893a7c3920/wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {url = "https://files.pythonhosted.org/packages/a9/64/886e512f438f12424b48a3ab23ae2583ec633be6e13eb97b0ccdff8e328a/wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {url = "https://files.pythonhosted.org/packages/aa/24/bbd64ee4e1db9c75ec2a9677c538866f81800bcd2a8abd1a383369369cf5/wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {url = "https://files.pythonhosted.org/packages/af/23/cf5dbfd676480fa8fc6eecc4c413183cd8e14369321c5111fec5c12550e9/wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {url = "https://files.pythonhosted.org/packages/af/7f/25913aacbe0c2c68e7354222bdefe4e840489725eb835e311c581396f91f/wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {url = "https://files.pythonhosted.org/packages/b1/8b/f4c02cf1f841dede987f93c37d42256dc4a82cd07173ad8a5458eee1c412/wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {url = "https://files.pythonhosted.org/packages/b2/b0/a56b129822568d9946e009e8efd53439b9dd38cc1c4af085aa44b2485b40/wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {url = "https://files.pythonhosted.org/packages/b6/0c/435198dbe6961c2343ca725be26b99c8aee615e32c45bc1cb2a960b06183/wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {url = "https://files.pythonhosted.org/packages/b7/3d/9d3cd75f7fc283b6e627c9b0e904189c41ca144185fd8113a1a094dec8ca/wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {url = "https://files.pythonhosted.org/packages/b9/40/975fbb1ab03fa987900bacc365645c4cbead22baddd273b4f5db7f9843d2/wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {url = "https://files.pythonhosted.org/packages/bd/47/57ffe222af59fae1eb56bca7d458b704a9b59380c47f0921efb94dc4786a/wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {url = "https://files.pythonhosted.org/packages/c3/12/5fabf0014a0f30eb3975b7199ac2731215a40bc8273083f6a89bd6cadec6/wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {url = "https://files.pythonhosted.org/packages/c4/e3/01f879f8e7c1221c72dbd4bfa106624ee3d01cb8cbc82ef57fbb95880cac/wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {url = "https://files.pythonhosted.org/packages/c7/cd/18d95465323f29e3f3fd3ff84f7acb402a6a61e6caf994dced7140d78f85/wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {url = "https://files.pythonhosted.org/packages/ca/1c/5caf61431705b3076ca1152abfd6da6304697d7d4fe48bb3448a6decab40/wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {url = "https://files.pythonhosted.org/packages/cd/a0/84b8fe24af8d7f7374d15e0da1cd5502fff59964bbbf34982df0ca2c9047/wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {url = "https://files.pythonhosted.org/packages/cd/f0/060add4fcb035024f84fb3b5523fb2b119ac08608af3f61dbdda38477900/wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {url = "https://files.pythonhosted.org/packages/cf/b1/3c24fc0f6b589ad8c99cfd1cd3e586ef144e16aaf9381ed952d047a7ee54/wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {url = "https://files.pythonhosted.org/packages/d1/74/3c99ce16947f7af901f6203ab4a3d0908c4db06e800571dabfe8525fa925/wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {url = "https://files.pythonhosted.org/packages/d2/60/9fe25f4cd910ae94e75a1fd4772b058545e107a82629a5ca0f2cd7cc34d5/wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {url = "https://files.pythonhosted.org/packages/d7/4b/1bd4837362d31d402b9bc1a27cdd405baf994dbf9942696f291d2f7eeb73/wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {url = "https://files.pythonhosted.org/packages/dd/42/9eedee19435dfc0478cdb8bdc71800aab15a297d1074f1aae0d9489adbc3/wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {url = "https://files.pythonhosted.org/packages/dd/e9/85e780a6b70191114b13b129867cec2fab84279f6beb788e130a26e4ca58/wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {url = "https://files.pythonhosted.org/packages/dd/eb/389f9975a6be31ddd19d29128a11f1288d07b624e464598a4b450f8d007e/wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {url = "https://files.pythonhosted.org/packages/de/77/e2ebfa2f46c19094888a364fdb59aeab9d3336a3ad7ccdf542de572d2a35/wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {url = "https://files.pythonhosted.org/packages/e8/86/fc38e58843159bdda745258d872b1187ad916087369ec57ef93f5e832fa8/wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {url = "https://files.pythonhosted.org/packages/ec/f4/f84538a367105f0a7e507f0c6766d3b15b848fd753647bbf0c206399b322/wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {url = "https://files.pythonhosted.org/packages/ee/25/83f5dcd9f96606521da2d0e7a03a18800264eafb59b569ff109c4d2fea67/wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {url = "https://files.pythonhosted.org/packages/f6/89/bf77b063c594795aaa056cac7b467463702f346d124d46d7f06e76e8cd97/wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {url = "https://files.pythonhosted.org/packages/f6/d3/3c6bd4db883537c40eb9d41d738d329d983d049904f708267f3828a60048/wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {url = "https://files.pythonhosted.org/packages/f8/49/10013abe31f6892ae57c5cc260f71b7e08f1cc00f0d7b2bcfa482ea74349/wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {url = "https://files.pythonhosted.org/packages/f8/7d/73e4e3cdb2c780e13f9d87dc10488d7566d8fd77f8d68f0e416bfbd144c7/wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, + {url = "https://files.pythonhosted.org/packages/f8/f8/e068dafbb844c1447c55b23c921f3d338cddaba4ea53187a7dd0058452d9/wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {url = "https://files.pythonhosted.org/packages/fb/2d/b6fd53b7dbf94d542866cbf1021b9a62595177fc8405fd75e0a5bf3fa3b8/wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {url = "https://files.pythonhosted.org/packages/fb/bd/ca7fd05a45e7022f3b780a709bbdb081a6138d828ecdb5b7df113a3ad3be/wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {url = "https://files.pythonhosted.org/packages/fd/8a/db55250ad0b536901173d737781e3b5a7cc7063c46b232c2e3a82a33c032/wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {url = "https://files.pythonhosted.org/packages/ff/f6/c044dec6bec4ce64fbc92614c5238dd432780b06293d2efbcab1a349629c/wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, +] "xarray 2023.4.2" = [ {url = "https://files.pythonhosted.org/packages/8b/33/0bef802b8528e823944becc850c6ea05404e1cdcd15e4d2ad55d5d5e87fb/xarray-2023.4.2.tar.gz", hash = "sha256:958ec588220352343b910cbc05e54e7ab54d4e8c1c3a7783d6bfe7549d0bd0d2"}, {url = "https://files.pythonhosted.org/packages/d7/eb/e12adfc8a3df6d260c0f15284b736f573621f7ceef42ea47d17c0452c9d5/xarray-2023.4.2-py3-none-any.whl", hash = "sha256:1b6d577c1217ad6bf7458426af19ed7a489ab6c41220ca791f55f5df9648173a"}, diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 0ddbdbead8..2aba204787 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -46,8 +46,9 @@ dependencies = [ "SQLAlchemy-Utils==0.40.0", "bcrypt==4.0.1", "segno==1.5.2", - "osm-fieldwork==0.3.3", - "sentry-sdk==1.9.6" + "osm-fieldwork==0.3.4", + "sentry-sdk==1.9.6", + "py-cpuinfo==9.0.0" ] requires-python = ">=3.10" readme = "../../README.md" From 712581a7d0ad30f1b7d9ac63f879d2976de1af63 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 7 Aug 2023 11:15:04 +0545 Subject: [PATCH 123/222] get form full details function --- src/backend/app/central/central_crud.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/backend/app/central/central_crud.py b/src/backend/app/central/central_crud.py index 159e4035ce..6298fd2a06 100644 --- a/src/backend/app/central/central_crud.py +++ b/src/backend/app/central/central_crud.py @@ -285,6 +285,16 @@ def list_odk_xforms(project_id: int, odk_central: project_schemas.ODKCentral = N return xforms +def get_form_full_details( + odk_project_id: int, + form_id: str, + odk_central: project_schemas.ODKCentral + ): + form = get_odk_form(odk_central) + form_details = form.getFullDetails(odk_project_id, form_id) + return form_details.json() + + def list_task_submissions(odk_project_id:int, form_id: str, odk_central: project_schemas.ODKCentral = None): project = get_odk_form(odk_central) submissions = project.listSubmissions(odk_project_id, form_id) From 2265e464af16c79b9fc5061dc04c0ac9f3cacce0 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 7 Aug 2023 11:16:01 +0545 Subject: [PATCH 124/222] submission count retrieved from form details api --- src/backend/app/tasks/tasks_routes.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/backend/app/tasks/tasks_routes.py b/src/backend/app/tasks/tasks_routes.py index 4d6d75ab80..72adab8eb2 100644 --- a/src/backend/app/tasks/tasks_routes.py +++ b/src/backend/app/tasks/tasks_routes.py @@ -157,12 +157,11 @@ async def task_features_count( result = db.execute(feature_count_query) feature_count = result.fetchone() - submission_list = central_crud.list_task_submissions(project.odkid, task, odk_credentials) - + form_details = central_crud.get_form_full_details(project.odkid, task, odk_credentials) data.append({ 'task_id': task, 'feature_count': feature_count['count'], - 'submission_count': len(submission_list) if isinstance(submission_list, list) else 0 + 'submission_count': form_details['submissions'], }) return data \ No newline at end of file From 9b11adcce06907d5962c00c18edd9b6708add991 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari <41701707+nrjadkry@users.noreply.github.com> Date: Mon, 7 Aug 2023 13:51:33 +0545 Subject: [PATCH 125/222] upgrade version of osm-fieldwork to 0.3.4 (#673) --- src/backend/pdm.lock | 384 ++++++++++++++++++++++++++++++++++++- src/backend/pyproject.toml | 5 +- 2 files changed, 382 insertions(+), 7 deletions(-) diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index 72ea5680a8..1de191a5b1 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -72,6 +72,14 @@ version = "2023.5.7" requires_python = ">=3.6" summary = "Python package for providing Mozilla's CA Bundle." +[[package]] +name = "cffi" +version = "1.15.1" +summary = "Foreign Function Interface for Python calling C code." +dependencies = [ + "pycparser", +] + [[package]] name = "charset-normalizer" version = "3.1.0" @@ -127,6 +135,15 @@ dependencies = [ "numpy>=1.16", ] +[[package]] +name = "cryptography" +version = "41.0.3" +requires_python = ">=3.7" +summary = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +dependencies = [ + "cffi>=1.12", +] + [[package]] name = "cycler" version = "0.11.0" @@ -157,6 +174,15 @@ version = "0.7.1" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" summary = "XML bomb protection for Python stdlib modules" +[[package]] +name = "deprecated" +version = "1.2.14" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +summary = "Python @deprecated decorator to deprecate old python classes, functions or methods." +dependencies = [ + "wrapt<2,>=1.10", +] + [[package]] name = "epdb" version = "0.15.1" @@ -202,6 +228,11 @@ dependencies = [ "starlette>=0.12.9", ] +[[package]] +name = "flatdict" +version = "4.0.1" +summary = "Python module for interacting with nested dicts as a single level dict with delimited keys." + [[package]] name = "fonttools" version = "4.39.3" @@ -241,6 +272,24 @@ dependencies = [ "pydantic", ] +[[package]] +name = "gitdb" +version = "4.0.10" +requires_python = ">=3.7" +summary = "Git Object Database" +dependencies = [ + "smmap<6,>=3.0.1", +] + +[[package]] +name = "gitpython" +version = "3.1.32" +requires_python = ">=3.7" +summary = "GitPython is a Python library used to interact with Git repositories" +dependencies = [ + "gitdb<5,>=4.0.1", +] + [[package]] name = "greenlet" version = "2.0.2" @@ -426,6 +475,22 @@ version = "3.2.2" requires_python = ">=3.6" summary = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" +[[package]] +name = "ogr" +version = "0.45.0" +requires_python = ">=3.9" +summary = "One API for multiple git forges." +dependencies = [ + "Deprecated", + "GitPython", + "PyGithub", + "PyYAML", + "cryptography", + "python-gitlab", + "requests", + "urllib3", +] + [[package]] name = "openpyxl" version = "3.0.9" @@ -437,16 +502,18 @@ dependencies = [ [[package]] name = "osm-fieldwork" -version = "0.3.3" +version = "0.3.4" requires_python = ">=3.9" summary = "Convert CSV files from ODK Central to OSM format." dependencies = [ "PyYAML>=6.0", "codetiming>=1.4.0", "epdb>=0.15.1", + "flatdict>=4.0.1", "geodex>=0.1.2", "geojson>=2.5.0", "haversine>=2.8.0", + "ogr>=0.44.0", "overpy>=0.6", "progress>=1.6", "pymbtiles>=0.5.0", @@ -569,6 +636,17 @@ name = "pure-eval" version = "0.2.2" summary = "Safely evaluate AST nodes without side effects" +[[package]] +name = "py-cpuinfo" +version = "9.0.0" +summary = "Get CPU info with pure Python" + +[[package]] +name = "pycparser" +version = "2.21" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +summary = "C parser in Python" + [[package]] name = "pydantic" version = "1.10.2" @@ -583,17 +661,55 @@ name = "pygeotile" version = "1.0.6" summary = "Python package to handle tiles and points of different projections, in particular WGS 84 (Latitude, Longitude), Spherical Mercator (Meters), Pixel Pyramid and Tiles (TMS, Google, QuadTree)" +[[package]] +name = "pygithub" +version = "1.59.1" +requires_python = ">=3.7" +summary = "Use the full Github API v3" +dependencies = [ + "deprecated", + "pyjwt[crypto]>=2.4.0", + "pynacl>=1.4.0", + "requests>=2.14.0", +] + [[package]] name = "pygments" version = "2.15.1" requires_python = ">=3.7" summary = "Pygments is a syntax highlighting package written in Python." +[[package]] +name = "pyjwt" +version = "2.8.0" +requires_python = ">=3.7" +summary = "JSON Web Token implementation in Python" + +[[package]] +name = "pyjwt" +version = "2.8.0" +extras = ["crypto"] +requires_python = ">=3.7" +summary = "JSON Web Token implementation in Python" +dependencies = [ + "cryptography>=3.4.0", + "pyjwt==2.8.0", +] + [[package]] name = "pymbtiles" version = "0.5.0" summary = "MapBox Mbtiles Utilities" +[[package]] +name = "pynacl" +version = "1.5.0" +requires_python = ">=3.6" +summary = "Python binding to the Networking and Cryptography (NaCl) library" +dependencies = [ + "cffi>=1.4.1", +] + [[package]] name = "pyparsing" version = "3.0.9" @@ -629,6 +745,16 @@ dependencies = [ "six>=1.5", ] +[[package]] +name = "python-gitlab" +version = "3.15.0" +requires_python = ">=3.7.0" +summary = "Interact with GitLab API" +dependencies = [ + "requests-toolbelt>=0.10.1", + "requests>=2.25.0", +] + [[package]] name = "python-json-logger" version = "2.0.6" @@ -707,6 +833,15 @@ dependencies = [ "requests>=2.0.0", ] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +summary = "A utility belt for advanced users of python-requests" +dependencies = [ + "requests<3.0.0,>=2.0.1", +] + [[package]] name = "rfc3986" version = "1.5.0" @@ -752,6 +887,12 @@ version = "1.16.0" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" summary = "Python 2 and 3 compatibility utilities" +[[package]] +name = "smmap" +version = "5.0.0" +requires_python = ">=3.6" +summary = "A pure Python implementation of a sliding window memory map manager" + [[package]] name = "sniffio" version = "1.3.0" @@ -889,6 +1030,12 @@ name = "wcwidth" version = "0.2.6" summary = "Measures the displayed width of unicode strings in a terminal" +[[package]] +name = "wrapt" +version = "1.15.0" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +summary = "Module for decorators, wrappers and monkey patching." + [[package]] name = "xarray" version = "2023.4.2" @@ -922,7 +1069,7 @@ summary = "Backport of pathlib-compatible object wrapper for zip files" lock_version = "4.2" cross_platform = true groups = ["default", "dev"] -content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971a7e5f87" +content_hash = "sha256:709c4ccb101fc9c592202971146c876a0e1d4aa0654e98b3b6e4bf2ee19a878d" [metadata.files] "alembic 1.8.1" = [ @@ -984,6 +1131,72 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/93/71/752f7a4dd4c20d6b12341ed1732368546bc0ca9866139fe812f6009d9ac7/certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, {url = "https://files.pythonhosted.org/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, ] +"cffi 1.15.1" = [ + {url = "https://files.pythonhosted.org/packages/00/05/23a265a3db411b0bfb721bf7a116c7cecaf3eb37ebd48a6ea4dfb0a3244d/cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {url = "https://files.pythonhosted.org/packages/03/7b/259d6e01a6083acef9d3c8c88990c97d313632bb28fa84d6ab2bb201140a/cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {url = "https://files.pythonhosted.org/packages/0e/65/0d7b5dad821ced4dcd43f96a362905a68ce71e6b5f5cfd2fada867840582/cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {url = "https://files.pythonhosted.org/packages/0e/e2/a23af3d81838c577571da4ff01b799b0c2bbde24bd924d97e228febae810/cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {url = "https://files.pythonhosted.org/packages/10/72/617ee266192223a38b67149c830bd9376b69cf3551e1477abc72ff23ef8e/cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {url = "https://files.pythonhosted.org/packages/18/8f/5ff70c7458d61fa8a9752e5ee9c9984c601b0060aae0c619316a1e1f1ee5/cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {url = "https://files.pythonhosted.org/packages/1d/76/bcebbbab689f5f6fc8a91e361038a3001ee2e48c5f9dbad0a3b64a64cc9e/cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {url = "https://files.pythonhosted.org/packages/22/c6/df826563f55f7e9dd9a1d3617866282afa969fe0d57decffa1911f416ed8/cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {url = "https://files.pythonhosted.org/packages/23/8b/2e8c2469eaf89f7273ac685164949a7e644cdfe5daf1c036564208c3d26b/cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {url = "https://files.pythonhosted.org/packages/2b/a8/050ab4f0c3d4c1b8aaa805f70e26e84d0e27004907c5b8ecc1d31815f92a/cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {url = "https://files.pythonhosted.org/packages/2d/86/3ca57cddfa0419f6a95d1c8478f8f622ba597e3581fd501bbb915b20eb75/cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {url = "https://files.pythonhosted.org/packages/2e/7a/68c35c151e5b7a12650ecc12fdfb85211aa1da43e9924598451c4a0a3839/cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {url = "https://files.pythonhosted.org/packages/32/2a/63cb8c07d151de92ff9d897b2eb27ba6a0e78dda8e4c5f70d7b8c16cd6a2/cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {url = "https://files.pythonhosted.org/packages/32/bd/d0809593f7976828f06a492716fbcbbfb62798bbf60ea1f65200b8d49901/cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {url = "https://files.pythonhosted.org/packages/37/5a/c37631a86be838bdd84cc0259130942bf7e6e32f70f4cab95f479847fb91/cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {url = "https://files.pythonhosted.org/packages/3a/12/d6066828014b9ccb2bbb8e1d9dc28872d20669b65aeb4a86806a0757813f/cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {url = "https://files.pythonhosted.org/packages/3a/75/a162315adeaf47e94a3b7f886a8e31d77b9e525a387eef2d6f0efc96a7c8/cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {url = "https://files.pythonhosted.org/packages/3f/fa/dfc242febbff049509e5a35a065bdc10f90d8c8585361c2c66b9c2f97a01/cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {url = "https://files.pythonhosted.org/packages/43/a0/cc7370ef72b6ee586369bacd3961089ab3d94ae712febf07a244f1448ffd/cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {url = "https://files.pythonhosted.org/packages/47/51/3049834f07cd89aceef27f9c56f5394ca6725ae6a15cff5fbdb2f06a24ad/cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {url = "https://files.pythonhosted.org/packages/47/97/137f0e3d2304df2060abb872a5830af809d7559a5a4b6a295afb02728e65/cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {url = "https://files.pythonhosted.org/packages/50/34/4cc590ad600869502c9838b4824982c122179089ed6791a8b1c95f0ff55e/cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {url = "https://files.pythonhosted.org/packages/5b/1a/e1ee5bed11d8b6540c05a8e3c32448832d775364d4461dd6497374533401/cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {url = "https://files.pythonhosted.org/packages/5d/4e/4e0bb5579b01fdbfd4388bd1eb9394a989e1336203a4b7f700d887b233c1/cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {url = "https://files.pythonhosted.org/packages/5d/6f/3a2e167113eabd46ed300ff3a6a1e9277a3ad8b020c4c682f83e9326fcf7/cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {url = "https://files.pythonhosted.org/packages/69/bf/335f8d95510b1a26d7c5220164dc739293a71d5540ecd54a2f66bac3ecb8/cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {url = "https://files.pythonhosted.org/packages/71/d7/0fe0d91b0bbf610fb7254bb164fa8931596e660d62e90fb6289b7ee27b09/cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {url = "https://files.pythonhosted.org/packages/77/b7/d3618d612be01e184033eab90006f8ca5b5edafd17bf247439ea4e167d8a/cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {url = "https://files.pythonhosted.org/packages/79/4b/33494eb0adbcd884656c48f6db0c98ad8a5c678fb8fb5ed41ab546b04d8c/cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {url = "https://files.pythonhosted.org/packages/7c/3e/5d823e5bbe00285e479034bcad44177b7353ec9fdcd7795baac5ccf82950/cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {url = "https://files.pythonhosted.org/packages/85/1f/a3c533f8d377da5ca7edb4f580cc3edc1edbebc45fac8bb3ae60f1176629/cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {url = "https://files.pythonhosted.org/packages/87/4b/64e8bd9d15d6b22b6cb11997094fbe61edf453ea0a97c8675cb7d1c3f06f/cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {url = "https://files.pythonhosted.org/packages/87/ee/ddc23981fc0f5e7b5356e98884226bcb899f95ebaefc3e8e8b8742dd7e22/cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {url = "https://files.pythonhosted.org/packages/88/89/c34caf63029fb7628ec2ebd5c88ae0c9bd17db98c812e4065a4d020ca41f/cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {url = "https://files.pythonhosted.org/packages/91/bc/b7723c2fe7a22eee71d7edf2102cd43423d5f95ff3932ebaa2f82c7ec8d0/cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {url = "https://files.pythonhosted.org/packages/93/d0/2e2b27ea2f69b0ec9e481647822f8f77f5fc23faca2dd00d1ff009940eb7/cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {url = "https://files.pythonhosted.org/packages/9f/52/1e2b43cfdd7d9a39f48bc89fcaee8d8685b1295e205a4f1044909ac14d89/cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {url = "https://files.pythonhosted.org/packages/a4/42/54bdf22cf6c8f95113af645d0bd7be7f9358ea5c2d57d634bb11c6b4d0b2/cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {url = "https://files.pythonhosted.org/packages/a8/16/06b84a7063a4c0a2b081030fdd976022086da9c14e80a9ed4ba0183a98a9/cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {url = "https://files.pythonhosted.org/packages/a9/ba/e082df21ebaa9cb29f2c4e1d7e49a29b90fcd667d43632c6674a16d65382/cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {url = "https://files.pythonhosted.org/packages/aa/02/ab15b3aa572759df752491d5fa0f74128cd14e002e8e3257c1ab1587810b/cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {url = "https://files.pythonhosted.org/packages/ad/26/7b3a73ab7d82a64664c7c4ea470e4ec4a3c73bb4f02575c543a41e272de5/cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {url = "https://files.pythonhosted.org/packages/af/cb/53b7bba75a18372d57113ba934b27d0734206c283c1dfcc172347fbd9f76/cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {url = "https://files.pythonhosted.org/packages/af/da/9441d56d7dd19d07dcc40a2a5031a1f51c82a27cee3705edf53dadcac398/cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {url = "https://files.pythonhosted.org/packages/b3/b8/89509b6357ded0cbacc4e430b21a4ea2c82c2cdeb4391c148b7c7b213bed/cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {url = "https://files.pythonhosted.org/packages/b5/7d/df6c088ef30e78a78b0c9cca6b904d5abb698afb5bc8f5191d529d83d667/cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {url = "https://files.pythonhosted.org/packages/b5/80/ce5ba093c2475a73df530f643a61e2969a53366e372b24a32f08cd10172b/cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {url = "https://files.pythonhosted.org/packages/b7/8b/06f30caa03b5b3ac006de4f93478dbd0239e2a16566d81a106c322dc4f79/cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {url = "https://files.pythonhosted.org/packages/b9/4a/dde4d093a3084d0b0eadfb2703f71e31a5ced101a42c839ac5bbbd1710f2/cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {url = "https://files.pythonhosted.org/packages/c1/25/16a082701378170559bb1d0e9ef2d293cece8dc62913d79351beb34c5ddf/cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {url = "https://files.pythonhosted.org/packages/c2/0b/3b09a755ddb977c167e6d209a7536f6ade43bb0654bad42e08df1406b8e4/cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {url = "https://files.pythonhosted.org/packages/c5/ff/3f9d73d480567a609e98beb0c64359f8e4f31cb6a407685da73e5347b067/cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {url = "https://files.pythonhosted.org/packages/c6/3d/dd085bb831b22ce4d0b7ba8550e6d78960f02f770bbd1314fea3580727f8/cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {url = "https://files.pythonhosted.org/packages/c9/e3/0a52838832408cfbbf3a59cb19bcd17e64eb33795c9710ca7d29ae10b5b7/cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {url = "https://files.pythonhosted.org/packages/d3/56/3e94aa719ae96eeda8b68b3ec6e347e0a23168c6841dc276ccdcdadc9f32/cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {url = "https://files.pythonhosted.org/packages/d3/e1/e55ca2e0dd446caa2cc8f73c2b98879c04a1f4064ac529e1836683ca58b8/cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {url = "https://files.pythonhosted.org/packages/da/ff/ab939e2c7b3f40d851c0f7192c876f1910f3442080c9c846532993ec3cef/cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {url = "https://files.pythonhosted.org/packages/df/02/aef53d4aa43154b829e9707c8c60bab413cd21819c4a36b0d7aaa83e2a61/cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {url = "https://files.pythonhosted.org/packages/e8/ff/c4b7a358526f231efa46a375c959506c87622fb4a2c5726e827c55e6adf2/cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {url = "https://files.pythonhosted.org/packages/ea/be/c4ad40ad441ac847b67c7a37284ae3c58f39f3e638c6b0f85fb662233825/cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {url = "https://files.pythonhosted.org/packages/ed/a3/c5f01988ddb70a187c3e6112152e01696188c9f8a4fa4c68aa330adbb179/cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {url = "https://files.pythonhosted.org/packages/ef/41/19da352d341963d29a33bdb28433ba94c05672fb16155f794fad3fd907b0/cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {url = "https://files.pythonhosted.org/packages/f9/96/fc9e118c47b7adc45a0676f413b4a47554e5f3b6c99b8607ec9726466ef1/cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {url = "https://files.pythonhosted.org/packages/ff/fe/ac46ca7b00e9e4f9c62e7928a11bc9227c86e2ff43526beee00cdfb4f0e8/cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, +] "charset-normalizer 3.1.0" = [ {url = "https://files.pythonhosted.org/packages/00/47/f14533da238134f5067fb1d951eb03d5c4be895d6afb11c7ebd07d111acb/charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, {url = "https://files.pythonhosted.org/packages/01/c7/0407de35b70525dba2a58a2724a525cf882ee76c3d2171d834463c5d2881/charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, @@ -1134,6 +1347,31 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/f9/ca/e9208ba62f5c14d950273d2d4da75aa9f3879809d6813b058514fc5dcccb/contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, {url = "https://files.pythonhosted.org/packages/fa/56/ab73a8bab463df907ac2c2249bfee428900e2b88e28ccf5ab059c106e07c/contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, ] +"cryptography 41.0.3" = [ + {url = "https://files.pythonhosted.org/packages/00/d7/51516ad1da024d331ed2f4f0f8836ec8373e4a6b3e3ac190753f1cd6fffe/cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, + {url = "https://files.pythonhosted.org/packages/0e/c2/6b4463782ad828f89f45fd073adfaaca67eb71249488deeda00ae475f002/cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"}, + {url = "https://files.pythonhosted.org/packages/10/47/c6bc7aa374e74af9694eae95d4fecea2777ef4c309f5c4b404c7262a87d1/cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"}, + {url = "https://files.pythonhosted.org/packages/21/74/a7ebb5bcf733b1626e4778941e505792d7f655e799ff3bdbd9a176516ee2/cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"}, + {url = "https://files.pythonhosted.org/packages/30/56/5f4eee57ccd577c261b516bfcbe17492838e2bc4e2e92ea93bbb57666fbd/cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"}, + {url = "https://files.pythonhosted.org/packages/46/74/f9eba8c947f57991b5dd5e45797fdc68cc70e444c32e6b952b512d42aba5/cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"}, + {url = "https://files.pythonhosted.org/packages/5c/83/50d61ceaf324d73dd2e41c38c7a9d0e522be4a31fca2a0fa70f39b2e4c50/cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"}, + {url = "https://files.pythonhosted.org/packages/6c/02/2f4f33c5284ddee77efe89248a059dba27bead01a812a76729d51b0bcb3d/cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"}, + {url = "https://files.pythonhosted.org/packages/79/18/5495f896421da0f5ae58f6cfaf6866269aa9b240206175fcefe1467a0d6b/cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"}, + {url = "https://files.pythonhosted.org/packages/7d/43/587996ab411ca9cc7b75927856783f1791390d57ab7dc5f2c24df61e3f9a/cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"}, + {url = "https://files.pythonhosted.org/packages/8e/5d/2bf54672898375d081cb24b30baeb7793568ae5d958ef781349e9635d1c8/cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"}, + {url = "https://files.pythonhosted.org/packages/91/68/5c33bb0115b3413a974dd4d23625b99ed22522582b513f82e93ce00f954c/cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"}, + {url = "https://files.pythonhosted.org/packages/9a/90/4c779507b50c9adf3f11f973f22d80a83097100cf9e1766b21ec4cd0bba2/cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"}, + {url = "https://files.pythonhosted.org/packages/9e/ac/e26bd0f1c96444c3332fcc32ecbdcfccc0356b8f0cc4db9047ddccb4d7c1/cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"}, + {url = "https://files.pythonhosted.org/packages/a2/e6/2331e5bde68343b820a9e5d937b2e22a0f81ba68e87b74dbbdd98944da4e/cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"}, + {url = "https://files.pythonhosted.org/packages/ac/1b/0768c89d513bdefecc1f5ebb12df87e810d8a043c35c37a8cc7f3bef28c6/cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"}, + {url = "https://files.pythonhosted.org/packages/b7/d9/b3500bc80cc1ce775c987689c1bd2d9f75513df7ab78bdec0c6bad368ae5/cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"}, + {url = "https://files.pythonhosted.org/packages/cc/65/65e6719b0038e2fece9311d39372f1f4293c32e8951edff78db857d62fc3/cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"}, + {url = "https://files.pythonhosted.org/packages/d2/36/6fa85e93c92888e6e0afa233adbf22a0747ed3448032c5a92326dbb6faec/cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"}, + {url = "https://files.pythonhosted.org/packages/ef/a4/5131f125a7c413b89c01cff9712c6405a4ac46909deba67d74209a45d973/cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"}, + {url = "https://files.pythonhosted.org/packages/f6/09/b20b8c54f53fdd10c6971ce2eab32aecbabc2a7ab7621839653460f988fc/cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"}, + {url = "https://files.pythonhosted.org/packages/f6/c3/3eff8181cd23aa5b33ead7c5086fbc9dee3f794fe782274ef1c61b16d613/cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"}, + {url = "https://files.pythonhosted.org/packages/ff/62/4b7f7d0e8c69ee9dc79238362af05df77ee7020123d922847665937e42d2/cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"}, +] "cycler 0.11.0" = [ {url = "https://files.pythonhosted.org/packages/34/45/a7caaacbfc2fa60bee42effc4bcc7d7c6dbe9c349500e04f65a861c15eb9/cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, {url = "https://files.pythonhosted.org/packages/5c/f9/695d6bedebd747e5eb0fe8fad57b72fdf25411273a39791cde838d5a8f51/cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, @@ -1169,6 +1407,10 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] +"deprecated 1.2.14" = [ + {url = "https://files.pythonhosted.org/packages/20/8d/778b7d51b981a96554f29136cd59ca7880bf58094338085bcf2a979a0e6a/Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, + {url = "https://files.pythonhosted.org/packages/92/14/1e41f504a246fc224d2ac264c227975427a85caf37c3979979edb9b1b232/Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, +] "epdb 0.15.1" = [ {url = "https://files.pythonhosted.org/packages/60/d3/e74d7f5f6476b6392f596750b533ff3b3897dd2ef361521661e061ce7766/epdb-0.15.1.tar.gz", hash = "sha256:f59e9d54866faad6fcbd8fcfc634b85e8fde2b045b13d10f2f8d083f6cbd2668"}, {url = "https://files.pythonhosted.org/packages/b2/94/27737a2a97422d2bfb70982f06b5b3fdab66b8221a978b752ce938092a50/epdb-0.15.1-py2-none-any.whl", hash = "sha256:749c7bc9c23e01f1e5238684178b7d61c323647e063ec7f3603678552856e559"}, @@ -1194,6 +1436,9 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/0f/8d/eb73397313152277934e6d9891786affe12704ddfb5a1ae1e9a869c98c53/FastAPI_SQLAlchemy-0.2.1-py3-none-any.whl", hash = "sha256:d3bfc6d9388a73a2c3726bc6bd7764cd82debfa71c16e3991c544b9701f48d96"}, {url = "https://files.pythonhosted.org/packages/d5/1d/c08c99b2be52d822323840a7acc8f17df5bc3963e5e3431b4cedc0838b2f/FastAPI-SQLAlchemy-0.2.1.tar.gz", hash = "sha256:7a9d44e46cbc73c3f5ee8c444f7e0bcd3d01370a878740abd4cd4d2e900ce9af"}, ] +"flatdict 4.0.1" = [ + {url = "https://files.pythonhosted.org/packages/3e/0d/424de6e5612f1399ff69bf86500d6a62ff0a4843979701ae97f120c7f1fe/flatdict-4.0.1.tar.gz", hash = "sha256:cd32f08fd31ed21eb09ebc76f06b6bd12046a24f77beb1fd0281917e47f26742"}, +] "fonttools 4.39.3" = [ {url = "https://files.pythonhosted.org/packages/16/07/1c7547e27f559ec078801d522cc4d5127cdd4ef8e831c8ddcd9584668a07/fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"}, {url = "https://files.pythonhosted.org/packages/39/d7/ab05ae34dd57dd657e492d95ce7ec6bfebfb3bfcdc7316660ac5a13fcfee/fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"}, @@ -1214,6 +1459,14 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/66/ca/a94596d9a658ba6d78e9e28212cad4b0ef5aa1d01cf77b978e218c1ae2f4/geojson-pydantic-0.4.3.tar.gz", hash = "sha256:34c9e43509012ef6ad7b0f600aa856da23fb13edbf55964dcca4a00a267385e0"}, {url = "https://files.pythonhosted.org/packages/d4/19/9f58c73ea99c438e1bb00c25a1e215933667301819440eee5f803a7bb9dd/geojson_pydantic-0.4.3-py3-none-any.whl", hash = "sha256:716cff5bbb2d3abafb7f45f40b22cb74858a4e282126c7a5871fbee3b888924f"}, ] +"gitdb 4.0.10" = [ + {url = "https://files.pythonhosted.org/packages/21/a6/35f83efec687615c711fe0a09b67e58f6d1254db27b1013119de46f450bd/gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, + {url = "https://files.pythonhosted.org/packages/4b/47/dc98f3d5d48aa815770e31490893b92c5f1cd6c6cf28dd3a8ae0efffac14/gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, +] +"gitpython 3.1.32" = [ + {url = "https://files.pythonhosted.org/packages/67/50/742c2fb60989b76ccf7302c7b1d9e26505d7054c24f08cc7ec187faaaea7/GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, + {url = "https://files.pythonhosted.org/packages/87/56/6dcdfde2f3a747988d1693100224fb88fc1d3bbcb3f18377b2a3ef53a70a/GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, +] "greenlet 2.0.2" = [ {url = "https://files.pythonhosted.org/packages/07/ef/6bfa2ea34f76dea02833d66d28ae7cf4729ddab74ee93ee069c7f1d47c4f/greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, {url = "https://files.pythonhosted.org/packages/08/b1/0615df6393464d6819040124eb7bdff6b682f206a464b4537964819dcab4/greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, @@ -1610,13 +1863,17 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/6d/fa/fbf4001037904031639e6bfbfc02badfc7e12f137a8afa254df6c4c8a670/oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, {url = "https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, ] +"ogr 0.45.0" = [ + {url = "https://files.pythonhosted.org/packages/04/76/6613f90360bf862a0c26ce55c3eec8953df084e1153983298a2bc15fa62c/ogr-0.45.0-py2.py3-none-any.whl", hash = "sha256:fd63698041ae07e1569a16f1628d3c7a6a446b917ea2804af3a79780085fb447"}, + {url = "https://files.pythonhosted.org/packages/ad/70/dc6cb4610dd60aeb91fd1df411759373a7111b1b053798cff08accf2ea47/ogr-0.45.0.tar.gz", hash = "sha256:dea49f664a9b9197f9af7404f105dea53f33ab8395d595e4c0a42de6fbcc076e"}, +] "openpyxl 3.0.9" = [ {url = "https://files.pythonhosted.org/packages/1c/a6/8ce4d2ef2c29be3235c08bb00e0b81e29d38ebc47d82b17af681bf662b74/openpyxl-3.0.9-py2.py3-none-any.whl", hash = "sha256:8f3b11bd896a95468a4ab162fc4fcd260d46157155d1f8bfaabb99d88cfcf79f"}, {url = "https://files.pythonhosted.org/packages/9e/19/c45fb7a40cd46e03e36d60d1db26a50a795fa0b6b8a2a8094f4ac0c71ae5/openpyxl-3.0.9.tar.gz", hash = "sha256:40f568b9829bf9e446acfffce30250ac1fa39035124d55fc024025c41481c90f"}, ] -"osm-fieldwork 0.3.3" = [ - {url = "https://files.pythonhosted.org/packages/26/46/9d1af7f4216d3581de8367ecf792932fb333b69746b80d9dc364d11bb29f/osm-fieldwork-0.3.3.tar.gz", hash = "sha256:2519f345445fe75a6943c303b258351b6358e900a940e4a80414b3652b0a4e99"}, - {url = "https://files.pythonhosted.org/packages/d1/72/8b5f0b80e17fa02e61fe3979c7986331c85d19cab227e3e8f295b0feaa30/osm_fieldwork-0.3.3-py3-none-any.whl", hash = "sha256:67b9ff2bd01f602971be2e98fc5407db0d483fc21d5f456147c29516a43e1a9e"}, +"osm-fieldwork 0.3.4" = [ + {url = "https://files.pythonhosted.org/packages/61/80/82ec3082520d277f27764ee7bafbc66c8ebf7ae7f2a9a217e5b03f0a6290/osm_fieldwork-0.3.4-py3-none-any.whl", hash = "sha256:70e2fee90987424f376ced55d694dc9b1472ffdda93efbe5ef68f0c09df59934"}, + {url = "https://files.pythonhosted.org/packages/a5/b1/35c9e1f24b62e84c5acfab0e75d9c5b2f850dfd7178d8d1dfc5bddcf8a22/osm-fieldwork-0.3.4.tar.gz", hash = "sha256:0054b2a58f3c551789c5c2a37c13a9fe5fcdf209f61bba1272a4a3cebf97b34c"}, ] "osm-login-python 0.0.4" = [ {url = "https://files.pythonhosted.org/packages/d1/81/9c36618b20b570ddcf6fd7770a528a5d93f5b1f853d7ef81e536fdd39f76/osm-login-python-0.0.4.tar.gz", hash = "sha256:f10c9bc91978aebb38c5083502d42d78463b617d4a9a05d9a8bdc44550de32b8"}, @@ -1770,6 +2027,14 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/2b/27/77f9d5684e6bce929f5cfe18d6cfbe5133013c06cb2fbf5933670e60761d/pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, {url = "https://files.pythonhosted.org/packages/97/5a/0bc937c25d3ce4e0a74335222aee05455d6afa2888032185f8ab50cdf6fd/pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, ] +"py-cpuinfo 9.0.0" = [ + {url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"}, + {url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"}, +] +"pycparser 2.21" = [ + {url = "https://files.pythonhosted.org/packages/5e/0b/95d387f5f4433cb0f53ff7ad859bd2c6051051cebbb564f139a999ab46de/pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {url = "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, +] "pydantic 1.10.2" = [ {url = "https://files.pythonhosted.org/packages/13/e3/5b83cba317390c9125e049a5328b8e19475098362d398a65936aaab3f00f/pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, {url = "https://files.pythonhosted.org/packages/22/53/196c9a5752e30d682e493d7c00ea0a02377446578e577ae5e085010dc0bd/pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, @@ -1811,14 +2076,34 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 "pygeotile 1.0.6" = [ {url = "https://files.pythonhosted.org/packages/cf/43/4efe7a429e75b946dace4493e012990d135ac1b063d4e8fa710f04a6f191/pyGeoTile-1.0.6.tar.gz", hash = "sha256:64b1cfac77a392e81e2220412872cd0fb4988c25e136f8aed7c03ced59134ff9"}, ] +"pygithub 1.59.1" = [ + {url = "https://files.pythonhosted.org/packages/2c/71/aff5465d9e3d448a5d4beab1dc7c8dec72037e3ae7e0d856ee08538dc934/PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, + {url = "https://files.pythonhosted.org/packages/fb/30/203d3420960853e399de3b85d6613cea1cf17c1cf7fc9716f7ee7e17e0fc/PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, +] "pygments 2.15.1" = [ {url = "https://files.pythonhosted.org/packages/34/a7/37c8d68532ba71549db4212cb036dbd6161b40e463aba336770e80c72f84/Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, {url = "https://files.pythonhosted.org/packages/89/6b/2114e54b290824197006e41be3f9bbe1a26e9c39d1f5fa20a6d62945a0b3/Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, ] +"pyjwt 2.8.0" = [ + {url = "https://files.pythonhosted.org/packages/2b/4f/e04a8067c7c96c364cef7ef73906504e2f40d690811c021e1a1901473a19/PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, + {url = "https://files.pythonhosted.org/packages/30/72/8259b2bccfe4673330cea843ab23f86858a419d8f1493f66d413a76c7e3b/PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, +] "pymbtiles 0.5.0" = [ {url = "https://files.pythonhosted.org/packages/75/ff/9ae83bb0cf6c504d675b917eae3ad9e9f919fda3fea51de9f737ac0ccf27/pymbtiles-0.5.0.tar.gz", hash = "sha256:b4eb2c470d2eb3d94627cdc8a8ae448b8899af2dd696f9a5eca706ddf8293b58"}, {url = "https://files.pythonhosted.org/packages/82/ba/a05974655e73d7937b8e5438bf7ca5dba0b7d84dc67e98fb40c81dc92fca/pymbtiles-0.5.0-py3-none-any.whl", hash = "sha256:91c1c2fa3e25f581d563a60e705105f7277b0dbb9ff727c8c28cb66f0f891c84"}, ] +"pynacl 1.5.0" = [ + {url = "https://files.pythonhosted.org/packages/25/2d/b7df6ddb0c2a33afdb358f8af6ea3b8c4d1196ca45497dd37a56f0c122be/PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, + {url = "https://files.pythonhosted.org/packages/3d/85/c262db650e86812585e2bc59e497a8f59948a005325a11bbbc9ecd3fe26b/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, + {url = "https://files.pythonhosted.org/packages/59/bb/fddf10acd09637327a97ef89d2a9d621328850a72f1fdc8c08bdf72e385f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, + {url = "https://files.pythonhosted.org/packages/5d/70/87a065c37cca41a75f2ce113a5a2c2aa7533be648b184ade58971b5f7ccc/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, + {url = "https://files.pythonhosted.org/packages/5e/22/d3db169895faaf3e2eda892f005f433a62db2decbcfbc2f61e6517adfa87/PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, + {url = "https://files.pythonhosted.org/packages/66/28/ca86676b69bf9f90e710571b67450508484388bfce09acf8a46f0b8c785f/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, + {url = "https://files.pythonhosted.org/packages/a7/22/27582568be639dfe22ddb3902225f91f2f17ceff88ce80e4db396c8986da/PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, + {url = "https://files.pythonhosted.org/packages/ce/75/0b8ede18506041c0bf23ac4d8e2971b4161cd6ce630b177d0a08eb0d8857/PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, + {url = "https://files.pythonhosted.org/packages/ee/87/f1bb6a595f14a327e8285b9eb54d41fef76c585a0edef0a45f6fc95de125/PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, + {url = "https://files.pythonhosted.org/packages/fd/1a/cc308a884bd299b651f1633acb978e8596c71c33ca85e9dc9fa33a5399b9/PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, +] "pyparsing 3.0.9" = [ {url = "https://files.pythonhosted.org/packages/6c/10/a7d0fa5baea8fe7b50f448ab742f26f52b80bfca85ac2be9d35cdd9a3246/pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {url = "https://files.pythonhosted.org/packages/71/22/207523d16464c40a0310d2d4d8926daffa00ac1f5b1576170a32db749636/pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, @@ -1835,6 +2120,10 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, {url = "https://files.pythonhosted.org/packages/4c/c4/13b4776ea2d76c115c1d1b84579f3764ee6d57204f6be27119f13a61d0a9/python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, ] +"python-gitlab 3.15.0" = [ + {url = "https://files.pythonhosted.org/packages/22/53/248b87282df591d74ba3d38c3c3ced2b5087248c0ccfb6b3a947bb1034c3/python-gitlab-3.15.0.tar.gz", hash = "sha256:c9e65eb7612a9fbb8abf0339972eca7fd7a73d4da66c9b446ffe528930aff534"}, + {url = "https://files.pythonhosted.org/packages/38/51/3c7dd08272658e5490d0c0b6c94af15bd0c0649e7ad23c9ed0db1d276143/python_gitlab-3.15.0-py3-none-any.whl", hash = "sha256:8f8d1c0d387f642eb1ac7bf5e8e0cd8b3dd49c6f34170cee3c7deb7d384611f3"}, +] "python-json-logger 2.0.6" = [ {url = "https://files.pythonhosted.org/packages/23/8a/b211a13ce19b3f571fe04cb654b806dc9c7405625647cb8f0c0cbb208f6f/python-json-logger-2.0.6.tar.gz", hash = "sha256:ed33182c2b438a366775c25c1219ebbd5bd7f71694c644d6b3b3861e19565ae3"}, {url = "https://files.pythonhosted.org/packages/79/4b/5f2f886c6e140b16054eb52dcd43743c1ee5a253a3fe7b6e4a66b1d4e53a/python_json_logger-2.0.6-py3-none-any.whl", hash = "sha256:3af8e5b907b4a5b53cae249205ee3a3d3472bd7ad9ddfaec136eec2f2faf4995"}, @@ -1908,6 +2197,10 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/6f/bb/5deac77a9af870143c684ab46a7934038a53eb4aa975bc0687ed6ca2c610/requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, {url = "https://files.pythonhosted.org/packages/95/52/531ef197b426646f26b53815a7d2a67cb7a331ef098bb276db26a68ac49f/requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, ] +"requests-toolbelt 1.0.0" = [ + {url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, + {url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, +] "rfc3986 1.5.0" = [ {url = "https://files.pythonhosted.org/packages/79/30/5b1b6c28c105629cc12b33bdcbb0b11b5bb1880c6cfbd955f9e792921aa8/rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, {url = "https://files.pythonhosted.org/packages/c4/e5/63ca2c4edf4e00657584608bee1001302bbf8c5f569340b78304f2f446cb/rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, @@ -1964,6 +2257,10 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, {url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, ] +"smmap 5.0.0" = [ + {url = "https://files.pythonhosted.org/packages/21/2d/39c6c57032f786f1965022563eec60623bb3e1409ade6ad834ff703724f3/smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, + {url = "https://files.pythonhosted.org/packages/6d/01/7caa71608bc29952ae09b0be63a539e50d2484bc37747797a66a60679856/smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, +] "sniffio 1.3.0" = [ {url = "https://files.pythonhosted.org/packages/c3/a0/5dba8ed157b0136607c7f2151db695885606968d1fae123dc3391e0cfdbf/sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, {url = "https://files.pythonhosted.org/packages/cd/50/d49c388cae4ec10e8109b1b833fd265511840706808576df3ada99ecb0ac/sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, @@ -2142,6 +2439,83 @@ content_hash = "sha256:361beeffa55b89eafab763a9ed51bfda7282dfea0daff98f89c090971 {url = "https://files.pythonhosted.org/packages/20/f4/c0584a25144ce20bfcf1aecd041768b8c762c1eb0aa77502a3f0baa83f11/wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, {url = "https://files.pythonhosted.org/packages/5e/5f/1e4bd82a9cc1f17b2c2361a2d876d4c38973a997003ba5eb400e8a932b6c/wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, ] +"wrapt 1.15.0" = [ + {url = "https://files.pythonhosted.org/packages/0c/6e/f80c23efc625c10460240e31dcb18dd2b34b8df417bc98521fbfd5bc2e9a/wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {url = "https://files.pythonhosted.org/packages/0f/9a/179018bb3f20071f39597cd38fc65d6285d7b89d57f6c51f502048ed28d9/wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {url = "https://files.pythonhosted.org/packages/12/5a/fae60a8bc9b07a3a156989b79e14c58af05ab18375749ee7c12b2f0dddbd/wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {url = "https://files.pythonhosted.org/packages/18/f6/659d7c431a57da9c9a86945834ab2bf512f1d9ebefacea49135a0135ef1a/wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {url = "https://files.pythonhosted.org/packages/1e/3c/cb96dbcafbf3a27413fb15e0a1997c4610283f895dc01aca955cd2fda8b9/wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {url = "https://files.pythonhosted.org/packages/20/01/baec2650208284603961d61f53ee6ae8e3eff63489c7230dff899376a6f6/wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {url = "https://files.pythonhosted.org/packages/21/42/36c98e9c024978f52c218f22eba1addd199a356ab16548af143d3a72ac0d/wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {url = "https://files.pythonhosted.org/packages/23/0a/9964d7141b8c5e31c32425d3412662a7873aaf0c0964166f4b37b7db51b6/wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {url = "https://files.pythonhosted.org/packages/29/41/f05bf85417473cf6fe4eec7396c63762e5a457a42102bd1b8af059af6586/wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {url = "https://files.pythonhosted.org/packages/2b/fb/c31489631bb94ac225677c1090f787a4ae367614b5277f13dbfde24b2b69/wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {url = "https://files.pythonhosted.org/packages/2d/47/16303c59a890696e1a6fd82ba055fc4e0f793fb4815b5003f1f85f7202ce/wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {url = "https://files.pythonhosted.org/packages/2e/ce/90dcde9ff9238689f111f07b46da2db570252445a781ea147ff668f651b0/wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {url = "https://files.pythonhosted.org/packages/31/e6/6ac59c5570a7b9aaecb10de39f70dacd0290620330277e60b29edcf8bc9a/wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {url = "https://files.pythonhosted.org/packages/39/ee/2b8d608f2bcf86242daadf5b0b746c11d3657b09892345f10f171b5ca3ac/wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {url = "https://files.pythonhosted.org/packages/44/a1/40379212a0b678f995fdb4f4f28aeae5724f3212cdfbf97bee8e6fba3f1b/wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {url = "https://files.pythonhosted.org/packages/45/90/a959fa50084d7acc2e628f093c9c2679dd25085aa5085a22592e028b3e06/wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {url = "https://files.pythonhosted.org/packages/47/dd/bee4d33058656c0b2e045530224fcddd9492c354af5d20499e5261148dcb/wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {url = "https://files.pythonhosted.org/packages/48/65/0061e7432ca4b635e96e60e27e03a60ddaca3aeccc30e7415fed0325c3c2/wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {url = "https://files.pythonhosted.org/packages/4a/7b/c63103817bd2f3b0145608ef642ce90d8b6d1e5780d218bce92e93045e06/wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {url = "https://files.pythonhosted.org/packages/50/eb/af864a01300878f69b4949f8381ad57d5519c1791307e9fd0bc7f5ab50a5/wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {url = "https://files.pythonhosted.org/packages/54/21/282abeb456f22d93533b2d373eeb393298a30b0cb0683fa8a4ed77654273/wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {url = "https://files.pythonhosted.org/packages/55/20/90f5affc2c879db408124ce14b9443b504f961e47a517dff4f24a00df439/wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {url = "https://files.pythonhosted.org/packages/5d/c4/3cc25541ec0404dd1d178e7697a34814d77be1e489cd6f8cb055ac688314/wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {url = "https://files.pythonhosted.org/packages/65/be/3ae5afe9d78d97595b28914fa7e375ebc6329549d98f02768d5a08f34937/wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {url = "https://files.pythonhosted.org/packages/6b/b0/bde5400fdf6d18cb7ef527831de0f86ac206c4da1670b67633e5a547b05f/wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {url = "https://files.pythonhosted.org/packages/78/f2/106d90140a93690eab240fae76759d62dae639fcec1bd098eccdb83aa38f/wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {url = "https://files.pythonhosted.org/packages/7f/b6/6dc0ddacd20337b4ce6ab0d6b0edc7da3898f85c4f97df7f30267e57509e/wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {url = "https://files.pythonhosted.org/packages/81/1e/0bb8f01c6ac5baba66ef1ab65f4644bede856c3c7aede18c896be222151c/wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {url = "https://files.pythonhosted.org/packages/88/f1/4dfaa1ad111d2a48429dca133e46249922ee2f279e9fdd4ab5b149cd6c71/wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {url = "https://files.pythonhosted.org/packages/8a/1c/740c3ad1b7754dd7213f4df09ccdaf6b19e36da5ff3a269444ba9e103f1b/wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {url = "https://files.pythonhosted.org/packages/8f/87/ba6dc86e8edb28fd1e314446301802751bd3157e9780385c9eef633994b9/wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {url = "https://files.pythonhosted.org/packages/94/55/91dd3a7efbc1db2b07bbfc490d48e8484852c355d55e61e8b1565d7725f6/wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {url = "https://files.pythonhosted.org/packages/96/37/a33c1220e8a298ab18eb070b6a59e4ccc3f7344b434a7ac4bd5d4bdccc97/wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {url = "https://files.pythonhosted.org/packages/9b/50/383c155a05e3e0361d209e3f55ec823f3736c7a46b29923ea33ab85e8d70/wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {url = "https://files.pythonhosted.org/packages/9d/40/fee1288d654c80fe1bc5ecee1c8d58f761a39bb30c73f1ce106701dd8b0a/wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {url = "https://files.pythonhosted.org/packages/a2/3e/ee671ac60945154dfa3a406b8cb5cef2e3b4fa31c7d04edeb92716342026/wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {url = "https://files.pythonhosted.org/packages/a4/af/8552671e4e7674fcae14bd3976dd9dc6a2b7294730e4a9a94597ac292a21/wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {url = "https://files.pythonhosted.org/packages/a6/32/f4868adc994648fac4cfe347bcc1381c9afcb1602c8ba0910f36b96c5449/wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {url = "https://files.pythonhosted.org/packages/a7/da/04883b14284c437eac98c7ad2959197f02acbabd57d5ea8ff4893a7c3920/wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {url = "https://files.pythonhosted.org/packages/a9/64/886e512f438f12424b48a3ab23ae2583ec633be6e13eb97b0ccdff8e328a/wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {url = "https://files.pythonhosted.org/packages/aa/24/bbd64ee4e1db9c75ec2a9677c538866f81800bcd2a8abd1a383369369cf5/wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {url = "https://files.pythonhosted.org/packages/af/23/cf5dbfd676480fa8fc6eecc4c413183cd8e14369321c5111fec5c12550e9/wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {url = "https://files.pythonhosted.org/packages/af/7f/25913aacbe0c2c68e7354222bdefe4e840489725eb835e311c581396f91f/wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {url = "https://files.pythonhosted.org/packages/b1/8b/f4c02cf1f841dede987f93c37d42256dc4a82cd07173ad8a5458eee1c412/wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {url = "https://files.pythonhosted.org/packages/b2/b0/a56b129822568d9946e009e8efd53439b9dd38cc1c4af085aa44b2485b40/wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {url = "https://files.pythonhosted.org/packages/b6/0c/435198dbe6961c2343ca725be26b99c8aee615e32c45bc1cb2a960b06183/wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {url = "https://files.pythonhosted.org/packages/b7/3d/9d3cd75f7fc283b6e627c9b0e904189c41ca144185fd8113a1a094dec8ca/wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {url = "https://files.pythonhosted.org/packages/b9/40/975fbb1ab03fa987900bacc365645c4cbead22baddd273b4f5db7f9843d2/wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {url = "https://files.pythonhosted.org/packages/bd/47/57ffe222af59fae1eb56bca7d458b704a9b59380c47f0921efb94dc4786a/wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {url = "https://files.pythonhosted.org/packages/c3/12/5fabf0014a0f30eb3975b7199ac2731215a40bc8273083f6a89bd6cadec6/wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {url = "https://files.pythonhosted.org/packages/c4/e3/01f879f8e7c1221c72dbd4bfa106624ee3d01cb8cbc82ef57fbb95880cac/wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {url = "https://files.pythonhosted.org/packages/c7/cd/18d95465323f29e3f3fd3ff84f7acb402a6a61e6caf994dced7140d78f85/wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {url = "https://files.pythonhosted.org/packages/ca/1c/5caf61431705b3076ca1152abfd6da6304697d7d4fe48bb3448a6decab40/wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {url = "https://files.pythonhosted.org/packages/cd/a0/84b8fe24af8d7f7374d15e0da1cd5502fff59964bbbf34982df0ca2c9047/wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {url = "https://files.pythonhosted.org/packages/cd/f0/060add4fcb035024f84fb3b5523fb2b119ac08608af3f61dbdda38477900/wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {url = "https://files.pythonhosted.org/packages/cf/b1/3c24fc0f6b589ad8c99cfd1cd3e586ef144e16aaf9381ed952d047a7ee54/wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {url = "https://files.pythonhosted.org/packages/d1/74/3c99ce16947f7af901f6203ab4a3d0908c4db06e800571dabfe8525fa925/wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {url = "https://files.pythonhosted.org/packages/d2/60/9fe25f4cd910ae94e75a1fd4772b058545e107a82629a5ca0f2cd7cc34d5/wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {url = "https://files.pythonhosted.org/packages/d7/4b/1bd4837362d31d402b9bc1a27cdd405baf994dbf9942696f291d2f7eeb73/wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {url = "https://files.pythonhosted.org/packages/dd/42/9eedee19435dfc0478cdb8bdc71800aab15a297d1074f1aae0d9489adbc3/wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {url = "https://files.pythonhosted.org/packages/dd/e9/85e780a6b70191114b13b129867cec2fab84279f6beb788e130a26e4ca58/wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {url = "https://files.pythonhosted.org/packages/dd/eb/389f9975a6be31ddd19d29128a11f1288d07b624e464598a4b450f8d007e/wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {url = "https://files.pythonhosted.org/packages/de/77/e2ebfa2f46c19094888a364fdb59aeab9d3336a3ad7ccdf542de572d2a35/wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {url = "https://files.pythonhosted.org/packages/e8/86/fc38e58843159bdda745258d872b1187ad916087369ec57ef93f5e832fa8/wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {url = "https://files.pythonhosted.org/packages/ec/f4/f84538a367105f0a7e507f0c6766d3b15b848fd753647bbf0c206399b322/wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {url = "https://files.pythonhosted.org/packages/ee/25/83f5dcd9f96606521da2d0e7a03a18800264eafb59b569ff109c4d2fea67/wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {url = "https://files.pythonhosted.org/packages/f6/89/bf77b063c594795aaa056cac7b467463702f346d124d46d7f06e76e8cd97/wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {url = "https://files.pythonhosted.org/packages/f6/d3/3c6bd4db883537c40eb9d41d738d329d983d049904f708267f3828a60048/wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {url = "https://files.pythonhosted.org/packages/f8/49/10013abe31f6892ae57c5cc260f71b7e08f1cc00f0d7b2bcfa482ea74349/wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {url = "https://files.pythonhosted.org/packages/f8/7d/73e4e3cdb2c780e13f9d87dc10488d7566d8fd77f8d68f0e416bfbd144c7/wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, + {url = "https://files.pythonhosted.org/packages/f8/f8/e068dafbb844c1447c55b23c921f3d338cddaba4ea53187a7dd0058452d9/wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {url = "https://files.pythonhosted.org/packages/fb/2d/b6fd53b7dbf94d542866cbf1021b9a62595177fc8405fd75e0a5bf3fa3b8/wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {url = "https://files.pythonhosted.org/packages/fb/bd/ca7fd05a45e7022f3b780a709bbdb081a6138d828ecdb5b7df113a3ad3be/wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {url = "https://files.pythonhosted.org/packages/fd/8a/db55250ad0b536901173d737781e3b5a7cc7063c46b232c2e3a82a33c032/wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {url = "https://files.pythonhosted.org/packages/ff/f6/c044dec6bec4ce64fbc92614c5238dd432780b06293d2efbcab1a349629c/wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, +] "xarray 2023.4.2" = [ {url = "https://files.pythonhosted.org/packages/8b/33/0bef802b8528e823944becc850c6ea05404e1cdcd15e4d2ad55d5d5e87fb/xarray-2023.4.2.tar.gz", hash = "sha256:958ec588220352343b910cbc05e54e7ab54d4e8c1c3a7783d6bfe7549d0bd0d2"}, {url = "https://files.pythonhosted.org/packages/d7/eb/e12adfc8a3df6d260c0f15284b736f573621f7ceef42ea47d17c0452c9d5/xarray-2023.4.2-py3-none-any.whl", hash = "sha256:1b6d577c1217ad6bf7458426af19ed7a489ab6c41220ca791f55f5df9648173a"}, diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 0ddbdbead8..2aba204787 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -46,8 +46,9 @@ dependencies = [ "SQLAlchemy-Utils==0.40.0", "bcrypt==4.0.1", "segno==1.5.2", - "osm-fieldwork==0.3.3", - "sentry-sdk==1.9.6" + "osm-fieldwork==0.3.4", + "sentry-sdk==1.9.6", + "py-cpuinfo==9.0.0" ] requires-python = ">=3.10" readme = "../../README.md" From 9ec1fc07077a1fa79b12fdaae20c24d8cd7a69c6 Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 7 Aug 2023 14:06:05 +0545 Subject: [PATCH 126/222] feat: Login signup handled for local docker --- .../main/src/utilities/PrimaryAppBar.tsx | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/frontend/main/src/utilities/PrimaryAppBar.tsx b/src/frontend/main/src/utilities/PrimaryAppBar.tsx index 87888a8dde..9e05cc23b1 100755 --- a/src/frontend/main/src/utilities/PrimaryAppBar.tsx +++ b/src/frontend/main/src/utilities/PrimaryAppBar.tsx @@ -9,6 +9,7 @@ import { LoginActions } from '../store/slices/LoginSlice'; import { ProjectActions } from '../store/slices/ProjectSlice'; import { createLoginWindow } from '../utilfunctions/login'; import { useState } from 'react'; +import environment from '../environment'; export default function PrimaryAppBar() { const [open, setOpen] = React.useState(false); @@ -167,24 +168,24 @@ export default function PrimaryAppBar() { ) : ( <> - createLoginWindow('/')} > - Sign in - - {/* + OSM Sign in + : null} + {process.env.NODE_ENV === 'development' ? <> Sign in - */} - {/* - - Sign up - - */} + + + + Sign up + + : null} )} From 3f398109eca8c7ff5533ad364d7583c393fa2f16 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 7 Aug 2023 15:22:11 +0545 Subject: [PATCH 127/222] qr_code file saved in tmp file --- src/backend/app/central/central_crud.py | 2 +- src/backend/app/projects/project_crud.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/backend/app/central/central_crud.py b/src/backend/app/central/central_crud.py index 6298fd2a06..5e4a0c8e01 100644 --- a/src/backend/app/central/central_crud.py +++ b/src/backend/app/central/central_crud.py @@ -451,7 +451,7 @@ def create_qrcode(project_id: int, # Generate qr code using segno qrcode = segno.make(qr_data, micro=False) - qrcode.save(f"{name}.png", scale=5) + qrcode.save(f"/tmp/{name}_qr.png", scale=5) return qr_data diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 00c1306f80..f60e8fb198 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -1347,11 +1347,11 @@ def generate_appuser_files( outline = json.loads(one.outline) outline_geojson = pg.getFeatures(boundary=outline, - filespec=outfile, - polygon=extract_polygon, - xlsfile=f'{category}.xls', - category=category - ) + filespec=outfile, + polygon=extract_polygon, + xlsfile=f'{category}.xls', + category=category + ) updated_outline_geojson = { "type": "FeatureCollection", @@ -1421,7 +1421,7 @@ def create_qrcode( project_id, token, project_name, odk_central_url ) qrcode = segno.make(qrcode, micro=False) - image_name = f"{project_name}.png" + image_name = f"/tmp/{project_name}_qr.png" with open(image_name, "rb") as f: base64_data = b64encode(f.read()).decode() qr_code_text = base64.b64decode(base64_data) From 048bf5ee069711fac8e7aa4e950ad4e36a0b685e Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 7 Aug 2023 15:23:04 +0545 Subject: [PATCH 128/222] export osm files, directory moded in tmp --- src/backend/app/submission/submission_crud.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 6d4c08157b..a6ef040964 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -219,7 +219,7 @@ async def convert_to_osm(db: Session, project_id: int, task_id: int): tasks = [task_id] if task_id else tasks_crud.get_task_lists(db, project_id) # Create a new ZIP file for the extracted files - final_zip_file_path = f"{project_name}_{form_category}_osm.zip" + final_zip_file_path = f"/tmp/{project_name}_{form_category}_osm.zip" for task in tasks: xml_form_id = f"{project_name}_{form_category}_{task}".split("_")[2] From 5eff3b2c82f3ec9ae965d282dbf197654c8669ff Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 7 Aug 2023 16:42:26 +0545 Subject: [PATCH 129/222] feat: get all submissions --- src/backend/app/submission/submission_crud.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 4f089d4890..7252d917e4 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -328,6 +328,22 @@ def extract_files(zip_file_path): return final_zip_file_path +def get_all_submissions(db: Session, project_id): + project_info = project_crud.get_project(db, project_id) + + # ODK Credentials + odk_credentials = project_schemas.ODKCentral( + odk_central_url=project_info.odk_central_url, + odk_central_user=project_info.odk_central_user, + odk_central_password=project_info.odk_central_password, + ) + + project = get_odk_project(odk_credentials) + + submissions = project.getAllSubmissions(project_info.odkid) + return submissions + + def get_project_submission(db: Session, project_id: int): project_info = project_crud.get_project(db, project_id) From 2fe70aea3a2c5524aab2c234f827c3b5130ad52a Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 7 Aug 2023 16:43:16 +0545 Subject: [PATCH 130/222] get all submission used in conflate osm data api --- src/backend/app/submission/submission_routes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index 3f5f6d73f7..acdfb47d06 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -161,7 +161,7 @@ async def conflate_osm_date( ): # Submission JSON - submission = submission_crud.get_project_submission(db, project_id) + submission = submission_crud.get_all_submissions(db, project_id) # Data extracta file data_extracts_file = "/tmp/data_extracts_file.geojson" From 422051f573af3e7981ba58d2c08c42ba733dc707 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 12:26:50 +0100 Subject: [PATCH 131/222] build: install osm-fieldwork from git for debug stages --- docker-compose.yml | 1 + src/backend/Dockerfile | 21 +++++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index bc87089659..f8207136a6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -52,6 +52,7 @@ services: volumes: - fmtm_images:/opt/app/images - ./src/backend/app:/opt/app + # - ../osm-fieldwork/osm_fieldwork:/home/appuser/.local/lib/python3.10/site-packages/osm_fieldwork depends_on: - fmtm-db - central-proxy diff --git a/src/backend/Dockerfile b/src/backend/Dockerfile index 2f04d26739..43c0112b15 100644 --- a/src/backend/Dockerfile +++ b/src/backend/Dockerfile @@ -45,7 +45,8 @@ COPY pyproject.toml pdm.lock /opt/python/ RUN pip install --no-cache-dir --upgrade pip \ && pip install --no-cache-dir pdm==2.6.1 RUN pdm export --prod > requirements.txt \ - && pdm export --dev --no-default > requirements-dev.txt + && pdm export --dev --no-default --without-hashes \ + > requirements-dev.txt @@ -118,12 +119,24 @@ VOLUME /opt/app/images +FROM build as osm-fieldwork-whl +WORKDIR /repos +RUN pip install pdm==2.6.1 \ + && git clone https://github.com/hotosm/osm-fieldwork.git \ + && pdm build --project=/repos/osm-fieldwork + + + FROM runtime as debug-no-odk -COPY --from=extract-deps \ +USER appuser +COPY --from=extract-deps --chown=appuser \ /opt/python/requirements-dev.txt /opt/python/ -RUN pip install --no-warn-script-location \ +COPY --from=osm-fieldwork-whl --chown=appuser \ + /repos/osm-fieldwork/dist/*.whl /opt/ +RUN ls /opt/*.whl >> /opt/python/requirements-dev.txt \ + && pip uninstall -y osm-fieldwork \ + && pip install --user --upgrade --no-warn-script-location \ --no-cache-dir -r /opt/python/requirements-dev.txt -USER appuser CMD ["python", "-m", "debugpy", "--listen", "0.0.0.0:5678", \ "-m", "uvicorn", "app.main:api", \ "--host", "0.0.0.0", "--port", "8000", \ From b922488315a0526ce32235aa711ba183a4cb20b0 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 12:27:35 +0100 Subject: [PATCH 132/222] docs: on using debug/local versions of osm-fieldwork --- docs/DEV-2.-Backend.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/DEV-2.-Backend.md b/docs/DEV-2.-Backend.md index e0c032cd23..fe0c9f8709 100644 --- a/docs/DEV-2.-Backend.md +++ b/docs/DEV-2.-Backend.md @@ -126,6 +126,35 @@ Example launch.json config for vscode: > Note: either port 5678 needs to be bound to your localhost (default), or the `host` parameter can be set to the container IP address. +## Debugging osm-fieldwork + +`osm-fieldwork` is an integral package for much of the functionality in FMTM. + +Creating a new release during development may not always be feasible. + +**Via Dockerfile** + +- The debug stages in the backend Dockerfile install the latest osm-fieldwork repo `main` branch. +- To re-build, run: `docker compose build api --no-cache`. + +> Note: this is useful to debug functionality not yet released in a stable version on PyPi. + +**Via Bind-Mount** + +- Alternatively, a development version of osm-fieldwork can be mounted into the FMTM container. +- Clone the osm-fieldwork repo to the same root directory as FMTM. +- Uncomment the line in docker-compose.yml + +```yaml +- ../osm-fieldwork/osm_fieldwork:/home/appuser/.local/lib/python3.10/site-packages/osm_fieldwork +``` + +- Run the docker container with your local version of osm-fieldwork. +- Code changes to osm-fieldwork should be reflected immediately. If they are not, run: + `docker compose restart api`. + +> Note: this is useful for debugging features during active development. + ## Conclusion Running the FMTM project is easy with Docker. You can also run the From c974f9f4b9d254fd0eec99929e1c3b2d5c5d3650 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 16:38:07 +0100 Subject: [PATCH 133/222] build: upgrade to debian bookworm images --- src/backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/Dockerfile b/src/backend/Dockerfile index 2f04d26739..53bee2f4e7 100644 --- a/src/backend/Dockerfile +++ b/src/backend/Dockerfile @@ -16,7 +16,7 @@ # ARG PYTHON_IMG_TAG=3.10 -FROM docker.io/python:${PYTHON_IMG_TAG}-slim-bullseye as base +FROM docker.io/python:${PYTHON_IMG_TAG}-slim-bookworm as base ARG APP_VERSION ARG PYTHON_IMG_TAG ARG MAINTAINER=admin@hotosm.org From f830873003757c12579185022f5f6322518c0d33 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 16:40:40 +0100 Subject: [PATCH 134/222] build: add gdal to debian system libs --- src/backend/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/Dockerfile b/src/backend/Dockerfile index 53bee2f4e7..d60c07222e 100644 --- a/src/backend/Dockerfile +++ b/src/backend/Dockerfile @@ -61,7 +61,7 @@ RUN set -ex \ "libspatialindex-dev" \ "libproj-dev" \ "libgeos-dev" \ - # libgdal-dev \ + "libgdal-dev" \ "git" \ && rm -rf /var/lib/apt/lists/* COPY --from=extract-deps \ @@ -94,7 +94,7 @@ RUN set -ex \ "libspatialindex-c6" \ "libproj19" \ "libgeos-c1v5" \ - # "libgdal32" \ + "libgdal32" \ && rm -rf /var/lib/apt/lists/* COPY --from=build \ /root/.local \ From 750cdd4994351683d8f443b36d7d3c74f5410397 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 16:44:01 +0100 Subject: [PATCH 135/222] build: add gdal==3.6.2 to backend (version matching deb) --- src/backend/pdm.lock | 18 +++++++++++------- src/backend/pyproject.toml | 3 ++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index 1de191a5b1..cd93346f68 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -1,6 +1,3 @@ -# This file is @generated by PDM. -# It is not intended for manual editing. - [[package]] name = "alembic" version = "1.8.1" @@ -239,6 +236,12 @@ version = "4.39.3" requires_python = ">=3.8" summary = "Tools to manipulate font files" +[[package]] +name = "gdal" +version = "3.6.2" +requires_python = ">=3.6.0" +summary = "" + [[package]] name = "geoalchemy2" version = "0.12.5" @@ -1066,10 +1069,8 @@ requires_python = ">=3.7" summary = "Backport of pathlib-compatible object wrapper for zip files" [metadata] -lock_version = "4.2" -cross_platform = true -groups = ["default", "dev"] -content_hash = "sha256:709c4ccb101fc9c592202971146c876a0e1d4aa0654e98b3b6e4bf2ee19a878d" +lock_version = "4.0" +content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893522a467" [metadata.files] "alembic 1.8.1" = [ @@ -1443,6 +1444,9 @@ content_hash = "sha256:709c4ccb101fc9c592202971146c876a0e1d4aa0654e98b3b6e4bf2ee {url = "https://files.pythonhosted.org/packages/16/07/1c7547e27f559ec078801d522cc4d5127cdd4ef8e831c8ddcd9584668a07/fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"}, {url = "https://files.pythonhosted.org/packages/39/d7/ab05ae34dd57dd657e492d95ce7ec6bfebfb3bfcdc7316660ac5a13fcfee/fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"}, ] +"gdal 3.6.2" = [ + {url = "https://files.pythonhosted.org/packages/49/4f/174743caf64d1999c46ab2ee72b2cb0d77a47bd7ed04f954f863e35a25fd/GDAL-3.6.2.tar.gz", hash = "sha256:a167cde1813707d91a938dad1a22f280f5ad28c45980d42e948fb8c59f890f5a"}, +] "geoalchemy2 0.12.5" = [ {url = "https://files.pythonhosted.org/packages/67/fb/863bb54bedaa845742239f779fd5fa4657ba6f2996b5bad95bd731959a82/GeoAlchemy2-0.12.5-py2.py3-none-any.whl", hash = "sha256:3a59eb651df95b3dfee8e1d82f4d18c80b75f712860a0a3080defc6b0435070d"}, {url = "https://files.pythonhosted.org/packages/e1/ec/d65d3ea612b5193d6648993f76352d9190bf99c1e8155f7ca82f52cb97cb/GeoAlchemy2-0.12.5.tar.gz", hash = "sha256:31c2502dce317b57b335e4eb87562d501fa39e46c728be514d9b86091e08dd67"}, diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 2aba204787..588f9d3a52 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -48,7 +48,8 @@ dependencies = [ "segno==1.5.2", "osm-fieldwork==0.3.4", "sentry-sdk==1.9.6", - "py-cpuinfo==9.0.0" + "py-cpuinfo==9.0.0", + "gdal==3.6.2", ] requires-python = ">=3.10" readme = "../../README.md" From 2b4e25f80c218f378bc61ea32a38fb8ddb19ff71 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 16:47:30 +0100 Subject: [PATCH 136/222] build: upgrade system libproj19 --> 25 --- src/backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/Dockerfile b/src/backend/Dockerfile index d60c07222e..213a2cf2d3 100644 --- a/src/backend/Dockerfile +++ b/src/backend/Dockerfile @@ -92,7 +92,7 @@ RUN set -ex \ "postgresql-client" \ "libglib2.0-0" \ "libspatialindex-c6" \ - "libproj19" \ + "libproj25" \ "libgeos-c1v5" \ "libgdal32" \ && rm -rf /var/lib/apt/lists/* From d620f12d5025e67b2b288fe6cf5b77fe43be87fe Mon Sep 17 00:00:00 2001 From: ivangayton Date: Tue, 8 Aug 2023 00:50:06 +0900 Subject: [PATCH 137/222] Modularize task splitting script and flag parameters for Rob --- ...01_split_AOI_by_existing_line_features.sql | 106 ++++++++++++++++ ...it_02_count_buildings_for_subsplitting.sql | 106 ++++++++++++++++ .../fmtm-split_03_cluster_buildings.sql | 63 ++++++++++ ...te_polygons_around_clustered_buildings.sql | 113 ++++++++++++++++++ .../task_splitting/make_project_config.sql | 1 - 5 files changed, 388 insertions(+), 1 deletion(-) create mode 100644 scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_01_split_AOI_by_existing_line_features.sql create mode 100644 scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_02_count_buildings_for_subsplitting.sql create mode 100644 scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_03_cluster_buildings.sql create mode 100644 scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_04_create_polygons_around_clustered_buildings.sql delete mode 100644 scripts/postgis_snippets/task_splitting/make_project_config.sql diff --git a/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_01_split_AOI_by_existing_line_features.sql b/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_01_split_AOI_by_existing_line_features.sql new file mode 100644 index 0000000000..01c05cd07e --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_01_split_AOI_by_existing_line_features.sql @@ -0,0 +1,106 @@ + /* +Licence: GPLv3 +Part of the HOT Field Mapping Tasking Manager (FMTM) + +Part 01 of FMTM task splitting. + +This script splits an Area of Interest into polygons based on OpenStreetMap lines (roads, waterways, and railways). It doesn't take features into account. + +It takes three inputs, all PostGIS layers: +1) A polygon layer called project-aoi +2) A line layer formatted like OSM extracts with the Underpass schema (tags in a jsonb object) called ways_line +3) A polygon layer formatted like OSM extracts with the Underpass schema (tags in a jsonb object) called ways_poly + +It outputs a single PostGIS polygon layer called polygonsnocount (the "nocount" bit refers to the fact that at this stage we haven't determined if there's anything inside of these polygons; soon we'll count the features to be mapped within them, normally to split further). This layer should be considered a temporary product, but is the input to the next stage of the splitting algorithm. + +More information in the adjacent file task_splitting_readme.md. +*/ + +/* +***************************PARAMETERS FOR ROB************************ +- At the moment I split on anything with a highway, waterway, or railway tag of any kind. We'll probably want to allow users to configure which lines they actually use as splitting boundaries. +- At the moment it always uses the AOI polygon itself as a splitline. That should be optional. +*/ + +-- If this table already exists, clobber it +DROP TABLE IF EXISTS polygonsnocount; +-- Create a new polygon layer of splits by lines +CREATE TABLE polygonsnocount AS ( + -- The Area of Interest provided by the person creating the project + WITH aoi AS ( + SELECT * FROM "project-aoi" + ) + -- Extract all lines to be used as splitlines from a table of lines + -- with the schema from Underpass (all tags as jsonb column called 'tags') + -- TODO: add waterway polygons; now a beach doesn't show up as a splitline. + -- TODO: these tags should come from another table rather than hardcoded + -- so that they're easily configured during project creation. + ,splitlines AS ( + SELECT ST_Intersection(a.geom, l.geom) AS geom + FROM aoi a, "ways_line" l + WHERE ST_Intersects(a.geom, l.geom) + -- TODO: these tags should come from a config table + -- All highways, waterways, and railways + AND (tags->>'highway' IS NOT NULL + OR tags->>'waterway' IS NOT NULL + OR tags->>'railway' IS NOT NULL + ) + ) + -- Merge all lines, necessary so that the polygonize function works later + ,partlymerged AS ( + SELECT ST_LineMerge(ST_Union(splitlines.geom)) AS geom + FROM splitlines + ) + -- Add closed ways (polygons) that are actually roads (like roundabouts) + ,polyroads AS ( + SELECT ST_Boundary(wp.geom) AS geom + FROM aoi a, "ways_poly" wp + WHERE ST_Intersects(a.geom, wp.geom) + AND tags->>'highway' IS NOT NULL + ) + -- Merge all the lines from closed ways + ,prmerged AS ( + SELECT ST_LineMerge(ST_Union(polyroads.geom)) AS geom + from polyroads + ) + -- Add them to the merged lines from the open ways + ,merged AS ( + SELECT ST_Union(partlymerged.geom, prmerged.geom) AS geom + FROM partlymerged, prmerged + ) + -- Combine the boundary of the AOI with the splitlines + -- First extract the Area of Interest boundary as a line + ,boundary AS ( + SELECT ST_Boundary(geom) AS geom + FROM aoi + ) + -- Then combine it with the splitlines + ,comb AS ( + SELECT ST_Union(boundary.geom, merged.geom) AS geom + FROM boundary, merged + ) + -- Create a polygon for each area enclosed by the splitlines + ,splitpolysnoindex AS ( + SELECT (ST_Dump(ST_Polygonize(comb.geom))).geom as geom + FROM comb + ) + -- Add an index column to the split polygons + ,splitpolygons AS( + SELECT + row_number () over () as polyid, + ST_Transform(spni.geom,4326)::geography AS geog, + spni.* + from splitpolysnoindex spni + ) + SELECT * FROM splitpolygons +); +-- Make that index column a primary key +ALTER TABLE polygonsnocount ADD PRIMARY KEY(polyid); +-- Properly register geometry column (makes QGIS happy) +SELECT Populate_Geometry_Columns('public.polygonsnocount'::regclass); +-- Add a spatial index (vastly improves performance for a lot of operations) +CREATE INDEX polygonsnocount_idx + ON polygonsnocount + USING GIST (geom); +-- Clean up the table which may have gaps and stuff from spatial indexing +VACUUM ANALYZE polygonsnocount; diff --git a/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_02_count_buildings_for_subsplitting.sql b/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_02_count_buildings_for_subsplitting.sql new file mode 100644 index 0000000000..58bf15cd88 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_02_count_buildings_for_subsplitting.sql @@ -0,0 +1,106 @@ + /* +Licence: GPLv3 +Part of the HOT Field Mapping Tasking Manager (FMTM) + +Inputs: +- Polygon layer polygonsnocount from previous fmtm-split step +- Polygon layer ways_poly formatted like OSM data from Underpass (tags in jsonb object) + +Outputs: +- Polygon layer buildings (OSM buildings with original tags plus the id of the polygon they are found in) +- Polygon layer splitpolygons (the polygons from the previous step, but now with a column with the count of the buildings found within each polygon) +- Polygon layer lowfeaturecountpolygons (All of the polygons with less than a specified number of buildings within them. These are also present in the splitpolygons layer; the idea is to merge them with neighbors, not implemented yet). +*/ + +/* +**************************PARAMETERS FOR ROB*************************** +- Line 70: The number of buildings desired per task (for now determines which polygons get added to the lowfeaturecountpolygons layer). +*/ + +-- Grab the buildings +-- While we're at it, grab the ID of the polygon the buildings fall within. +-- TODO add outer rings of buildings from relations table of OSM export +DROP TABLE IF EXISTS buildings; +CREATE TABLE buildings AS ( + SELECT b.*, polys.polyid + FROM "ways_poly" b, polygonsnocount polys + WHERE ST_Intersects(polys.geom, ST_Centroid(b.geom)) + AND b.tags->>'building' IS NOT NULL +); +ALTER TABLE buildings ADD PRIMARY KEY(osm_id); +-- Properly register geometry column (makes QGIS happy) +SELECT Populate_Geometry_Columns('public.buildings'::regclass); +-- Add a spatial index (vastly improves performance for a lot of operations) +CREATE INDEX buildings_idx + ON buildings + USING GIST (geom); +-- Clean up the table which may have gaps and stuff from spatial indexing +VACUUM ANALYZE buildings; + +--**************************Count features in polygons***************** +DROP TABLE IF EXISTS splitpolygons; +CREATE TABLE splitpolygons AS ( + WITH polygonsfeaturecount AS ( + SELECT sp.polyid, + sp.geom, + sp.geog, + count(b.geom) AS numfeatures, + ST_Area(sp.geog) AS area + FROM polygonsnocount sp + LEFT JOIN "buildings" b + ON sp.polyid = b.polyid + GROUP BY sp.polyid, sp.geom + ) + SELECT * from polygonsfeaturecount +); +ALTER TABLE splitpolygons ADD PRIMARY KEY(polyid); +SELECT Populate_Geometry_Columns('public.splitpolygons'::regclass); +CREATE INDEX splitpolygons_idx + ON splitpolygons + USING GIST (geom); +VACUUM ANALYZE splitpolygons; + +DROP TABLE IF EXISTS lowfeaturecountpolygons; +CREATE TABLE lowfeaturecountpolygons AS ( + -- Grab the polygons with fewer than the requisite number of features + WITH lowfeaturecountpolys as ( + SELECT * + FROM splitpolygons AS p + -- TODO: feature count should not be hard-coded + WHERE p.numfeatures < 20 + ), + -- Find the neighbors of the low-feature-count polygons + -- Store their ids as n_polyid, numfeatures as n_numfeatures, etc + allneighborlist AS ( + SELECT p.*, + pf.polyid AS n_polyid, + pf.area AS n_area, + p.numfeatures AS n_numfeatures, + -- length of shared boundary to make nice merge decisions + st_length2d(st_intersection(p.geom, pf.geom)) as sharedbound + FROM lowfeaturecountpolys AS p + INNER JOIN splitpolygons AS pf + -- Anything that touches + ON st_touches(p.geom, pf.geom) + -- But eliminate those whose intersection is a point, because + -- polygons that only touch at a corner shouldn't be merged + AND st_geometrytype(st_intersection(p.geom, pf.geom)) != 'ST_Point' + -- Sort first by polyid of the low-feature-count polygons + -- Then by descending featurecount and area of the + -- high-feature-count neighbors (area is in case of equal + -- featurecounts, we'll just pick the biggest to add to) + ORDER BY p.polyid, p.numfeatures DESC, pf.area DESC + -- OR, maybe for more aesthetic merges: + -- order by p.polyid, sharedbound desc + ) + SELECT DISTINCT ON (a.polyid) * FROM allneighborlist AS a +); +ALTER TABLE lowfeaturecountpolygons ADD PRIMARY KEY(polyid); +SELECT Populate_Geometry_Columns('public.lowfeaturecountpolygons'::regclass); +CREATE INDEX lowfeaturecountpolygons_idx + ON lowfeaturecountpolygons + USING GIST (geom); +VACUUM ANALYZE lowfeaturecountpolygons; + +--****************Merge low feature count polygons with neighbors******* +-- NOT IMPLEMENTED YET; not absolutely essential but highly desirable diff --git a/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_03_cluster_buildings.sql b/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_03_cluster_buildings.sql new file mode 100644 index 0000000000..7a638619d8 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_03_cluster_buildings.sql @@ -0,0 +1,63 @@ + /* +Licence: GPLv3 +Part of the HOT Field Mapping Tasking Manager (FMTM) + +Inputs: +- Polygon layer splitpolygons from previous fmtm-split step +- Polygon layer buildings from previous fmtm-split step (contains column with the id of the polygons the buildings are in) + +Outputs: +- Polygon layer clusteredbuildings; contains a column clusteruid +*/ + +/* +***********************PARAMETERS FOR ROB********************** +- Line 46: The desired number of buildings per task (determines cluster size) +*/ + +DROP TABLE IF EXISTS clusteredbuildings; +CREATE TABLE clusteredbuildings AS ( + WITH splitpolygonswithcontents AS ( + SELECT * + FROM splitpolygons sp + WHERE sp.numfeatures > 0 + ) + -- Add the count of features in the splitpolygon each building belongs to + -- to the buildings table; sets us up to be able to run the clustering. + ,buildingswithcount AS ( + SELECT b.*, p.numfeatures + FROM buildings b + LEFT JOIN splitpolygons p + ON b.polyid = p.polyid + ) + -- Cluster the buildings within each splitpolygon. The second term in the + -- call to the ST_ClusterKMeans function is the number of clusters to create, + -- so we're dividing the number of features by a constant (10 in this case) + -- to get the number of clusters required to get close to the right number + -- of features per cluster. + -- TODO: This should certainly not be a hardcoded, the number of features + -- per cluster should come from a project configuration table + ,buildingstocluster as ( + SELECT * FROM buildingswithcount bc + WHERE bc.numfeatures > 0 + ) + ,clusteredbuildingsnocombineduid AS ( + SELECT *, + ST_ClusterKMeans(geom, cast((b.numfeatures / 20) + 1 as integer)) + over (partition by polyid) as cid + FROM buildingstocluster b + ) + -- uid combining the id of the outer splitpolygon and inner cluster + ,clusteredbuildings as ( + select *, + polyid::text || '-' || cid as clusteruid + from clusteredbuildingsnocombineduid + ) + SELECT * FROM clusteredbuildings +); +ALTER TABLE clusteredbuildings ADD PRIMARY KEY(osm_id); +SELECT Populate_Geometry_Columns('public.clusteredbuildings'::regclass); +CREATE INDEX clusteredbuildings_idx + ON clusteredbuildings + USING GIST (geom); +VACUUM ANALYZE clusteredbuildings; diff --git a/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_04_create_polygons_around_clustered_buildings.sql b/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_04_create_polygons_around_clustered_buildings.sql new file mode 100644 index 0000000000..95e9705858 --- /dev/null +++ b/scripts/postgis_snippets/task_splitting/fmtm_task_splitting_for_buildings/fmtm-split_04_create_polygons_around_clustered_buildings.sql @@ -0,0 +1,113 @@ + /* +Licence: GPLv3 +Part of the HOT Field Mapping Tasking Manager (FMTM) + +Inputs: + +Outputs: +- Point layer dumpedpoints (building perimeters chopped into small segments and all nodes converted to points) +- Polygon layer voronoids (Voronoi polygons from the building segment points, only geometry without attributes because PostGIS is annoying on that score) +- Polygon layer voronois (the Voronoi polygons from the previous layer, re-associated with the ID of the points they were created from) +- Polygon layer taskpolygons (polygons mostly enclosing each task, made by dissolving the voronois by clusteruid) +- Polygon layer simplifiedpolygons (the polygons from above simplified to make them less jagged, easier to display, and smaller memory footprint) + +*/ + +/* +***************************PARAMETERS FOR ROB********************** +- Line 28: Segment length to chop up the building perimeters. Currently 0.00001 degrees (about a meter near the equator). When there are buildings very close together, this value needs to be small to reduce task polygons poking into buildings from neighboring tasks. When buildings are well-spaced, this value can be bigger to save on performance overhead. +- Line 101: Simplification tolerance. Currently 0.000075 (about 7.5 meters near the equator). The larger this value, the more smoothing of Voronoi jaggies happens, but the more likely task perimeters are to intersect buildings from neighboring tasks. +*/ + +--*****************Densify dumped building nodes****************** +DROP TABLE IF EXISTS dumpedpoints; +CREATE TABLE dumpedpoints AS ( + SELECT cb.osm_id, cb.polyid, cb.cid, cb.clusteruid, + -- POSSIBLE BUG: PostGIS' Voronoi implementation sometimes panics + -- with segments less than 0.00004 degrees. + (st_dumppoints(ST_Segmentize(geom, 0.00001))).geom + FROM clusteredbuildings cb +); +SELECT Populate_Geometry_Columns('public.dumpedpoints'::regclass); +CREATE INDEX dumpedpoints_idx + ON dumpedpoints + USING GIST (geom); +VACUUM ANALYZE dumpedpoints; + +--*******************voronoia**************************************** +DROP TABLE IF EXISTS voronoids; +CREATE TABLE voronoids AS ( + SELECT + st_intersection((ST_Dump(ST_VoronoiPolygons( + ST_Collect(points.geom) + ))).geom, + sp.geom) as geom + FROM dumpedpoints as points, + splitpolygons as sp + where st_contains(sp.geom, points.geom) + group by sp.geom +); +CREATE INDEX voronoids_idx + ON voronoids + USING GIST (geom); +VACUUM ANALYZE voronoids; + +DROP TABLE IF EXISTS voronois; +CREATE TABLE voronois AS ( + SELECT p.clusteruid, v.geom + FROM voronoids v, dumpedpoints p + WHERE st_within(p.geom, v.geom) +); +CREATE INDEX voronois_idx + ON voronois + USING GIST (geom); +VACUUM ANALYZE voronois; +DROP TABLE voronoids; + +DROP TABLE IF EXISTS taskpolygons; +CREATE TABLE taskpolygons AS ( + SELECT ST_Union(geom) as geom, clusteruid + FROM voronois + GROUP BY clusteruid +); +CREATE INDEX taskpolygons_idx + ON taskpolygons + USING GIST (geom); +VACUUM ANALYZE taskpolygons; + +--*****************************Simplify******************************* +-- Extract unique line segments +DROP TABLE IF EXISTS simplifiedpolygons; +CREATE TABLE simplifiedpolygons AS ( + --Convert task polygon boundaries to linestrings + WITH rawlines AS ( + SELECT tp.clusteruid, st_boundary(tp.geom) AS geom + FROM taskpolygons AS tp + ) + -- Union, which eliminates duplicates from adjacent polygon boundaries + ,unionlines AS ( + SELECT st_union(l.geom) AS geom FROM rawlines l + ) + -- Dump, which gives unique segments. + ,segments AS ( + SELECT (st_dump(l.geom)).geom AS geom + FROM unionlines l + ) + ,agglomerated AS ( + SELECT st_linemerge(st_unaryunion(st_collect(s.geom))) AS geom + FROM segments s + ) + ,simplifiedlines AS ( + SELECT st_simplify(a.geom, 0.000075) AS geom + FROM agglomerated a + ) + SELECT (st_dump(st_polygonize(s.geom))).geom AS geom + FROM simplifiedlines s +); +CREATE INDEX simplifiedpolygons_idx + ON simplifiedpolygons + USING GIST (geom); +VACUUM ANALYZE simplifiedpolygons; + +-- Clean results (nuke or merge polygons without features in them) + diff --git a/scripts/postgis_snippets/task_splitting/make_project_config.sql b/scripts/postgis_snippets/task_splitting/make_project_config.sql deleted file mode 100644 index c9721bd222..0000000000 --- a/scripts/postgis_snippets/task_splitting/make_project_config.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE TABLE projectconfig From ec98a4a26dcb0c875e85c11ffc610f38254fda18 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 17:04:35 +0100 Subject: [PATCH 138/222] ci: fix pytest by installing gdal --- .github/workflows/pytest.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index ca51dbba26..fa575012fc 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -70,6 +70,10 @@ jobs: key: ${{ runner.os }}-pip-${{ hashFiles('**/pyproject.toml') }} restore-keys: | ${{ runner.os }}-pip- + - name: Install GDAL + run: | + sudo apt-get update + sudo apt-get install libgdal-dev - name: Install dependencies run: | cd src/backend From 9b53f471f169198076afc4b4eb3033cd8b10c15f Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 17:22:25 +0100 Subject: [PATCH 139/222] ci: tag backend builds to latest --- .github/workflows/build_and_deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index b831c70ebb..0dd127b61c 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -59,7 +59,9 @@ jobs: context: src/backend target: prod push: true - tags: "ghcr.io/hotosm/fmtm/backend:${{ env.API_VERSION }}-${{ github.ref_name }}" + tags: | + "ghcr.io/hotosm/fmtm/backend:${{ env.API_VERSION }}-${{ github.ref_name }}" + "ghcr.io/hotosm/fmtm/backend:latest" build-args: | APP_VERSION=${{ env.API_VERSION }} From 4e025cd48ce04ed9a5082b1905dd1bd328e51f98 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 17:52:40 +0100 Subject: [PATCH 140/222] build: add ci build stage, optimise USER directive --- src/backend/Dockerfile | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/backend/Dockerfile b/src/backend/Dockerfile index 213a2cf2d3..8d0b56047d 100644 --- a/src/backend/Dockerfile +++ b/src/backend/Dockerfile @@ -115,15 +115,16 @@ RUN useradd -r -u 900 -m -c "hotosm account" -d /home/appuser -s /bin/false appu && chown -R appuser:appuser /opt /home/appuser # Add volume for persistent images VOLUME /opt/app/images +# Change to non-root user +USER appuser FROM runtime as debug-no-odk -COPY --from=extract-deps \ +COPY --from=extract-deps --chown=appuser \ /opt/python/requirements-dev.txt /opt/python/ -RUN pip install --no-warn-script-location \ +RUN pip install --user --no-warn-script-location \ --no-cache-dir -r /opt/python/requirements-dev.txt -USER appuser CMD ["python", "-m", "debugpy", "--listen", "0.0.0.0:5678", \ "-m", "uvicorn", "app.main:api", \ "--host", "0.0.0.0", "--port", "8000", \ @@ -141,11 +142,17 @@ USER appuser +FROM debug-no-odk as ci +# Pre-compile packages to .pyc (init speed gains) +RUN python -c "import compileall; compileall.compile_path(maxlevels=10, quiet=1)" +ENTRYPOINT [""] +CMD [""] + + + FROM runtime as prod # Pre-compile packages to .pyc (init speed gains) RUN python -c "import compileall; compileall.compile_path(maxlevels=10, quiet=1)" -# Change to non-root user after pre-compile -USER appuser # Note: 4 uvicorn workers as running with docker, change to 1 worker for Kubernetes CMD ["uvicorn", "app.main:api", "--host", "0.0.0.0", "--port", "8000", \ "--workers", "4", "--log-level", "error", "--no-access-log"] From 08353d75cfdb0e5ebc40b6c5d7f492fc9cda3fdf Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 17:59:21 +0100 Subject: [PATCH 141/222] ci: set pytest github action to run in container --- .github/workflows/pytest.yml | 62 ++++++++++++------------------------ 1 file changed, 20 insertions(+), 42 deletions(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index fa575012fc..24953ef621 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -14,29 +14,31 @@ on: # Allow manual trigger (workflow_dispatch) workflow_dispatch: -env: - # using fmtm-db compose name fails as running FMTM outside docker, port map to localhost service instead - FMTM_DB_URL: postgresql+psycopg2://fmtm:fmtm@localhost:5432/fmtm - ODK_CENTRAL_URL: http://localhost:8383 - ODK_CENTRAL_USER: odk - ODK_CENTRAL_PASSWD: odk - OSM_CLIENT_ID: test - OSM_CLIENT_SECRET: test - OSM_URL: https://www.openstreetmap.org - OSM_SCOPE: read_prefs - OSM_LOGIN_REDIRECT_URI: http://127.0.0.1:8000/auth/callback/ - OSM_SECRET_KEY: test - URL_SCHEME: "http" - FRONTEND_MAIN_URL: "localhost:8080" - FRONTEND_MAP_URL: "localhost:8081" - permissions: contents: read jobs: test: runs-on: ubuntu-latest - # pytest needs a valid reachable database service. + + container: + image: ghcr.io/hotosm/fmtm/backend:ci + env: + FMTM_DB_URL: postgresql+psycopg2://fmtm:fmtm@fmtm-db:5432/fmtm + ODK_CENTRAL_URL: http://localhost:8383 + ODK_CENTRAL_USER: odk + ODK_CENTRAL_PASSWD: odk + OSM_CLIENT_ID: test + OSM_CLIENT_SECRET: test + OSM_URL: https://www.openstreetmap.org + OSM_SCOPE: read_prefs + OSM_LOGIN_REDIRECT_URI: http://127.0.0.1:8000/auth/callback/ + OSM_SECRET_KEY: test + URL_SCHEME: "http" + FRONTEND_MAIN_URL: "localhost:8080" + FRONTEND_MAP_URL: "localhost:8081" + + # pytest needs a database services: # Label used to access the postgres service container fmtm-db: @@ -47,39 +49,15 @@ jobs: POSTGRES_PASSWORD: fmtm POSTGRES_DB: fmtm POSTGRES_USER: fmtm - ports: - # Opens tcp port 5432 on the host and service container, - # since we running pytest on actions machine, not in another service container - - 5432:5432 # Set health checks to wait until postgres has started options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 - uses: actions/setup-python@v3 - with: - python-version: "3.10" - - uses: actions/cache@v3 - id: cache - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/pyproject.toml') }} - restore-keys: | - ${{ runner.os }}-pip- - - name: Install GDAL - run: | - sudo apt-get update - sudo apt-get install libgdal-dev - - name: Install dependencies - run: | - cd src/backend - python -m pip install pdm==2.6.1 - pdm export --dev > requirements-all.txt - pip install -r requirements-all.txt - name: Run pytest run: | cd src/backend From bd9d39a344651ec7ee4b4758ffac2e64a6f0ec67 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 18:08:59 +0100 Subject: [PATCH 142/222] docs: info about entrypoint override in ci --- src/backend/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/Dockerfile b/src/backend/Dockerfile index 8d0b56047d..77cd571a81 100644 --- a/src/backend/Dockerfile +++ b/src/backend/Dockerfile @@ -145,6 +145,7 @@ USER appuser FROM debug-no-odk as ci # Pre-compile packages to .pyc (init speed gains) RUN python -c "import compileall; compileall.compile_path(maxlevels=10, quiet=1)" +# Override entrypoint, as not possible in Github action ENTRYPOINT [""] CMD [""] From d3739fa31f69ecfe2a8203c44c4ee89d93b2d80b Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 18:09:47 +0100 Subject: [PATCH 143/222] ci: run stages as root, except pytest --- .github/workflows/pytest.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 24953ef621..d816ddd8eb 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -37,6 +37,7 @@ jobs: URL_SCHEME: "http" FRONTEND_MAIN_URL: "localhost:8080" FRONTEND_MAP_URL: "localhost:8081" + options: --user root # pytest needs a database services: @@ -58,7 +59,7 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Run pytest + - name: Run pytest as appuser run: | cd src/backend - pytest + sudo -u appuser bash -c 'pytest' From ed1f473dcb8a792b5411af3ae89cf0710f80cbf0 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 18:16:34 +0100 Subject: [PATCH 144/222] build: add gosu to backend dockerfile --- src/backend/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/Dockerfile b/src/backend/Dockerfile index 77cd571a81..cba2156ebd 100644 --- a/src/backend/Dockerfile +++ b/src/backend/Dockerfile @@ -87,6 +87,7 @@ RUN set -ex \ -y --no-install-recommends \ "nano" \ "curl" \ + "gosu" \ "libpcre3" \ "mime-support" \ "postgresql-client" \ From 3bd486eebf05bf5647fc20f066d01fb2ae7a678d Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 18:18:16 +0100 Subject: [PATCH 145/222] ci: use gosu to run pytest --- .github/workflows/pytest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index d816ddd8eb..6e321f6b48 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -62,4 +62,4 @@ jobs: - name: Run pytest as appuser run: | cd src/backend - sudo -u appuser bash -c 'pytest' + gosu appuser pytest From b9937b59f594ae762f756601c762cf8206891022 Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 7 Aug 2023 18:25:29 +0100 Subject: [PATCH 146/222] fix: remove SQLALCHEMY_DB_URL in favour of FMTM_DB_URL --- src/backend/app/db/database.py | 4 +--- src/backend/tests/conftest.py | 12 ++---------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/backend/app/db/database.py b/src/backend/app/db/database.py index e89c0428a0..7c24c42a76 100644 --- a/src/backend/app/db/database.py +++ b/src/backend/app/db/database.py @@ -24,9 +24,7 @@ from ..config import settings -SQLALCHEMY_DATABASE_URL = settings.FMTM_DB_URL - -engine = create_engine(SQLALCHEMY_DATABASE_URL) +engine = create_engine(settings.FMTM_DB_URL) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() diff --git a/src/backend/tests/conftest.py b/src/backend/tests/conftest.py index 22d188b327..65a8c7a97a 100644 --- a/src/backend/tests/conftest.py +++ b/src/backend/tests/conftest.py @@ -26,22 +26,14 @@ from app.db.database import Base, get_db from app.main import api -db_name = settings.FMTM_DB_NAME -user = settings.FMTM_DB_USER -password = settings.FMTM_DB_PASSWORD - -SQLALCHEMY_DATABASE_URL = f"postgresql://{user}:{password}@localhost/{db_name}" - -engine = create_engine(SQLALCHEMY_DATABASE_URL) +engine = create_engine(settings.FMTM_DB_URL) TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) - - Base.metadata.create_all(bind=engine) @pytest.fixture(scope="session") def db_engine(): - engine = create_engine(SQLALCHEMY_DATABASE_URL) + engine = create_engine(settings.FMTM_DB_URL) if not database_exists: create_database(engine.url) From ade48e63b7b81ae413d9267efec475de3ef9ba56 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Tue, 8 Aug 2023 13:47:34 +0545 Subject: [PATCH 147/222] fix: features api --- src/backend/app/projects/project_crud.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index f60e8fb198..9ec381301f 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -1746,8 +1746,8 @@ def convert_to_project_feature(db_project_feature: db_models.DbFeatures): if db_project_feature.geometry: app_project_feature.geometry = geometry_to_geojson( - db_project_feature.geometry, { - id: db_project_feature.id}, db_project_feature.id + db_project_feature.geometry, + db_project_feature.properties, db_project_feature.id ) return app_project_feature From 5400c08d2d60f1b986e1627ba97eb27177c99a2b Mon Sep 17 00:00:00 2001 From: Varun Date: Tue, 8 Aug 2023 14:22:54 +0545 Subject: [PATCH 148/222] feat: added react on import --- .../fmtm_openlayer_map/src/api/Files.js | 2 +- .../src/components/DialogTaskActions.jsx | 3 +- .../LayerSwitcher/index.js | 2 +- .../Layers/VectorTileLayer.js | 2 +- .../OpenLayersComponent/useOLMap/index.js | 2 +- .../fmtm_openlayer_map/src/hooks/useOlMap.ts | 18 ++++---- .../src/layers/TasksLayer.jsx | 14 +++---- src/frontend/main/src/views/Create.tsx | 3 +- src/frontend/main/src/views/CreateProject.tsx | 42 +++++++++++++++---- 9 files changed, 55 insertions(+), 33 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/api/Files.js b/src/frontend/fmtm_openlayer_map/src/api/Files.js index a768b9e9d9..fcfb9fada0 100755 --- a/src/frontend/fmtm_openlayer_map/src/api/Files.js +++ b/src/frontend/fmtm_openlayer_map/src/api/Files.js @@ -1,4 +1,4 @@ -import { useEffect, useState } from "react"; +import React,{ useEffect, useState } from "react"; import CoreModules from "fmtm/CoreModules"; export const ProjectFilesById = (url, taskId) => { diff --git a/src/frontend/fmtm_openlayer_map/src/components/DialogTaskActions.jsx b/src/frontend/fmtm_openlayer_map/src/components/DialogTaskActions.jsx index eff4204d84..41636df0b5 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/DialogTaskActions.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/DialogTaskActions.jsx @@ -1,9 +1,8 @@ -import React, { useState } from "react"; +import React, { useState, useEffect } from "react"; import environment from "fmtm/environment"; import ProjectTaskStatus from "../api/ProjectTaskStatus"; import MapStyles from "../hooks/MapStyles"; import CoreModules from "fmtm/CoreModules"; -import { useEffect } from "react"; import { CommonActions } from "fmtm/CommonSlice"; export default function Dialog({ taskId, feature, map, view }) { // const featureStatus = feature.id_ != undefined ? feature.id_.replace("_", ",").split(',')[1] : null; diff --git a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/LayerSwitcher/index.js b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/LayerSwitcher/index.js index 76c8d42bb6..1481d57db7 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/LayerSwitcher/index.js +++ b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/LayerSwitcher/index.js @@ -7,7 +7,7 @@ import LayerTile from 'ol/layer/Tile'; import SourceOSM from 'ol/source/OSM'; import SourceStamen from 'ol/source/Stamen'; import LayerSwitcher from 'ol-layerswitcher'; -import { useEffect } from 'react'; +import React,{ useEffect } from 'react'; import { XYZ } from 'ol/source'; diff --git a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorTileLayer.js b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorTileLayer.js index ec784ac5b2..bd4afdeaa4 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorTileLayer.js +++ b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorTileLayer.js @@ -1,4 +1,4 @@ -import { useEffect, useMemo } from 'react'; +import React,{ useEffect, useMemo } from 'react'; // import * as olExtent from 'ol/extent'; import VectorTile from 'ol/layer/VectorTile'; import MVT from 'ol/format/MVT'; diff --git a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/useOLMap/index.js b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/useOLMap/index.js index 54ab87e361..487a5b80c8 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/useOLMap/index.js +++ b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/useOLMap/index.js @@ -1,5 +1,5 @@ /* eslint-disable consistent-return */ -import { useRef, useState, useEffect } from 'react'; +import React,{ useRef, useState, useEffect } from 'react'; import Map from 'ol/Map'; import { View } from 'ol'; import * as olExtent from 'ol/extent'; diff --git a/src/frontend/fmtm_openlayer_map/src/hooks/useOlMap.ts b/src/frontend/fmtm_openlayer_map/src/hooks/useOlMap.ts index bdf10238d3..3e75266bd5 100644 --- a/src/frontend/fmtm_openlayer_map/src/hooks/useOlMap.ts +++ b/src/frontend/fmtm_openlayer_map/src/hooks/useOlMap.ts @@ -1,9 +1,9 @@ /* eslint-disable consistent-return */ -import { useRef, useState, useEffect } from 'react'; -import Map from 'ol/Map'; -import { View } from 'ol'; -import * as olExtent from 'ol/extent'; -import VectorLayer from 'ol/layer/Vector'; +import React, { useRef, useState, useEffect } from "react"; +import Map from "ol/Map"; +import { View } from "ol"; +import * as olExtent from "ol/extent"; +import VectorLayer from "ol/layer/Vector"; const defaultProps = { center: [0, 0], @@ -19,7 +19,7 @@ const useOLMap = (props) => { const [map, setMap] = useState(null); const [renderComplete, setRenderComplete] = useState(null); - // Created a map instance on mount with all the settings coming from props + // Created a map instance on mount with all the settings coming from props useEffect(() => { const options = { view: new View({ @@ -53,14 +53,14 @@ const useOLMap = (props) => { setTimeout(() => { setRenderComplete(true); }, 500); - map.un('rendercomplete', onRenderComplete); + map.un("rendercomplete", onRenderComplete); } } - map.on('rendercomplete', onRenderComplete); + map.on("rendercomplete", onRenderComplete); return () => { if (map) { - map.un('rendercomplete', onRenderComplete); + map.un("rendercomplete", onRenderComplete); } }; }, [map]); diff --git a/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx b/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx index 4be8a16de3..464e69afa6 100755 --- a/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx +++ b/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx @@ -1,7 +1,7 @@ +import React, { useEffect } from 'react'; import { Vector as VectorLayer } from 'ol/layer.js'; import GeoJSON from 'ol/format/GeoJSON'; import { Vector as VectorSource } from 'ol/source.js'; -import { useEffect } from 'react'; import { geojsonObjectModel } from '../models/geojsonObjectModel'; import MapStyles from '../hooks/MapStyles'; import environment from "fmtm/environment"; @@ -18,7 +18,7 @@ const TasksLayer = (map, view, feature) => { if (state.projectTaskBoundries.length != 0 && map != undefined) { if (state.projectTaskBoundries.findIndex(project => project.id == environment.decode(params.id)) != -1) { - geojsonObject=null; + geojsonObject = null; const index = state.projectTaskBoundries.findIndex(project => project.id == environment.decode(params.id)); const styleFunction = function (feature) { @@ -28,7 +28,7 @@ const TasksLayer = (map, view, feature) => { }; geojsonObject = { ...geojsonObjectModel } - geojsonObject['features']= []; + geojsonObject['features'] = []; state.projectTaskBoundries[index].taskBoundries.forEach((task) => { geojsonObject['features'].push({ id: `${task.id}_${task.task_status_str}`, @@ -37,10 +37,10 @@ const TasksLayer = (map, view, feature) => { // properties: task.properties }) }) - console.log(geojsonObject,'geojsonObject'); - console.log(state.projectTaskBoundries,'projectTaskBoundries'); + console.log(geojsonObject, 'geojsonObject'); + console.log(state.projectTaskBoundries, 'projectTaskBoundries'); const vectorSource = new VectorSource({ - features: new GeoJSON().readFeatures(geojsonObject,{ + features: new GeoJSON().readFeatures(geojsonObject, { featureProjection: get("EPSG:3857") }), }); @@ -76,7 +76,7 @@ const TasksLayer = (map, view, feature) => { map.addLayer(vectorLayer) - window.vector =vectorLayer + window.vector = vectorLayer window.testmap = map map.on('loadend', function () { map.getTargetElement().classList.remove('spinner'); diff --git a/src/frontend/main/src/views/Create.tsx b/src/frontend/main/src/views/Create.tsx index ab24102d99..0a6f5feda3 100755 --- a/src/frontend/main/src/views/Create.tsx +++ b/src/frontend/main/src/views/Create.tsx @@ -1,9 +1,8 @@ -import React, { useState } from 'react'; +import React, { useState, useCallback } from 'react'; import '../styles/login.css'; import enviroment from '../environment'; import CoreModules from '../shared/CoreModules'; import { SignUpService } from '../api/LoginService'; -import { useCallback } from 'react'; import { SingUpModel } from '../models/login/loginModel'; /* Create a simple input element in React that calls a function when onFocusOut is triggered diff --git a/src/frontend/main/src/views/CreateProject.tsx b/src/frontend/main/src/views/CreateProject.tsx index 819c33e47b..80c78d12cc 100755 --- a/src/frontend/main/src/views/CreateProject.tsx +++ b/src/frontend/main/src/views/CreateProject.tsx @@ -1,6 +1,5 @@ import React, { useEffect, useState } from 'react'; import '../styles/home.css'; -// import "../../node_modules/ol/ol.css"; import CoreModules from '../shared/CoreModules'; import UploadArea from '../components/createproject/UploadArea'; import { useLocation, Link } from 'react-router-dom'; @@ -10,8 +9,6 @@ import DefineTasks from '../components/createproject/DefineTasks'; import { CreateProjectActions } from '../store/slices/CreateProjectSlice'; import { useDispatch } from 'react-redux'; import DataExtract from '../components/createproject/DataExtract'; -import { createPopup } from '../utilfunctions/createPopup'; - const CreateProject: React.FC = () => { const [geojsonFile, setGeojsonFile] = useState(null); @@ -35,8 +32,8 @@ const CreateProject: React.FC = () => { setGeojsonFile(null); setCustomFormFile(null); setDataExtractFile(null); - } - }, []) + }; + }, []); return (
@@ -204,10 +201,37 @@ const CreateProject: React.FC = () => { {/* Showing Different Create Project Component When the url pathname changes */} {location.pathname === '/create-project' ? : null} - {location.pathname === '/upload-area' ? : null} - {location.pathname === '/define-tasks' ? : null} - {location.pathname === '/data-extract' ? : null} - {location.pathname === '/select-form' ? : null} + {location.pathname === '/upload-area' ? ( + + ) : null} + {location.pathname === '/define-tasks' ? ( + + ) : null} + {location.pathname === '/data-extract' ? ( + + ) : null} + {location.pathname === '/select-form' ? ( + + ) : null} {/* {location.pathname === "/basemap-selection" ? : null} */} {/* END */} From 4e4db9a5af4dc67220726cd7850d6bf44b736f05 Mon Sep 17 00:00:00 2001 From: Varun Date: Tue, 8 Aug 2023 14:23:06 +0545 Subject: [PATCH 149/222] feat: Draw AOI --- .../OpenLayersComponent/Layers/VectorLayer.js | 27 +- .../src/views/DefineAreaMap.jsx | 61 ++--- .../components/createproject/DefineTasks.tsx | 58 +++- .../src/components/createproject/DrawSvg.tsx | 49 ++++ .../components/createproject/UploadArea.tsx | 52 +++- src/frontend/main/src/routes.jsx | 3 +- .../src/store/slices/CreateProjectSlice.ts | 8 + .../main/src/store/slices/ThemeSlice.ts | 254 +++++++++--------- 8 files changed, 313 insertions(+), 199 deletions(-) create mode 100644 src/frontend/main/src/components/createproject/DrawSvg.tsx diff --git a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js index 4c1c9d4f5b..0d56e958e2 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js +++ b/src/frontend/fmtm_openlayer_map/src/components/MapComponent/OpenLayersComponent/Layers/VectorLayer.js @@ -86,30 +86,41 @@ const VectorLayer = ({ // Modify Feature useEffect(() => { if(!map) return; - if(!vectorLayer) return; + // if(!vectorLayer) return; if(!onDraw) return; - const vectorLayerSource = vectorLayer.getSource(); + const source = new VectorSource({wrapX: false}); + + const vector = new OLVectorLayer({ + source: source, + }); const draw = new Draw({ - source: vectorLayerSource, + source: source, type: 'Polygon', }); draw.on('drawend',function(e){ - var geoJSONFormat = new GeoJSON(); + const feature = e.feature; + const geojsonFormat = new GeoJSON(); + const newGeojson = geojsonFormat.writeFeature(feature,{ dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857'}); + + // Call your function here with the GeoJSON as an argument + onDraw(newGeojson); + // var geoJSONFormat = new GeoJSON(); - var geoJSONString = geoJSONFormat.writeFeatures(vectorLayer.getSource().getFeatures(),{ dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857'}); - console.log(geoJSONString,'geojsonString'); - onDraw(geoJSONString); + // var geoJSONString = geoJSONFormat.writeFeatures(vectorLayer.getSource().getFeatures(),{ dataProjection: 'EPSG:4326', featureProjection: 'EPSG:3857'}); + // console.log(geoJSONString,'geojsonString'); + // onDraw(geoJSONString); }); map.addInteraction(draw); return () => { - // map.removeInteraction(defaultInteractions().extend([select, modify])) + map.removeInteraction(draw) } }, [map,vectorLayer,onDraw]) useEffect(() => { if (!map) return; + if (!geojson) return; const vectorLyr = new OLVectorLayer({ source: new VectorSource({ diff --git a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx index 150eb2f53b..b2c28b6dc0 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx @@ -6,24 +6,12 @@ import { VectorLayer } from "../components/MapComponent/OpenLayersComponent/Laye import CoreModules from "fmtm/CoreModules"; import { CreateProjectActions } from "fmtm/CreateProjectSlice"; -const testGeojson = { - type: "FeatureCollection", - features: [ - { - type: "Feature", - properties: {}, - geometry: { - type: "Polygon", - coordinates: [ - - ], - }, - }, - ],} -const DefineAreaMap = ({ uploadedGeojson,setGeojsonFile,uploadedDataExtractFile }) => { +const DefineAreaMap = ({ uploadedGeojson, setGeojsonFile, uploadedDataExtractFile, onDraw }) => { + const drawnGeojson = CoreModules.useSelector((state) => state.createproject.drawnGeojson); + const drawToggle = CoreModules.useSelector((state) => state.createproject.drawToggle); const dispatch = CoreModules.useDispatch(); - const[dataExtractedGeojson, setDataExtractedGeojson] = useState(null); + const [dataExtractedGeojson, setDataExtractedGeojson] = useState(null); const dividedTaskGeojson = CoreModules.useSelector( (state) => state.createproject.dividedTaskGeojson ); @@ -34,19 +22,19 @@ const DefineAreaMap = ({ uploadedGeojson,setGeojsonFile,uploadedDataExtractFile zoom: 1, maxZoom: 25, }); - - + + useEffect(() => { - if(dividedTaskGeojson){ + if (dividedTaskGeojson || onDraw) { - }else if(uploadedGeojson) { + } else if (uploadedGeojson) { const fileReader = new FileReader(); fileReader.readAsText(uploadedGeojson, "UTF-8"); fileReader.onload = (e) => { dispatch(CreateProjectActions.SetDividedTaskGeojson(e.target.result)); }; - }else{ + } else { dispatch(CreateProjectActions.SetDividedTaskGeojson(null)); } }, [uploadedGeojson]); @@ -57,7 +45,7 @@ const DefineAreaMap = ({ uploadedGeojson,setGeojsonFile,uploadedDataExtractFile fileReader.onload = (e) => { setDataExtractedGeojson(e.target.result); }; - }else{ + } else { } }, [uploadedDataExtractFile]); return ( @@ -72,17 +60,17 @@ const DefineAreaMap = ({ uploadedGeojson,setGeojsonFile,uploadedDataExtractFile }} > - {}} - zoomToLayer - /> + {drawToggle && } {dividedTaskGeojson && ( { + onModify={(modifiedGeojson) => { console.log(JSON.parse(modifiedGeojson)); const parsedJSON = JSON.parse(modifiedGeojson) - var f = new File([modifiedGeojson], "AOI.geojson", {type: "application/geo+json" }) + var f = new File([modifiedGeojson], "AOI.geojson", { type: "application/geo+json" }) setGeojsonFile(f); }} - onDraw={(geojson) => {}} zoomToLayer /> )} @@ -122,7 +109,7 @@ const DefineAreaMap = ({ uploadedGeojson,setGeojsonFile,uploadedDataExtractFile constrainResolution: true, duration: 2000, }} - // zoomToLayer + // zoomToLayer /> )} diff --git a/src/frontend/main/src/components/createproject/DefineTasks.tsx b/src/frontend/main/src/components/createproject/DefineTasks.tsx index e013d71292..eae4bd45be 100755 --- a/src/frontend/main/src/components/createproject/DefineTasks.tsx +++ b/src/frontend/main/src/components/createproject/DefineTasks.tsx @@ -22,6 +22,7 @@ const alogrithmList = [ const DefineTasks: React.FC = ({ geojsonFile, setGeojsonFile }) => { const navigate = useNavigate(); const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const drawnGeojson = CoreModules.useSelector((state) => state.createproject.drawnGeojson); // // const state:any = useSelector(state=>state.project.projectData) // // console.log('state main :',state) @@ -52,22 +53,53 @@ const DefineTasks: React.FC = ({ geojsonFile, setGeojsonFile }) => { }: any = useForm(projectDetails, submission, DefineTaskValidation); const generateTasksOnMap = () => { - dispatch( - GetDividedTaskFromGeojson(`${enviroment.baseApiUrl}/projects/preview_tasks/`, { - geojson: geojsonFile, - dimension: formValues?.dimension, - }), - ); + if (drawnGeojson) { + const drawnGeojsonString = JSON.stringify(drawnGeojson, null, 2); + + const blob = new Blob([drawnGeojsonString], { type: 'application/json' }); + + // Create a file object from the Blob + const drawnGeojsonFile = new File([blob], 'data.json', { type: 'application/json' }); + dispatch( + GetDividedTaskFromGeojson(`${enviroment.baseApiUrl}/projects/preview_tasks/`, { + geojson: drawnGeojsonFile, + dimension: formValues?.dimension, + }), + ); + } else { + dispatch( + GetDividedTaskFromGeojson(`${enviroment.baseApiUrl}/projects/preview_tasks/`, { + geojson: geojsonFile, + dimension: formValues?.dimension, + }), + ); + } }; const generateTaskWithSplittingAlgorithm = () => { - dispatch( - TaskSplittingPreviewService( - `${enviroment.baseApiUrl}/projects/task_split`, - geojsonFile, - formValues?.no_of_buildings, - ), - ); + if (drawnGeojson) { + const drawnGeojsonString = JSON.stringify(drawnGeojson, null, 2); + + const blob = new Blob([drawnGeojsonString], { type: 'application/json' }); + + // Create a file object from the Blob + const drawnGeojsonFile = new File([blob], 'data.json', { type: 'application/json' }); + dispatch( + TaskSplittingPreviewService( + `${enviroment.baseApiUrl}/projects/task_split`, + drawnGeojsonFile, + formValues?.no_of_buildings, + ), + ); + } else { + dispatch( + TaskSplittingPreviewService( + `${enviroment.baseApiUrl}/projects/task_split`, + geojsonFile, + formValues?.no_of_buildings, + ), + ); + } }; // 'Use natural Boundary' diff --git a/src/frontend/main/src/components/createproject/DrawSvg.tsx b/src/frontend/main/src/components/createproject/DrawSvg.tsx new file mode 100644 index 0000000000..04a647f4f9 --- /dev/null +++ b/src/frontend/main/src/components/createproject/DrawSvg.tsx @@ -0,0 +1,49 @@ +import React from 'react'; + +const DrawSvg = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default DrawSvg; diff --git a/src/frontend/main/src/components/createproject/UploadArea.tsx b/src/frontend/main/src/components/createproject/UploadArea.tsx index db62663aef..7e1276fd0d 100755 --- a/src/frontend/main/src/components/createproject/UploadArea.tsx +++ b/src/frontend/main/src/components/createproject/UploadArea.tsx @@ -1,25 +1,38 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import CoreModules from '../../shared/CoreModules'; import FormControl from '@mui/material/FormControl'; import FormGroup from '@mui/material/FormGroup'; import { useNavigate, Link } from 'react-router-dom'; import { CreateProjectActions } from '../../store/slices/CreateProjectSlice'; +import DrawSvg from '../createproject/DrawSvg'; +import { useDispatch } from 'react-redux'; // @ts-ignore const DefineAreaMap = React.lazy(() => import('map/DefineAreaMap')); const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue, inputValue }: any) => { const navigate = useNavigate(); const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); - + const drawToggle = CoreModules.useSelector((state) => state.createproject.drawToggle); + const drawnGeojson = CoreModules.useSelector((state) => state.createproject.drawnGeojson); const dispatch = CoreModules.useDispatch(); - // //dispatch function to perform redux state mutation + //dispatch function to perform redux state mutation + + useEffect(() => { + dispatch(CreateProjectActions.SetDrawToggle(false)); + }, []); - // // passing payloads for creating project from form whenever user clicks submit on upload area passing previous project details form aswell + // passing payloads for creating project from form whenever user clicks submit on upload area passing previous project details form aswell const onCreateProjectSubmission = () => { - if (!geojsonFile) return; + if (drawnGeojson) { + dispatch(CreateProjectActions.SetCreateProjectFormStep('select-form')); + navigate('/define-tasks'); + } else if (!drawnGeojson && !geojsonFile) { + return; + } else { + dispatch(CreateProjectActions.SetCreateProjectFormStep('select-form')); + navigate('/define-tasks'); + } // dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, areaGeojson: fileUpload?.[0], areaGeojsonfileName: fileUpload?.name })); - dispatch(CreateProjectActions.SetCreateProjectFormStep('select-form')); - navigate('/define-tasks'); }; return ( @@ -38,6 +51,20 @@ const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue,
{/* Area Geojson File Upload For Create Project */} + + { + dispatch(CreateProjectActions.SetDrawToggle(!drawToggle)); + }} + > + + Draw + + + OR + Upload GEOJSON @@ -53,9 +80,9 @@ const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue, /> {geojsonFile?.name} - {!geojsonFile && ( + {!drawnGeojson && !geojsonFile && ( - Geojson file is required. + Draw an AOI Or Upload a Geojson file. )} @@ -93,7 +120,12 @@ const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue, {/* END */}
- {}} /> + { + dispatch(CreateProjectActions.SetDrawnGeojson(JSON.parse(geojson))); + }} + /> ); }; diff --git a/src/frontend/main/src/routes.jsx b/src/frontend/main/src/routes.jsx index 71c1b39de4..bb2ea1321c 100755 --- a/src/frontend/main/src/routes.jsx +++ b/src/frontend/main/src/routes.jsx @@ -1,11 +1,10 @@ -import React from 'react'; +import React, { Suspense } from 'react'; import { createBrowserRouter, Navigate } from 'react-router-dom'; import Home from './views/Home'; import Login from './views/Login'; import Create from './views/Create'; import Tabbed from './views/Tabbed'; import MainView from './views/MainView'; -import { Suspense } from 'react'; import CreateProject from './views/CreateProject'; import EditProject from './views/EditProject'; import ProtectedRoute from './utilities/ProtectedRoute'; diff --git a/src/frontend/main/src/store/slices/CreateProjectSlice.ts b/src/frontend/main/src/store/slices/CreateProjectSlice.ts index 319b83034b..1e6bc06c17 100755 --- a/src/frontend/main/src/store/slices/CreateProjectSlice.ts +++ b/src/frontend/main/src/store/slices/CreateProjectSlice.ts @@ -24,6 +24,8 @@ const CreateProject = CoreModules.createSlice({ taskSplittingGeojsonLoading: false, taskSplittingGeojson: null, updateBoundaryLoading: false, + drawnGeojson: null, + drawToggle: false, }, reducers: { SetProjectDetails(state, action) { @@ -92,6 +94,9 @@ const CreateProject = CoreModules.createSlice({ SetDividedTaskGeojson(state, action) { state.dividedTaskGeojson = action.payload; }, + SetDrawnGeojson(state, action) { + state.drawnGeojson = action.payload; + }, SetDividedTaskFromGeojsonLoading(state, action) { state.dividedTaskLoading = action.payload; }, @@ -122,6 +127,9 @@ const CreateProject = CoreModules.createSlice({ SetEditProjectBoundaryServiceLoading(state, action) { state.updateBoundaryLoading = action.payload; }, + SetDrawToggle(state, action) { + state.drawToggle = action.payload; + }, }, }); diff --git a/src/frontend/main/src/store/slices/ThemeSlice.ts b/src/frontend/main/src/store/slices/ThemeSlice.ts index 10b16e4271..eff6b6fc94 100755 --- a/src/frontend/main/src/store/slices/ThemeSlice.ts +++ b/src/frontend/main/src/store/slices/ThemeSlice.ts @@ -1,136 +1,132 @@ -import CoreModules from "../../shared/CoreModules"; +import CoreModules from '../../shared/CoreModules'; const ThemeSlice = CoreModules.createSlice({ - name: 'theme', - initialState: { - hotTheme: { - palette: { - black:'#000000', - mode: 'light', - primary: { - main: '#ffffff', - contrastText: '#44546a', - lightblue: '#99e6ff', - primary_rgb: 'rgb(255, 255, 255,0.8)' - }, - error: { - //hot red - main: '#d73f3e', - purple: '#ff3399' - }, - success: { - //hot blue - //green in regular - main: '#459ca0', - contrastText: '#2C3038', - }, - warning: { - //hot yellow - main: '#f9a61e', - contrastText: '#2C3038', - }, - grey: { - //hot grey and light - main: '#a5a5a5', - "light": '#f0efee', - contrastText: '#2C3038', - }, - info: { - //hot dark - main: '#44546a', - contrastText: '#2C3038', - info_rgb: 'rgb(44,48,56,0.2)' - - }, - text: { - secondary: '#2C3038', - }, - loading: { - skeleton_rgb: 'rgb(112, 67, 67,0.1)' - }, - mapFeatureColors: { - //blue - ready: '#008099', - ready_rgb: 'rgb(0, 128, 153,0.4)', - locked_for_mapping: '#0063cc', - locked_for_mapping_rgb: 'rgb(0, 99, 204,0.4)', - mapped: '#161969', - mapped_rgb: 'rgb(22, 25, 105,0.4)', - locked_for_validation: '#3d1c97', - locked_for_validation_rgb: 'rgb(61, 28, 151,0.4)', - //green - validated: '#006600', - validated_rgb: 'rgb(0, 102, 0,0.4)', - //yellow - // invalidated: '#ffff00', - invalidated: '#ffcc00', - invalidated_rgb: 'rgb(255, 204, 0,0.4)', - //brown - bad: '#704343', - bad_rgb: 'rgb(112, 67, 67,0.4)', - split: '#704343', - split_rgb: 'rgb(112, 67, 67,0.4)', - } - - }, - typography: { - //default font family changed to BarlowMedium - fontSize: 16, - // fontFamily: 'ArchivoMedium', - fontFamily: 'BarlowMedium', - //custom - htmlFontSize: 18, - - caption: { - fontFamily: 'BarlowBold', - fontSize: 24, - }, - // new font size added - condensed: { - fontSize: 36, - fontWeight: 'bold' - }, - subtitle1: { - fontFamily: 'BarlowBold', - fontSize: 24, - fontWeight: 'bold' - }, - subtitle2: { - fontFamily: 'BarlowMedium', - fontSize: 20, - fontWeight: 'bold' - }, - subtitle3: { - fontFamily: 'BarlowMedium', - fontSize: 15 - }, - h1: { - fontFamily: 'BarlowMedium', - fontSize: 20 - }, - h2: { - fontFamily: 'BarlowMedium', - fontSize: 16 - }, - h3: { - fontFamily: 'BarlowMedium', - fontSize: 16 - }, - h4: { - fontFamily: 'BarlowLight', - fontSize: 16 - }, - - }, - } + name: 'theme', + initialState: { + hotTheme: { + palette: { + black: '#000000', + mode: 'light', + primary: { + main: '#ffffff', + contrastText: '#44546a', + lightblue: '#99e6ff', + primary_rgb: 'rgb(255, 255, 255,0.8)', + }, + error: { + //hot red + main: '#d73f3e', + purple: '#ff3399', + }, + success: { + //hot blue + //green in regular + main: '#459ca0', + contrastText: '#2C3038', + }, + warning: { + //hot yellow + main: '#f9a61e', + contrastText: '#2C3038', + }, + grey: { + //hot grey and light + main: '#a5a5a5', + light: '#f0efee', + contrastText: '#2C3038', + }, + info: { + //hot dark + main: '#44546a', + contrastText: '#2C3038', + info_rgb: 'rgb(44,48,56,0.2)', + }, + text: { + secondary: '#2C3038', + }, + loading: { + skeleton_rgb: 'rgb(112, 67, 67,0.1)', + }, + mapFeatureColors: { + //blue + ready: '#008099', + ready_rgb: 'rgb(0, 128, 153,0.4)', + locked_for_mapping: '#0063cc', + locked_for_mapping_rgb: 'rgb(0, 99, 204,0.4)', + mapped: '#161969', + mapped_rgb: 'rgb(22, 25, 105,0.4)', + locked_for_validation: '#3d1c97', + locked_for_validation_rgb: 'rgb(61, 28, 151,0.4)', + //green + validated: '#006600', + validated_rgb: 'rgb(0, 102, 0,0.4)', + //yellow + // invalidated: '#ffff00', + invalidated: '#ffcc00', + invalidated_rgb: 'rgb(255, 204, 0,0.4)', + //brown + bad: '#704343', + bad_rgb: 'rgb(112, 67, 67,0.4)', + split: '#704343', + split_rgb: 'rgb(112, 67, 67,0.4)', + }, + }, + typography: { + //default font family changed to BarlowMedium + fontSize: 16, + // fontFamily: 'ArchivoMedium', + fontFamily: 'BarlowMedium', + //custom + htmlFontSize: 18, + caption: { + fontFamily: 'BarlowBold', + fontSize: 24, + }, + // new font size added + condensed: { + fontSize: 36, + fontWeight: 'bold', + }, + subtitle1: { + fontFamily: 'BarlowBold', + fontSize: 24, + fontWeight: 'bold', + }, + subtitle2: { + fontFamily: 'BarlowMedium', + fontSize: 20, + fontWeight: 'bold', + }, + subtitle3: { + fontFamily: 'BarlowMedium', + fontSize: 15, + }, + h1: { + fontFamily: 'BarlowMedium', + fontSize: 20, + }, + h2: { + fontFamily: 'BarlowMedium', + fontSize: 16, + }, + h3: { + fontFamily: 'BarlowMedium', + fontSize: 16, + }, + h4: { + fontFamily: 'BarlowLight', + fontSize: 16, + }, + }, + }, + }, + reducers: { + UpdateBrightness(state, action) { + state.hotTheme = action.payload; }, - reducers: { - UpdateBrightness(state, action) { - state.hotTheme = action.payload - } - } -}) + }, +}); export const ThemeActions = ThemeSlice.actions; export default ThemeSlice; From ba01d66bb4888cd65f20e46418a330d966c78a5b Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Tue, 8 Aug 2023 14:32:06 +0545 Subject: [PATCH 150/222] fix: task aplit algrithm for gojson type feature --- src/backend/app/projects/project_crud.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 9ec381301f..5193427bbc 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -555,8 +555,9 @@ def get_osm_extracts(boundary: str): json_boundary = json.loads(boundary) if json_boundary.get("features", None) is not None: - query["geometry"] = json_boundary["features"][0]["geometry"] - + query["geometry"] = json_boundary + # query["geometry"] = json_boundary["features"][0]["geometry"] + else: query["geometry"] = json_boundary @@ -607,12 +608,12 @@ async def split_into_tasks( """Update the boundary polyon on the database.""" # boundary_data = outline["features"][0]["geometry"] - if outline.get("features", None) is not None: + if outline['type'] == "Feature": + boundary_data = outline["geometry"] + elif outline.get("features", None) is not None: boundary_data = outline["features"][0]["geometry"] - else: boundary_data = outline - outline = shape(boundary_data) db_task = db_models.DbProjectAOI( @@ -623,7 +624,11 @@ async def split_into_tasks( db.add(db_task) db.commit() - data = get_osm_extracts(boundary) + data = get_osm_extracts(json.dumps(boundary_data)) + + if not data: + return None + for feature in data["features"]: # If the osm extracts contents do not have a title, provide an empty text for that. From 9d9ef4f631c533bd67c131400af744b79bc3941c Mon Sep 17 00:00:00 2001 From: Varun Date: Tue, 8 Aug 2023 14:37:48 +0545 Subject: [PATCH 151/222] fix: create project value change on edit --- src/frontend/main/src/hooks/useForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/main/src/hooks/useForm.tsx b/src/frontend/main/src/hooks/useForm.tsx index 572a376b8d..21d7f7db2e 100755 --- a/src/frontend/main/src/hooks/useForm.tsx +++ b/src/frontend/main/src/hooks/useForm.tsx @@ -11,7 +11,7 @@ const useForm = (initialState, callback, validate) => { }; const handleCustomChange = (name, value) => { - setValues((prev) => ({ ...prev, ...initialState, [name]: value })); + setValues((prev) => ({ ...prev, [name]: value })); // setErrors(validate({ ...values, [name]: value })); }; From 714e5df75df9284d003db24f263cde65d66fc467 Mon Sep 17 00:00:00 2001 From: Varun Date: Tue, 8 Aug 2023 16:46:50 +0545 Subject: [PATCH 152/222] Feat: type setup on create project redux state --- .../src/views/DefineAreaMap.jsx | 12 +- src/frontend/main/src/hooks/reduxTypes.ts | 6 + .../main/src/store/{Store.js => Store.ts} | 16 +- .../src/store/slices/CreateProjectSlice.ts | 53 +++---- .../main/src/store/types/ICreateProject.ts | 139 ++++++++++++++++++ .../main/src/utilfunctions/testUtils.js | 2 +- src/frontend/main/tests/App.test.tsx | 2 +- .../main/tests/CreateProject.test.tsx | 2 +- src/frontend/main/webpack.config.js | 2 +- 9 files changed, 193 insertions(+), 41 deletions(-) create mode 100644 src/frontend/main/src/hooks/reduxTypes.ts rename src/frontend/main/src/store/{Store.js => Store.ts} (73%) create mode 100644 src/frontend/main/src/store/types/ICreateProject.ts diff --git a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx index b2c28b6dc0..674d4318fc 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx @@ -80,12 +80,12 @@ const DefineAreaMap = ({ uploadedGeojson, setGeojsonFile, uploadedDataExtractFil constrainResolution: true, duration: 2000, }} - onModify={(modifiedGeojson) => { - console.log(JSON.parse(modifiedGeojson)); - const parsedJSON = JSON.parse(modifiedGeojson) - var f = new File([modifiedGeojson], "AOI.geojson", { type: "application/geo+json" }) - setGeojsonFile(f); - }} + // onModify={(modifiedGeojson) => { + // console.log(JSON.parse(modifiedGeojson)); + // const parsedJSON = JSON.parse(modifiedGeojson) + // var f = new File([modifiedGeojson], "AOI.geojson", { type: "application/geo+json" }) + // setGeojsonFile(f); + // }} zoomToLayer /> )} diff --git a/src/frontend/main/src/hooks/reduxTypes.ts b/src/frontend/main/src/hooks/reduxTypes.ts new file mode 100644 index 0000000000..53df7b4bb7 --- /dev/null +++ b/src/frontend/main/src/hooks/reduxTypes.ts @@ -0,0 +1,6 @@ +import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'; +import type { RootState, AppDispatch } from '../store/Store'; + +// Use throughout your app instead of plain `useDispatch` and `useSelector` +export const useAppDispatch: () => AppDispatch = useDispatch; +export const useAppSelector: TypedUseSelectorHook = useSelector; diff --git a/src/frontend/main/src/store/Store.js b/src/frontend/main/src/store/Store.ts similarity index 73% rename from src/frontend/main/src/store/Store.js rename to src/frontend/main/src/store/Store.ts index cc17828c6c..a712481927 100755 --- a/src/frontend/main/src/store/Store.js +++ b/src/frontend/main/src/store/Store.ts @@ -2,15 +2,15 @@ import HomeSlice from './slices/HomeSlice'; import ThemeSlice from './slices/ThemeSlice'; // import projectSlice from 'map/Project'; import CoreModules from '../shared/CoreModules'; -import { persistStore, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE } from 'redux-persist'; +import { persistStore } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import ProjectSlice from './slices/ProjectSlice'; import CreateProjectSlice from './slices/CreateProjectSlice'; import CommonSlice from './slices/CommonSlice'; import LoginSlice from './slices/LoginSlice'; -import OrganizationSlice from './slices/organizationSlice.ts'; -import SubmissionSlice from './slices/SubmissionSlice.ts'; -import TaskSlice from './slices/TaskSlice.ts'; +import OrganizationSlice from './slices/organizationSlice'; +import SubmissionSlice from './slices/SubmissionSlice'; +import TaskSlice from './slices/TaskSlice'; import { persistReducer } from 'redux-persist'; export default function persist(key, whitelist, reducer) { @@ -23,6 +23,9 @@ export default function persist(key, whitelist, reducer) { reducer, ); } +// Infer the `RootState` and `AppDispatch` types from the store itself +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; const reducers = CoreModules.combineReducers({ project: persist('project', ['project', 'projectInfo'], ProjectSlice.reducer), @@ -38,7 +41,7 @@ const reducers = CoreModules.combineReducers({ task: TaskSlice.reducer, }); -export const store = CoreModules.configureStore({ +const store = CoreModules.configureStore({ reducer: reducers, // middleware: [], middleware: CoreModules.getDefaultMiddleware({ @@ -46,4 +49,5 @@ export const store = CoreModules.configureStore({ }), }); -export const persistor = persistStore(store); +const persistor = persistStore(store); +export { store, persistor }; diff --git a/src/frontend/main/src/store/slices/CreateProjectSlice.ts b/src/frontend/main/src/store/slices/CreateProjectSlice.ts index 1e6bc06c17..c07121d850 100755 --- a/src/frontend/main/src/store/slices/CreateProjectSlice.ts +++ b/src/frontend/main/src/store/slices/CreateProjectSlice.ts @@ -1,32 +1,35 @@ +import { ICreateProjectState } from 'store/types/ICreateProject'; import CoreModules from '../../shared/CoreModules'; +export const initialState: ICreateProjectState = { + editProjectDetails: { name: '', description: '', short_description: '' }, + editProjectResponse: null, + projectDetails: { dimension: 10, no_of_buildings: 5 }, + projectDetailsResponse: null, + projectDetailsLoading: false, + projectArea: null, + projectAreaLoading: false, + formCategoryList: [], + generateQrLoading: false, + organizationList: [], + organizationListLoading: false, + generateQrSuccess: null, + generateProjectLogLoading: false, + generateProjectLog: null, + createProjectStep: 1, + dividedTaskLoading: false, + dividedTaskGeojson: null, + formUpdateLoading: false, + taskSplittingGeojsonLoading: false, + taskSplittingGeojson: null, + updateBoundaryLoading: false, + drawnGeojson: null, + drawToggle: false, +}; + const CreateProject = CoreModules.createSlice({ name: 'createproject', - initialState: { - editProjectDetails: { name: '', description: '', short_description: '' }, - editProjectResponse: null, - projectDetails: { dimension: 10, no_of_buildings: 5 }, - projectDetailsResponse: null, - projectDetailsLoading: false, - projectArea: null, - projectAreaLoading: false, - formCategoryList: [], - generateQrLoading: false, - organizationList: [], - organizationListLoading: false, - generateQrSuccess: null, - generateProjectLogLoading: false, - generateProjectLog: null, - createProjectStep: 1, - dividedTaskLoading: false, - dividedTaskGeojson: false, - formUpdateLoading: false, - taskSplittingGeojsonLoading: false, - taskSplittingGeojson: null, - updateBoundaryLoading: false, - drawnGeojson: null, - drawToggle: false, - }, + initialState: initialState, reducers: { SetProjectDetails(state, action) { state.projectDetails = { ...state.projectDetails, [action.payload.key]: action.payload.value }; diff --git a/src/frontend/main/src/store/types/ICreateProject.ts b/src/frontend/main/src/store/types/ICreateProject.ts new file mode 100644 index 0000000000..c0263d5ef3 --- /dev/null +++ b/src/frontend/main/src/store/types/ICreateProject.ts @@ -0,0 +1,139 @@ +export interface ICreateProjectState { + editProjectDetails: IEditProjectDetails; + editProjectResponse?: IEditProjectResponse | null; + projectDetails: IProjectDetails; + projectDetailsResponse: IEditProjectResponse | null; + projectDetailsLoading: boolean; + projectArea: IProjectArea | null; + projectAreaLoading: boolean; + formCategoryList: IFormCategoryList | []; + generateQrLoading: boolean; + organizationList: IOrganizationList[]; + organizationListLoading: boolean; + generateQrSuccess: IGenerateQrSuccess | null; + generateProjectLogLoading: boolean; + generateProjectLog: IGenerateProjectLog | null; + createProjectStep: number; + dividedTaskLoading: boolean; + dividedTaskGeojson: string | null; + formUpdateLoading: boolean; + taskSplittingGeojsonLoading: boolean; + taskSplittingGeojson: ITaskSplittingGeojson | null; + updateBoundaryLoading: boolean; + drawnGeojson: IDrawnGeojson | null; + drawToggle: boolean; +} +export interface IAuthor { + username: string; + id: number; +} + +export interface IGeometry { + type: string; + coordinates: number[][][]; +} + +export interface IGeoJSONFeature { + type: string; + geometry: IGeometry; + properties: Record; + id: string; + bbox: null | number[]; +} + +export interface IProjectTask { + id: number; + project_id: number; + project_task_index: number; + project_task_name: string; + outline_geojson: IGeoJSONFeature; + outline_centroid: IGeoJSONFeature; + task_status: number; + locked_by_uid: number | null; + locked_by_username: string | null; + task_history: any[]; + qr_code_base64: string; + task_status_str: string; +} + +export interface IProjectInfo { + name: string; + short_description: string; + description: string; +} + +interface IEditProjectResponse { + id: number; + odkid: number; + author: IAuthor; + project_info: IProjectInfo[]; + status: number; + outline_geojson: IGeoJSONFeature; + project_tasks: IProjectTask[]; + xform_title: string; + hashtags: string[]; +} +export interface IEditProjectDetails { + name: string; + description: string; + short_description: string; +} + +export interface IProjectDetails { + dimension: number; + no_of_buildings: number; + odk_central_user?: string; + odk_central_password?: string; + organization?: number; + odk_central_url?: string; + name?: string; + hashtags?: string; + short_description?: string; + description?: string; + splitting_algorithm?: string; + xform_title?: string; + data_extract_options?: string; + data_extractWays?: string; + form_ways?: string; +} + +export interface IProjectArea { + // Define properties related to the project area here +} + +export interface IFormCategoryList { + id: number; + title: string; +} + +export interface IGenerateQrSuccess { + Message: string; + task_id: string; +} + +export interface IOrganizationList { + logo: string; + id: number; + url: string; + slug: string; + name: string; + description: string; + type: 1; +} + +export interface IGenerateProjectLog { + status: string; + message: string | null; + progress: number; + logs: string; +} + +export interface ITaskSplittingGeojson { + // Define properties related to the task splitting GeoJSON here +} + +export interface IDrawnGeojson { + type: string; + properties: null; + geometry: IGeometry; +} diff --git a/src/frontend/main/src/utilfunctions/testUtils.js b/src/frontend/main/src/utilfunctions/testUtils.js index 73aa55feb9..3bc4787685 100644 --- a/src/frontend/main/src/utilfunctions/testUtils.js +++ b/src/frontend/main/src/utilfunctions/testUtils.js @@ -1,6 +1,6 @@ import React from 'react'; import { Provider } from 'react-redux'; -import { store } from '../store/Store.js'; +import { store } from '../store/Store'; import { BrowserRouter } from 'react-router-dom'; import { act, render } from '@testing-library/react'; export const renderWithRouter = (ui, { route = '/' } = {}) => { diff --git a/src/frontend/main/tests/App.test.tsx b/src/frontend/main/tests/App.test.tsx index 4fcd22857f..59d3666ac7 100644 --- a/src/frontend/main/tests/App.test.tsx +++ b/src/frontend/main/tests/App.test.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { screen } from '@testing-library/react'; import '@testing-library/jest-dom'; import MainView from '../src/views/MainView'; -import { store } from '../src/store/Store.js'; +import { store } from '../src/store/Store'; import { renderWithRouter } from '../src/utilfunctions/testUtils'; import { Provider } from 'react-redux'; diff --git a/src/frontend/main/tests/CreateProject.test.tsx b/src/frontend/main/tests/CreateProject.test.tsx index 50f232df5c..1fe5c3eaca 100644 --- a/src/frontend/main/tests/CreateProject.test.tsx +++ b/src/frontend/main/tests/CreateProject.test.tsx @@ -2,7 +2,7 @@ import React from 'react'; import '@testing-library/jest-dom'; import MainView from '../src/views/MainView'; import { Provider } from 'react-redux'; -import { store } from '../src/store/Store.js'; +import { store } from '../src/store/Store'; import { renderWithRouter } from '../src/utilfunctions/testUtils'; jest.mock('axios'); // Mock axios module diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index 1b027bdf97..80f10532c9 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -153,7 +153,7 @@ module.exports = function (webpackEnv) { './LoginSlice': './src/store/slices/LoginSlice.ts', './ProjectSlice': './src/store/slices/ProjectSlice.ts', './CreateProjectSlice': './src/store/slices/CreateProjectSlice.ts', - './Store': './src/store/Store.js', + './Store': './src/store/Store.ts', './BasicCard': './src/utilities/BasicCard.tsx', './CustomizedMenus': './src/utilities/CustomizedMenus.tsx', './CustomizedSnackbar': './src/utilities/CustomizedSnackbar.jsx', From 99118df7f977e0a93eead7da49cec8b5bfa89d22 Mon Sep 17 00:00:00 2001 From: Varun Date: Tue, 8 Aug 2023 19:36:10 +0545 Subject: [PATCH 153/222] feat: typescript integration --- .../src/components/DialogTaskActions.jsx | 67 ++- .../ProjectInfo/ProjectInfoSidebar.jsx | 4 +- .../components/ProjectInfo/ProjectInfomap.jsx | 16 +- .../src/components/ProjectMap/ProjectMap.jsx | 117 ++-- .../src/components/QrcodeComponent.jsx | 13 +- .../src/components/TasksMap/TasksMap.jsx | 5 +- .../fmtm_openlayer_map/src/hooks/MapStyles.js | 2 +- .../src/layers/TasksLayer.jsx | 192 +++--- .../src/views/DefineAreaMap.jsx | 49 +- .../fmtm_openlayer_map/src/views/Home.jsx | 127 ++-- .../fmtm_openlayer_map/src/views/MainView.jsx | 50 +- .../src/views/ProjectInfo.jsx | 88 +-- .../src/views/Submissions.jsx | 302 ++++++---- .../fmtm_openlayer_map/src/views/Tasks.jsx | 555 ++++++++++-------- .../fmtm_openlayer_map/webpack.config.js | 72 ++- .../createproject/BasemapSelection.tsx | 70 +-- .../components/createproject/DataExtract.tsx | 8 +- .../components/createproject/DefineTasks.tsx | 16 +- .../createproject/FormSelection.tsx | 19 +- .../createproject/ProjectDetailsForm.tsx | 10 +- .../components/createproject/UploadArea.tsx | 9 +- .../editproject/EditProjectDetails.tsx | 34 +- .../src/components/editproject/UpdateForm.tsx | 12 +- .../editproject/UpdateProjectArea.tsx | 271 +++++---- .../components/home/ExploreProjectCard.tsx | 4 +- .../src/components/home/HomePageFilters.tsx | 7 +- .../organization/OrganizationAddForm.tsx | 9 +- src/frontend/main/src/shared/CoreModules.js | 8 +- src/frontend/main/src/store/Store.ts | 22 +- .../src/store/slices/CreateProjectSlice.ts | 2 +- .../main/src/{hooks => types}/reduxTypes.ts | 3 +- src/frontend/main/src/utilities/AppLoader.jsx | 39 +- src/frontend/main/src/utilities/BasicTabs.tsx | 2 +- .../main/src/utilities/CustomDrawer.jsx | 7 +- .../src/utilities/CustomizedProgressBar.tsx | 6 +- .../main/src/utilities/PrimaryAppBar.tsx | 46 +- .../main/src/utilities/ProtectedRoute.jsx | 2 +- src/frontend/main/src/views/Authorized.tsx | 57 +- src/frontend/main/src/views/Create.tsx | 6 +- .../main/src/views/CreateOrganization.tsx | 15 +- src/frontend/main/src/views/CreateProject.tsx | 3 +- src/frontend/main/src/views/EditProject.tsx | 4 +- src/frontend/main/src/views/Home.jsx | 10 +- src/frontend/main/src/views/Login.tsx | 6 +- src/frontend/main/src/views/MainView.jsx | 6 +- src/frontend/main/src/views/Organization.tsx | 4 +- .../main/src/views/SubmissionDetails.tsx | 5 +- src/frontend/main/webpack.config.js | 4 + 48 files changed, 1298 insertions(+), 1087 deletions(-) rename src/frontend/main/src/{hooks => types}/reduxTypes.ts (71%) diff --git a/src/frontend/fmtm_openlayer_map/src/components/DialogTaskActions.jsx b/src/frontend/fmtm_openlayer_map/src/components/DialogTaskActions.jsx index 41636df0b5..e858829cd7 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/DialogTaskActions.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/DialogTaskActions.jsx @@ -6,16 +6,16 @@ import CoreModules from "fmtm/CoreModules"; import { CommonActions } from "fmtm/CommonSlice"; export default function Dialog({ taskId, feature, map, view }) { // const featureStatus = feature.id_ != undefined ? feature.id_.replace("_", ",").split(',')[1] : null; - const projectData = CoreModules.useSelector( + const projectData = CoreModules.useAppSelector( (state) => state.project.projectTaskBoundries ); - const token = CoreModules.useSelector((state) => state.login.loginToken); - const loading = CoreModules.useSelector((state) => state.common.loading) + const token = CoreModules.useAppSelector((state) => state.login.loginToken); + const loading = CoreModules.useAppSelector((state) => state.common.loading); const [list_of_task_status, set_list_of_task_status] = useState([]); const [task_status, set_task_status] = useState("READY"); const geojsonStyles = MapStyles(); - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const params = CoreModules.useParams(); const currentProjectId = environment.decode(params.id); const currentTaskId = environment.encode(taskId); @@ -96,7 +96,9 @@ export default function Dialog({ taskId, feature, map, view }) { ); } }; - const checkIfTaskAssignedOrNot = currentStatus?.locked_by_username === token?.username || currentStatus?.locked_by_username === null; + const checkIfTaskAssignedOrNot = + currentStatus?.locked_by_username === token?.username || + currentStatus?.locked_by_username === null; return ( @@ -124,37 +126,38 @@ export default function Dialog({ taskId, feature, map, view }) { // key={index} variant="contained" color="error" - // onClick={handleOnClick} - // disabled={loading} + // onClick={handleOnClick} + // disabled={loading} > Task Submission - {checkIfTaskAssignedOrNot && list_of_task_status?.map((data, index) => { - return list_of_task_status?.length != 0 ? ( - - {data.key} - - ) : ( - - {data.key} - - ); - })} + {checkIfTaskAssignedOrNot && + list_of_task_status?.map((data, index) => { + return list_of_task_status?.length != 0 ? ( + + {data.key} + + ) : ( + + {data.key} + + ); + })} ); } diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx index 7f3655b5e8..1d5dc6e129 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx @@ -3,9 +3,9 @@ import CoreModules from "fmtm/CoreModules"; import ProjectCard from "./ProjectCard"; const ProjectInfoSidebar = ({ taskInfo }) => { - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const taskInfoData = Array.from(taskInfo); - const selectedTask = CoreModules.useSelector( + const selectedTask = CoreModules.useAppSelector( (state) => state.task.selectedTask ); diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index 6956653112..cbd58e8d03 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -103,23 +103,23 @@ const basicGeojsonTemplate = { features: [], }; const ProjectInfomap = () => { - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const [taskBoundaries, setTaskBoundaries] = useState(null); const [buildingGeojson, setBuildingGeojson] = useState(null); - const projectTaskBoundries = CoreModules.useSelector( + const projectTaskBoundries = CoreModules.useAppSelector( (state) => state.project.projectTaskBoundries ); - const taskInfo = CoreModules.useSelector((state) => state.task.taskInfo); + const taskInfo = CoreModules.useAppSelector((state) => state.task.taskInfo); const federalWiseProjectCount = taskInfo?.map((task) => ({ code: task.task_id, count: task.submission_count, })); - const projectBuildingGeojson = CoreModules.useSelector( + const projectBuildingGeojson = CoreModules.useAppSelector( (state) => state.project.projectBuildingGeojson ); - const selectedTask = CoreModules.useSelector( + const selectedTask = CoreModules.useAppSelector( (state) => state.task.selectedTask ); const params = CoreModules.useParams(); @@ -139,7 +139,7 @@ const ProjectInfomap = () => { }, []); useEffect(() => { - if (!projectTaskBoundries && projectTaskBoundries?.length>0) return + if (!projectTaskBoundries && projectTaskBoundries?.length > 0) return; const taskGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ @@ -162,7 +162,7 @@ const ProjectInfomap = () => { // setBuildingGeojson(taskBuildingGeojsonFeatureCollection); }, [projectTaskBoundries]); useEffect(() => { - if (!projectBuildingGeojson) return + if (!projectBuildingGeojson) return; const taskBuildingGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ @@ -298,4 +298,4 @@ const ProjectInfomap = () => { ); }; -export default ProjectInfomap; \ No newline at end of file +export default ProjectInfomap; diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectMap/ProjectMap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectMap/ProjectMap.jsx index 92a05fdb9a..77585d180a 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectMap/ProjectMap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectMap/ProjectMap.jsx @@ -1,44 +1,56 @@ -import React, { useState } from 'react' +import React, { useState } from "react"; import CoreModules from "fmtm/CoreModules"; -import { useOLMap } from '../MapComponent/OpenLayersComponent'; -import { MapContainer as MapComponent } from '../MapComponent/OpenLayersComponent'; -import LayerSwitcherControl from '../MapComponent/OpenLayersComponent/LayerSwitcher/index.js' -import { VectorLayer } from '../MapComponent/OpenLayersComponent/Layers'; +import { useOLMap } from "../MapComponent/OpenLayersComponent"; +import { MapContainer as MapComponent } from "../MapComponent/OpenLayersComponent"; +import LayerSwitcherControl from "../MapComponent/OpenLayersComponent/LayerSwitcher/index.js"; +import { VectorLayer } from "../MapComponent/OpenLayersComponent/Layers"; const basicGeojsonTemplate = { - "type": "FeatureCollection", - "features": [] + type: "FeatureCollection", + features: [], }; -const ProjectMap = ({ }) => { - const defaultTheme = CoreModules.useSelector((state) => state.theme.hotTheme); +const ProjectMap = ({}) => { + const defaultTheme = CoreModules.useAppSelector( + (state) => state.theme.hotTheme + ); const { mapRef, map } = useOLMap({ // center: fromLonLat([85.3, 27.7]), center: [0, 0], zoom: 4, maxZoom: 25, }); - const projectTaskBoundries = CoreModules.useSelector(state => state.project.projectTaskBoundries) - const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); + const projectTaskBoundries = CoreModules.useAppSelector( + (state) => state.project.projectTaskBoundries + ); + const projectBuildingGeojson = CoreModules.useAppSelector( + (state) => state.project.projectBuildingGeojson + ); - const [projectBoundaries, setProjectBoundaries] = useState(null) - const [buildingBoundaries, setBuildingBoundaries] = useState(null) + const [projectBoundaries, setProjectBoundaries] = useState(null); + const [buildingBoundaries, setBuildingBoundaries] = useState(null); if (projectTaskBoundries?.length > 0 && projectBoundaries === null) { - const taskGeojsonFeatureCollection = { ...basicGeojsonTemplate, - features: [...projectTaskBoundries?.[0]?.taskBoundries?.map((task) => ({ ...task.outline_geojson, id: task.outline_geojson.properties.uid }))] - + features: [ + ...projectTaskBoundries?.[0]?.taskBoundries?.map((task) => ({ + ...task.outline_geojson, + id: task.outline_geojson.properties.uid, + })), + ], }; - setProjectBoundaries(taskGeojsonFeatureCollection) + setProjectBoundaries(taskGeojsonFeatureCollection); } if (projectBuildingGeojson?.length > 0 && buildingBoundaries === null) { - const buildingGeojsonFeatureCollection = { ...basicGeojsonTemplate, - features: [...projectBuildingGeojson?.map((building) => ({ ...building.geometry.geometry, id: building.id }))] + features: [ + ...projectBuildingGeojson?.map((building) => ({ + ...building.geometry.geometry, + id: building.id, + })), + ], // features: projectBuildingGeojson.map((feature) => ({ ...feature.geometry, id: feature.id })) - }; setBuildingBoundaries(buildingGeojsonFeatureCollection); } @@ -49,49 +61,50 @@ const ProjectMap = ({ }) => { justifyContent={"center"} height={608} > -
+
- {projectBoundaries?.type && } - {buildingBoundaries?.type && } + {projectBoundaries?.type && ( + + )} + {buildingBoundaries?.type && ( + + )} {/* )} */}
- ) -} + ); +}; -export default ProjectMap \ No newline at end of file +export default ProjectMap; diff --git a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx index be800c9586..02217c068a 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/QrcodeComponent.jsx @@ -9,7 +9,7 @@ import AssetModules from "fmtm/AssetModules"; import { HomeActions } from "fmtm/HomeSlice"; const TasksComponent = ({ type, task, defaultTheme }) => { - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const [open, setOpen] = useState(false); const params = CoreModules.useParams(); const { loading, qrcode } = ProjectFilesById( @@ -100,11 +100,16 @@ const TasksComponent = ({ type, task, defaultTheme }) => { /> - { - document.location.href = 'intent://getodk.org/#Intent;scheme=app;package=org.odk.collect.android;end'; - }}>Go To ODK + document.location.href = + "intent://getodk.org/#Intent;scheme=app;package=org.odk.collect.android;end"; + }} + > + Go To ODK + { - // const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); - // const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); + // const projectTaskBoundries = CoreModules.useAppSelector((state) => state.project.projectTaskBoundries); + // const projectBuildingGeojson = CoreModules.useAppSelector((state) => state.project.projectBuildingGeojson); const { mapRef, map } = useOLMap({ // center: fromLonLat([85.3, 27.7]), @@ -25,7 +25,6 @@ const TasksMap = ({ projectTaskBoundries, projectBuildingGeojson }) => { }); console.log(projectTaskBoundries, "projectTaskBoundries"); - return (
state.theme.hotTheme) + const mapTheme = CoreModules.useAppSelector(state => state.theme.hotTheme) const [style, setStyle] = useState({}) useEffect(() => { diff --git a/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx b/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx index 464e69afa6..ed09925b3d 100755 --- a/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx +++ b/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx @@ -1,102 +1,100 @@ -import React, { useEffect } from 'react'; -import { Vector as VectorLayer } from 'ol/layer.js'; -import GeoJSON from 'ol/format/GeoJSON'; -import { Vector as VectorSource } from 'ol/source.js'; -import { geojsonObjectModel } from '../models/geojsonObjectModel'; -import MapStyles from '../hooks/MapStyles'; +import React, { useEffect } from "react"; +import { Vector as VectorLayer } from "ol/layer.js"; +import GeoJSON from "ol/format/GeoJSON"; +import { Vector as VectorSource } from "ol/source.js"; +import { geojsonObjectModel } from "../models/geojsonObjectModel"; +import MapStyles from "../hooks/MapStyles"; import environment from "fmtm/environment"; -import CoreModules from 'fmtm/CoreModules'; -import { get } from 'ol/proj'; +import CoreModules from "fmtm/CoreModules"; +import { get } from "ol/proj"; let geojsonObject; const TasksLayer = (map, view, feature) => { - const params = CoreModules.useParams(); - const state = CoreModules.useSelector(state => state.project) - const geojsonStyles = MapStyles(feature); - - useEffect(() => { - - if (state.projectTaskBoundries.length != 0 && map != undefined) { - - if (state.projectTaskBoundries.findIndex(project => project.id == environment.decode(params.id)) != -1) { - geojsonObject = null; - const index = state.projectTaskBoundries.findIndex(project => project.id == environment.decode(params.id)); - - const styleFunction = function (feature) { - let id = feature.getId().toString().replace("_", ","); - geojsonStyles[id.split(',')[1]] - return geojsonStyles[id.split(',')[1]]; - }; - - geojsonObject = { ...geojsonObjectModel } - geojsonObject['features'] = []; - state.projectTaskBoundries[index].taskBoundries.forEach((task) => { - geojsonObject['features'].push({ - id: `${task.id}_${task.task_status_str}`, - type: task.outline_geojson.type, - geometry: task.outline_geojson.geometry, - // properties: task.properties - }) - }) - console.log(geojsonObject, 'geojsonObject'); - console.log(state.projectTaskBoundries, 'projectTaskBoundries'); - const vectorSource = new VectorSource({ - features: new GeoJSON().readFeatures(geojsonObject, { - featureProjection: get("EPSG:3857") - }), - }); - - const vectorLayer = new VectorLayer({ - source: vectorSource, - style: styleFunction, - }); - // Initialize variables to store the extent - var minX = Infinity; - var minY = Infinity; - var maxX = -Infinity; - var maxY = -Infinity; - - // Iterate through the features and calculate the extent - vectorSource.getFeatures().forEach(function (feature) { - var geometry = feature.getGeometry(); - var extent = geometry.getExtent(); - - minX = Math.min(minX, extent[0]); - minY = Math.min(minY, extent[1]); - maxX = Math.max(maxX, extent[2]); - maxY = Math.max(maxY, extent[3]); - }); - - // The extent of the vector layer - var extent = [minX, minY, maxX, maxY]; - - map.getView().fit(extent, { - duration: 2000, // Animation duration in milliseconds - padding: [50, 50, 50, 200], // Optional padding around the extent - }) - - - map.addLayer(vectorLayer) - window.vector = vectorLayer - window.testmap = map - map.on('loadend', function () { - map.getTargetElement().classList.remove('spinner'); - }); - } - } - - }, [state.newProjectTrigger, map]) - - // useEffect(() => { - - // if (state.projectTaskBoundries.length != 0 && map != undefined) { - // if (state.projectTaskBoundries.findIndex(project => project.id == environment.decode(params.id)) != -1) { - // } - // } - // }, [map]) - - - - -} + const params = CoreModules.useParams(); + const state = CoreModules.useAppSelector((state) => state.project); + const geojsonStyles = MapStyles(feature); + + useEffect(() => { + if (state.projectTaskBoundries.length != 0 && map != undefined) { + if ( + state.projectTaskBoundries.findIndex( + (project) => project.id == environment.decode(params.id) + ) != -1 + ) { + geojsonObject = null; + const index = state.projectTaskBoundries.findIndex( + (project) => project.id == environment.decode(params.id) + ); + + const styleFunction = function (feature) { + let id = feature.getId().toString().replace("_", ","); + geojsonStyles[id.split(",")[1]]; + return geojsonStyles[id.split(",")[1]]; + }; + + geojsonObject = { ...geojsonObjectModel }; + geojsonObject["features"] = []; + state.projectTaskBoundries[index].taskBoundries.forEach((task) => { + geojsonObject["features"].push({ + id: `${task.id}_${task.task_status_str}`, + type: task.outline_geojson.type, + geometry: task.outline_geojson.geometry, + // properties: task.properties + }); + }); + console.log(geojsonObject, "geojsonObject"); + console.log(state.projectTaskBoundries, "projectTaskBoundries"); + const vectorSource = new VectorSource({ + features: new GeoJSON().readFeatures(geojsonObject, { + featureProjection: get("EPSG:3857"), + }), + }); + + const vectorLayer = new VectorLayer({ + source: vectorSource, + style: styleFunction, + }); + // Initialize variables to store the extent + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + + // Iterate through the features and calculate the extent + vectorSource.getFeatures().forEach(function (feature) { + var geometry = feature.getGeometry(); + var extent = geometry.getExtent(); + + minX = Math.min(minX, extent[0]); + minY = Math.min(minY, extent[1]); + maxX = Math.max(maxX, extent[2]); + maxY = Math.max(maxY, extent[3]); + }); + + // The extent of the vector layer + var extent = [minX, minY, maxX, maxY]; + + map.getView().fit(extent, { + duration: 2000, // Animation duration in milliseconds + padding: [50, 50, 50, 200], // Optional padding around the extent + }); + + map.addLayer(vectorLayer); + window.vector = vectorLayer; + window.testmap = map; + map.on("loadend", function () { + map.getTargetElement().classList.remove("spinner"); + }); + } + } + }, [state.newProjectTrigger, map]); + + // useEffect(() => { + + // if (state.projectTaskBoundries.length != 0 && map != undefined) { + // if (state.projectTaskBoundries.findIndex(project => project.id == environment.decode(params.id)) != -1) { + // } + // } + // }, [map]) +}; export default TasksLayer; diff --git a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx index 674d4318fc..25c9019758 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx @@ -6,13 +6,21 @@ import { VectorLayer } from "../components/MapComponent/OpenLayersComponent/Laye import CoreModules from "fmtm/CoreModules"; import { CreateProjectActions } from "fmtm/CreateProjectSlice"; - -const DefineAreaMap = ({ uploadedGeojson, setGeojsonFile, uploadedDataExtractFile, onDraw }) => { - const drawnGeojson = CoreModules.useSelector((state) => state.createproject.drawnGeojson); - const drawToggle = CoreModules.useSelector((state) => state.createproject.drawToggle); - const dispatch = CoreModules.useDispatch(); +const DefineAreaMap = ({ + uploadedGeojson, + setGeojsonFile, + uploadedDataExtractFile, + onDraw, +}) => { + const drawnGeojson = CoreModules.useAppSelector( + (state) => state.createproject.drawnGeojson + ); + const drawToggle = CoreModules.useAppSelector( + (state) => state.createproject.drawToggle + ); + const dispatch = CoreModules.useAppDispatch(); const [dataExtractedGeojson, setDataExtractedGeojson] = useState(null); - const dividedTaskGeojson = CoreModules.useSelector( + const dividedTaskGeojson = CoreModules.useAppSelector( (state) => state.createproject.dividedTaskGeojson ); @@ -23,11 +31,8 @@ const DefineAreaMap = ({ uploadedGeojson, setGeojsonFile, uploadedDataExtractFil maxZoom: 25, }); - - useEffect(() => { if (dividedTaskGeojson || onDraw) { - } else if (uploadedGeojson) { const fileReader = new FileReader(); fileReader.readAsText(uploadedGeojson, "UTF-8"); @@ -60,17 +65,19 @@ const DefineAreaMap = ({ uploadedGeojson, setGeojsonFile, uploadedDataExtractFil }} > - {drawToggle && } + {drawToggle && ( + + )} {dividedTaskGeojson && ( )} diff --git a/src/frontend/fmtm_openlayer_map/src/views/Home.jsx b/src/frontend/fmtm_openlayer_map/src/views/Home.jsx index 87679d28e7..3546cf9257 100755 --- a/src/frontend/fmtm_openlayer_map/src/views/Home.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Home.jsx @@ -24,19 +24,23 @@ import AssetModules from "fmtm/AssetModules"; import Overlay from "ol/Overlay"; const Home = () => { - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const params = CoreModules.useParams(); - const defaultTheme = CoreModules.useSelector((state) => state.theme.hotTheme); - const state = CoreModules.useSelector((state) => state.project); + const defaultTheme = CoreModules.useAppSelector( + (state) => state.theme.hotTheme + ); + const state = CoreModules.useAppSelector((state) => state.project); - const projectInfo = CoreModules.useSelector( + const projectInfo = CoreModules.useAppSelector( (state) => state.home.selectedProject ); - const stateDialog = CoreModules.useSelector( + const stateDialog = CoreModules.useAppSelector( (state) => state.home.dialogStatus ); - const stateSnackBar = CoreModules.useSelector((state) => state.home.snackbar); + const stateSnackBar = CoreModules.useAppSelector( + (state) => state.home.snackbar + ); const [taskId, setTaskId] = useState(); const mapElement = useRef(); const [map, setMap] = useState(); @@ -47,7 +51,9 @@ const Home = () => { const decodedId = environment.decode(encodedId); const { windowSize, type } = WindowDimension(); const { y } = OnScroll(map, windowSize.width); - const downloadProjectFormLoading = CoreModules.useSelector((state) => state.project.downloadProjectFormLoading) + const downloadProjectFormLoading = CoreModules.useAppSelector( + (state) => state.project.downloadProjectFormLoading + ); //snackbar handle close funtion const handleClose = (event, reason) => { @@ -72,7 +78,7 @@ const Home = () => { (project) => project.id == environment.decode(encodedId) ) == -1 ) { - dispatch(ProjectActions.SetProjectTaskBoundries([])) + dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch( ProjectById( @@ -82,9 +88,8 @@ const Home = () => { state.projectTaskBoundries ); // dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${environment.decode(encodedId)}/features`)) - } else { - dispatch(ProjectActions.SetProjectTaskBoundries([])) + dispatch(ProjectActions.SetProjectTaskBoundries([])); dispatch( ProjectById( `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, @@ -138,7 +143,6 @@ const Home = () => { source: new VectorSource(), }); - const view = new View({ projection: "EPSG:3857", center: [0, 0], @@ -156,14 +160,18 @@ const Home = () => { source: new OSM(), visible: true, }), - initalFeaturesLayer + initalFeaturesLayer, ], overlays: [overlay], view: view, }); initialMap.on("click", function (event) { initialMap.forEachFeatureAtPixel(event.pixel, function (feature, layer) { - const status = feature.getId()?.toString()?.replace("_", ",")?.split(",")?.[1]; + const status = feature + .getId() + ?.toString() + ?.replace("_", ",") + ?.split(",")?.[1]; if ( environment.tasksStatus.findIndex((data) => data.label == status) != -1 @@ -206,18 +214,19 @@ const Home = () => { // } TasksLayer(map, mainView, featuresLayer); - const handleDownload = (downloadType) => { - if (downloadType === 'form') { + if (downloadType === "form") { dispatch( DownloadProjectForm( - `${environment.baseApiUrl}/projects/download_form/${decodedId}/`, downloadType + `${environment.baseApiUrl}/projects/download_form/${decodedId}/`, + downloadType ) ); - } else if (downloadType === 'geojson') { + } else if (downloadType === "geojson") { dispatch( DownloadProjectForm( - `${environment.baseApiUrl}/projects/${decodedId}/download_tasks`, downloadType + `${environment.baseApiUrl}/projects/${decodedId}/download_tasks`, + downloadType ) ); } @@ -324,33 +333,53 @@ const Home = () => { type={type} /> -
+
handleDownload('form')} - sx={{ width: 'unset' }} - loading={downloadProjectFormLoading.type === 'form' && downloadProjectFormLoading.loading} + onClick={() => handleDownload("form")} + sx={{ width: "unset" }} + loading={ + downloadProjectFormLoading.type === "form" && + downloadProjectFormLoading.loading + } loadingPosition="end" endIcon={} variant="contained" color="error" > - Form handleDownload('geojson')} - sx={{ width: 'unset' }} - loading={downloadProjectFormLoading.type === 'geojson' && downloadProjectFormLoading.loading} + onClick={() => handleDownload("geojson")} + sx={{ width: "unset" }} + loading={ + downloadProjectFormLoading.type === "geojson" && + downloadProjectFormLoading.loading + } loadingPosition="end" endIcon={} variant="contained" color="error" > - Geojson
-
+
{ marginRight: "15px", }} > - + ProjectInfo @@ -378,31 +404,30 @@ const Home = () => { marginRight: "15px", }} > - + Edit Project
{/* */} - {params?.id && } + {params?.id && ( + + )} {/* project Details Tabs */} diff --git a/src/frontend/fmtm_openlayer_map/src/views/MainView.jsx b/src/frontend/fmtm_openlayer_map/src/views/MainView.jsx index 25b1eb4304..0be7f9b764 100755 --- a/src/frontend/fmtm_openlayer_map/src/views/MainView.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/MainView.jsx @@ -1,29 +1,29 @@ import React, { Suspense } from "react"; import WindowDimension from "fmtm/WindowDimension"; -import CoreModules from 'fmtm/CoreModules'; +import CoreModules from "fmtm/CoreModules"; export default function MainView() { - - const { windowSize } = WindowDimension(); - const getTheme = CoreModules.useSelector(state => state.theme.hotTheme) - const theme = CoreModules.createTheme(getTheme) - const PrimaryAppBar = React.lazy(() => import('fmtm/PrimaryAppBar')) - return ( - - - - - - -
}> - - - - - {/* Footer */} - - - - - - ) + const { windowSize } = WindowDimension(); + const getTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); + const theme = CoreModules.createTheme(getTheme); + const PrimaryAppBar = React.lazy(() => import("fmtm/PrimaryAppBar")); + return ( + + + + + +
}> + + + + + {/* Footer */} + +
+ + + + ); } diff --git a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx index 3879a1da4a..30d14c0205 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx @@ -8,7 +8,7 @@ import { fetchInfoTask, getDownloadProjectSubmission, } from "../api/task"; -import AssetModules from 'fmtm/AssetModules'; +import AssetModules from "fmtm/AssetModules"; const boxStyles = { animation: "blink 1s infinite", @@ -26,12 +26,12 @@ const boxStyles = { }; const ProjectInfo = () => { - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const navigate = CoreModules.useNavigate(); const [isMonitoring, setIsMonitoring] = useState(false); - const taskInfo = CoreModules.useSelector((state) => state.task.taskInfo); - const selectedTask = CoreModules.useSelector( + const taskInfo = CoreModules.useAppSelector((state) => state.task.taskInfo); + const selectedTask = CoreModules.useAppSelector( (state) => state.task.selectedTask ); @@ -40,13 +40,13 @@ const ProjectInfo = () => { const decodedId = environment.decode(encodedId); const handleDownload = (downloadType) => { - if(downloadType === 'csv'){ + if (downloadType === "csv") { dispatch( getDownloadProjectSubmission( `${environment.baseApiUrl}/submission/download?project_id=${decodedId}&export_json=false` ) ); - }else if(downloadType === 'json'){ + } else if (downloadType === "json") { dispatch( getDownloadProjectSubmission( `${environment.baseApiUrl}/submission/download?project_id=${decodedId}&export_json=true` @@ -58,7 +58,11 @@ const ProjectInfo = () => { const handleConvert = () => { dispatch( fetchConvertToOsmDetails( - `${environment.baseApiUrl}/submission/convert-to-osm?project_id=${decodedId}&${selectedTask ?`task_id=${selectedTask}`:''}` + `${ + environment.baseApiUrl + }/submission/convert-to-osm?project_id=${decodedId}&${ + selectedTask ? `task_id=${selectedTask}` : "" + }` ) ); }; @@ -86,10 +90,12 @@ const ProjectInfo = () => { setIsMonitoring((prevState) => !prevState); }; - const projectInfo = CoreModules.useSelector( + const projectInfo = CoreModules.useAppSelector( (state) => state.project.projectInfo ); - const downloadSubmissionLoading = CoreModules.useSelector((state)=>state.task.downloadSubmissionLoading) + const downloadSubmissionLoading = CoreModules.useAppSelector( + (state) => state.task.downloadSubmissionLoading + ); return ( <> @@ -104,18 +110,27 @@ const ProjectInfo = () => { }} > - { navigate(-1); // setOpen(true); }} color="info" > - - - Back - + + + Back + #{projectInfo?.id} @@ -181,27 +196,32 @@ const ProjectInfo = () => { Convert handleDownload('csv')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type=== 'csv' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - - CSV + onClick={() => handleDownload("csv")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "csv" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + CSV handleDownload('json')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type === 'json' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - JSON + onClick={() => handleDownload("json")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "json" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + JSON diff --git a/src/frontend/fmtm_openlayer_map/src/views/Submissions.jsx b/src/frontend/fmtm_openlayer_map/src/views/Submissions.jsx index b669802717..df2dfb410f 100755 --- a/src/frontend/fmtm_openlayer_map/src/views/Submissions.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Submissions.jsx @@ -1,147 +1,193 @@ import React, { useEffect } from "react"; // import '../styles/home.css' import "../../node_modules/ol/ol.css"; -import CoreModules from 'fmtm/CoreModules'; +import CoreModules from "fmtm/CoreModules"; // import { useLocation, useNavigate } from 'react-router-dom'; -import Avatar from '../assets/images/avatar.png' +import Avatar from "../assets/images/avatar.png"; import SubmissionMap from "../components/SubmissionMap/SubmissionMap"; import environment from "fmtm/environment"; -import { ProjectBuildingGeojsonService, ProjectSubmissionService } from "../api/SubmissionService"; +import { + ProjectBuildingGeojsonService, + ProjectSubmissionService, +} from "../api/SubmissionService"; import { ProjectActions } from "fmtm/ProjectSlice"; import { ProjectById } from "../api/Project"; -// import { useDispatch } from 'react-redux'; const Submissions = () => { - const dispatch = CoreModules.useDispatch(); - const state = CoreModules.useSelector((state) => state.project); - const projectInfo = CoreModules.useSelector( - (state) => state.home.selectedProject + const dispatch = CoreModules.useAppDispatch(); + const state = CoreModules.useAppSelector((state) => state.project); + const projectInfo = CoreModules.useAppSelector( + (state) => state.home.selectedProject + ); + const projectSubmissionState = CoreModules.useAppSelector( + (state) => state.project.projectSubmission + ); + const projectState = CoreModules.useAppSelector( + (state) => state.project.project + ); + // const projectTaskBoundries = CoreModules.useAppSelector((state) => state.project.projectTaskBoundries); + // const projectBuildingGeojson = CoreModules.useAppSelector((state) => state.project.projectBuildingGeojson); + const params = CoreModules.useParams(); + const encodedId = params.id; + const decodedId = environment.decode(encodedId); + // const theme = CoreModules.useAppSelector(state => state.theme.hotTheme) + useEffect(() => { + dispatch( + ProjectSubmissionService( + `${environment.baseApiUrl}/submission/?project_id=${decodedId}` + ) ); - const projectSubmissionState = CoreModules.useSelector((state) => state.project.projectSubmission); - const projectState = CoreModules.useSelector((state) => state.project.project); - // const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); - // const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); - const params = CoreModules.useParams(); - const encodedId = params.id; - const decodedId = environment.decode(encodedId); - // const theme = CoreModules.useSelector(state => state.theme.hotTheme) - useEffect(() => { - dispatch(ProjectSubmissionService(`${environment.baseApiUrl}/submission/?project_id=${decodedId}`)) - dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${decodedId}/features`)) - //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page - }, []) - - // Requesting Task Boundaries on Page Load - useEffect(() => { - if ( - state.projectTaskBoundries.findIndex( - (project) => project.id == environment.decode(encodedId) - ) == -1 - ) { - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - } else { - dispatch(ProjectActions.SetProjectTaskBoundries([])) - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - } - if (Object.keys(state.projectInfo).length == 0) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } else { - if (state.projectInfo.id != environment.decode(encodedId)) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } - } - }, [params.id]); - return ( - - - - - {/* Project Details SideBar Button for Creating Project */} - - Monitoring - + dispatch( + ProjectBuildingGeojsonService( + `${environment.baseApiUrl}/projects/${decodedId}/features` + ) + ); + //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page + }, []); - {/* END */} + // Requesting Task Boundaries on Page Load + useEffect(() => { + if ( + state.projectTaskBoundries.findIndex( + (project) => project.id == environment.decode(encodedId) + ) == -1 + ) { + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + } else { + dispatch(ProjectActions.SetProjectTaskBoundries([])); + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + } + if (Object.keys(state.projectInfo).length == 0) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } else { + if (state.projectInfo.id != environment.decode(encodedId)) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } + } + }, [params.id]); + return ( + + + + + {/* Project Details SideBar Button for Creating Project */} + + Monitoring + - {/* Upload Area SideBar Button for uploading Area page */} - - Convert - -
- - Download CSV - - - {/* END */} - - - {projectSubmissionState?.map((submission) => { - const date = new Date(submission.createdAt); + {/* END */} - const dateOptions = { - minute: 'numeric', - hour: 'numeric', - day: 'numeric', - weekday: 'long', - year: 'numeric', - month: 'long', - }; + {/* Upload Area SideBar Button for uploading Area page */} + + Convert + + + + Download CSV + + + {/* END */} + + + {projectSubmissionState?.map((submission) => { + const date = new Date(submission.createdAt); - const formattedDate = date.toLocaleDateString('en-US', dateOptions); - return - - - - {submission.submitted_by} - - - Submitted {projectState?.project} at {formattedDate} - - - - })} + const dateOptions = { + minute: "numeric", + hour: "numeric", + day: "numeric", + weekday: "long", + year: "numeric", + month: "long", + }; - - - - + const formattedDate = date.toLocaleDateString( + "en-US", + dateOptions + ); + return ( + + + {" "} + + + + {submission.submitted_by} + + + Submitted {projectState?.project} at {formattedDate} + + - - - - ) - -} + ); + })} + + + + + + + + ); +}; export default Submissions; diff --git a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx index 52802b4878..cba684a579 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx @@ -1,262 +1,355 @@ import React, { useEffect, useState } from "react"; // import '../styles/home.css' import "../../node_modules/ol/ol.css"; -import CoreModules from 'fmtm/CoreModules'; -import AssetModules from 'fmtm/AssetModules'; +import CoreModules from "fmtm/CoreModules"; +import AssetModules from "fmtm/AssetModules"; // import { useLocation, useNavigate } from 'react-router-dom'; // import { styled, alpha } from '@mui/material'; -import Avatar from '../assets/images/avatar.png' +import Avatar from "../assets/images/avatar.png"; import SubmissionMap from "../components/SubmissionMap/SubmissionMap"; import environment from "fmtm/environment"; -import { ProjectBuildingGeojsonService, ProjectSubmissionService } from "../api/SubmissionService"; +import { + ProjectBuildingGeojsonService, + ProjectSubmissionService, +} from "../api/SubmissionService"; import { ProjectActions } from "fmtm/ProjectSlice"; import { ProjectById } from "../api/Project"; import { getDownloadProjectSubmission } from "../api/task"; const basicGeojsonTemplate = { - "type": "FeatureCollection", - "features": [] + type: "FeatureCollection", + features: [], }; const TasksSubmission = () => { - const dispatch = CoreModules.useDispatch(); - const state = CoreModules.useSelector((state) => state.project); - const projectInfo = CoreModules.useSelector( - (state) => state.home.selectedProject + const dispatch = CoreModules.useAppDispatch(); + const state = CoreModules.useAppSelector((state) => state.project); + const projectInfo = CoreModules.useAppSelector( + (state) => state.home.selectedProject + ); + const projectSubmissionState = CoreModules.useAppSelector( + (state) => state.project.projectSubmission + ); + const projectState = CoreModules.useAppSelector( + (state) => state.project.project + ); + // const projectTaskBoundries = CoreModules.useAppSelector((state) => state.project.projectTaskBoundries); + // const projectBuildingGeojson = CoreModules.useAppSelector((state) => state.project.projectBuildingGeojson); + const params = CoreModules.useParams(); + const encodedProjectId = params.projectId; + const decodedProjectId = environment.decode(encodedProjectId); + const encodedTaskId = params.taskId; + const decodedTaskId = environment.decode(encodedTaskId); + // const theme = CoreModules.useAppSelector(state => state.theme.hotTheme) + useEffect(() => { + dispatch( + ProjectSubmissionService( + `${environment.baseApiUrl}/submission/?project_id=${decodedProjectId}&task_id=${decodedTaskId}` + ) ); - const projectSubmissionState = CoreModules.useSelector((state) => state.project.projectSubmission); - const projectState = CoreModules.useSelector((state) => state.project.project); - // const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); - // const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); - const params = CoreModules.useParams(); - const encodedProjectId = params.projectId; - const decodedProjectId = environment.decode(encodedProjectId); - const encodedTaskId = params.taskId; - const decodedTaskId = environment.decode(encodedTaskId); - // const theme = CoreModules.useSelector(state => state.theme.hotTheme) - useEffect(() => { - dispatch(ProjectSubmissionService(`${environment.baseApiUrl}/submission/?project_id=${decodedProjectId}&task_id=${decodedTaskId}`)) - dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${decodedProjectId}/features?task_id=${decodedTaskId}`)) - //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page - }, []) - //Fetch project for the first time - useEffect(() => { - if ( - state.projectTaskBoundries.findIndex( - (project) => project.id == environment.decode(encodedProjectId) - ) == -1 - ) { - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}/features`)) - - } else { - dispatch(ProjectActions.SetProjectTaskBoundries([])) - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - } - if (Object.keys(state.projectInfo).length == 0) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } else { - if (state.projectInfo.id != environment.decode(encodedProjectId)) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } - } - }, [params.id]); - const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); - const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); - const [projectBoundaries, setProjectBoundaries] = useState(null) - const [buildingBoundaries, setBuildingBoundaries] = useState(null) - - if (projectTaskBoundries?.length > 0 && projectBoundaries === null) { - - const taskGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [...projectTaskBoundries?.[0]?.taskBoundries?.filter((task) => task.id === decodedTaskId).map((task) => ({ ...task.outline_geojson, id: task.outline_geojson.properties.uid }))] - - }; - console.log(taskGeojsonFeatureCollection, 'taskGeojsonFeatureCollection'); - setProjectBoundaries(taskGeojsonFeatureCollection) + dispatch( + ProjectBuildingGeojsonService( + `${environment.baseApiUrl}/projects/${decodedProjectId}/features?task_id=${decodedTaskId}` + ) + ); + //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page + }, []); + //Fetch project for the first time + useEffect(() => { + if ( + state.projectTaskBoundries.findIndex( + (project) => project.id == environment.decode(encodedProjectId) + ) == -1 + ) { + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + dispatch( + ProjectBuildingGeojsonService( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}/features` + ) + ); + } else { + dispatch(ProjectActions.SetProjectTaskBoundries([])); + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); } - if (projectBuildingGeojson?.length > 0 && buildingBoundaries === null) { - - const buildingGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [...projectBuildingGeojson?.filter((task) => task.task_id === decodedTaskId).map((task) => ({ ...task.geometry, id: task.id }))] - // features: projectBuildingGeojson.map((feature) => ({ ...feature.geometry, id: feature.id })) - - }; - setBuildingBoundaries(buildingGeojsonFeatureCollection); + if (Object.keys(state.projectInfo).length == 0) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } else { + if (state.projectInfo.id != environment.decode(encodedProjectId)) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } } + }, [params.id]); + const projectTaskBoundries = CoreModules.useAppSelector( + (state) => state.project.projectTaskBoundries + ); + const projectBuildingGeojson = CoreModules.useAppSelector( + (state) => state.project.projectBuildingGeojson + ); + const [projectBoundaries, setProjectBoundaries] = useState(null); + const [buildingBoundaries, setBuildingBoundaries] = useState(null); - const StyledMenu = AssetModules.styled((props) => ( - - ))(({ theme }) => ({ - '& .MuiPaper-root': { - borderRadius: 6, - marginTop: theme.spacing(1), - minWidth: 180, - color: - theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[300], - boxShadow: - 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px', - '& .MuiMenu-list': { - padding: '4px 0', - }, - '& .MuiMenuItem-root': { - '& .MuiSvgIcon-root': { - fontSize: 18, - color: theme.palette.text.secondary, - marginRight: theme.spacing(1.5), - }, - '&:active': { - backgroundColor: AssetModules.alpha( - theme.palette.primary.main, - theme.palette.action.selectedOpacity, - ), - }, - }, - }, - })); + if (projectTaskBoundries?.length > 0 && projectBoundaries === null) { + const taskGeojsonFeatureCollection = { + ...basicGeojsonTemplate, + features: [ + ...projectTaskBoundries?.[0]?.taskBoundries + ?.filter((task) => task.id === decodedTaskId) + .map((task) => ({ + ...task.outline_geojson, + id: task.outline_geojson.properties.uid, + })), + ], + }; + console.log(taskGeojsonFeatureCollection, "taskGeojsonFeatureCollection"); + setProjectBoundaries(taskGeojsonFeatureCollection); + } + if (projectBuildingGeojson?.length > 0 && buildingBoundaries === null) { + const buildingGeojsonFeatureCollection = { + ...basicGeojsonTemplate, + features: [ + ...projectBuildingGeojson + ?.filter((task) => task.task_id === decodedTaskId) + .map((task) => ({ ...task.geometry, id: task.id })), + ], + // features: projectBuildingGeojson.map((feature) => ({ ...feature.geometry, id: feature.id })) + }; + setBuildingBoundaries(buildingGeojsonFeatureCollection); + } - const handleDownload = (downloadType) => { - if(downloadType === 'csv'){ - dispatch( - getDownloadProjectSubmission( - `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=false` - ) - ); - }else if(downloadType === 'json'){ - dispatch( - getDownloadProjectSubmission( - `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=true` - ) - ); + const StyledMenu = AssetModules.styled((props) => ( + state.task.downloadSubmissionLoading) + } + transformOrigin={{ + vertical: "top", + horizontal: "right", + }} + {...props} + /> + ))(({ theme }) => ({ + "& .MuiPaper-root": { + borderRadius: 6, + marginTop: theme.spacing(1), + minWidth: 180, + color: + theme.palette.mode === "light" + ? "rgb(55, 65, 81)" + : theme.palette.grey[300], + boxShadow: + "rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px", + "& .MuiMenu-list": { + padding: "4px 0", + }, + "& .MuiMenuItem-root": { + "& .MuiSvgIcon-root": { + fontSize: 18, + color: theme.palette.text.secondary, + marginRight: theme.spacing(1.5), + }, + "&:active": { + backgroundColor: AssetModules.alpha( + theme.palette.primary.main, + theme.palette.action.selectedOpacity + ), + }, + }, + }, + })); - return ( - - - - - {/* Project Details SideBar Button for Creating Project */} - - Monitoring - + const handleDownload = (downloadType) => { + if (downloadType === "csv") { + dispatch( + getDownloadProjectSubmission( + `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=false` + ) + ); + } else if (downloadType === "json") { + dispatch( + getDownloadProjectSubmission( + `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=true` + ) + ); + } + }; - {/* END */} + const downloadSubmissionLoading = CoreModules.useAppSelector( + (state) => state.task.downloadSubmissionLoading + ); - {/* Upload Area SideBar Button for uploading Area page */} - - Convert - - handleDownload('csv')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type=== 'csv' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - - CSV - - - - handleDownload('json')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type === 'json' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - JSON - + return ( + + + + + {/* Project Details SideBar Button for Creating Project */} + + Monitoring + - {/* END */} - - - {projectSubmissionState?.map((submission) => { - const date = new Date(submission.createdAt); + {/* END */} - const dateOptions = { - minute: 'numeric', - hour: 'numeric', - day: 'numeric', - weekday: 'long', - year: 'numeric', - month: 'long', - }; + {/* Upload Area SideBar Button for uploading Area page */} + + Convert + + handleDownload("csv")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "csv" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + CSV + - const formattedDate = date.toLocaleDateString('en-US', dateOptions); - return - - - - {submission.submitted_by} - - - Submitted {projectState?.project} at {formattedDate} - - - - })} + handleDownload("json")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "json" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + JSON + - - - - - - + {/* END */} + + + {projectSubmissionState?.map((submission) => { + const date = new Date(submission.createdAt); - - ) + const dateOptions = { + minute: "numeric", + hour: "numeric", + day: "numeric", + weekday: "long", + year: "numeric", + month: "long", + }; -} + const formattedDate = date.toLocaleDateString( + "en-US", + dateOptions + ); + return ( + + + + {" "} + + + + {submission.submitted_by} + + + Submitted {projectState?.project} at {formattedDate} + + + + + ); + })} + + + + + + + + ); +}; -export default TasksSubmission; \ No newline at end of file +export default TasksSubmission; diff --git a/src/frontend/fmtm_openlayer_map/webpack.config.js b/src/frontend/fmtm_openlayer_map/webpack.config.js index ae94cefc54..451ba4c708 100755 --- a/src/frontend/fmtm_openlayer_map/webpack.config.js +++ b/src/frontend/fmtm_openlayer_map/webpack.config.js @@ -2,25 +2,27 @@ const { EnvironmentPlugin } = require("webpack"); const HtmlWebPackPlugin = require("html-webpack-plugin"); const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin"); // const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; -const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); -const TerserPlugin = require('terser-webpack-plugin'); -const path = require('path'); +const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); +const TerserPlugin = require("terser-webpack-plugin"); +const path = require("path"); const deps = require("./package.json").dependencies; module.exports = (webpackEnv) => { - const isEnvDevelopment = webpackEnv === 'development'; - const isEnvProduction = webpackEnv === 'production'; + const isEnvDevelopment = webpackEnv === "development"; + const isEnvProduction = webpackEnv === "production"; return { - stats: 'errors-warnings', + stats: "errors-warnings", cache: true, - mode: isEnvProduction ? 'production' : isEnvDevelopment && 'development', + mode: isEnvProduction ? "production" : isEnvDevelopment && "development", // Stop compilation early in production // bail: isEnvProduction, - devtool: isEnvProduction ? 'source-map' : isEnvDevelopment && 'eval-source-map', + devtool: isEnvProduction + ? "source-map" + : isEnvDevelopment && "eval-source-map", output: { publicPath: `${process.env.FRONTEND_MAP_URL}/`, path: path.resolve(__dirname, "dist"), filename: "[name].[contenthash].bundle.js", - clean:true + clean: true, }, resolve: { extensions: [".tsx", ".ts", ".jsx", ".js", ".json"], @@ -31,9 +33,10 @@ module.exports = (webpackEnv) => { port: `${new URL(process.env.FRONTEND_MAP_URL).port}`, historyApiFallback: true, allowedHosts: [`${process.env.FRONTEND_MAP_URL}`], - headers:{ - 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept', + headers: { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Headers": + "Origin, X-Requested-With, Content-Type, Accept", }, }, @@ -41,7 +44,7 @@ module.exports = (webpackEnv) => { rules: [ { test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/, /\.ttf$/, /\.otf$/], - type: 'asset', + type: "asset", parser: { dataUrlCondition: { maxSize: 1000, @@ -65,7 +68,6 @@ module.exports = (webpackEnv) => { use: { loader: "babel-loader", }, - }, ], }, @@ -95,12 +97,12 @@ module.exports = (webpackEnv) => { ecma: 5, comments: false, ascii__only: true, - } + }, }, - + // Use multi-process parallel running to improve the build speed parallel: true, - + // Enable file caching cache: true, }, @@ -135,6 +137,10 @@ module.exports = (webpackEnv) => { singleton: true, requiredVersion: deps["react-dom"], }, + "react-redux": { + singleton: true, + version: deps["react-router-dom"], + }, }, }), new HtmlWebPackPlugin( @@ -145,23 +151,25 @@ module.exports = (webpackEnv) => { template: "./src/index.html", }, // Only for production - isEnvProduction ? { - minify: { - removeComments: true, - collapseWhitespace: true, - removeRedundantAttributes: true, - useShortDoctype: true, - removeEmptyAttributes: true, - removeStyleLinkTypeAttributes: true, - keepClosingSlash: true, - minifyJS: true, - minifyCSS: true, - minifyURLs: true - } - } : undefined + isEnvProduction + ? { + minify: { + removeComments: true, + collapseWhitespace: true, + removeRedundantAttributes: true, + useShortDoctype: true, + removeEmptyAttributes: true, + removeStyleLinkTypeAttributes: true, + keepClosingSlash: true, + minifyJS: true, + minifyCSS: true, + minifyURLs: true, + }, + } + : undefined ) ), new EnvironmentPlugin(["FRONTEND_MAIN_URL", "FRONTEND_MAP_URL"]), ], - } + }; }; diff --git a/src/frontend/main/src/components/createproject/BasemapSelection.tsx b/src/frontend/main/src/components/createproject/BasemapSelection.tsx index 046511af40..73dc380314 100644 --- a/src/frontend/main/src/components/createproject/BasemapSelection.tsx +++ b/src/frontend/main/src/components/createproject/BasemapSelection.tsx @@ -1,28 +1,22 @@ -import React from 'react' +import React from 'react'; import CoreModules from '../../shared/CoreModules.js'; // import { SelectPicker } from 'rsuite'; -import { useDispatch } from 'react-redux'; import { useNavigate } from 'react-router-dom'; const BasemapSelection: React.FC = () => { - const dispatch = useDispatch(); - const navigate = useNavigate(); + const navigate = useNavigate(); - const defaultTheme: any = CoreModules.useSelector(state => state.theme.hotTheme) + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); - const imagerySource = ['OAM', 'Topo']; - const imagerySourceData = imagerySource.map( - item => ({ label: item, value: item }) - ); - const mapTiles = ['mbtiles for ODK Collect', 'sqlitedb for Osmand']; - const mapTilesData = mapTiles.map( - item => ({ label: item, value: item }) - ); - return ( - - - Imagery Source - {/* ({ label: item, value: item })); + const mapTiles = ['mbtiles for ODK Collect', 'sqlitedb for Osmand']; + const mapTilesData = mapTiles.map((item) => ({ label: item, value: item })); + return ( + + + Imagery Source + {/* { searchable={false} onChange={(value) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'xform_title', value }))} /> */} - Output Type - {/* Output Type + {/* { searchable={false} // onChange={(value) => dispatch(CreateProjectActions.SetProjectDetails({ key: 'splitting_algorithm', value }))} /> */} - { - navigate('/'); - // onCreateProjectSubmission(); - }} - > - Submit - - - - - ) -} - + { + navigate('/'); + // onCreateProjectSubmission(); + }} + > + Submit + + + + ); +}; -export default BasemapSelection +export default BasemapSelection; diff --git a/src/frontend/main/src/components/createproject/DataExtract.tsx b/src/frontend/main/src/components/createproject/DataExtract.tsx index 467499d501..067a22ef1a 100755 --- a/src/frontend/main/src/components/createproject/DataExtract.tsx +++ b/src/frontend/main/src/components/createproject/DataExtract.tsx @@ -21,16 +21,16 @@ const DataExtract: React.FC = ({ setDataExtractFile, setDataExtractFileValue, }) => { - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); const navigate = useNavigate(); - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); // //dispatch function to perform redux state mutation - const formCategoryList = CoreModules.useSelector((state: any) => state.createproject.formCategoryList); + const formCategoryList = CoreModules.useAppSelector((state) => state.createproject.formCategoryList); // //we use use-selector from redux to get all state of formCategory from createProject slice - const projectDetails = CoreModules.useSelector((state: any) => state.createproject.projectDetails); + const projectDetails = CoreModules.useAppSelector((state) => state.createproject.projectDetails); // //we use use-selector from redux to get all state of projectDetails from createProject slice // Fetching form category list diff --git a/src/frontend/main/src/components/createproject/DefineTasks.tsx b/src/frontend/main/src/components/createproject/DefineTasks.tsx index eae4bd45be..703ce3f583 100755 --- a/src/frontend/main/src/components/createproject/DefineTasks.tsx +++ b/src/frontend/main/src/components/createproject/DefineTasks.tsx @@ -21,19 +21,19 @@ const alogrithmList = [ ]; const DefineTasks: React.FC = ({ geojsonFile, setGeojsonFile }) => { const navigate = useNavigate(); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); - const drawnGeojson = CoreModules.useSelector((state) => state.createproject.drawnGeojson); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); + const drawnGeojson = CoreModules.useAppSelector((state) => state.createproject.drawnGeojson); - // // const state:any = useSelector(state=>state.project.projectData) + // // const state:any = CoreModules.useAppSelector(state=>state.project.projectData) // // console.log('state main :',state) // const { type } = windowDimention(); // //get window dimension - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); // //dispatch function to perform redux state mutation - const projectDetails = CoreModules.useSelector((state: any) => state.createproject.projectDetails); + const projectDetails = CoreModules.useAppSelector((state) => state.createproject.projectDetails); // //we use use-selector from redux to get all state of projectDetails from createProject slice const submission = () => { @@ -112,13 +112,13 @@ const DefineTasks: React.FC = ({ geojsonFile, setGeojsonFile }) => { }, // or className: 'your-class' }; }; - const dividedTaskGeojson = CoreModules.useSelector((state) => state.createproject.dividedTaskGeojson); + const dividedTaskGeojson = CoreModules.useAppSelector((state) => state.createproject.dividedTaskGeojson); const parsedTaskGeojsonCount = dividedTaskGeojson?.features?.length || JSON?.parse(dividedTaskGeojson)?.features?.length; // // passing payloads for creating project from form whenever user clicks submit on upload area passing previous project details form aswell const algorithmListData = alogrithmList; - const dividedTaskLoading = CoreModules.useSelector((state) => state.createproject.dividedTaskLoading); - const taskSplittingGeojsonLoading = CoreModules.useSelector( + const dividedTaskLoading = CoreModules.useAppSelector((state) => state.createproject.dividedTaskLoading); + const taskSplittingGeojsonLoading = CoreModules.useAppSelector( (state) => state.createproject.taskSplittingGeojsonLoading, ); diff --git a/src/frontend/main/src/components/createproject/FormSelection.tsx b/src/frontend/main/src/components/createproject/FormSelection.tsx index 0fdcd6702c..8b983c3714 100755 --- a/src/frontend/main/src/components/createproject/FormSelection.tsx +++ b/src/frontend/main/src/components/createproject/FormSelection.tsx @@ -12,18 +12,19 @@ import SelectFormValidation from './validation/SelectFormValidation'; import { CommonActions } from '../../store/slices/CommonSlice'; import LoadingBar from './LoadingBar'; import environment from '../../environment'; +import { useAppSelector } from '../../types/reduxTypes'; // import { SelectPicker } from 'rsuite'; let generateProjectLogIntervalCb: any = null; const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, customFormInputValue, dataExtractFile }) => { - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); const navigate = useNavigate(); - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); // //dispatch function to perform redux state mutation - const projectDetails = CoreModules.useSelector((state: any) => state.createproject.projectDetails); + const projectDetails = useAppSelector((state) => state.createproject.projectDetails); // //we use use-selector from redux to get all state of projectDetails from createProject slice // Fetching form category list @@ -33,19 +34,19 @@ const FormSelection: React.FC = ({ customFormFile, setCustomFormFile, custo // END const selectFormWaysList = ['Use Existing Form', 'Upload a Custom Form']; const selectFormWays = selectFormWaysList.map((item) => ({ label: item, value: item })); - const userDetails: any = CoreModules.useSelector((state) => state.login.loginToken); + const userDetails: any = CoreModules.useAppSelector((state) => state.login.loginToken); // //we use use-selector from redux to get all state of loginToken from login slice - const generateProjectLog: any = CoreModules.useSelector((state) => state.createproject.generateProjectLog); + const generateProjectLog: any = CoreModules.useAppSelector((state) => state.createproject.generateProjectLog); // //we use use-selector from redux to get all state of loginToken from login slice - const generateQrSuccess: any = CoreModules.useSelector((state) => state.createproject.generateQrSuccess); + const generateQrSuccess: any = CoreModules.useAppSelector((state) => state.createproject.generateQrSuccess); // //we use use-selector from redux to get all state of loginToken from login slice - const projectDetailsResponse = CoreModules.useSelector((state: any) => state.createproject.projectDetailsResponse); + const projectDetailsResponse = CoreModules.useAppSelector((state) => state.createproject.projectDetailsResponse); // //we use use-selector from redux to get all state of projectDetails from createProject slice - const dividedTaskGeojson = CoreModules.useSelector((state) => state.createproject.dividedTaskGeojson); + const dividedTaskGeojson = CoreModules.useAppSelector((state) => state.createproject.dividedTaskGeojson); // //we use use-selector from redux to get state of dividedTaskGeojson from createProject slice - const projectDetailsLoading = CoreModules.useSelector((state) => state.createproject.projectDetailsLoading); + const projectDetailsLoading = CoreModules.useAppSelector((state) => state.createproject.projectDetailsLoading); // //we use use-selector from redux to get state of dividedTaskGeojson from createProject slice // Fetching form category list diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index 7a35125a0a..05b9ceacf6 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -16,21 +16,21 @@ import { createPopup } from '../../utilfunctions/createPopup'; const ProjectDetailsForm: React.FC = () => { const [openOrganizationModal, setOpenOrganizationModal] = useState(false); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); - // // const state:any = useSelector(state=>state.project.projectData) + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); + // // const state:any = CoreModules.useAppSelector(state=>state.project.projectData) // // console.log('state main :',state) // const { type } = windowDimention(); // //get window dimension const navigate = useNavigate(); - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); // //dispatch function to perform redux state mutation - const projectDetails: any = CoreModules.useSelector((state) => state.createproject.projectDetails); + const projectDetails: any = CoreModules.useAppSelector((state) => state.createproject.projectDetails); // //we use use selector from redux to get all state of projectDetails from createProject slice - const organizationListData: any = CoreModules.useSelector((state) => state.createproject.organizationList); + const organizationListData: any = CoreModules.useAppSelector((state) => state.createproject.organizationList); // //we use use selector from redux to get all state of projectDetails from createProject slice useEffect(() => { diff --git a/src/frontend/main/src/components/createproject/UploadArea.tsx b/src/frontend/main/src/components/createproject/UploadArea.tsx index 7e1276fd0d..03335e8870 100755 --- a/src/frontend/main/src/components/createproject/UploadArea.tsx +++ b/src/frontend/main/src/components/createproject/UploadArea.tsx @@ -5,16 +5,15 @@ import FormGroup from '@mui/material/FormGroup'; import { useNavigate, Link } from 'react-router-dom'; import { CreateProjectActions } from '../../store/slices/CreateProjectSlice'; import DrawSvg from '../createproject/DrawSvg'; -import { useDispatch } from 'react-redux'; // @ts-ignore const DefineAreaMap = React.lazy(() => import('map/DefineAreaMap')); const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue, inputValue }: any) => { const navigate = useNavigate(); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); - const drawToggle = CoreModules.useSelector((state) => state.createproject.drawToggle); - const drawnGeojson = CoreModules.useSelector((state) => state.createproject.drawnGeojson); - const dispatch = CoreModules.useDispatch(); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); + const drawToggle = CoreModules.useAppSelector((state) => state.createproject.drawToggle); + const drawnGeojson = CoreModules.useAppSelector((state) => state.createproject.drawnGeojson); + const dispatch = CoreModules.useAppDispatch(); //dispatch function to perform redux state mutation useEffect(() => { diff --git a/src/frontend/main/src/components/editproject/EditProjectDetails.tsx b/src/frontend/main/src/components/editproject/EditProjectDetails.tsx index 44d76d11a3..2be96d2757 100644 --- a/src/frontend/main/src/components/editproject/EditProjectDetails.tsx +++ b/src/frontend/main/src/components/editproject/EditProjectDetails.tsx @@ -1,36 +1,36 @@ -import React from 'react' +import React from 'react'; import CoreModules from '../../shared/CoreModules'; import AssetModules from '../../shared/AssetModules'; import useForm from '../../hooks/useForm'; import EditProjectValidation from './validation/EditProjectDetailsValidation'; -import { diffObject } from '../../utilfunctions/compareUtils' +import { diffObject } from '../../utilfunctions/compareUtils'; import environment from '../../environment'; import { CreateProjectActions } from '../../store/slices/CreateProjectSlice'; import { PatchProjectDetails } from '../../api/CreateProjectService'; -const EditProjectDetails = ({projectId}) => { - const editProjectDetails: any = CoreModules.useSelector((state) => state.createproject.editProjectDetails); +const EditProjectDetails = ({ projectId }) => { + const editProjectDetails: any = CoreModules.useAppSelector((state) => state.createproject.editProjectDetails); // //we use use selector from redux to get all state of projectDetails from createProject slice - const organizationListData: any = CoreModules.useSelector((state) => state.createproject.organizationList); + const organizationListData: any = CoreModules.useAppSelector((state) => state.createproject.organizationList); // //we use use selector from redux to get all state of projectDetails from createProject slice - - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); // //we use use selector from redux to get all state of defaultTheme from theme slice - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); // //dispatch function to perform redux state mutation const submission = () => { // eslint-disable-next-line no-use-before-define // submitForm(); - const changedValues = diffObject(editProjectDetails,values); + const changedValues = diffObject(editProjectDetails, values); dispatch(CreateProjectActions.SetIndividualProjectDetails(values)); - if(Object.keys(changedValues).length>0){ - dispatch(PatchProjectDetails(`${environment.baseApiUrl}/projects/${projectId}`,changedValues)); + if (Object.keys(changedValues).length > 0) { + dispatch(PatchProjectDetails(`${environment.baseApiUrl}/projects/${projectId}`, changedValues)); } }; - const { handleSubmit,handleChange, handleCustomChange, values, errors }: any = useForm( + const { handleSubmit, handleChange, handleCustomChange, values, errors }: any = useForm( editProjectDetails, submission, EditProjectValidation, @@ -47,7 +47,7 @@ const EditProjectDetails = ({projectId}) => { }; return ( -
+ {/* Organization Dropdown For Edit Project */} {/* @@ -111,7 +111,6 @@ const EditProjectDetails = ({projectId}) => { {/* END */} - {/* Project Name Form Input For Create Project */} @@ -224,8 +223,7 @@ const EditProjectDetails = ({projectId}) => {
- ) -} - + ); +}; -export default EditProjectDetails \ No newline at end of file +export default EditProjectDetails; diff --git a/src/frontend/main/src/components/editproject/UpdateForm.tsx b/src/frontend/main/src/components/editproject/UpdateForm.tsx index 5c51457dc9..331e92b8ab 100644 --- a/src/frontend/main/src/components/editproject/UpdateForm.tsx +++ b/src/frontend/main/src/components/editproject/UpdateForm.tsx @@ -6,17 +6,17 @@ import { MenuItem } from '@mui/material'; import { diffObject } from '../../utilfunctions/compareUtils.js'; const UpdateForm = ({ projectId }) => { - const dispatch = CoreModules.useDispatch(); - const editProjectDetails: any = CoreModules.useSelector((state) => state.createproject.editProjectDetails); + const dispatch = CoreModules.useAppDispatch(); + const editProjectDetails: any = CoreModules.useAppSelector((state) => state.createproject.editProjectDetails); const [uploadForm, setUploadForm] = useState(null); const [selectedFormCategory, setSelectedFormCategory] = useState(null); - const formUpdateLoading: any = CoreModules.useSelector((state) => state.createproject.formUpdateLoading); + const formUpdateLoading: any = CoreModules.useAppSelector((state) => state.createproject.formUpdateLoading); - const formCategoryList = CoreModules.useSelector((state: any) => state.createproject.formCategoryList); - const previousXform_title = CoreModules.useSelector((state: any) => state.project.projectInfo.xform_title); + const formCategoryList = CoreModules.useAppSelector((state) => state.createproject.formCategoryList); + const previousXform_title = CoreModules.useAppSelector((state) => state.project.projectInfo.xform_title); const formCategoryData = formCategoryList.map((item) => ({ label: item.title, value: item.title })); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); //we use use selector from redux to get all state of defaultTheme from theme slice // Fetching form category list diff --git a/src/frontend/main/src/components/editproject/UpdateProjectArea.tsx b/src/frontend/main/src/components/editproject/UpdateProjectArea.tsx index cab89f1f51..7b1c214ffc 100644 --- a/src/frontend/main/src/components/editproject/UpdateProjectArea.tsx +++ b/src/frontend/main/src/components/editproject/UpdateProjectArea.tsx @@ -1,149 +1,148 @@ -import React, { useEffect, useState } from 'react' +import React, { useEffect, useState } from 'react'; import CoreModules from '../../shared/CoreModules.js'; import AssetModules from '../../shared/AssetModules.js'; import EditProjectArea from 'map/EditProjectArea'; -import { useSelector } from 'react-redux'; import enviroment from '../../environment'; import { EditProjectBoundaryService, GetDividedTaskFromGeojson } from '../../api/CreateProjectService'; const UpdateProjectArea = ({ projectId }) => { - const dispatch = CoreModules.useDispatch(); - const [uploadAOI, setUploadAOI] = useState(null); - const [geojsonAOI, setGeojsonAOI] = useState(null); - const [projectBoundaryDetails, setProjectBoundaryDetails] = useState({ dimension: 10 }); - const outline_geojson = useSelector((state) => state.createproject.editProjectDetails.outline_geojson); - const dividedTaskGeojson = useSelector((state) => state.createproject.dividedTaskGeojson); - const dividedTaskGeojsonLoading = useSelector((state) => state.createproject.dividedTaskLoading); - const updateBoundaryLoading = useSelector((state) => state.createproject.updateBoundaryLoading); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); - const inputFormStyles = () => { - return { - style: { - color: defaultTheme.palette.error.main, - fontFamily: defaultTheme.typography.fontFamily, - fontSize: defaultTheme.typography.fontSize, - }, - }; + const dispatch = CoreModules.useAppDispatch(); + const [uploadAOI, setUploadAOI] = useState(null); + const [geojsonAOI, setGeojsonAOI] = useState(null); + const [projectBoundaryDetails, setProjectBoundaryDetails] = useState({ dimension: 10 }); + const outline_geojson = CoreModules.useAppSelector((state) => state.createproject.editProjectDetails.outline_geojson); + const dividedTaskGeojson = CoreModules.useAppSelector((state) => state.createproject.dividedTaskGeojson); + const dividedTaskGeojsonLoading = CoreModules.useAppSelector((state) => state.createproject.dividedTaskLoading); + const updateBoundaryLoading = CoreModules.useAppSelector((state) => state.createproject.updateBoundaryLoading); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); + const inputFormStyles = () => { + return { + style: { + color: defaultTheme.palette.error.main, + fontFamily: defaultTheme.typography.fontFamily, + fontSize: defaultTheme.typography.fontSize, + }, }; - useEffect(() => { - if (!uploadAOI) return - const fileReader = new FileReader(); - fileReader.readAsText(uploadAOI, "UTF-8"); - fileReader.onload = (e: ProgressEvent) => { - const parsedGeojson = e.target?.result; - setGeojsonAOI(parsedGeojson); - }; - }, [uploadAOI]) - - useEffect(() => { - if (!outline_geojson) return - setGeojsonAOI(outline_geojson); - if (!dividedTaskGeojson) return; - setGeojsonAOI(dividedTaskGeojson); - }, [dividedTaskGeojson, outline_geojson]) - - - const generateTasksOnMap = () => { - dispatch( - GetDividedTaskFromGeojson(`${enviroment.baseApiUrl}/projects/preview_tasks/`, { - geojson: uploadAOI, - dimension: projectBoundaryDetails?.dimension, - }), - ); + }; + useEffect(() => { + if (!uploadAOI) return; + const fileReader = new FileReader(); + fileReader.readAsText(uploadAOI, 'UTF-8'); + fileReader.onload = (e: ProgressEvent) => { + const parsedGeojson = e.target?.result; + setGeojsonAOI(parsedGeojson); }; - const handleSubmit = (e) => { - e.preventDefault(); - dispatch( - EditProjectBoundaryService(`${enviroment.baseApiUrl}/projects/edit_project_boundary/${projectId}/`, - uploadAOI, projectBoundaryDetails?.dimension), - ); - } - return ( -
- - - Upload Geojson - - { - setUploadAOI(e.target.files[0]); - }} - inputProps={{ "accept": ".geojson, .json" }} - /> - {/* {customFormFile?.name} */} - - - - Dimension (in metre) - - - - { - setProjectBoundaryDetails({ "dimension": e.target.value }) - }} - InputProps={{ inputProps: { min: 9 } }} - FormHelperTextProps={inputFormStyles()} - /> - - } - variant="contained" - color="error" - > + }, [uploadAOI]); - Generate Tasks - + useEffect(() => { + if (!outline_geojson) return; + setGeojsonAOI(outline_geojson); + if (!dividedTaskGeojson) return; + setGeojsonAOI(dividedTaskGeojson); + }, [dividedTaskGeojson, outline_geojson]); - - - - } - variant="contained" - color="error" - // onClick={onSubmit} - > - Submit - - - - - - + const generateTasksOnMap = () => { + dispatch( + GetDividedTaskFromGeojson(`${enviroment.baseApiUrl}/projects/preview_tasks/`, { + geojson: uploadAOI, + dimension: projectBoundaryDetails?.dimension, + }), + ); + }; + const handleSubmit = (e) => { + e.preventDefault(); + dispatch( + EditProjectBoundaryService( + `${enviroment.baseApiUrl}/projects/edit_project_boundary/${projectId}/`, + uploadAOI, + projectBoundaryDetails?.dimension, + ), + ); + }; + return ( + + + + Upload Geojson + + { + setUploadAOI(e.target.files[0]); + }} + inputProps={{ accept: '.geojson, .json' }} + /> + {/* {customFormFile?.name} */} + + + + Dimension (in metre) + + + + { + setProjectBoundaryDetails({ dimension: e.target.value }); + }} + InputProps={{ inputProps: { min: 9 } }} + FormHelperTextProps={inputFormStyles()} + /> + + } + variant="contained" + color="error" + > + Generate Tasks + - - ) -} + + + } + variant="contained" + color="error" + // onClick={onSubmit} + > + Submit + + + + + + + + + ); +}; -export default UpdateProjectArea; \ No newline at end of file +export default UpdateProjectArea; diff --git a/src/frontend/main/src/components/home/ExploreProjectCard.tsx b/src/frontend/main/src/components/home/ExploreProjectCard.tsx index 0ef8266cb5..7c17edc448 100755 --- a/src/frontend/main/src/components/home/ExploreProjectCard.tsx +++ b/src/frontend/main/src/components/home/ExploreProjectCard.tsx @@ -10,8 +10,8 @@ import AssetModules from '../../shared/AssetModules'; //Explore Project Card Model to be renderd in home view export default function ExploreProjectCard({ data }) { const [shadowBox, setShadowBox] = React.useState(0); - const dispatch = CoreModules.useDispatch(); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const dispatch = CoreModules.useAppDispatch(); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); //use navigate hook for from react router dom for rounting purpose const navigate = CoreModules.useNavigate(); diff --git a/src/frontend/main/src/components/home/HomePageFilters.tsx b/src/frontend/main/src/components/home/HomePageFilters.tsx index 7ee18d16b6..cb56b0a859 100755 --- a/src/frontend/main/src/components/home/HomePageFilters.tsx +++ b/src/frontend/main/src/components/home/HomePageFilters.tsx @@ -3,12 +3,11 @@ import windowDimention from '../../hooks/WindowDimension'; import CoreModules from '../../shared/CoreModules'; import AssetModules from '../../shared/AssetModules'; - //Home Filter const HomePageFilters = ({ onSearch }) => { const [searchQuery, setSearchQuery] = useState(''); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); const { windowSize } = windowDimention(); const searchableInnerStyle: any = { toolbar: { @@ -113,8 +112,6 @@ const HomePageFilters = ({ onSearch }) => { > Filters */} - -
{/* Create New Project Button */} { color="error" startIcon={} style={searchableInnerStyle.outlineBtn} - // disabled={token == null} + // disabled={token == null} > Create New Project diff --git a/src/frontend/main/src/components/organization/OrganizationAddForm.tsx b/src/frontend/main/src/components/organization/OrganizationAddForm.tsx index da8476fa19..fdcc933321 100644 --- a/src/frontend/main/src/components/organization/OrganizationAddForm.tsx +++ b/src/frontend/main/src/components/organization/OrganizationAddForm.tsx @@ -4,15 +4,14 @@ import useForm from '../../hooks/useForm'; import OrganizationAddValidation from './Validation/OrganizationAddValidation'; import { MenuItem, Select } from '@mui/material'; import { OrganizationService } from '../../api/OrganizationService'; -import { useDispatch } from 'react-redux'; import environment from '../../environment'; const formData = {}; const organizationTypeList = ['FREE', 'DISCOUNTED', 'FULL_FEE']; const organizationDataList = organizationTypeList.map((item, index) => ({ label: item, value: index + 1 })); const OrganizationAddForm = () => { - const dispatch = useDispatch(); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const dispatch = CoreModules.useAppDispatch(); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); const submission = () => { // eslint-disable-next-line no-use-before-define @@ -169,9 +168,7 @@ const OrganizationAddForm = () => { // dispatch(CreateProjectActions.SetProjectDetails({ key: 'organization', value: e.target.value })) }} > - {organizationDataList?.map((org) => ( - {org.label} - ))} + {organizationDataList?.map((org) => {org.label})} {errors.type && ( diff --git a/src/frontend/main/src/shared/CoreModules.js b/src/frontend/main/src/shared/CoreModules.js index 4f3bc7950f..3a11913f6d 100755 --- a/src/frontend/main/src/shared/CoreModules.js +++ b/src/frontend/main/src/shared/CoreModules.js @@ -59,12 +59,12 @@ import { useLocation, createBrowserRouter, } from 'react-router-dom'; -import { useSelector, useDispatch, Provider } from 'react-redux'; +import { Provider } from 'react-redux'; import { createSlice, configureStore, getDefaultMiddleware } from '@reduxjs/toolkit'; import { combineReducers } from 'redux'; import LoadingBar from '../components/createproject/LoadingBar'; import { TaskActions } from '../store/slices/TaskSlice'; - +import { useAppDispatch, useAppSelector } from '../types/reduxTypes'; export default { Provider, PersistGate, @@ -74,8 +74,6 @@ export default { CardContent, useNavigate, useParams, - useSelector, - useDispatch, Stack, Typography, Button, @@ -136,4 +134,6 @@ export default { LoadingBar, TaskActions, LoadingButton, + useAppDispatch, + useAppSelector, }; diff --git a/src/frontend/main/src/store/Store.ts b/src/frontend/main/src/store/Store.ts index a712481927..e3d5f94d58 100755 --- a/src/frontend/main/src/store/Store.ts +++ b/src/frontend/main/src/store/Store.ts @@ -1,17 +1,17 @@ import HomeSlice from './slices/HomeSlice'; import ThemeSlice from './slices/ThemeSlice'; // import projectSlice from 'map/Project'; -import CoreModules from '../shared/CoreModules'; import { persistStore } from 'redux-persist'; import storage from 'redux-persist/lib/storage'; import ProjectSlice from './slices/ProjectSlice'; -import CreateProjectSlice from './slices/CreateProjectSlice'; +import CreateProjectReducer from './slices/CreateProjectSlice'; import CommonSlice from './slices/CommonSlice'; import LoginSlice from './slices/LoginSlice'; import OrganizationSlice from './slices/organizationSlice'; import SubmissionSlice from './slices/SubmissionSlice'; import TaskSlice from './slices/TaskSlice'; import { persistReducer } from 'redux-persist'; +import { combineReducers, configureStore, getDefaultMiddleware } from '@reduxjs/toolkit'; export default function persist(key, whitelist, reducer) { return persistReducer( @@ -23,31 +23,31 @@ export default function persist(key, whitelist, reducer) { reducer, ); } -// Infer the `RootState` and `AppDispatch` types from the store itself -export type RootState = ReturnType; -export type AppDispatch = typeof store.dispatch; -const reducers = CoreModules.combineReducers({ +const rootReducer = combineReducers({ project: persist('project', ['project', 'projectInfo'], ProjectSlice.reducer), login: persist('login', ['loginToken', 'authDetails'], LoginSlice.reducer), //you can persist your auth reducer here similar to project reducer home: HomeSlice.reducer, theme: ThemeSlice.reducer, - createproject: CreateProjectSlice.reducer, + createproject: CreateProjectReducer, organization: OrganizationSlice.reducer, // added common slice in order to handle all the common things like snackbar etc common: CommonSlice.reducer, submission: SubmissionSlice.reducer, task: TaskSlice.reducer, }); +// Infer the `RootState` and `AppDispatch` types from the store itself +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; -const store = CoreModules.configureStore({ - reducer: reducers, +let store = configureStore({ + reducer: rootReducer, // middleware: [], - middleware: CoreModules.getDefaultMiddleware({ + middleware: getDefaultMiddleware({ serializableCheck: false, }), }); -const persistor = persistStore(store); +let persistor = persistStore(store); export { store, persistor }; diff --git a/src/frontend/main/src/store/slices/CreateProjectSlice.ts b/src/frontend/main/src/store/slices/CreateProjectSlice.ts index c07121d850..6f37b5149d 100755 --- a/src/frontend/main/src/store/slices/CreateProjectSlice.ts +++ b/src/frontend/main/src/store/slices/CreateProjectSlice.ts @@ -137,4 +137,4 @@ const CreateProject = CoreModules.createSlice({ }); export const CreateProjectActions = CreateProject.actions; -export default CreateProject; +export default CreateProject.reducer; diff --git a/src/frontend/main/src/hooks/reduxTypes.ts b/src/frontend/main/src/types/reduxTypes.ts similarity index 71% rename from src/frontend/main/src/hooks/reduxTypes.ts rename to src/frontend/main/src/types/reduxTypes.ts index 53df7b4bb7..be668677a9 100644 --- a/src/frontend/main/src/hooks/reduxTypes.ts +++ b/src/frontend/main/src/types/reduxTypes.ts @@ -1,4 +1,5 @@ -import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; +import type { TypedUseSelectorHook } from 'react-redux'; import type { RootState, AppDispatch } from '../store/Store'; // Use throughout your app instead of plain `useDispatch` and `useSelector` diff --git a/src/frontend/main/src/utilities/AppLoader.jsx b/src/frontend/main/src/utilities/AppLoader.jsx index c5771b58e3..8833a0c670 100644 --- a/src/frontend/main/src/utilities/AppLoader.jsx +++ b/src/frontend/main/src/utilities/AppLoader.jsx @@ -1,22 +1,31 @@ -import React from "react"; -import { useState, CSSProperties } from "react"; -import ClipLoader from "react-spinners/ClipLoader"; -import { SyncLoader,PropagateLoader,ClockLoader,RotateLoader,MoonLoader,PulseLoader,ScaleLoader,DotLoader} from "react-spinners"; -import CoreModules from "../shared/CoreModules"; +import React from 'react'; +import { useState, CSSProperties } from 'react'; +import ClipLoader from 'react-spinners/ClipLoader'; +import { + SyncLoader, + PropagateLoader, + ClockLoader, + RotateLoader, + MoonLoader, + PulseLoader, + ScaleLoader, + DotLoader, +} from 'react-spinners'; +import CoreModules from '../shared/CoreModules'; const override = { - display: "block", - margin: "2 auto", - borderColor: "red", + display: 'block', + margin: '2 auto', + borderColor: 'red', }; -const Loader = ()=>{ - const appLoading = CoreModules.useSelector(state=>state.common.loading) - const defaultTheme = CoreModules.useSelector(state => state.theme.hotTheme) +const Loader = () => { + const appLoading = CoreModules.useAppSelector((state) => state.common.loading); + const defaultTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); return ( -
- +
+
); -} +}; -export default Loader; \ No newline at end of file +export default Loader; diff --git a/src/frontend/main/src/utilities/BasicTabs.tsx b/src/frontend/main/src/utilities/BasicTabs.tsx index 1d6660a6c6..6d7c77e257 100755 --- a/src/frontend/main/src/utilities/BasicTabs.tsx +++ b/src/frontend/main/src/utilities/BasicTabs.tsx @@ -32,7 +32,7 @@ function a11yProps(index) { } export default function BasicTabs({ listOfData }) { - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); const [value, setValue] = React.useState(0); const { type } = windowDimention(); const variant: any = type == 's' ? 'fullWidth' : type == 'xs' ? 'fullWidth' : 'standard'; diff --git a/src/frontend/main/src/utilities/CustomDrawer.jsx b/src/frontend/main/src/utilities/CustomDrawer.jsx index c42a2e1a6e..094d917926 100644 --- a/src/frontend/main/src/utilities/CustomDrawer.jsx +++ b/src/frontend/main/src/utilities/CustomDrawer.jsx @@ -4,12 +4,12 @@ import CoreModules from '../shared/CoreModules'; import AssetModules from '../shared/AssetModules'; import { NavLink } from 'react-router-dom'; export default function CustomDrawer({ open, placement, size, type, onClose, onSignOut }) { - const defaultTheme = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); const onMouseEnter = (event) => { const element = document.getElementById(`text${event.target.id}`); element != null ? (element.style.color = `${defaultTheme.palette.error['main']}`) : null; }; - const token = CoreModules.useSelector((state) => state.login.loginToken); + const token = CoreModules.useAppSelector((state) => state.login.loginToken); const onMouseLeave = (event) => { const element = document.getElementById(`text${event.target.id}`); element != null ? (element.style.color = `${defaultTheme.palette.info['main']}`) : null; @@ -116,7 +116,8 @@ export default function CustomDrawer({ open, placement, size, type, onClose, onS {MenuItems.filter((menuItem) => menuItem.isActive).map((menuDetails, index) => menuDetails.isExternalLink ? ( { - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); return ( { > { @@ -33,7 +32,6 @@ const CustomizedProgressBar = ({ height, data }) => { sx={{ width: `${100 / (data.total_tasks / data.tasks_bad)}%`, backgroundColor: defaultTheme.palette.error['main'], - }} >
 
diff --git a/src/frontend/main/src/utilities/PrimaryAppBar.tsx b/src/frontend/main/src/utilities/PrimaryAppBar.tsx index 9e05cc23b1..bbef91c8ea 100755 --- a/src/frontend/main/src/utilities/PrimaryAppBar.tsx +++ b/src/frontend/main/src/utilities/PrimaryAppBar.tsx @@ -14,9 +14,9 @@ import environment from '../environment'; export default function PrimaryAppBar() { const [open, setOpen] = React.useState(false); const [brightness, setBrightness] = React.useState(true); - const dispatch = CoreModules.useDispatch(); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); - const token = CoreModules.useSelector((state) => state.login.loginToken); + const dispatch = CoreModules.useAppDispatch(); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); + const token = CoreModules.useAppSelector((state) => state.login.loginToken); const handleOpenDrawer = () => { setOpen(true); }; @@ -168,24 +168,30 @@ export default function PrimaryAppBar() { ) : ( <> - {environment.nodeEnv !== 'development' ? createLoginWindow('/')} - > - OSM Sign in - : null} - {process.env.NODE_ENV === 'development' ? <> - - Sign in + {environment.nodeEnv !== 'development' ? ( + createLoginWindow('/')} + > + OSM Sign in - - - - Sign up - - : null} + ) : null} + {process.env.NODE_ENV === 'development' ? ( + <> + + + Sign in + + + + + Sign up + + + + ) : null} )}
diff --git a/src/frontend/main/src/utilities/ProtectedRoute.jsx b/src/frontend/main/src/utilities/ProtectedRoute.jsx index 7957c2d027..eefffec533 100644 --- a/src/frontend/main/src/utilities/ProtectedRoute.jsx +++ b/src/frontend/main/src/utilities/ProtectedRoute.jsx @@ -4,7 +4,7 @@ import CoreModules from '../shared/CoreModules'; import { createLoginWindow } from '../utilfunctions/login'; const ProtectedRoute = ({ children }) => { - const token = CoreModules.useSelector((state) => state.login.loginToken); + const token = CoreModules.useAppSelector((state) => state.login.loginToken); if (token == null) { if (process.env.NODE_ENV === 'development') { return ; diff --git a/src/frontend/main/src/views/Authorized.tsx b/src/frontend/main/src/views/Authorized.tsx index 1e32335543..478f236041 100644 --- a/src/frontend/main/src/views/Authorized.tsx +++ b/src/frontend/main/src/views/Authorized.tsx @@ -1,40 +1,37 @@ import React, { useEffect, useState } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; -import { useDispatch } from 'react-redux'; import { LoginActions } from '../store/slices/LoginSlice'; - +import CoreModules from '../shared/CoreModules.js'; function Authorized() { - const navigate = useNavigate(); - const location = useLocation(); - const dispatch = useDispatch(); - const [isReadyToRedirect, setIsReadyToRedirect] = useState(false); + const navigate = useNavigate(); + const location = useLocation(); + const dispatch = CoreModules.useAppDispatch(); + const [isReadyToRedirect, setIsReadyToRedirect] = useState(false); - useEffect(() => { - const params = new URLSearchParams(location.search); - let authCode = params.get('code'); - let state = params.get('state'); - if (authCode !== null) { - window.opener.authComplete(authCode, state); - window.close(); - return; - } - const id = params.get('id'); - const username = params.get('username'); - const sessionToken = params.get('session_token'); - const osm_oauth_token = params.get('osm_oauth_token'); - dispatch(LoginActions.setAuthDetails(username, sessionToken, osm_oauth_token)); - dispatch(LoginActions.SetLoginToken({username,id, sessionToken, osm_oauth_token})); + useEffect(() => { + const params = new URLSearchParams(location.search); + let authCode = params.get('code'); + let state = params.get('state'); + if (authCode !== null) { + window.opener.authComplete(authCode, state); + window.close(); + return; + } + const id = params.get('id'); + const username = params.get('username'); + const sessionToken = params.get('session_token'); + const osm_oauth_token = params.get('osm_oauth_token'); + dispatch(LoginActions.setAuthDetails(username, sessionToken, osm_oauth_token)); + dispatch(LoginActions.SetLoginToken({ username, id, sessionToken, osm_oauth_token })); - const redirectUrl = - params.get('redirect_to') && params.get('redirect_to') !== '/' - ? params.get('redirect_to') - : '/'; - setIsReadyToRedirect(true); - navigate(redirectUrl); - }, [dispatch, location.search, navigate]); + const redirectUrl = + params.get('redirect_to') && params.get('redirect_to') !== '/' ? params.get('redirect_to') : '/'; + setIsReadyToRedirect(true); + navigate(redirectUrl); + }, [dispatch, location.search, navigate]); - return <>{!isReadyToRedirect ? null :
redirecting
}; + return <>{!isReadyToRedirect ? null :
redirecting
}; } -export default Authorized; \ No newline at end of file +export default Authorized; diff --git a/src/frontend/main/src/views/Create.tsx b/src/frontend/main/src/views/Create.tsx index 0a6f5feda3..605b78d2ee 100755 --- a/src/frontend/main/src/views/Create.tsx +++ b/src/frontend/main/src/views/Create.tsx @@ -9,9 +9,9 @@ Create a simple input element in React that calls a function when onFocusOut is */ const Create = () => { - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); - const token: any = CoreModules.useSelector((state) => state.login.loginToken); - const dispatch = CoreModules.useDispatch(); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); + const token: any = CoreModules.useAppSelector((state) => state.login.loginToken); + const dispatch = CoreModules.useAppDispatch(); //dispatch function to perform redux state mutation const navigate = CoreModules.useNavigate(); const initalUserForm = { diff --git a/src/frontend/main/src/views/CreateOrganization.tsx b/src/frontend/main/src/views/CreateOrganization.tsx index 06fdf23403..66df06dea9 100644 --- a/src/frontend/main/src/views/CreateOrganization.tsx +++ b/src/frontend/main/src/views/CreateOrganization.tsx @@ -2,22 +2,19 @@ import React, { useEffect } from 'react'; import CoreModules from '../shared/CoreModules'; import environment from '../environment'; import useForm from '../hooks/useForm'; -import { useDispatch } from 'react-redux'; import OrganizationAddValidation from '../components/organization/Validation/OrganizationAddValidation'; import { PostOrganizationDataService } from '../api/OrganizationService'; -import { useNavigate, useParams, useSearchParams } from 'react-router-dom'; +import { useNavigate, useSearchParams } from 'react-router-dom'; import { OrganizationAction } from '../store/slices/organizationSlice'; const CreateOrganizationForm = () => { - const dispatch = useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const navigate = useNavigate(); const [searchParams, setSearchParams] = useSearchParams(); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); - const postOrganizationData: any = CoreModules.useSelector((state) => state.organization.postOrganizationData); - const postOrganizationDataLoading: any = CoreModules.useSelector( - (state) => state.organization.postOrganizationDataLoading, - ); - const organizationFormData: any = CoreModules.useSelector((state) => state.organization.organizationFormData); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); + const postOrganizationData: any = CoreModules.useAppSelector((state) => state.organization.postOrganizationData); + + const organizationFormData: any = CoreModules.useAppSelector((state) => state.organization.organizationFormData); const submission = () => { dispatch(PostOrganizationDataService(`${environment.baseApiUrl}/organization/`, values)); diff --git a/src/frontend/main/src/views/CreateProject.tsx b/src/frontend/main/src/views/CreateProject.tsx index 80c78d12cc..a7ef169b12 100755 --- a/src/frontend/main/src/views/CreateProject.tsx +++ b/src/frontend/main/src/views/CreateProject.tsx @@ -7,7 +7,6 @@ import ProjectDetailsForm from '../components/createproject/ProjectDetailsForm'; import FormSelection from '../components/createproject/FormSelection'; import DefineTasks from '../components/createproject/DefineTasks'; import { CreateProjectActions } from '../store/slices/CreateProjectSlice'; -import { useDispatch } from 'react-redux'; import DataExtract from '../components/createproject/DataExtract'; const CreateProject: React.FC = () => { @@ -17,7 +16,7 @@ const CreateProject: React.FC = () => { const [inputValue, setInputValue] = useState(null); const [dataExtractFile, setDataExtractFile] = useState(null); const [dataExtractFileValue, setDataExtractFileValue] = useState(null); - const dispatch = useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const location = useLocation(); const boxSX = { 'button:hover': { diff --git a/src/frontend/main/src/views/EditProject.tsx b/src/frontend/main/src/views/EditProject.tsx index 67c946eabe..0c6ae9f14e 100755 --- a/src/frontend/main/src/views/EditProject.tsx +++ b/src/frontend/main/src/views/EditProject.tsx @@ -11,13 +11,13 @@ import UpdateForm from '../components/editproject/UpdateForm'; import UpdateProjectArea from '../components/editproject/UpdateProjectArea'; const EditProject: React.FC = () => { - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const [selectedTab, setSelectedTab] = useState('project-description'); const params = CoreModules.useParams(); const navigate = useNavigate(); const encodedProjectId = params.projectId; const decodedProjectId = environment.decode(encodedProjectId); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); const tabHover = { '&:hover': { diff --git a/src/frontend/main/src/views/Home.jsx b/src/frontend/main/src/views/Home.jsx index 3eabd81470..8b5e073601 100755 --- a/src/frontend/main/src/views/Home.jsx +++ b/src/frontend/main/src/views/Home.jsx @@ -11,17 +11,17 @@ import CoreModules from '../shared/CoreModules'; const Home = () => { const [searchQuery, setSearchQuery] = useState(''); - const defaultTheme = CoreModules.useSelector((state) => state.theme.hotTheme); - // const state:any = useSelector(state=>state.project.projectData) + const defaultTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); + // const state:any = CoreModules.useAppSelector(state=>state.project.projectData) // console.log('state main :',state) const { type } = windowDimention(); //get window dimension - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); //dispatch function to perform redux state mutation - const stateHome = CoreModules.useSelector((state) => state.home); + const stateHome = CoreModules.useAppSelector((state) => state.home); //we use use selector from redux to get all state of home from home slice let cardsPerRow = new Array( @@ -29,7 +29,7 @@ const Home = () => { ).fill(0); //calculating number of cards to to display per row in order to fit our window dimension respectively and then convert it into dummy array - const theme = CoreModules.useSelector((state) => state.theme.hotTheme); + const theme = CoreModules.useAppSelector((state) => state.theme.hotTheme); useEffect(() => { dispatch(HomeSummaryService(`${enviroment.baseApiUrl}/projects/summaries?skip=0&limit=100`)); //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page diff --git a/src/frontend/main/src/views/Login.tsx b/src/frontend/main/src/views/Login.tsx index 6f78479b7c..41ede7c252 100755 --- a/src/frontend/main/src/views/Login.tsx +++ b/src/frontend/main/src/views/Login.tsx @@ -11,11 +11,11 @@ Create a simple input element in React that calls a function when onFocusOut is */ const Login = () => { - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); + const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); const navigate = CoreModules.useNavigate(); - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); //dispatch function to perform redux state mutation - const token: any = CoreModules.useSelector((state) => state.login.loginToken); + const token: any = CoreModules.useAppSelector((state) => state.login.loginToken); // console.log(location.pathname,'and :',token); const initalUserForm = { username: '', diff --git a/src/frontend/main/src/views/MainView.jsx b/src/frontend/main/src/views/MainView.jsx index 862755077f..98dd958c34 100755 --- a/src/frontend/main/src/views/MainView.jsx +++ b/src/frontend/main/src/views/MainView.jsx @@ -8,11 +8,11 @@ import Loader from '../utilities/AppLoader'; import MappingHeader from '../utilities/MappingHeader'; const MainView = () => { - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const { windowSize } = windowDimention(); - const checkTheme = CoreModules.useSelector((state) => state.theme.hotTheme); + const checkTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); const theme = CoreModules.createTheme(checkTheme); - const stateSnackBar = CoreModules.useSelector((state) => state.common.snackbar); + const stateSnackBar = CoreModules.useAppSelector((state) => state.common.snackbar); const handleClose = (event, reason) => { if (reason === 'clickaway') { return; diff --git a/src/frontend/main/src/views/Organization.tsx b/src/frontend/main/src/views/Organization.tsx index 0569cb149a..430c6f1bba 100644 --- a/src/frontend/main/src/views/Organization.tsx +++ b/src/frontend/main/src/views/Organization.tsx @@ -28,9 +28,9 @@ const Organization = () => { setSearchKeyword(event.target.value); }; - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); - const oraganizationData: any = CoreModules.useSelector((state) => state.organization.oraganizationData); + const oraganizationData: any = CoreModules.useAppSelector((state) => state.organization.oraganizationData); console.log(oraganizationData, 'oraganizationData'); const filteredCardData = oraganizationData?.filter((data) => data.name.toLowerCase().includes(searchKeyword.toLowerCase()), diff --git a/src/frontend/main/src/views/SubmissionDetails.tsx b/src/frontend/main/src/views/SubmissionDetails.tsx index 026a980ea2..014c6601fa 100644 --- a/src/frontend/main/src/views/SubmissionDetails.tsx +++ b/src/frontend/main/src/views/SubmissionDetails.tsx @@ -3,9 +3,8 @@ import React, { useEffect } from 'react'; import environment from '../environment'; import { SubmissionService } from '../api/Submission'; - const SubmissionDetails = () => { - const dispatch = CoreModules.useDispatch(); + const dispatch = CoreModules.useAppDispatch(); const params = CoreModules.useParams(); const encodedProjectId = params.projectId; const decodedProjectId = environment.decode(encodedProjectId); @@ -13,7 +12,7 @@ const SubmissionDetails = () => { const decodedTaskId = environment.decode(encodedTaskId); const paramsInstanceId = params.instanceId; - const submissionDetails = CoreModules.useSelector((state) => state.submission.submissionDetails); + const submissionDetails = CoreModules.useAppSelector((state) => state.submission.submissionDetails); useEffect(() => { dispatch( diff --git a/src/frontend/main/webpack.config.js b/src/frontend/main/webpack.config.js index 80f10532c9..1cb7503676 100755 --- a/src/frontend/main/webpack.config.js +++ b/src/frontend/main/webpack.config.js @@ -175,6 +175,10 @@ module.exports = function (webpackEnv) { requiredVersion: deps['react-dom'], // requiredVersion: deps["react-dom", "@material-ui/core", "@material-ui/icons"], }, + 'react-redux': { + singleton: true, + version: deps['react-router-dom'], + }, }, }), new HtmlWebPackPlugin( From 43188631b6ae7eeea91922f90c3d0f04ceaf19f1 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Tue, 8 Aug 2023 20:19:38 +0545 Subject: [PATCH 154/222] fix: tasks features api --- src/backend/app/tasks/tasks_routes.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/backend/app/tasks/tasks_routes.py b/src/backend/app/tasks/tasks_routes.py index 72adab8eb2..4524d986ec 100644 --- a/src/backend/app/tasks/tasks_routes.py +++ b/src/backend/app/tasks/tasks_routes.py @@ -157,11 +157,15 @@ async def task_features_count( result = db.execute(feature_count_query) feature_count = result.fetchone() - form_details = central_crud.get_form_full_details(project.odkid, task, odk_credentials) + submission_list = central_crud.list_task_submissions(project.odkid, task, odk_credentials) + + # form_details = central_crud.get_form_full_details(project.odkid, task, odk_credentials) data.append({ 'task_id': task, 'feature_count': feature_count['count'], - 'submission_count': form_details['submissions'], + # 'submission_count': form_details['submissions'], + 'submission_count': len(submission_list) if isinstance(submission_list, list) else 0 + }) - return data \ No newline at end of file + return data From 42406bb4a89466985cf8ef19033db1c9f1270e50 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 10:54:12 +0545 Subject: [PATCH 155/222] fix: Draw AOI bug fix --- .../src/views/DefineAreaMap.jsx | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx index 674d4318fc..ee78943197 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/DefineAreaMap.jsx @@ -6,10 +6,18 @@ import { VectorLayer } from "../components/MapComponent/OpenLayersComponent/Laye import CoreModules from "fmtm/CoreModules"; import { CreateProjectActions } from "fmtm/CreateProjectSlice"; - -const DefineAreaMap = ({ uploadedGeojson, setGeojsonFile, uploadedDataExtractFile, onDraw }) => { - const drawnGeojson = CoreModules.useSelector((state) => state.createproject.drawnGeojson); - const drawToggle = CoreModules.useSelector((state) => state.createproject.drawToggle); +const DefineAreaMap = ({ + uploadedGeojson, + setGeojsonFile, + uploadedDataExtractFile, + onDraw, +}) => { + const drawnGeojson = CoreModules.useSelector( + (state) => state.createproject.drawnGeojson + ); + const drawToggle = CoreModules.useSelector( + (state) => state.createproject.drawToggle + ); const dispatch = CoreModules.useDispatch(); const [dataExtractedGeojson, setDataExtractedGeojson] = useState(null); const dividedTaskGeojson = CoreModules.useSelector( @@ -23,11 +31,8 @@ const DefineAreaMap = ({ uploadedGeojson, setGeojsonFile, uploadedDataExtractFil maxZoom: 25, }); - - useEffect(() => { - if (dividedTaskGeojson || onDraw) { - + if (dividedTaskGeojson) { } else if (uploadedGeojson) { const fileReader = new FileReader(); fileReader.readAsText(uploadedGeojson, "UTF-8"); @@ -60,17 +65,19 @@ const DefineAreaMap = ({ uploadedGeojson, setGeojsonFile, uploadedDataExtractFil }} > - {drawToggle && } + {drawToggle && ( + + )} {dividedTaskGeojson && ( )} From c8df6cd952e4ddbe00da7bf83216ca7f1e0443dd Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 11:48:22 +0545 Subject: [PATCH 156/222] get osm xml for a project --- src/backend/app/submission/submission_crud.py | 38 ++++++++++++++ .../app/submission/submission_routes.py | 52 ++++++++++++++++--- 2 files changed, 83 insertions(+), 7 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index f9f344a0bb..d3483c38ff 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -137,6 +137,41 @@ def create_zip_file(files, output_file_path): return output_file_path +async def convert_json_to_osm_xml(file_path): + + jsonin = JsonDump() + infile = Path(file_path) + + base = os.path.splitext(infile.name)[0] + + osmoutfile = f"/tmp/{base}.osm" + jsonin.createOSM(osmoutfile) + + data = jsonin.parse(infile.as_posix()) + + for entry in data: + feature = jsonin.createEntry(entry) + # Sometimes bad entries, usually from debugging XForm design, sneak in + if len(feature) == 0: + continue + if len(feature) > 0: + if "lat" not in feature["attrs"]: + if 'geometry' in feature['tags']: + if type(feature['tags']['geometry']) == str: + coords = list(feature['tags']['geometry']) + else: + coords = feature['tags']['geometry']['coordinates'] + feature['attrs'] = {'lat': coords[1], 'lon': coords[0]} + else: + logger.warning("Bad record! %r" % feature) + continue + jsonin.writeOSM(feature) + + jsonin.finishOSM() + logger.info("Wrote OSM XML file: %r" % osmoutfile) + return osmoutfile + + async def convert_json_to_osm(file_path): jsonin = JsonDump() @@ -198,6 +233,9 @@ async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): return osmoutfile, jsonoutfile +async def get_osm_xml(db:Session, project_odk_id:int, odk_credentials: project_schemas.ODKCentral): + pass + async def convert_to_osm(db: Session, project_id: int, task_id: int): project_info = project_crud.get_project(db, project_id) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index acdfb47d06..6e91f6956a 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -17,16 +17,14 @@ # import os import json -from fastapi import APIRouter, Depends, UploadFile, File, HTTPException, Response +from fastapi import APIRouter, Depends, HTTPException, Response +from ..projects import project_crud, project_schemas from fastapi.logger import logger as logger from sqlalchemy.orm import Session from fastapi.responses import FileResponse -from .submission_crud import convert_json_to_osm from osm_fieldwork.odk_merge import OdkMerge from osm_fieldwork.osmfile import OsmFile from ..projects import project_crud - - from ..db import database from . import submission_crud @@ -184,7 +182,7 @@ async def conflate_osm_date( f.write(json.dumps(submission)) # Convert the submission to osm xml format - osmoutfile, jsonoutfile = await convert_json_to_osm(jsoninfile) + osmoutfile, jsonoutfile = await submission_crud.convert_json_to_osm(jsoninfile) # Remove the extra closing tag from the end of the file with open(osmoutfile, 'r') as f: @@ -193,7 +191,7 @@ async def conflate_osm_date( last_osm_index = osmoutfile_data.rfind('') # Remove the extra closing tag from the end processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] - + # Write the modified XML data back to the file with open(osmoutfile, 'w') as f: f.write(processed_xml_string) @@ -204,4 +202,44 @@ async def conflate_osm_date( odk_merge = OdkMerge(data_extracts_file,None) data = odk_merge.conflateData(osm) return data - return [] \ No newline at end of file + return [] + + +@router.get("/get_osm_xml/{project_id}") +async def get_osm_xml( + project_id: int, + db: Session = Depends(database.get_db), + ): + + # JSON FILE PATH + jsoninfile = "/tmp/json_infile.json" + + # # Delete if these files already exist + if os.path.exists(jsoninfile): + os.remove(jsoninfile) + + # Submission JSON + submission = submission_crud.get_all_submissions(db, project_id) + + # Write the submission to a file + with open(jsoninfile, 'w') as f: + f.write(json.dumps(submission)) + + # Convert the submission to osm xml format + osmoutfile = await submission_crud.convert_json_to_osm_xml(jsoninfile) + + # Remove the extra closing tag from the end of the file + with open(osmoutfile, 'r') as f: + osmoutfile_data = f.read() + # Find the last index of the closing tag + last_osm_index = osmoutfile_data.rfind('') + # Remove the extra closing tag from the end + processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] + + # Write the modified XML data back to the file + with open(osmoutfile, 'w') as f: + f.write(processed_xml_string) + + # Create a plain XML response + response = Response(content=processed_xml_string, media_type="application/xml") + return response \ No newline at end of file From 99712853b50e7135c40712a931bcb5c671c36589 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 11:50:07 +0545 Subject: [PATCH 157/222] some todo texts in get sll submissions --- src/backend/app/submission/submission_crud.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index d3483c38ff..b44922a49d 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -378,6 +378,10 @@ def get_all_submissions(db: Session, project_id): project = get_odk_project(odk_credentials) + #TODO: pass xform id list in getAllSubmissions. Next release of osm-fieldwork will support this. + # task_lists = tasks_crud.get_task_lists(db, project_id) + # submissions = project.getAllSubmissions(project_info.odkid, task_lists) + submissions = project.getAllSubmissions(project_info.odkid) return submissions From 78c1344d778695517c7734a3ceb6445c2cf8120b Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 11:54:19 +0545 Subject: [PATCH 158/222] removed unused function --- src/backend/app/submission/submission_crud.py | 3 --- src/backend/app/submission/submission_routes.py | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index b44922a49d..d59e60e01c 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -233,9 +233,6 @@ async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): return osmoutfile, jsonoutfile -async def get_osm_xml(db:Session, project_odk_id:int, odk_credentials: project_schemas.ODKCentral): - pass - async def convert_to_osm(db: Session, project_id: int, task_id: int): project_info = project_crud.get_project(db, project_id) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index 6e91f6956a..d142ce0d2f 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -191,7 +191,7 @@ async def conflate_osm_date( last_osm_index = osmoutfile_data.rfind('') # Remove the extra closing tag from the end processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] - + # Write the modified XML data back to the file with open(osmoutfile, 'w') as f: f.write(processed_xml_string) From 2d7d02bc38a10a270eb12e6f0a0ae688045f5784 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 12:15:15 +0545 Subject: [PATCH 159/222] fetch submission basic info --- src/backend/app/submission/submission_crud.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index f9f344a0bb..31df17e7d9 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -97,7 +97,7 @@ def get_submission_of_project(db: Session, project_id: int, task_id: int = None) else: # If task_id is provided, submission made to this particular task is returned. xml_form_id = f"{project_name}_{form_category}_{task_id}".split("_")[2] - submission_list = xform.listSubmissions(odkid, xml_form_id) + submission_list = xform.listSubmissionBasicInfo(odkid, xml_form_id) for x in submission_list: x["submitted_by"] = f"{project_name}_{form_category}_{task_id}" return submission_list From 81166b58db2ad7e6cfcaca4f85fecb902f7ff7ee Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 13:09:22 +0545 Subject: [PATCH 160/222] fix: submission detail page undefined --- .../fmtm_openlayer_map/src/views/Tasks.jsx | 555 ++++++++++-------- 1 file changed, 324 insertions(+), 231 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx index 52802b4878..ddf851bccc 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx @@ -1,262 +1,355 @@ import React, { useEffect, useState } from "react"; // import '../styles/home.css' import "../../node_modules/ol/ol.css"; -import CoreModules from 'fmtm/CoreModules'; -import AssetModules from 'fmtm/AssetModules'; +import CoreModules from "fmtm/CoreModules"; +import AssetModules from "fmtm/AssetModules"; // import { useLocation, useNavigate } from 'react-router-dom'; // import { styled, alpha } from '@mui/material'; -import Avatar from '../assets/images/avatar.png' +import Avatar from "../assets/images/avatar.png"; import SubmissionMap from "../components/SubmissionMap/SubmissionMap"; import environment from "fmtm/environment"; -import { ProjectBuildingGeojsonService, ProjectSubmissionService } from "../api/SubmissionService"; +import { + ProjectBuildingGeojsonService, + ProjectSubmissionService, +} from "../api/SubmissionService"; import { ProjectActions } from "fmtm/ProjectSlice"; import { ProjectById } from "../api/Project"; import { getDownloadProjectSubmission } from "../api/task"; const basicGeojsonTemplate = { - "type": "FeatureCollection", - "features": [] + type: "FeatureCollection", + features: [], }; const TasksSubmission = () => { - const dispatch = CoreModules.useDispatch(); - const state = CoreModules.useSelector((state) => state.project); - const projectInfo = CoreModules.useSelector( - (state) => state.home.selectedProject + const dispatch = CoreModules.useDispatch(); + const state = CoreModules.useSelector((state) => state.project); + const projectInfo = CoreModules.useSelector( + (state) => state.home.selectedProject + ); + const projectSubmissionState = CoreModules.useSelector( + (state) => state.project.projectSubmission + ); + const projectState = CoreModules.useSelector( + (state) => state.project.project + ); + // const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); + // const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); + const params = CoreModules.useParams(); + const encodedProjectId = params.projectId; + const decodedProjectId = environment.decode(encodedProjectId); + const encodedTaskId = params.taskId; + const decodedTaskId = environment.decode(encodedTaskId); + // const theme = CoreModules.useSelector(state => state.theme.hotTheme) + useEffect(() => { + dispatch( + ProjectSubmissionService( + `${environment.baseApiUrl}/submission/?project_id=${decodedProjectId}&task_id=${decodedTaskId}` + ) ); - const projectSubmissionState = CoreModules.useSelector((state) => state.project.projectSubmission); - const projectState = CoreModules.useSelector((state) => state.project.project); - // const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); - // const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); - const params = CoreModules.useParams(); - const encodedProjectId = params.projectId; - const decodedProjectId = environment.decode(encodedProjectId); - const encodedTaskId = params.taskId; - const decodedTaskId = environment.decode(encodedTaskId); - // const theme = CoreModules.useSelector(state => state.theme.hotTheme) - useEffect(() => { - dispatch(ProjectSubmissionService(`${environment.baseApiUrl}/submission/?project_id=${decodedProjectId}&task_id=${decodedTaskId}`)) - dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${decodedProjectId}/features?task_id=${decodedTaskId}`)) - //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page - }, []) - //Fetch project for the first time - useEffect(() => { - if ( - state.projectTaskBoundries.findIndex( - (project) => project.id == environment.decode(encodedProjectId) - ) == -1 - ) { - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}/features`)) - - } else { - dispatch(ProjectActions.SetProjectTaskBoundries([])) - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - } - if (Object.keys(state.projectInfo).length == 0) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } else { - if (state.projectInfo.id != environment.decode(encodedProjectId)) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } - } - }, [params.id]); - const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); - const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); - const [projectBoundaries, setProjectBoundaries] = useState(null) - const [buildingBoundaries, setBuildingBoundaries] = useState(null) - - if (projectTaskBoundries?.length > 0 && projectBoundaries === null) { - - const taskGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [...projectTaskBoundries?.[0]?.taskBoundries?.filter((task) => task.id === decodedTaskId).map((task) => ({ ...task.outline_geojson, id: task.outline_geojson.properties.uid }))] - - }; - console.log(taskGeojsonFeatureCollection, 'taskGeojsonFeatureCollection'); - setProjectBoundaries(taskGeojsonFeatureCollection) + dispatch( + ProjectBuildingGeojsonService( + `${environment.baseApiUrl}/projects/${decodedProjectId}/features?task_id=${decodedTaskId}` + ) + ); + //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page + }, []); + //Fetch project for the first time + useEffect(() => { + if ( + state.projectTaskBoundries.findIndex( + (project) => project.id == environment.decode(encodedProjectId) + ) == -1 + ) { + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + dispatch( + ProjectBuildingGeojsonService( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}/features` + ) + ); + } else { + dispatch(ProjectActions.SetProjectTaskBoundries([])); + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); } - if (projectBuildingGeojson?.length > 0 && buildingBoundaries === null) { - - const buildingGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [...projectBuildingGeojson?.filter((task) => task.task_id === decodedTaskId).map((task) => ({ ...task.geometry, id: task.id }))] - // features: projectBuildingGeojson.map((feature) => ({ ...feature.geometry, id: feature.id })) - - }; - setBuildingBoundaries(buildingGeojsonFeatureCollection); + if (Object.keys(state.projectInfo).length == 0) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } else { + if (state.projectInfo.id != environment.decode(encodedProjectId)) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } } + }, [params.id]); + const projectTaskBoundries = CoreModules.useSelector( + (state) => state.project.projectTaskBoundries + ); + const projectBuildingGeojson = CoreModules.useSelector( + (state) => state.project.projectBuildingGeojson + ); + const [projectBoundaries, setProjectBoundaries] = useState(null); + const [buildingBoundaries, setBuildingBoundaries] = useState(null); - const StyledMenu = AssetModules.styled((props) => ( - - ))(({ theme }) => ({ - '& .MuiPaper-root': { - borderRadius: 6, - marginTop: theme.spacing(1), - minWidth: 180, - color: - theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[300], - boxShadow: - 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px', - '& .MuiMenu-list': { - padding: '4px 0', - }, - '& .MuiMenuItem-root': { - '& .MuiSvgIcon-root': { - fontSize: 18, - color: theme.palette.text.secondary, - marginRight: theme.spacing(1.5), - }, - '&:active': { - backgroundColor: AssetModules.alpha( - theme.palette.primary.main, - theme.palette.action.selectedOpacity, - ), - }, - }, - }, - })); + if (projectTaskBoundries?.length > 0 && projectBoundaries === null) { + const taskGeojsonFeatureCollection = { + ...basicGeojsonTemplate, + features: [ + ...projectTaskBoundries?.[0]?.taskBoundries + ?.filter((task) => task.id === decodedTaskId) + .map((task) => ({ + ...task.outline_geojson, + id: task.outline_geojson.properties.uid, + })), + ], + }; + console.log(taskGeojsonFeatureCollection, "taskGeojsonFeatureCollection"); + setProjectBoundaries(taskGeojsonFeatureCollection); + } + if (projectBuildingGeojson?.length > 0 && buildingBoundaries === null) { + const buildingGeojsonFeatureCollection = { + ...basicGeojsonTemplate, + features: [ + ...projectBuildingGeojson + ?.filter((task) => task.task_id === decodedTaskId) + .map((task) => ({ ...task.geometry, id: task.id })), + ], + // features: projectBuildingGeojson.map((feature) => ({ ...feature.geometry, id: feature.id })) + }; + setBuildingBoundaries(buildingGeojsonFeatureCollection); + } - const handleDownload = (downloadType) => { - if(downloadType === 'csv'){ - dispatch( - getDownloadProjectSubmission( - `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=false` - ) - ); - }else if(downloadType === 'json'){ - dispatch( - getDownloadProjectSubmission( - `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=true` - ) - ); + const StyledMenu = AssetModules.styled((props) => ( + state.task.downloadSubmissionLoading) + } + transformOrigin={{ + vertical: "top", + horizontal: "right", + }} + {...props} + /> + ))(({ theme }) => ({ + "& .MuiPaper-root": { + borderRadius: 6, + marginTop: theme.spacing(1), + minWidth: 180, + color: + theme.palette.mode === "light" + ? "rgb(55, 65, 81)" + : theme.palette.grey[300], + boxShadow: + "rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px", + "& .MuiMenu-list": { + padding: "4px 0", + }, + "& .MuiMenuItem-root": { + "& .MuiSvgIcon-root": { + fontSize: 18, + color: theme.palette.text.secondary, + marginRight: theme.spacing(1.5), + }, + "&:active": { + backgroundColor: AssetModules.alpha( + theme.palette.primary.main, + theme.palette.action.selectedOpacity + ), + }, + }, + }, + })); - return ( - - - - - {/* Project Details SideBar Button for Creating Project */} - - Monitoring - + const handleDownload = (downloadType) => { + if (downloadType === "csv") { + dispatch( + getDownloadProjectSubmission( + `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=false` + ) + ); + } else if (downloadType === "json") { + dispatch( + getDownloadProjectSubmission( + `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=true` + ) + ); + } + }; - {/* END */} + const downloadSubmissionLoading = CoreModules.useSelector( + (state) => state.task.downloadSubmissionLoading + ); - {/* Upload Area SideBar Button for uploading Area page */} - - Convert - - handleDownload('csv')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type=== 'csv' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - - CSV - - - - handleDownload('json')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type === 'json' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - JSON - + return ( + + + + + {/* Project Details SideBar Button for Creating Project */} + + Monitoring + - {/* END */} - - - {projectSubmissionState?.map((submission) => { - const date = new Date(submission.createdAt); + {/* END */} - const dateOptions = { - minute: 'numeric', - hour: 'numeric', - day: 'numeric', - weekday: 'long', - year: 'numeric', - month: 'long', - }; + {/* Upload Area SideBar Button for uploading Area page */} + + Convert + + handleDownload("csv")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "csv" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + CSV + - const formattedDate = date.toLocaleDateString('en-US', dateOptions); - return - - - - {submission.submitted_by} - - - Submitted {projectState?.project} at {formattedDate} - - - - })} + handleDownload("json")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "json" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + JSON + - - - - - - + {/* END */} + + + {projectSubmissionState?.map((submission) => { + const date = new Date(submission.createdAt); - - ) + const dateOptions = { + minute: "numeric", + hour: "numeric", + day: "numeric", + weekday: "long", + year: "numeric", + month: "long", + }; -} + const formattedDate = date.toLocaleDateString( + "en-US", + dateOptions + ); + return ( + + + + {" "} + + + + {submission.submitted_by} + + + Submitted {projectState?.project} at {formattedDate} + + + + + ); + })} + + + + + + + + ); +}; -export default TasksSubmission; \ No newline at end of file +export default TasksSubmission; From c125a4f66dbd6f357ba82d02133a8dfd488b7e71 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 17:01:13 +0545 Subject: [PATCH 161/222] asyncio used in tasks-feature count api --- src/backend/app/tasks/tasks_routes.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/backend/app/tasks/tasks_routes.py b/src/backend/app/tasks/tasks_routes.py index 4524d986ec..6b191d14c2 100644 --- a/src/backend/app/tasks/tasks_routes.py +++ b/src/backend/app/tasks/tasks_routes.py @@ -17,6 +17,7 @@ # import json +import asyncio from typing import List from fastapi import APIRouter, Depends, HTTPException, UploadFile, File @@ -148,24 +149,28 @@ async def task_features_count( odk_central_password = project.odk_central_password, ) - data = [] - for task in task_list: - + def process_task(task): feature_count_query = f""" select count(*) from features where project_id = {project_id} and task_id = {task} """ result = db.execute(feature_count_query) feature_count = result.fetchone() - submission_list = central_crud.list_task_submissions(project.odkid, task, odk_credentials) + submission_list = central_crud.list_task_submissions( + project.odkid, task, odk_credentials) # form_details = central_crud.get_form_full_details(project.odkid, task, odk_credentials) - data.append({ - 'task_id': task, - 'feature_count': feature_count['count'], + return { + "task_id": task, + "feature_count": feature_count["count"], # 'submission_count': form_details['submissions'], - 'submission_count': len(submission_list) if isinstance(submission_list, list) else 0 + "submission_count": len(submission_list) + if isinstance(submission_list, list) + else 0, + } - }) + loop = asyncio.get_event_loop() + tasks = [loop.run_in_executor(None, process_task, task) for task in task_list] + processed_results = await asyncio.gather(*tasks) - return data + return processed_results From 1a992e5fb6ad06fad0b5132b2ca1c4e851e40ad9 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 14:57:31 +0100 Subject: [PATCH 162/222] build: add josm+nginx img to proxy 127.0.0.1:8111 --- josm/Dockerfile | 78 ++++++++++++++++++++++++++++++++++++ josm/container-entrypoint.sh | 6 +++ josm/nginx-josm.conf | 13 ++++++ josm/preferences.xml | 27 +++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 josm/Dockerfile create mode 100644 josm/container-entrypoint.sh create mode 100644 josm/nginx-josm.conf create mode 100644 josm/preferences.xml diff --git a/josm/Dockerfile b/josm/Dockerfile new file mode 100644 index 0000000000..0b7bb5885b --- /dev/null +++ b/josm/Dockerfile @@ -0,0 +1,78 @@ +# Copyright (c) 2022, 2023 Humanitarian OpenStreetMap Team +# This file is part of FMTM. +# +# FMTM is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# FMTM is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with FMTM. If not, see . +# + +FROM docker.io/debian:bookworm as base +ARG MAINTAINER=admin@hotosm.org +LABEL org.hotosm.fmtm.maintainer="${MAINTAINER}" \ + org.hotosm.fmtm.josm-port="8111" \ + org.hotosm.fmtm.nginx-port="80" +RUN set -ex \ + && apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install \ + -y --no-install-recommends "locales" "ca-certificates" \ + && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y \ + && rm -rf /var/lib/apt/lists/* \ + && update-ca-certificates +# Set locale +RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 + + + +FROM base as gpg-key +RUN set -ex \ + && apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install \ + -y --no-install-recommends \ + "curl" \ + "gnupg2" \ + && rm -rf /var/lib/apt/lists/* +RUN curl -sS https://josm.openstreetmap.de/josm-apt.key \ + | gpg --dearmor | tee /opt/josm.gpg + + + +FROM base as runtime +COPY --from=gpg-key \ + /opt/josm.gpg /etc/apt/trusted.gpg.d/josm.gpg +RUN echo \ + "deb [arch=$(dpkg --print-architecture) \ + signed-by=/etc/apt/trusted.gpg.d/josm.gpg] \ + https://josm.openstreetmap.de/apt alldist universe" \ + | tee /etc/apt/sources.list.d/josm.list > /dev/null +RUN set -ex \ + && apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install \ + -y --no-install-recommends \ + "gosu" \ + "josm" \ + "nginx" \ + && rm -rf /var/lib/apt/lists/* +COPY container-entrypoint.sh /container-entrypoint.sh +# Add non-root user +RUN useradd --system -r -u 101 -m -c "nginx user" \ + -d /home/nginx -s /bin/false nginx \ + && chmod +x /container-entrypoint.sh +COPY --chown=nginx \ + preferences.xml /home/nginx/.config/JOSM/preferences.xml +# Replace default nginx config +COPY --chown=nginx \ + nginx-josm.conf /etc/nginx/sites-enabled/default +# Run as root, change to nginx user in entrypoint +ENTRYPOINT ["/container-entrypoint.sh"] diff --git a/josm/container-entrypoint.sh b/josm/container-entrypoint.sh new file mode 100644 index 0000000000..7e1dc919b6 --- /dev/null +++ b/josm/container-entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Start JOSM as nginx (unpriv) user +gosu nginx josm & + +exec nginx -g "daemon off;" diff --git a/josm/nginx-josm.conf b/josm/nginx-josm.conf new file mode 100644 index 0000000000..c130fdde7f --- /dev/null +++ b/josm/nginx-josm.conf @@ -0,0 +1,13 @@ +server { + listen 80 default_server; + server_name _; + + location / { + proxy_pass http://127.0.0.1:8111; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/josm/preferences.xml b/josm/preferences.xml new file mode 100644 index 0000000000..374f214a66 --- /dev/null +++ b/josm/preferences.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From 0d7a8091ce3ca68ebb98d3949bcad9b22d06d1e3 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 14:59:17 +0100 Subject: [PATCH 163/222] build: novnc img extended to auto forward url --- josm/novnc/Dockerfile | 6 ++++++ josm/novnc/index.html | 8 ++++++++ 2 files changed, 14 insertions(+) create mode 100644 josm/novnc/Dockerfile create mode 100644 josm/novnc/index.html diff --git a/josm/novnc/Dockerfile b/josm/novnc/Dockerfile new file mode 100644 index 0000000000..a1c362c2b5 --- /dev/null +++ b/josm/novnc/Dockerfile @@ -0,0 +1,6 @@ +FROM docker.io/theasp/novnc:latest +COPY index.html /usr/share/novnc/ +RUN useradd -r -u 900 -m -c "novnc account" -d /home/appuser -s /bin/false appuser \ + && chown -R appuser:appuser /app +WORKDIR /app +USER appuser diff --git a/josm/novnc/index.html b/josm/novnc/index.html new file mode 100644 index 0000000000..5927bc740c --- /dev/null +++ b/josm/novnc/index.html @@ -0,0 +1,8 @@ + + + + + +

If you see this click here.

+ + From b6a6b8044e98e456f53657224a0299e798c47936 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 15:00:35 +0100 Subject: [PATCH 164/222] build: add josm to docker compose dev config --- docker-compose.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index f8207136a6..41014f8dff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,6 +24,7 @@ volumes: networks: fmtm-dev: + x11: services: fmtm-db: @@ -186,6 +187,38 @@ services: - fmtm-dev restart: unless-stopped + josm: + image: "ghcr.io/hotosm/fmtm/josm:latest" + build: + context: josm + container_name: josm + environment: + - DISPLAY=josm-novnc:0.0 + depends_on: + - josm-novnc + networks: + - fmtm-dev + - x11 + ports: + - 8111:80 + restart: unless-stopped + + josm-novnc: + image: "ghcr.io/hotosm/fmtm/josm-novnc:latest" + build: + context: josm/novnc + container_name: josm_novnc + environment: + - DISPLAY_WIDTH=1280 + - DISPLAY_HEIGHT=600 + - RUN_XTERM=no + - RUN_FLUXBOX=no + ports: + - "8112:8080" + networks: + - x11 + restart: unless-stopped + pyxform: image: "ghcr.io/getodk/pyxform-http:v1.10.1.1" networks: From 01ec94a9e6702b0a6779bd329392e22fc1e6f320 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 15:06:40 +0100 Subject: [PATCH 165/222] build: move JOSM config into separate compose config --- docker-compose.josm.yml | 54 +++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 33 ------------------------- 2 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 docker-compose.josm.yml diff --git a/docker-compose.josm.yml b/docker-compose.josm.yml new file mode 100644 index 0000000000..fb59cde604 --- /dev/null +++ b/docker-compose.josm.yml @@ -0,0 +1,54 @@ +# Copyright (c) 2022, 2023 Humanitarian OpenStreetMap Team +# This file is part of FMTM. +# +# FMTM is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# FMTM is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with FMTM. If not, see . +# + +version: "3" + +networks: + x11: + +services: + josm: + image: "ghcr.io/hotosm/fmtm/josm:latest" + build: + context: josm + container_name: josm + environment: + - DISPLAY=josm-novnc:0.0 + depends_on: + - josm-novnc + networks: + - fmtm-dev + - x11 + ports: + - 8111:80 + restart: unless-stopped + + josm-novnc: + image: "ghcr.io/hotosm/fmtm/josm-novnc:latest" + build: + context: josm/novnc + container_name: josm_novnc + environment: + - DISPLAY_WIDTH=1280 + - DISPLAY_HEIGHT=600 + - RUN_XTERM=no + - RUN_FLUXBOX=no + ports: + - "8112:8080" + networks: + - x11 + restart: unless-stopped diff --git a/docker-compose.yml b/docker-compose.yml index 41014f8dff..f8207136a6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,6 @@ volumes: networks: fmtm-dev: - x11: services: fmtm-db: @@ -187,38 +186,6 @@ services: - fmtm-dev restart: unless-stopped - josm: - image: "ghcr.io/hotosm/fmtm/josm:latest" - build: - context: josm - container_name: josm - environment: - - DISPLAY=josm-novnc:0.0 - depends_on: - - josm-novnc - networks: - - fmtm-dev - - x11 - ports: - - 8111:80 - restart: unless-stopped - - josm-novnc: - image: "ghcr.io/hotosm/fmtm/josm-novnc:latest" - build: - context: josm/novnc - container_name: josm_novnc - environment: - - DISPLAY_WIDTH=1280 - - DISPLAY_HEIGHT=600 - - RUN_XTERM=no - - RUN_FLUXBOX=no - ports: - - "8112:8080" - networks: - - x11 - restart: unless-stopped - pyxform: image: "ghcr.io/getodk/pyxform-http:v1.10.1.1" networks: From 6ec8ad68a31db1383f6a5ce12840128812bce732 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 19:56:13 +0545 Subject: [PATCH 166/222] Feat: JOSM Api To Open JOSM --- .../fmtm_openlayer_map/src/api/task.ts | 180 +++++++++++------- 1 file changed, 115 insertions(+), 65 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/api/task.ts b/src/frontend/fmtm_openlayer_map/src/api/task.ts index 84e5aeaddf..a993f7f40d 100644 --- a/src/frontend/fmtm_openlayer_map/src/api/task.ts +++ b/src/frontend/fmtm_openlayer_map/src/api/task.ts @@ -1,79 +1,129 @@ import CoreModules from "fmtm/CoreModules"; import { CommonActions } from "fmtm/CommonSlice"; - export const fetchInfoTask: Function = (url: string) => { - return async (dispatch) => { - dispatch(CoreModules.TaskActions.SetTaskLoading(true)) - dispatch(CommonActions.SetLoading(true)) - const fetchTaskInfoDetails = async (url: string) => { - try { - const fetchTaskInfoDetailsResponse = await CoreModules.axios.get(url); - const response = fetchTaskInfoDetailsResponse.data; - dispatch(CommonActions.SetLoading(false)) - dispatch(CoreModules.TaskActions.FetchTaskInfoDetails(response)) - } catch (error) { - dispatch(CommonActions.SetLoading(false)) - dispatch(CoreModules.TaskActions.SetTaskLoading(false)) - } - } - await fetchTaskInfoDetails(url); - } -} + return async (dispatch) => { + dispatch(CoreModules.TaskActions.SetTaskLoading(true)); + dispatch(CommonActions.SetLoading(true)); + const fetchTaskInfoDetails = async (url: string) => { + try { + const fetchTaskInfoDetailsResponse = await CoreModules.axios.get(url); + const response = fetchTaskInfoDetailsResponse.data; + dispatch(CommonActions.SetLoading(false)); + dispatch(CoreModules.TaskActions.FetchTaskInfoDetails(response)); + } catch (error) { + dispatch(CommonActions.SetLoading(false)); + dispatch(CoreModules.TaskActions.SetTaskLoading(false)); + } + }; + await fetchTaskInfoDetails(url); + }; +}; +export const getDownloadProjectSubmission: Function = (url: string) => { + return async (dispatch) => { + const params = new URLSearchParams(url.split("?")[1]); + const isExportJson = params.get("export_json"); + const isJsonOrCsv = isExportJson === "true" ? "json" : "csv"; + dispatch( + CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({ + type: isJsonOrCsv, + loading: true, + }) + ); -export const getDownloadProjectSubmission : Function = (url: string, ) => { + const getProjectSubmission = async (url: string) => { + try { + const response = await CoreModules.axios.get(url, { + responseType: "blob", + }); + var a = document.createElement("a"); + a.href = window.URL.createObjectURL(response.data); + a.download = "Submissions"; + a.click(); + dispatch( + CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({ + type: isJsonOrCsv, + loading: false, + }) + ); + } catch (error) { + dispatch( + CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({ + type: isJsonOrCsv, + loading: false, + }) + ); + } finally { + dispatch( + CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({ + type: isJsonOrCsv, + loading: false, + }) + ); + } + }; + await getProjectSubmission(url); + }; +}; - return async (dispatch) => { - const params = new URLSearchParams(url.split('?')[1]) - const isExportJson=params.get('export_json'); - const isJsonOrCsv = isExportJson==='true' ? 'json' : 'csv' - dispatch(CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({type:isJsonOrCsv ,loading:true})) +export const fetchConvertToOsmDetails: Function = (url: string) => { + return async (dispatch) => { + dispatch(CoreModules.TaskActions.FetchConvertToOsmLoading(true)); - const getProjectSubmission = async (url: string) => { - try { - const response = await CoreModules.axios.get(url, { - responseType : 'blob', - }); - var a = document.createElement("a"); - a.href = window.URL.createObjectURL(response.data); - a.download = "Submissions"; - a.click(); - dispatch(CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({type:isJsonOrCsv ,loading:false})) - } catch (error) { - dispatch(CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({type:isJsonOrCsv ,loading:false})) - } finally{ - dispatch(CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({type:isJsonOrCsv ,loading:false})) - } - } - await getProjectSubmission(url); - } -} + try { + const response = await CoreModules.axios.get(url, { + responseType: "blob", + }); + const downloadLink = document.createElement("a"); + downloadLink.href = window.URL.createObjectURL(new Blob([response.data])); + downloadLink.setAttribute("download", "task.zip"); + document.body.appendChild(downloadLink); -export const fetchConvertToOsmDetails: Function = (url: string) => { - return async (dispatch) => { - dispatch(CoreModules.TaskActions.FetchConvertToOsmLoading(true)); - + downloadLink.click(); + + document.body.removeChild(downloadLink); + window.URL.revokeObjectURL(downloadLink.href); + + dispatch(CoreModules.TaskActions.FetchConvertToOsm(response.data)); + } catch (error) { + dispatch(CoreModules.TaskActions.FetchConvertToOsmLoading(false)); + } + }; +}; + +export const ConvertXMLToJOSM: Function = (url: string) => { + return async (dispatch) => { + dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(true)); + const getConvertXMLToJOSM = async (url) => { try { - const response = await CoreModules.axios.get(url, { responseType: 'blob' }); - - const downloadLink = document.createElement('a'); - downloadLink.href = window.URL.createObjectURL(new Blob([response.data])); - downloadLink.setAttribute('download', 'task.zip'); - document.body.appendChild(downloadLink); - - downloadLink.click(); - - document.body.removeChild(downloadLink); - window.URL.revokeObjectURL(downloadLink.href); - - dispatch(CoreModules.TaskActions.FetchConvertToOsm(response.data)); - } catch (error) { - dispatch(CoreModules.TaskActions.FetchConvertToOsmLoading(false)); + const params = { + url: url, + }; + // checkJOSMOpen - To check if JOSM Editor is Open Or Not. + await CoreModules.axios.get( + `http://127.0.0.1:8111/version?jsonp=checkJOSM` + ); + //importToJosmEditor - To open JOSM Editor and add XML of Project Submission To JOSM. + + CoreModules.axios.get( + `http://127.0.0.1:8111/imagery?title=osm&type=tms&url=https://tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png` + // `http://127.0.0.1:8111/imagery?title=osm&type=tms&min_zoom=4&max_zoom=14&url=https://tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png` + ); + await CoreModules.axios.get(`http://127.0.0.1:8111/import?url=${url}`); + // const getConvertXMLToJOSMResponse = await CoreModules.axios.get(url); + // const response: any = getConvertXMLToJOSMResponse.data; + + // dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(response[0].value[0])); + } catch (error: any) { + dispatch(CoreModules.TaskActions.SetJosmEditorError("JOSM Error")); + // alert(error.response.data); + dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(false)); + } finally { + dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(false)); } }; + await getConvertXMLToJOSM(url); }; - - - +}; From 5a6af5ed04a302bacb1b770586c6d8f8bd9718ad Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 15:11:14 +0100 Subject: [PATCH 167/222] docs: info on local dev with JOSM API --- docs/DEV-2.-Backend.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/DEV-2.-Backend.md b/docs/DEV-2.-Backend.md index fe0c9f8709..3ecf82d07f 100644 --- a/docs/DEV-2.-Backend.md +++ b/docs/DEV-2.-Backend.md @@ -155,6 +155,23 @@ Creating a new release during development may not always be feasible. > Note: this is useful for debugging features during active development. +## Running JOSM in the dev stack + +- Run JOSM with FMTM: + +```bash +docker compose \ + -f docker-compose.yml \ + -f docker-compose.josm.yml \ + up -d +``` + +This adds JOSM to the docker compose stack for local development. +Access the JOSM Remote API: +Access the JOSM GUI in browser: + +You can now call the JOSM API from FMTM and changes will be reflected in the GUI. + ## Conclusion Running the FMTM project is easy with Docker. You can also run the From 4fa19c9bf9b84c7ba5fe6246953dc59b713ec61f Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 19:56:32 +0545 Subject: [PATCH 168/222] Fix: ProjectInfo Map Page --- .../src/components/ProjectInfo/ProjectInfomap.jsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index 6956653112..221bd2f071 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -139,7 +139,13 @@ const ProjectInfomap = () => { }, []); useEffect(() => { - if (!projectTaskBoundries && projectTaskBoundries?.length>0) return + if ( + !projectTaskBoundries || + projectTaskBoundries?.length < 1 || + projectTaskBoundries?.[0]?.taskBoundries?.length < 1 + ) { + return; + } const taskGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ @@ -162,7 +168,7 @@ const ProjectInfomap = () => { // setBuildingGeojson(taskBuildingGeojsonFeatureCollection); }, [projectTaskBoundries]); useEffect(() => { - if (!projectBuildingGeojson) return + if (!projectBuildingGeojson) return; const taskBuildingGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ @@ -298,4 +304,4 @@ const ProjectInfomap = () => { ); }; -export default ProjectInfomap; \ No newline at end of file +export default ProjectInfomap; From fd7d5c90ddebfe15ca1e44ebcf24793143b38078 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 19:57:33 +0545 Subject: [PATCH 169/222] lint-fix: Code Linting Fixes --- src/frontend/main/src/api/Submission.ts | 33 +++++++++---------- .../components/createproject/UploadArea.tsx | 3 -- .../main/src/store/slices/SubmissionSlice.ts | 33 +++++++++---------- .../main/src/store/slices/ThemeSlice.ts | 8 +++++ 4 files changed, 39 insertions(+), 38 deletions(-) diff --git a/src/frontend/main/src/api/Submission.ts b/src/frontend/main/src/api/Submission.ts index 4ac5c76b22..c282acefe5 100644 --- a/src/frontend/main/src/api/Submission.ts +++ b/src/frontend/main/src/api/Submission.ts @@ -1,21 +1,20 @@ import axios from 'axios'; import { SubmissionActions } from '../store/slices/SubmissionSlice'; - export const SubmissionService: Function = (url: string) => { - return async (dispatch) => { - dispatch(SubmissionActions.SetSubmissionDetailsLoading(true)) - const getSubmissionDetails = async (url) => { - try { - const getSubmissionDetailsResponse = await axios.get(url); - const response: any = getSubmissionDetailsResponse.data; - dispatch(SubmissionActions.SetSubmissionDetails(response[0].value[0])) - } catch (error) { - dispatch(SubmissionActions.SetSubmissionDetailsLoading(false)) - } finally { - dispatch(SubmissionActions.SetSubmissionDetailsLoading(false)); - } - } - await getSubmissionDetails(url); - } -} + return async (dispatch) => { + dispatch(SubmissionActions.SetSubmissionDetailsLoading(true)); + const getSubmissionDetails = async (url) => { + try { + const getSubmissionDetailsResponse = await axios.get(url); + const response: any = getSubmissionDetailsResponse.data; + dispatch(SubmissionActions.SetSubmissionDetails(response[0].value[0])); + } catch (error) { + dispatch(SubmissionActions.SetSubmissionDetailsLoading(false)); + } finally { + dispatch(SubmissionActions.SetSubmissionDetailsLoading(false)); + } + }; + await getSubmissionDetails(url); + }; +}; diff --git a/src/frontend/main/src/components/createproject/UploadArea.tsx b/src/frontend/main/src/components/createproject/UploadArea.tsx index 7e1276fd0d..4320f18b55 100755 --- a/src/frontend/main/src/components/createproject/UploadArea.tsx +++ b/src/frontend/main/src/components/createproject/UploadArea.tsx @@ -113,9 +113,6 @@ const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue, Next - {/* - - */} {/* END */} diff --git a/src/frontend/main/src/store/slices/SubmissionSlice.ts b/src/frontend/main/src/store/slices/SubmissionSlice.ts index 1f09fad03b..1e70745326 100644 --- a/src/frontend/main/src/store/slices/SubmissionSlice.ts +++ b/src/frontend/main/src/store/slices/SubmissionSlice.ts @@ -1,23 +1,20 @@ -import { createSlice } from "@reduxjs/toolkit"; - +import { createSlice } from '@reduxjs/toolkit'; const SubmissionSlice = createSlice({ - name: 'submission', - initialState: { - submissionDetailsLoading: true, - submissionDetails: [], + name: 'submission', + initialState: { + submissionDetailsLoading: true, + submissionDetails: [], + }, + reducers: { + SetSubmissionDetailsLoading(state, action) { + state.submissionDetailsLoading = action.payload; }, - reducers: { - SetSubmissionDetailsLoading(state, action) { - state.submissionDetailsLoading = action.payload - }, - SetSubmissionDetails(state, action) { - state.submissionDetails = action.payload - }, - - } -}) - + SetSubmissionDetails(state, action) { + state.submissionDetails = action.payload; + }, + }, +}); export const SubmissionActions = SubmissionSlice.actions; -export default SubmissionSlice; \ No newline at end of file +export default SubmissionSlice; diff --git a/src/frontend/main/src/store/slices/ThemeSlice.ts b/src/frontend/main/src/store/slices/ThemeSlice.ts index eff6b6fc94..60b1ce5416 100755 --- a/src/frontend/main/src/store/slices/ThemeSlice.ts +++ b/src/frontend/main/src/store/slices/ThemeSlice.ts @@ -79,6 +79,10 @@ const ThemeSlice = CoreModules.createSlice({ //custom htmlFontSize: 18, + barlowCondensed: { + fontFamily: 'Barlow Condensed', + fontSize: '24px', + }, caption: { fontFamily: 'BarlowBold', fontSize: 24, @@ -118,6 +122,10 @@ const ThemeSlice = CoreModules.createSlice({ fontFamily: 'BarlowLight', fontSize: 16, }, + p: { + fontFamily: 'Archivo', + fontSize: 16, + }, }, }, }, From 3feaab3f30e4029a3f6be2b62c92e24454672717 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 19:57:52 +0545 Subject: [PATCH 170/222] Feat: JOSM Integration with Convert --- .../ProjectInfo/ProjectInfoSidebar.jsx | 27 +++- .../src/views/ProjectInfo.jsx | 147 ++++++++++++++---- .../createproject/ProjectDetailsForm.tsx | 7 - src/frontend/main/src/shared/CoreModules.js | 2 + .../main/src/store/slices/TaskSlice.ts | 90 ++++++----- .../main/src/utilities/CustomizedModal.tsx | 25 +-- 6 files changed, 199 insertions(+), 99 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx index 7f3655b5e8..672a82dcfa 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx @@ -1,14 +1,17 @@ import React from "react"; import CoreModules from "fmtm/CoreModules"; import ProjectCard from "./ProjectCard"; +import environment from "fmtm/environment"; -const ProjectInfoSidebar = ({ taskInfo }) => { +const ProjectInfoSidebar = ({ projectId, taskInfo }) => { const dispatch = CoreModules.useDispatch(); + const params = CoreModules.useParams(); const taskInfoData = Array.from(taskInfo); const selectedTask = CoreModules.useSelector( (state) => state.task.selectedTask ); + const encodedId = params.projectId; const onTaskClick = (taskId) => { dispatch(CoreModules.TaskActions.SetSelectedTask(taskId)); }; @@ -67,11 +70,31 @@ const ProjectInfoSidebar = ({ taskInfo }) => { - + #{task.task_id} + + + Go To Task Submissions + + { const dispatch = CoreModules.useDispatch(); const navigate = CoreModules.useNavigate(); const [isMonitoring, setIsMonitoring] = useState(false); + const themes = CoreModules.useSelector((state) => state.theme.hotTheme); const taskInfo = CoreModules.useSelector((state) => state.task.taskInfo); const selectedTask = CoreModules.useSelector( @@ -40,13 +43,13 @@ const ProjectInfo = () => { const decodedId = environment.decode(encodedId); const handleDownload = (downloadType) => { - if(downloadType === 'csv'){ + if (downloadType === "csv") { dispatch( getDownloadProjectSubmission( `${environment.baseApiUrl}/submission/download?project_id=${decodedId}&export_json=false` ) ); - }else if(downloadType === 'json'){ + } else if (downloadType === "json") { dispatch( getDownloadProjectSubmission( `${environment.baseApiUrl}/submission/download?project_id=${decodedId}&export_json=true` @@ -58,7 +61,11 @@ const ProjectInfo = () => { const handleConvert = () => { dispatch( fetchConvertToOsmDetails( - `${environment.baseApiUrl}/submission/convert-to-osm?project_id=${decodedId}&${selectedTask ?`task_id=${selectedTask}`:''}` + `${ + environment.baseApiUrl + }/submission/convert-to-osm?project_id=${decodedId}&${ + selectedTask ? `task_id=${selectedTask}` : "" + }` ) ); }; @@ -89,10 +96,65 @@ const ProjectInfo = () => { const projectInfo = CoreModules.useSelector( (state) => state.project.projectInfo ); - const downloadSubmissionLoading = CoreModules.useSelector((state)=>state.task.downloadSubmissionLoading) - + const josmEditorError = CoreModules.useSelector( + (state) => state.task.josmEditorError + ); + const downloadSubmissionLoading = CoreModules.useSelector( + (state) => state.task.downloadSubmissionLoading + ); + const uploadToJOSM = () => { + dispatch( + ConvertXMLToJOSM( + `${environment.baseApiUrl}/submission/get_osm_xml/${decodedId}` + ) + ); + }; + const modalStyle = (theme) => ({ + width: "30%", + height: "24%", + bgcolor: theme.palette.mode === "dark" ? "#0A1929" : "white", + border: "1px solid ", + padding: "16px 32px 24px 32px", + }); return ( <> + + <> +

+ Connection with JOSM failed +

+

+ {" "} + Please verify if JOSM is running on your computer and the remote + control is enabled. +

+ { + dispatch(CoreModules.TaskActions.SetJosmEditorError(null)); + }} + > + Close + + +
{ }} > - { navigate(-1); // setOpen(true); }} color="info" > - - - Back - + + + Back + #{projectInfo?.id} @@ -125,6 +196,15 @@ const ProjectInfo = () => { + + Upload to JOSM + { Convert handleDownload('csv')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type=== 'csv' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - - CSV + onClick={() => handleDownload("csv")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "csv" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + CSV handleDownload('json')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type === 'json' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - JSON + onClick={() => handleDownload("json")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "json" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + JSON diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index 7a35125a0a..d3704e6f4b 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -9,13 +9,9 @@ import { CreateProjectActions } from '../../store/slices/CreateProjectSlice'; import { OrganisationService } from '../../api/CreateProjectService'; import environment from '../../environment'; import { MenuItem, Select } from '@mui/material'; -import CustomizedModal from '../../utilities/CustomizedModal'; -import OrganizationAddForm from '../organization/OrganizationAddForm'; import { createPopup } from '../../utilfunctions/createPopup'; const ProjectDetailsForm: React.FC = () => { - const [openOrganizationModal, setOpenOrganizationModal] = useState(false); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); // // const state:any = useSelector(state=>state.project.projectData) // // console.log('state main :',state) @@ -405,9 +401,6 @@ const ProjectDetailsForm: React.FC = () => { - - - ); }; diff --git a/src/frontend/main/src/shared/CoreModules.js b/src/frontend/main/src/shared/CoreModules.js index 4f3bc7950f..023d3331b0 100755 --- a/src/frontend/main/src/shared/CoreModules.js +++ b/src/frontend/main/src/shared/CoreModules.js @@ -64,6 +64,7 @@ import { createSlice, configureStore, getDefaultMiddleware } from '@reduxjs/tool import { combineReducers } from 'redux'; import LoadingBar from '../components/createproject/LoadingBar'; import { TaskActions } from '../store/slices/TaskSlice'; +import CustomizedModal from '../utilities/CustomizedModal'; export default { Provider, @@ -136,4 +137,5 @@ export default { LoadingBar, TaskActions, LoadingButton, + CustomizedModal, }; diff --git a/src/frontend/main/src/store/slices/TaskSlice.ts b/src/frontend/main/src/store/slices/TaskSlice.ts index 1f357f768e..14580c21ff 100644 --- a/src/frontend/main/src/store/slices/TaskSlice.ts +++ b/src/frontend/main/src/store/slices/TaskSlice.ts @@ -1,45 +1,53 @@ -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice } from '@reduxjs/toolkit'; const TaskSlice = createSlice({ - name: 'task', - initialState: { - taskLoading: true, - taskInfo: [], - selectedTask: null, - projectBoundaryLoading: true, - projectBoundary: [], - convertToOsmLoading: null, - convertToOsm: [], - downloadSubmissionLoading:{type:'',loading:false} - }, - reducers: { - SetTaskLoading(state, action) { - state.taskLoading = action.payload - }, - GetProjectBoundaryLoading(state, action) { - state.projectBoundaryLoading = action.payload - }, - FetchConvertToOsmLoading(state, action) { - state.convertToOsmLoading = action.payload - }, - FetchTaskInfoDetails(state, action) { - state.taskInfo = action.payload; - }, - SetSelectedTask(state, action) { - state.selectedTask = action.payload; - }, - - GetDownloadProjectBoundary(state, action) { - state.projectBoundary = action.payload; - }, - FetchConvertToOsm(state, action) { - state.convertToOsm = action.payload; - }, - GetDownloadProjectSubmissionLoading(state, action) { - state.downloadSubmissionLoading = action.payload; - } - }, -}) + name: 'task', + initialState: { + taskLoading: true, + taskInfo: [], + selectedTask: null, + projectBoundaryLoading: true, + projectBoundary: [], + convertToOsmLoading: null, + convertToOsm: [], + downloadSubmissionLoading: { type: '', loading: false }, + convertXMLToJOSMLoading: false, + josmEditorError: null, + }, + reducers: { + SetTaskLoading(state, action) { + state.taskLoading = action.payload; + }, + GetProjectBoundaryLoading(state, action) { + state.projectBoundaryLoading = action.payload; + }, + FetchConvertToOsmLoading(state, action) { + state.convertToOsmLoading = action.payload; + }, + FetchTaskInfoDetails(state, action) { + state.taskInfo = action.payload; + }, + SetSelectedTask(state, action) { + state.selectedTask = action.payload; + }, + + GetDownloadProjectBoundary(state, action) { + state.projectBoundary = action.payload; + }, + FetchConvertToOsm(state, action) { + state.convertToOsm = action.payload; + }, + GetDownloadProjectSubmissionLoading(state, action) { + state.downloadSubmissionLoading = action.payload; + }, + SetConvertXMLToJOSMLoading(state, action) { + state.convertXMLToJOSMLoading = action.payload; + }, + SetJosmEditorError(state, action) { + state.josmEditorError = action.payload; + }, + }, +}); export const TaskActions = TaskSlice.actions; -export default TaskSlice; \ No newline at end of file +export default TaskSlice; diff --git a/src/frontend/main/src/utilities/CustomizedModal.tsx b/src/frontend/main/src/utilities/CustomizedModal.tsx index 090e7476f1..6cf4c8e632 100644 --- a/src/frontend/main/src/utilities/CustomizedModal.tsx +++ b/src/frontend/main/src/utilities/CustomizedModal.tsx @@ -3,7 +3,7 @@ import clsx from 'clsx'; import { styled, Box, Theme } from '@mui/system'; import Modal from '@mui/base/ModalUnstyled'; -export default function CustomizedModal({ children, isOpen, toggleOpen }) { +export default function CustomizedModal({ style = defaultStyle, children, isOpen, toggleOpen }) { const handleClose = () => toggleOpen(false); return ( @@ -15,26 +15,15 @@ export default function CustomizedModal({ children, isOpen, toggleOpen }) { onClose={handleClose} slots={{ backdrop: StyledBackdrop }} > - - {React.Children.only(children)} - + {React.Children.only(children)} -
+
); } -const Backdrop = React.forwardRef< - HTMLDivElement, - { open?: boolean; className: string } ->((props, ref) => { +const Backdrop = React.forwardRef((props, ref) => { const { open, className, ...other } = props; - return ( -
- ); + return
; }); const StyledModal = styled(Modal)` @@ -60,11 +49,11 @@ const StyledBackdrop = styled(Backdrop)` -webkit-tap-highlight-color: transparent; `; -const style = (theme: Theme) => ({ +const defaultStyle = (theme: Theme) => ({ width: '80%', height: '80%', bgcolor: theme.palette.mode === 'dark' ? '#0A1929' : 'white', border: '1px solid ', borderRadius: '10px', padding: '16px 32px 24px 32px', -}); \ No newline at end of file +}); From 43e6704f00c3fb374adfc35ba6c2635308f16a9b Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 10 Aug 2023 10:18:27 +0545 Subject: [PATCH 171/222] fix: user with existing username in osm login --- src/backend/app/auth/auth_routes.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/backend/app/auth/auth_routes.py b/src/backend/app/auth/auth_routes.py index 7372059ccb..ad0ab6f884 100644 --- a/src/backend/app/auth/auth_routes.py +++ b/src/backend/app/auth/auth_routes.py @@ -16,7 +16,7 @@ # along with FMTM. If not, see . # -from fastapi import APIRouter, Depends, Request +from fastapi import APIRouter, Depends, Request, HTTPException from fastapi.logger import logger as log from fastapi.responses import JSONResponse from sqlalchemy.orm import Session @@ -89,9 +89,17 @@ def my_data( Returns: user_data """ + # Save user info in User table user = user_crud.get_user_by_id(db, user_data['id']) if not user: + user_by_username = user_crud.get_user_by_username(db, user_data['username']) + if user_by_username: + raise HTTPException( + status_code=400, detail=f"User with this username {user_data['username']} already exists. \ + Please contact the administrator for this." + ) + db_user = DbUser(id=user_data['id'], username=user_data['username']) db.add(db_user) db.commit() From 799e17fc2910c138097c11f610e8ac8ef1cd89c5 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 10 Aug 2023 13:10:43 +0545 Subject: [PATCH 172/222] api to geat mbtiles created --- src/backend/app/projects/project_crud.py | 26 ++++++++++++++++++++++ src/backend/app/projects/project_routes.py | 22 +++++++++++++++++- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 960c5fd2dd..97f23c0ace 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -56,6 +56,7 @@ from sqlalchemy.orm import Session from sqlalchemy.sql import text from osm_fieldwork.filter_data import FilterData +from osm_fieldwork import basemapper from ..central import central_crud from ..config import settings @@ -2088,3 +2089,28 @@ async def get_extracted_data_from_db(db:Session, project_id:int, outfile:str): with open(outfile, "w") as jsonfile: jsonfile.truncate(0) dump(features, jsonfile) + + + +async def get_project_tiles(db: Session, project_id: int): + """Get the tiles for a project""" + zooms = [12,13,14,15,16,17,18,19] + boundary = "/tmp/thamel.geojson" + source = "esri" + base = f"/tmp/tiles/{source}tiles" + outfile = "thamel.mbtiles" + + basemap = basemapper.BaseMapper(boundary, base, source) + outf = basemapper.DataFile(outfile, basemap.getFormat()) + suffix = os.path.splitext(outfile)[1] + if suffix == ".mbtiles": + outf.addBounds(basemap.bbox) + for level in zooms: + basemap.getTiles(level) + if outfile: + # Create output database and specify image format, png, jpg, or tif + outf.writeTiles(basemap.tiles, base) + else: + logging.info("Only downloading tiles to %s!" % base) + + return 'Processing' \ No newline at end of file diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 115c551b49..6fc51b0915 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -827,4 +827,24 @@ async def download_task_boundaries( "Content-Type": "application/media", } - return Response(content = out, headers=headers) \ No newline at end of file + return Response(content = out, headers=headers) + + +@router.get("/tiles/{project_id}") +async def get_project_tiles( + project_id: int, + db: Session = Depends(database.get_db), + ): + """ + Returns the tiles for a project. + + Args: + project_id (int): The id of the project. + + Returns: + Response: The HTTP response object containing the tiles. + """ + + tiles = await project_crud.get_project_tiles(db, project_id) + + return tiles \ No newline at end of file From 2dd03cc02fce4831279f588bbad20152ae519b76 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 10 Aug 2023 13:13:14 +0545 Subject: [PATCH 173/222] tiles source made dynamic --- src/backend/app/projects/project_crud.py | 5 ++--- src/backend/app/projects/project_routes.py | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 97f23c0ace..cfae730d2f 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -2091,12 +2091,11 @@ async def get_extracted_data_from_db(db:Session, project_id:int, outfile:str): dump(features, jsonfile) - -async def get_project_tiles(db: Session, project_id: int): +async def get_project_tiles(db: Session, project_id: int, source: str): """Get the tiles for a project""" zooms = [12,13,14,15,16,17,18,19] boundary = "/tmp/thamel.geojson" - source = "esri" + source = source base = f"/tmp/tiles/{source}tiles" outfile = "thamel.mbtiles" diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 6fc51b0915..22762f6d62 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -833,6 +833,7 @@ async def download_task_boundaries( @router.get("/tiles/{project_id}") async def get_project_tiles( project_id: int, + source: str, db: Session = Depends(database.get_db), ): """ @@ -845,6 +846,6 @@ async def get_project_tiles( Response: The HTTP response object containing the tiles. """ - tiles = await project_crud.get_project_tiles(db, project_id) + tiles = await project_crud.get_project_tiles(db, project_id, source) return tiles \ No newline at end of file From 55bf7029293992d55584078a3ef7b747ef7f67d3 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 10 Aug 2023 14:45:54 +0545 Subject: [PATCH 174/222] feat: bounds in geometry_to_geojson --- src/backend/app/db/postgis_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/app/db/postgis_utils.py b/src/backend/app/db/postgis_utils.py index c2e60d8c4e..00ed26cbfc 100644 --- a/src/backend/app/db/postgis_utils.py +++ b/src/backend/app/db/postgis_utils.py @@ -37,6 +37,7 @@ def geometry_to_geojson(geometry: Geometry, properties: str = {}, id: int = None "geometry": mapping(shape), "properties": properties, "id": id, + "bbox":shape.bounds } return Feature(**geojson) From e12dd1a767ab8bfca6b419ea0b2502120a2c5ec4 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 10 Aug 2023 14:46:31 +0545 Subject: [PATCH 175/222] feat: josm zoom and load added --- .../fmtm_openlayer_map/src/api/task.ts | 24 ++++++++++++------- .../src/views/ProjectInfo.jsx | 3 ++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/api/task.ts b/src/frontend/fmtm_openlayer_map/src/api/task.ts index a993f7f40d..035d94fb76 100644 --- a/src/frontend/fmtm_openlayer_map/src/api/task.ts +++ b/src/frontend/fmtm_openlayer_map/src/api/task.ts @@ -93,29 +93,35 @@ export const fetchConvertToOsmDetails: Function = (url: string) => { }; }; -export const ConvertXMLToJOSM: Function = (url: string) => { +export const ConvertXMLToJOSM: Function = (url: string, projectBbox) => { return async (dispatch) => { dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(true)); const getConvertXMLToJOSM = async (url) => { try { - const params = { - url: url, - }; // checkJOSMOpen - To check if JOSM Editor is Open Or Not. await CoreModules.axios.get( `http://127.0.0.1:8111/version?jsonp=checkJOSM` ); //importToJosmEditor - To open JOSM Editor and add XML of Project Submission To JOSM. - CoreModules.axios.get( `http://127.0.0.1:8111/imagery?title=osm&type=tms&url=https://tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png` - // `http://127.0.0.1:8111/imagery?title=osm&type=tms&min_zoom=4&max_zoom=14&url=https://tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png` ); await CoreModules.axios.get(`http://127.0.0.1:8111/import?url=${url}`); - // const getConvertXMLToJOSMResponse = await CoreModules.axios.get(url); - // const response: any = getConvertXMLToJOSMResponse.data; + // `http://127.0.0.1:8111/load_and_zoom?left=80.0580&right=88.2015&top=27.9268&bottom=26.3470`; - // dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(response[0].value[0])); + const loadAndZoomParams = { + left: projectBbox[0], + bottom: projectBbox[1], + right: projectBbox[2], + top: projectBbox[3], + changeset_comment: "fmtm", + // changeset_source: project.imagery ? project.imagery : '', + new_layer: "true", + layer_name: "OSM Data", + }; + await CoreModules.axios.get(`http://127.0.0.1:8111/zoom`, { + params: loadAndZoomParams, + }); } catch (error: any) { dispatch(CoreModules.TaskActions.SetJosmEditorError("JOSM Error")); // alert(error.response.data); diff --git a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx index cbf191568b..c7d499bee5 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx @@ -105,7 +105,8 @@ const ProjectInfo = () => { const uploadToJOSM = () => { dispatch( ConvertXMLToJOSM( - `${environment.baseApiUrl}/submission/get_osm_xml/${decodedId}` + `${environment.baseApiUrl}/submission/get_osm_xml/${decodedId}`, + projectInfo.outline_geojson.bbox ) ); }; From ce9b1dbcf532b740bb91b3d55e42b77e1023eaf7 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 10 Aug 2023 14:47:56 +0545 Subject: [PATCH 176/222] project outlines received from project table --- src/backend/app/projects/project_crud.py | 35 +++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index cfae730d2f..02ecd8e460 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -36,6 +36,7 @@ import shapely.wkb as wkblib import sqlalchemy from fastapi import HTTPException, UploadFile, File +from fastapi.responses import FileResponse from fastapi.logger import logger as logger from geoalchemy2.shape import from_shape from geojson import dump @@ -2094,12 +2095,38 @@ async def get_extracted_data_from_db(db:Session, project_id:int, outfile:str): async def get_project_tiles(db: Session, project_id: int, source: str): """Get the tiles for a project""" zooms = [12,13,14,15,16,17,18,19] - boundary = "/tmp/thamel.geojson" source = source base = f"/tmp/tiles/{source}tiles" - outfile = "thamel.mbtiles" + outfile = "/tmp/thamel.mbtiles" - basemap = basemapper.BaseMapper(boundary, base, source) + + # Project Outline + query = f'''SELECT jsonb_build_object( + 'type', 'FeatureCollection', + 'features', jsonb_agg(feature) + ) + FROM ( + SELECT jsonb_build_object( + 'type', 'Feature', + 'id', id, + 'geometry', ST_AsGeoJSON(outline)::jsonb + ) AS feature + FROM projects + WHERE id={project_id} + ) features;''' + + result = db.execute(query) + features = result.fetchone()[0] + + # Boundary + boundary_file = f"/tmp/{project_id}_boundary.geojson" + + # Update outfile containing osm extracts with the new geojson contents containing title in the properties. + with open(boundary_file, "w") as jsonfile: + jsonfile.truncate(0) + dump(features, jsonfile) + + basemap = basemapper.BaseMapper(boundary_file, base, source) outf = basemapper.DataFile(outfile, basemap.getFormat()) suffix = os.path.splitext(outfile)[1] if suffix == ".mbtiles": @@ -2112,4 +2139,4 @@ async def get_project_tiles(db: Session, project_id: int, source: str): else: logging.info("Only downloading tiles to %s!" % base) - return 'Processing' \ No newline at end of file + return FileResponse(outfile, headers={"Content-Disposition": f"attachment; filename=tiles.mbtiles"}) From c80c3bd5a34adcb5a1c189eab67f07db585568fb Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 10 Aug 2023 14:48:59 +0545 Subject: [PATCH 177/222] options set for tile source --- src/backend/app/projects/project_routes.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 22762f6d62..73b90e4e0c 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -31,7 +31,8 @@ Form, HTTPException, UploadFile, - Response + Response, + Query ) from fastapi.responses import FileResponse from osm_fieldwork.xlsforms import xlsforms_path @@ -46,6 +47,7 @@ from . import project_crud, project_schemas from ..tasks import tasks_crud from . import utils +# from ..models.enums import TILES_SOURCE router = APIRouter( prefix="/projects", @@ -829,11 +831,12 @@ async def download_task_boundaries( return Response(content = out, headers=headers) +TILES_SOURCE = ["esri", "bing", "google", "oal", "topo"] @router.get("/tiles/{project_id}") async def get_project_tiles( project_id: int, - source: str, + source: str = Query(..., description="Select a source for tiles", enum=TILES_SOURCE), db: Session = Depends(database.get_db), ): """ @@ -841,9 +844,10 @@ async def get_project_tiles( Args: project_id (int): The id of the project. + source (str): The selected source. Returns: - Response: The HTTP response object containing the tiles. + Response: The File response object containing the tiles. """ tiles = await project_crud.get_project_tiles(db, project_id, source) From 6d90a2782c64f72eddae60e7f3043f196c5b50e2 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 10 Aug 2023 14:55:24 +0545 Subject: [PATCH 178/222] tile source obtained from enums --- src/backend/app/models/enums.py | 2 ++ src/backend/app/projects/project_routes.py | 5 +---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/backend/app/models/enums.py b/src/backend/app/models/enums.py index 6c888957a5..ca9771e133 100644 --- a/src/backend/app/models/enums.py +++ b/src/backend/app/models/enums.py @@ -219,3 +219,5 @@ class BackgroundTaskStatus(IntEnum, Enum): FAILED = 2 RECEIVED = 3 SUCCESS = 4 + +TILES_SOURCE = ["esri", "bing", "google", "topo"] \ No newline at end of file diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 73b90e4e0c..5f92f3b19b 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -20,8 +20,6 @@ import os import uuid from typing import List, Optional -import tempfile -import inspect from fastapi import ( APIRouter, @@ -47,7 +45,7 @@ from . import project_crud, project_schemas from ..tasks import tasks_crud from . import utils -# from ..models.enums import TILES_SOURCE +from ..models.enums import TILES_SOURCE router = APIRouter( prefix="/projects", @@ -831,7 +829,6 @@ async def download_task_boundaries( return Response(content = out, headers=headers) -TILES_SOURCE = ["esri", "bing", "google", "oal", "topo"] @router.get("/tiles/{project_id}") async def get_project_tiles( From 36c8aff684173f8fe1f7eaec1a34931f6ce9290c Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 10 Aug 2023 15:15:19 +0545 Subject: [PATCH 179/222] mercantile and pysmartdl packages added --- src/backend/pdm.lock | 30 ++++++++++++++++++++++++++++-- src/backend/pyproject.toml | 2 ++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index cd93346f68..80d5e77f22 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -1,3 +1,6 @@ +# This file is @generated by PDM. +# It is not intended for manual editing. + [[package]] name = "alembic" version = "1.8.1" @@ -466,6 +469,14 @@ dependencies = [ "traitlets", ] +[[package]] +name = "mercantile" +version = "1.2.1" +summary = "Web mercator XYZ tile utilities" +dependencies = [ + "click>=3.0", +] + [[package]] name = "numpy" version = "1.24.3" @@ -724,6 +735,11 @@ name = "pypng" version = "0.20220715.0" summary = "Pure Python library for saving and loading PNG images" +[[package]] +name = "pysmartdl" +version = "1.3.4" +summary = "A Smart Download Manager for Python" + [[package]] name = "pytest" version = "7.2.2" @@ -1069,8 +1085,10 @@ requires_python = ">=3.7" summary = "Backport of pathlib-compatible object wrapper for zip files" [metadata] -lock_version = "4.0" -content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893522a467" +lock_version = "4.2" +cross_platform = true +groups = ["default", "dev"] +content_hash = "sha256:631f54b4db88856e27bb2f42fed5f39e8f899e0b8dfc6788811285095d6aae96" [metadata.files] "alembic 1.8.1" = [ @@ -1833,6 +1851,10 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/d9/50/3af8c0362f26108e54d58c7f38784a3bdae6b9a450bab48ee8482d737f44/matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, {url = "https://files.pythonhosted.org/packages/f2/51/c34d7a1d528efaae3d8ddb18ef45a41f284eacf9e514523b191b7d0872cc/matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, ] +"mercantile 1.2.1" = [ + {url = "https://files.pythonhosted.org/packages/b2/d6/de0cc74f8d36976aeca0dd2e9cbf711882ff8e177495115fd82459afdc4d/mercantile-1.2.1-py3-none-any.whl", hash = "sha256:30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f"}, + {url = "https://files.pythonhosted.org/packages/d2/c6/87409bcb26fb68c393fa8cf58ba09363aa7298cfb438a0109b5cb14bc98b/mercantile-1.2.1.tar.gz", hash = "sha256:fa3c6db15daffd58454ac198b31887519a19caccee3f9d63d17ae7ff61b3b56b"}, +] "numpy 1.24.3" = [ {url = "https://files.pythonhosted.org/packages/0d/43/643629a4a278b4815541c7d69856c07ddb0e99bdc62b43538d3751eae2d8/numpy-1.24.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4"}, {url = "https://files.pythonhosted.org/packages/15/b8/cbe1750b9ec78062e5a00ef39ff8bdf189ce753b411b6b35931ababaee47/numpy-1.24.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4"}, @@ -2116,6 +2138,10 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/3e/b9/3766cc361d93edb2ce81e2e1f87dd98f314d7d513877a342d31b30741680/pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, {url = "https://files.pythonhosted.org/packages/93/cd/112f092ec27cca83e0516de0a3368dbd9128c187fb6b52aaaa7cde39c96d/pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, ] +"pysmartdl 1.3.4" = [ + {url = "https://files.pythonhosted.org/packages/5a/4c/ed073b2373f115094a4a612431abe25b58e542bebd951557dcc881999ef9/pySmartDL-1.3.4.tar.gz", hash = "sha256:35275d1694f3474d33bdca93b27d3608265ffd42f5aeb28e56f38b906c0c35f4"}, + {url = "https://files.pythonhosted.org/packages/ac/6a/582286ea74c54363cba30413214767904f0a239e12253c3817feaf78453f/pySmartDL-1.3.4-py3-none-any.whl", hash = "sha256:671c277ca710fb9b6603b19176f5c091041ec4ef6dcdb507c9a983a89ca35d31"}, +] "pytest 7.2.2" = [ {url = "https://files.pythonhosted.org/packages/b2/68/5321b5793bd506961bd40bdbdd0674e7de4fb873ee7cab33dd27283ad513/pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, {url = "https://files.pythonhosted.org/packages/b9/29/311895d9cd3f003dd58e8fdea36dd895ba2da5c0c90601836f7de79f76fe/pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 588f9d3a52..097c3a2ae4 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -50,6 +50,8 @@ dependencies = [ "sentry-sdk==1.9.6", "py-cpuinfo==9.0.0", "gdal==3.6.2", + "mercantile==1.2.1", + "pySmartDL==1.3.4" ] requires-python = ">=3.10" readme = "../../README.md" From 6a41f12d7304f36cd6650cee5bf465df46ff4cc5 Mon Sep 17 00:00:00 2001 From: Varun Date: Fri, 11 Aug 2023 13:40:15 +0545 Subject: [PATCH 180/222] Feat: type changes --- .../components/ProjectInfo/ProjectInfomap.jsx | 2 +- .../components/createproject/DefineTasks.tsx | 5 +- .../createproject/ProjectDetailsForm.tsx | 5 +- .../src/store/slices/CreateProjectSlice.ts | 11 +- .../main/src/store/types/ICreateProject.ts | 104 +++++++++--------- 5 files changed, 66 insertions(+), 61 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index 209986d06a..36c3697678 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -116,7 +116,7 @@ const ProjectInfomap = () => { count: task.submission_count, })); - const projectBuildingGeojson = CoreModules.useAppSelector( + const projectBuildingGeojson = useAppSelector( (state) => state.project.projectBuildingGeojson ); const selectedTask = CoreModules.useAppSelector( diff --git a/src/frontend/main/src/components/createproject/DefineTasks.tsx b/src/frontend/main/src/components/createproject/DefineTasks.tsx index 703ce3f583..2647c7429b 100755 --- a/src/frontend/main/src/components/createproject/DefineTasks.tsx +++ b/src/frontend/main/src/components/createproject/DefineTasks.tsx @@ -11,9 +11,8 @@ import { InputLabel, MenuItem, Select } from '@mui/material'; import DefineAreaMap from 'map/DefineAreaMap'; import useForm from '../../hooks/useForm'; import DefineTaskValidation from './validation/DefineTaskValidation'; +import { useAppSelector } from '../../types/reduxTypes'; -// const DefineAreaMap = React.lazy(() => import('map/DefineAreaMap')); -// const DefineAreaMap = React.lazy(() => import('map/DefineAreaMap')); const alogrithmList = [ { id: 1, value: 'Divide on Square', label: 'Divide on Square' }, { id: 2, value: 'Choose Area as Tasks', label: 'Choose Area as Tasks' }, @@ -33,7 +32,7 @@ const DefineTasks: React.FC = ({ geojsonFile, setGeojsonFile }) => { const dispatch = CoreModules.useAppDispatch(); // //dispatch function to perform redux state mutation - const projectDetails = CoreModules.useAppSelector((state) => state.createproject.projectDetails); + const projectDetails = useAppSelector((state) => state.createproject.projectDetails); // //we use use-selector from redux to get all state of projectDetails from createProject slice const submission = () => { diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index d385ad8f92..1aeb1eaead 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -10,6 +10,7 @@ import { OrganisationService } from '../../api/CreateProjectService'; import environment from '../../environment'; import { MenuItem, Select } from '@mui/material'; import { createPopup } from '../../utilfunctions/createPopup'; +import { useAppSelector } from '../../types/reduxTypes'; const ProjectDetailsForm: React.FC = () => { const defaultTheme: any = CoreModules.useAppSelector((state) => state.theme.hotTheme); @@ -24,10 +25,10 @@ const ProjectDetailsForm: React.FC = () => { const dispatch = CoreModules.useAppDispatch(); // //dispatch function to perform redux state mutation - const projectDetails: any = CoreModules.useAppSelector((state) => state.createproject.projectDetails); + const projectDetails: any = useAppSelector((state) => state.createproject.projectDetails); // //we use use selector from redux to get all state of projectDetails from createProject slice - const organizationListData: any = CoreModules.useAppSelector((state) => state.createproject.organizationList); + const organizationListData: any = useAppSelector((state) => state.createproject.organizationList); // //we use use selector from redux to get all state of projectDetails from createProject slice useEffect(() => { diff --git a/src/frontend/main/src/store/slices/CreateProjectSlice.ts b/src/frontend/main/src/store/slices/CreateProjectSlice.ts index 6f37b5149d..a650ad0566 100755 --- a/src/frontend/main/src/store/slices/CreateProjectSlice.ts +++ b/src/frontend/main/src/store/slices/CreateProjectSlice.ts @@ -1,15 +1,18 @@ -import { ICreateProjectState } from 'store/types/ICreateProject'; +import { CreateProjectStateTypes } from 'store/types/ICreateProject'; import CoreModules from '../../shared/CoreModules'; +import { createSlice } from '@reduxjs/toolkit'; -export const initialState: ICreateProjectState = { +export const initialState: CreateProjectStateTypes = { editProjectDetails: { name: '', description: '', short_description: '' }, editProjectResponse: null, projectDetails: { dimension: 10, no_of_buildings: 5 }, projectDetailsResponse: null, projectDetailsLoading: false, + editProjectDetailsLoading: false, projectArea: null, projectAreaLoading: false, formCategoryList: [], + formCategoryLoading: false, generateQrLoading: false, organizationList: [], organizationListLoading: false, @@ -27,7 +30,7 @@ export const initialState: ICreateProjectState = { drawToggle: false, }; -const CreateProject = CoreModules.createSlice({ +const CreateProject = createSlice({ name: 'createproject', initialState: initialState, reducers: { @@ -42,7 +45,7 @@ const CreateProject = CoreModules.createSlice({ }, ClearCreateProjectFormData(state) { // state.projectDetailsResponse = null - state.projectDetails = {}; + state.projectDetails = { dimension: 10, no_of_buildings: 5 }; state.projectArea = null; }, UploadAreaLoading(state, action) { diff --git a/src/frontend/main/src/store/types/ICreateProject.ts b/src/frontend/main/src/store/types/ICreateProject.ts index c0263d5ef3..96b73b11df 100644 --- a/src/frontend/main/src/store/types/ICreateProject.ts +++ b/src/frontend/main/src/store/types/ICreateProject.ts @@ -1,85 +1,87 @@ -export interface ICreateProjectState { - editProjectDetails: IEditProjectDetails; - editProjectResponse?: IEditProjectResponse | null; - projectDetails: IProjectDetails; - projectDetailsResponse: IEditProjectResponse | null; +export type CreateProjectStateTypes = { + editProjectDetails: EditProjectDetailsTypes; + editProjectResponse?: EditProjectResponseTypes | null; + projectDetails: ProjectDetailsTypes; + projectDetailsResponse: EditProjectResponseTypes | null; projectDetailsLoading: boolean; - projectArea: IProjectArea | null; + editProjectDetailsLoading: boolean; + projectArea: ProjectAreaTypes | null; projectAreaLoading: boolean; - formCategoryList: IFormCategoryList | []; + formCategoryList: FormCategoryListTypes | []; + formCategoryLoading: boolean; generateQrLoading: boolean; - organizationList: IOrganizationList[]; + organizationList: OrganizationListTypes[]; organizationListLoading: boolean; - generateQrSuccess: IGenerateQrSuccess | null; + generateQrSuccess: GenerateQrSuccessTypes | null; generateProjectLogLoading: boolean; - generateProjectLog: IGenerateProjectLog | null; + generateProjectLog: GenerateProjectLogTypes | null; createProjectStep: number; dividedTaskLoading: boolean; dividedTaskGeojson: string | null; formUpdateLoading: boolean; taskSplittingGeojsonLoading: boolean; - taskSplittingGeojson: ITaskSplittingGeojson | null; + taskSplittingGeojson: TaskSplittingGeojsonTypes | null; updateBoundaryLoading: boolean; - drawnGeojson: IDrawnGeojson | null; + drawnGeojson: DrawnGeojsonTypes | null; drawToggle: boolean; -} -export interface IAuthor { +}; +export type AuthorTypes = { username: string; id: number; -} +}; -export interface IGeometry { +export type GeometryTypes = { type: string; coordinates: number[][][]; -} +}; -export interface IGeoJSONFeature { +export type GeoJSONFeatureTypes = { type: string; - geometry: IGeometry; + geometry: GeometryTypes; properties: Record; id: string; bbox: null | number[]; -} +}; -export interface IProjectTask { +export type ProjectTaskTypes = { id: number; project_id: number; project_task_index: number; project_task_name: string; - outline_geojson: IGeoJSONFeature; - outline_centroid: IGeoJSONFeature; + outline_geojson: GeoJSONFeatureTypes; + outline_centroid: GeoJSONFeatureTypes; task_status: number; locked_by_uid: number | null; locked_by_username: string | null; task_history: any[]; qr_code_base64: string; task_status_str: string; -} +}; -export interface IProjectInfo { +export type ProjectInfoTypes = { name: string; short_description: string; description: string; -} +}; -interface IEditProjectResponse { +type EditProjectResponseTypes = { id: number; odkid: number; - author: IAuthor; - project_info: IProjectInfo[]; + author: AuthorTypes; + project_info: ProjectInfoTypes[]; status: number; - outline_geojson: IGeoJSONFeature; - project_tasks: IProjectTask[]; + outline_geojson: GeoJSONFeatureTypes; + project_tasks: ProjectTaskTypes[]; xform_title: string; hashtags: string[]; -} -export interface IEditProjectDetails { +}; +export type EditProjectDetailsTypes = { name: string; description: string; short_description: string; -} +}; -export interface IProjectDetails { +export type ProjectDetailsTypes = { dimension: number; no_of_buildings: number; odk_central_user?: string; @@ -95,23 +97,23 @@ export interface IProjectDetails { data_extract_options?: string; data_extractWays?: string; form_ways?: string; -} +}; -export interface IProjectArea { +export type ProjectAreaTypes = { // Define properties related to the project area here -} +}; -export interface IFormCategoryList { +export type FormCategoryListTypes = { id: number; title: string; -} +}; -export interface IGenerateQrSuccess { +export type GenerateQrSuccessTypes = { Message: string; task_id: string; -} +}; -export interface IOrganizationList { +export type OrganizationListTypes = { logo: string; id: number; url: string; @@ -119,21 +121,21 @@ export interface IOrganizationList { name: string; description: string; type: 1; -} +}; -export interface IGenerateProjectLog { +export type GenerateProjectLogTypes = { status: string; message: string | null; progress: number; logs: string; -} +}; -export interface ITaskSplittingGeojson { +export type TaskSplittingGeojsonTypes = { // Define properties related to the task splitting GeoJSON here -} +}; -export interface IDrawnGeojson { +export type DrawnGeojsonTypes = { type: string; properties: null; - geometry: IGeometry; -} + geometry: GeometryTypes; +}; From a2098241c1233091e9001c10821a366c2dc4f7f4 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 13:09:22 +0545 Subject: [PATCH 181/222] fix: submission detail page undefined --- .../fmtm_openlayer_map/src/views/Tasks.jsx | 555 ++++++++++-------- 1 file changed, 324 insertions(+), 231 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx index 52802b4878..ddf851bccc 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Tasks.jsx @@ -1,262 +1,355 @@ import React, { useEffect, useState } from "react"; // import '../styles/home.css' import "../../node_modules/ol/ol.css"; -import CoreModules from 'fmtm/CoreModules'; -import AssetModules from 'fmtm/AssetModules'; +import CoreModules from "fmtm/CoreModules"; +import AssetModules from "fmtm/AssetModules"; // import { useLocation, useNavigate } from 'react-router-dom'; // import { styled, alpha } from '@mui/material'; -import Avatar from '../assets/images/avatar.png' +import Avatar from "../assets/images/avatar.png"; import SubmissionMap from "../components/SubmissionMap/SubmissionMap"; import environment from "fmtm/environment"; -import { ProjectBuildingGeojsonService, ProjectSubmissionService } from "../api/SubmissionService"; +import { + ProjectBuildingGeojsonService, + ProjectSubmissionService, +} from "../api/SubmissionService"; import { ProjectActions } from "fmtm/ProjectSlice"; import { ProjectById } from "../api/Project"; import { getDownloadProjectSubmission } from "../api/task"; const basicGeojsonTemplate = { - "type": "FeatureCollection", - "features": [] + type: "FeatureCollection", + features: [], }; const TasksSubmission = () => { - const dispatch = CoreModules.useDispatch(); - const state = CoreModules.useSelector((state) => state.project); - const projectInfo = CoreModules.useSelector( - (state) => state.home.selectedProject + const dispatch = CoreModules.useDispatch(); + const state = CoreModules.useSelector((state) => state.project); + const projectInfo = CoreModules.useSelector( + (state) => state.home.selectedProject + ); + const projectSubmissionState = CoreModules.useSelector( + (state) => state.project.projectSubmission + ); + const projectState = CoreModules.useSelector( + (state) => state.project.project + ); + // const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); + // const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); + const params = CoreModules.useParams(); + const encodedProjectId = params.projectId; + const decodedProjectId = environment.decode(encodedProjectId); + const encodedTaskId = params.taskId; + const decodedTaskId = environment.decode(encodedTaskId); + // const theme = CoreModules.useSelector(state => state.theme.hotTheme) + useEffect(() => { + dispatch( + ProjectSubmissionService( + `${environment.baseApiUrl}/submission/?project_id=${decodedProjectId}&task_id=${decodedTaskId}` + ) ); - const projectSubmissionState = CoreModules.useSelector((state) => state.project.projectSubmission); - const projectState = CoreModules.useSelector((state) => state.project.project); - // const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); - // const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); - const params = CoreModules.useParams(); - const encodedProjectId = params.projectId; - const decodedProjectId = environment.decode(encodedProjectId); - const encodedTaskId = params.taskId; - const decodedTaskId = environment.decode(encodedTaskId); - // const theme = CoreModules.useSelector(state => state.theme.hotTheme) - useEffect(() => { - dispatch(ProjectSubmissionService(`${environment.baseApiUrl}/submission/?project_id=${decodedProjectId}&task_id=${decodedTaskId}`)) - dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${decodedProjectId}/features?task_id=${decodedTaskId}`)) - //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page - }, []) - //Fetch project for the first time - useEffect(() => { - if ( - state.projectTaskBoundries.findIndex( - (project) => project.id == environment.decode(encodedProjectId) - ) == -1 - ) { - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}/features`)) - - } else { - dispatch(ProjectActions.SetProjectTaskBoundries([])) - dispatch( - ProjectById( - `${environment.baseApiUrl}/projects/${environment.decode(encodedProjectId)}`, - state.projectTaskBoundries - ), - state.projectTaskBoundries - ); - } - if (Object.keys(state.projectInfo).length == 0) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } else { - if (state.projectInfo.id != environment.decode(encodedProjectId)) { - dispatch(ProjectActions.SetProjectInfo(projectInfo)); - } - } - }, [params.id]); - const projectTaskBoundries = CoreModules.useSelector((state) => state.project.projectTaskBoundries); - const projectBuildingGeojson = CoreModules.useSelector((state) => state.project.projectBuildingGeojson); - const [projectBoundaries, setProjectBoundaries] = useState(null) - const [buildingBoundaries, setBuildingBoundaries] = useState(null) - - if (projectTaskBoundries?.length > 0 && projectBoundaries === null) { - - const taskGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [...projectTaskBoundries?.[0]?.taskBoundries?.filter((task) => task.id === decodedTaskId).map((task) => ({ ...task.outline_geojson, id: task.outline_geojson.properties.uid }))] - - }; - console.log(taskGeojsonFeatureCollection, 'taskGeojsonFeatureCollection'); - setProjectBoundaries(taskGeojsonFeatureCollection) + dispatch( + ProjectBuildingGeojsonService( + `${environment.baseApiUrl}/projects/${decodedProjectId}/features?task_id=${decodedTaskId}` + ) + ); + //creating a manual thunk that will make an API call then autamatically perform state mutation whenever we navigate to home page + }, []); + //Fetch project for the first time + useEffect(() => { + if ( + state.projectTaskBoundries.findIndex( + (project) => project.id == environment.decode(encodedProjectId) + ) == -1 + ) { + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + dispatch( + ProjectBuildingGeojsonService( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}/features` + ) + ); + } else { + dispatch(ProjectActions.SetProjectTaskBoundries([])); + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode( + encodedProjectId + )}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); } - if (projectBuildingGeojson?.length > 0 && buildingBoundaries === null) { - - const buildingGeojsonFeatureCollection = { - ...basicGeojsonTemplate, - features: [...projectBuildingGeojson?.filter((task) => task.task_id === decodedTaskId).map((task) => ({ ...task.geometry, id: task.id }))] - // features: projectBuildingGeojson.map((feature) => ({ ...feature.geometry, id: feature.id })) - - }; - setBuildingBoundaries(buildingGeojsonFeatureCollection); + if (Object.keys(state.projectInfo).length == 0) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } else { + if (state.projectInfo.id != environment.decode(encodedProjectId)) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } } + }, [params.id]); + const projectTaskBoundries = CoreModules.useSelector( + (state) => state.project.projectTaskBoundries + ); + const projectBuildingGeojson = CoreModules.useSelector( + (state) => state.project.projectBuildingGeojson + ); + const [projectBoundaries, setProjectBoundaries] = useState(null); + const [buildingBoundaries, setBuildingBoundaries] = useState(null); - const StyledMenu = AssetModules.styled((props) => ( - - ))(({ theme }) => ({ - '& .MuiPaper-root': { - borderRadius: 6, - marginTop: theme.spacing(1), - minWidth: 180, - color: - theme.palette.mode === 'light' ? 'rgb(55, 65, 81)' : theme.palette.grey[300], - boxShadow: - 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px', - '& .MuiMenu-list': { - padding: '4px 0', - }, - '& .MuiMenuItem-root': { - '& .MuiSvgIcon-root': { - fontSize: 18, - color: theme.palette.text.secondary, - marginRight: theme.spacing(1.5), - }, - '&:active': { - backgroundColor: AssetModules.alpha( - theme.palette.primary.main, - theme.palette.action.selectedOpacity, - ), - }, - }, - }, - })); + if (projectTaskBoundries?.length > 0 && projectBoundaries === null) { + const taskGeojsonFeatureCollection = { + ...basicGeojsonTemplate, + features: [ + ...projectTaskBoundries?.[0]?.taskBoundries + ?.filter((task) => task.id === decodedTaskId) + .map((task) => ({ + ...task.outline_geojson, + id: task.outline_geojson.properties.uid, + })), + ], + }; + console.log(taskGeojsonFeatureCollection, "taskGeojsonFeatureCollection"); + setProjectBoundaries(taskGeojsonFeatureCollection); + } + if (projectBuildingGeojson?.length > 0 && buildingBoundaries === null) { + const buildingGeojsonFeatureCollection = { + ...basicGeojsonTemplate, + features: [ + ...projectBuildingGeojson + ?.filter((task) => task.task_id === decodedTaskId) + .map((task) => ({ ...task.geometry, id: task.id })), + ], + // features: projectBuildingGeojson.map((feature) => ({ ...feature.geometry, id: feature.id })) + }; + setBuildingBoundaries(buildingGeojsonFeatureCollection); + } - const handleDownload = (downloadType) => { - if(downloadType === 'csv'){ - dispatch( - getDownloadProjectSubmission( - `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=false` - ) - ); - }else if(downloadType === 'json'){ - dispatch( - getDownloadProjectSubmission( - `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=true` - ) - ); + const StyledMenu = AssetModules.styled((props) => ( + state.task.downloadSubmissionLoading) + } + transformOrigin={{ + vertical: "top", + horizontal: "right", + }} + {...props} + /> + ))(({ theme }) => ({ + "& .MuiPaper-root": { + borderRadius: 6, + marginTop: theme.spacing(1), + minWidth: 180, + color: + theme.palette.mode === "light" + ? "rgb(55, 65, 81)" + : theme.palette.grey[300], + boxShadow: + "rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px", + "& .MuiMenu-list": { + padding: "4px 0", + }, + "& .MuiMenuItem-root": { + "& .MuiSvgIcon-root": { + fontSize: 18, + color: theme.palette.text.secondary, + marginRight: theme.spacing(1.5), + }, + "&:active": { + backgroundColor: AssetModules.alpha( + theme.palette.primary.main, + theme.palette.action.selectedOpacity + ), + }, + }, + }, + })); - return ( - - - - - {/* Project Details SideBar Button for Creating Project */} - - Monitoring - + const handleDownload = (downloadType) => { + if (downloadType === "csv") { + dispatch( + getDownloadProjectSubmission( + `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=false` + ) + ); + } else if (downloadType === "json") { + dispatch( + getDownloadProjectSubmission( + `${environment.baseApiUrl}/submission/download?project_id=${decodedProjectId}&task_id=${decodedTaskId}&export_json=true` + ) + ); + } + }; - {/* END */} + const downloadSubmissionLoading = CoreModules.useSelector( + (state) => state.task.downloadSubmissionLoading + ); - {/* Upload Area SideBar Button for uploading Area page */} - - Convert - - handleDownload('csv')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type=== 'csv' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - - CSV - - - - handleDownload('json')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type === 'json' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - JSON - + return ( + + + + + {/* Project Details SideBar Button for Creating Project */} + + Monitoring + - {/* END */} - - - {projectSubmissionState?.map((submission) => { - const date = new Date(submission.createdAt); + {/* END */} - const dateOptions = { - minute: 'numeric', - hour: 'numeric', - day: 'numeric', - weekday: 'long', - year: 'numeric', - month: 'long', - }; + {/* Upload Area SideBar Button for uploading Area page */} + + Convert + + handleDownload("csv")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "csv" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + CSV + - const formattedDate = date.toLocaleDateString('en-US', dateOptions); - return - - - - {submission.submitted_by} - - - Submitted {projectState?.project} at {formattedDate} - - - - })} + handleDownload("json")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "json" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + JSON + - - - - - - + {/* END */} + + + {projectSubmissionState?.map((submission) => { + const date = new Date(submission.createdAt); - - ) + const dateOptions = { + minute: "numeric", + hour: "numeric", + day: "numeric", + weekday: "long", + year: "numeric", + month: "long", + }; -} + const formattedDate = date.toLocaleDateString( + "en-US", + dateOptions + ); + return ( + + + + {" "} + + + + {submission.submitted_by} + + + Submitted {projectState?.project} at {formattedDate} + + + + + ); + })} + + + + + + + + ); +}; -export default TasksSubmission; \ No newline at end of file +export default TasksSubmission; From c3c58136668af814cc0f2e54cebb97b0f8e0974d Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 11:48:22 +0545 Subject: [PATCH 182/222] get osm xml for a project --- src/backend/app/submission/submission_crud.py | 38 ++++++++++++++ .../app/submission/submission_routes.py | 52 ++++++++++++++++--- 2 files changed, 83 insertions(+), 7 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index f9f344a0bb..d3483c38ff 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -137,6 +137,41 @@ def create_zip_file(files, output_file_path): return output_file_path +async def convert_json_to_osm_xml(file_path): + + jsonin = JsonDump() + infile = Path(file_path) + + base = os.path.splitext(infile.name)[0] + + osmoutfile = f"/tmp/{base}.osm" + jsonin.createOSM(osmoutfile) + + data = jsonin.parse(infile.as_posix()) + + for entry in data: + feature = jsonin.createEntry(entry) + # Sometimes bad entries, usually from debugging XForm design, sneak in + if len(feature) == 0: + continue + if len(feature) > 0: + if "lat" not in feature["attrs"]: + if 'geometry' in feature['tags']: + if type(feature['tags']['geometry']) == str: + coords = list(feature['tags']['geometry']) + else: + coords = feature['tags']['geometry']['coordinates'] + feature['attrs'] = {'lat': coords[1], 'lon': coords[0]} + else: + logger.warning("Bad record! %r" % feature) + continue + jsonin.writeOSM(feature) + + jsonin.finishOSM() + logger.info("Wrote OSM XML file: %r" % osmoutfile) + return osmoutfile + + async def convert_json_to_osm(file_path): jsonin = JsonDump() @@ -198,6 +233,9 @@ async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): return osmoutfile, jsonoutfile +async def get_osm_xml(db:Session, project_odk_id:int, odk_credentials: project_schemas.ODKCentral): + pass + async def convert_to_osm(db: Session, project_id: int, task_id: int): project_info = project_crud.get_project(db, project_id) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index acdfb47d06..6e91f6956a 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -17,16 +17,14 @@ # import os import json -from fastapi import APIRouter, Depends, UploadFile, File, HTTPException, Response +from fastapi import APIRouter, Depends, HTTPException, Response +from ..projects import project_crud, project_schemas from fastapi.logger import logger as logger from sqlalchemy.orm import Session from fastapi.responses import FileResponse -from .submission_crud import convert_json_to_osm from osm_fieldwork.odk_merge import OdkMerge from osm_fieldwork.osmfile import OsmFile from ..projects import project_crud - - from ..db import database from . import submission_crud @@ -184,7 +182,7 @@ async def conflate_osm_date( f.write(json.dumps(submission)) # Convert the submission to osm xml format - osmoutfile, jsonoutfile = await convert_json_to_osm(jsoninfile) + osmoutfile, jsonoutfile = await submission_crud.convert_json_to_osm(jsoninfile) # Remove the extra closing tag from the end of the file with open(osmoutfile, 'r') as f: @@ -193,7 +191,7 @@ async def conflate_osm_date( last_osm_index = osmoutfile_data.rfind('') # Remove the extra closing tag from the end processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] - + # Write the modified XML data back to the file with open(osmoutfile, 'w') as f: f.write(processed_xml_string) @@ -204,4 +202,44 @@ async def conflate_osm_date( odk_merge = OdkMerge(data_extracts_file,None) data = odk_merge.conflateData(osm) return data - return [] \ No newline at end of file + return [] + + +@router.get("/get_osm_xml/{project_id}") +async def get_osm_xml( + project_id: int, + db: Session = Depends(database.get_db), + ): + + # JSON FILE PATH + jsoninfile = "/tmp/json_infile.json" + + # # Delete if these files already exist + if os.path.exists(jsoninfile): + os.remove(jsoninfile) + + # Submission JSON + submission = submission_crud.get_all_submissions(db, project_id) + + # Write the submission to a file + with open(jsoninfile, 'w') as f: + f.write(json.dumps(submission)) + + # Convert the submission to osm xml format + osmoutfile = await submission_crud.convert_json_to_osm_xml(jsoninfile) + + # Remove the extra closing tag from the end of the file + with open(osmoutfile, 'r') as f: + osmoutfile_data = f.read() + # Find the last index of the closing tag + last_osm_index = osmoutfile_data.rfind('') + # Remove the extra closing tag from the end + processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] + + # Write the modified XML data back to the file + with open(osmoutfile, 'w') as f: + f.write(processed_xml_string) + + # Create a plain XML response + response = Response(content=processed_xml_string, media_type="application/xml") + return response \ No newline at end of file From e6814edb5849c07ac6f834c2dff6bbe7a4bfe946 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 11:50:07 +0545 Subject: [PATCH 183/222] some todo texts in get sll submissions --- src/backend/app/submission/submission_crud.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index d3483c38ff..b44922a49d 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -378,6 +378,10 @@ def get_all_submissions(db: Session, project_id): project = get_odk_project(odk_credentials) + #TODO: pass xform id list in getAllSubmissions. Next release of osm-fieldwork will support this. + # task_lists = tasks_crud.get_task_lists(db, project_id) + # submissions = project.getAllSubmissions(project_info.odkid, task_lists) + submissions = project.getAllSubmissions(project_info.odkid) return submissions From 82f9bab8f578fe8f1496c632f9fd1ae4e6e2f797 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 11:54:19 +0545 Subject: [PATCH 184/222] removed unused function --- src/backend/app/submission/submission_crud.py | 3 --- src/backend/app/submission/submission_routes.py | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index b44922a49d..d59e60e01c 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -233,9 +233,6 @@ async def convert_to_osm_for_task(odk_id: int, form_id: int, xform: any): return osmoutfile, jsonoutfile -async def get_osm_xml(db:Session, project_odk_id:int, odk_credentials: project_schemas.ODKCentral): - pass - async def convert_to_osm(db: Session, project_id: int, task_id: int): project_info = project_crud.get_project(db, project_id) diff --git a/src/backend/app/submission/submission_routes.py b/src/backend/app/submission/submission_routes.py index 6e91f6956a..d142ce0d2f 100644 --- a/src/backend/app/submission/submission_routes.py +++ b/src/backend/app/submission/submission_routes.py @@ -191,7 +191,7 @@ async def conflate_osm_date( last_osm_index = osmoutfile_data.rfind('') # Remove the extra closing tag from the end processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] - + # Write the modified XML data back to the file with open(osmoutfile, 'w') as f: f.write(processed_xml_string) From fe1c1c5947a3deb24723b7c4f6909d0aadd2fad3 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 19:56:13 +0545 Subject: [PATCH 185/222] Feat: JOSM Api To Open JOSM --- .../fmtm_openlayer_map/src/api/task.ts | 180 +++++++++++------- 1 file changed, 115 insertions(+), 65 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/api/task.ts b/src/frontend/fmtm_openlayer_map/src/api/task.ts index 84e5aeaddf..a993f7f40d 100644 --- a/src/frontend/fmtm_openlayer_map/src/api/task.ts +++ b/src/frontend/fmtm_openlayer_map/src/api/task.ts @@ -1,79 +1,129 @@ import CoreModules from "fmtm/CoreModules"; import { CommonActions } from "fmtm/CommonSlice"; - export const fetchInfoTask: Function = (url: string) => { - return async (dispatch) => { - dispatch(CoreModules.TaskActions.SetTaskLoading(true)) - dispatch(CommonActions.SetLoading(true)) - const fetchTaskInfoDetails = async (url: string) => { - try { - const fetchTaskInfoDetailsResponse = await CoreModules.axios.get(url); - const response = fetchTaskInfoDetailsResponse.data; - dispatch(CommonActions.SetLoading(false)) - dispatch(CoreModules.TaskActions.FetchTaskInfoDetails(response)) - } catch (error) { - dispatch(CommonActions.SetLoading(false)) - dispatch(CoreModules.TaskActions.SetTaskLoading(false)) - } - } - await fetchTaskInfoDetails(url); - } -} + return async (dispatch) => { + dispatch(CoreModules.TaskActions.SetTaskLoading(true)); + dispatch(CommonActions.SetLoading(true)); + const fetchTaskInfoDetails = async (url: string) => { + try { + const fetchTaskInfoDetailsResponse = await CoreModules.axios.get(url); + const response = fetchTaskInfoDetailsResponse.data; + dispatch(CommonActions.SetLoading(false)); + dispatch(CoreModules.TaskActions.FetchTaskInfoDetails(response)); + } catch (error) { + dispatch(CommonActions.SetLoading(false)); + dispatch(CoreModules.TaskActions.SetTaskLoading(false)); + } + }; + await fetchTaskInfoDetails(url); + }; +}; +export const getDownloadProjectSubmission: Function = (url: string) => { + return async (dispatch) => { + const params = new URLSearchParams(url.split("?")[1]); + const isExportJson = params.get("export_json"); + const isJsonOrCsv = isExportJson === "true" ? "json" : "csv"; + dispatch( + CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({ + type: isJsonOrCsv, + loading: true, + }) + ); -export const getDownloadProjectSubmission : Function = (url: string, ) => { + const getProjectSubmission = async (url: string) => { + try { + const response = await CoreModules.axios.get(url, { + responseType: "blob", + }); + var a = document.createElement("a"); + a.href = window.URL.createObjectURL(response.data); + a.download = "Submissions"; + a.click(); + dispatch( + CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({ + type: isJsonOrCsv, + loading: false, + }) + ); + } catch (error) { + dispatch( + CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({ + type: isJsonOrCsv, + loading: false, + }) + ); + } finally { + dispatch( + CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({ + type: isJsonOrCsv, + loading: false, + }) + ); + } + }; + await getProjectSubmission(url); + }; +}; - return async (dispatch) => { - const params = new URLSearchParams(url.split('?')[1]) - const isExportJson=params.get('export_json'); - const isJsonOrCsv = isExportJson==='true' ? 'json' : 'csv' - dispatch(CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({type:isJsonOrCsv ,loading:true})) +export const fetchConvertToOsmDetails: Function = (url: string) => { + return async (dispatch) => { + dispatch(CoreModules.TaskActions.FetchConvertToOsmLoading(true)); - const getProjectSubmission = async (url: string) => { - try { - const response = await CoreModules.axios.get(url, { - responseType : 'blob', - }); - var a = document.createElement("a"); - a.href = window.URL.createObjectURL(response.data); - a.download = "Submissions"; - a.click(); - dispatch(CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({type:isJsonOrCsv ,loading:false})) - } catch (error) { - dispatch(CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({type:isJsonOrCsv ,loading:false})) - } finally{ - dispatch(CoreModules.TaskActions.GetDownloadProjectSubmissionLoading({type:isJsonOrCsv ,loading:false})) - } - } - await getProjectSubmission(url); - } -} + try { + const response = await CoreModules.axios.get(url, { + responseType: "blob", + }); + const downloadLink = document.createElement("a"); + downloadLink.href = window.URL.createObjectURL(new Blob([response.data])); + downloadLink.setAttribute("download", "task.zip"); + document.body.appendChild(downloadLink); -export const fetchConvertToOsmDetails: Function = (url: string) => { - return async (dispatch) => { - dispatch(CoreModules.TaskActions.FetchConvertToOsmLoading(true)); - + downloadLink.click(); + + document.body.removeChild(downloadLink); + window.URL.revokeObjectURL(downloadLink.href); + + dispatch(CoreModules.TaskActions.FetchConvertToOsm(response.data)); + } catch (error) { + dispatch(CoreModules.TaskActions.FetchConvertToOsmLoading(false)); + } + }; +}; + +export const ConvertXMLToJOSM: Function = (url: string) => { + return async (dispatch) => { + dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(true)); + const getConvertXMLToJOSM = async (url) => { try { - const response = await CoreModules.axios.get(url, { responseType: 'blob' }); - - const downloadLink = document.createElement('a'); - downloadLink.href = window.URL.createObjectURL(new Blob([response.data])); - downloadLink.setAttribute('download', 'task.zip'); - document.body.appendChild(downloadLink); - - downloadLink.click(); - - document.body.removeChild(downloadLink); - window.URL.revokeObjectURL(downloadLink.href); - - dispatch(CoreModules.TaskActions.FetchConvertToOsm(response.data)); - } catch (error) { - dispatch(CoreModules.TaskActions.FetchConvertToOsmLoading(false)); + const params = { + url: url, + }; + // checkJOSMOpen - To check if JOSM Editor is Open Or Not. + await CoreModules.axios.get( + `http://127.0.0.1:8111/version?jsonp=checkJOSM` + ); + //importToJosmEditor - To open JOSM Editor and add XML of Project Submission To JOSM. + + CoreModules.axios.get( + `http://127.0.0.1:8111/imagery?title=osm&type=tms&url=https://tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png` + // `http://127.0.0.1:8111/imagery?title=osm&type=tms&min_zoom=4&max_zoom=14&url=https://tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png` + ); + await CoreModules.axios.get(`http://127.0.0.1:8111/import?url=${url}`); + // const getConvertXMLToJOSMResponse = await CoreModules.axios.get(url); + // const response: any = getConvertXMLToJOSMResponse.data; + + // dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(response[0].value[0])); + } catch (error: any) { + dispatch(CoreModules.TaskActions.SetJosmEditorError("JOSM Error")); + // alert(error.response.data); + dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(false)); + } finally { + dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(false)); } }; + await getConvertXMLToJOSM(url); }; - - - +}; From fa60e826561bdd1554b2ff8bb2f76634087619e9 Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 19:56:32 +0545 Subject: [PATCH 186/222] Fix: ProjectInfo Map Page --- .../src/components/ProjectInfo/ProjectInfomap.jsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index 6956653112..221bd2f071 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -139,7 +139,13 @@ const ProjectInfomap = () => { }, []); useEffect(() => { - if (!projectTaskBoundries && projectTaskBoundries?.length>0) return + if ( + !projectTaskBoundries || + projectTaskBoundries?.length < 1 || + projectTaskBoundries?.[0]?.taskBoundries?.length < 1 + ) { + return; + } const taskGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ @@ -162,7 +168,7 @@ const ProjectInfomap = () => { // setBuildingGeojson(taskBuildingGeojsonFeatureCollection); }, [projectTaskBoundries]); useEffect(() => { - if (!projectBuildingGeojson) return + if (!projectBuildingGeojson) return; const taskBuildingGeojsonFeatureCollection = { ...basicGeojsonTemplate, features: [ @@ -298,4 +304,4 @@ const ProjectInfomap = () => { ); }; -export default ProjectInfomap; \ No newline at end of file +export default ProjectInfomap; From ba03be647791ad2084a081787962bfd56d9bb91b Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 19:57:33 +0545 Subject: [PATCH 187/222] lint-fix: Code Linting Fixes --- src/frontend/main/src/api/Submission.ts | 33 +++++++++---------- .../components/createproject/UploadArea.tsx | 3 -- .../main/src/store/slices/SubmissionSlice.ts | 33 +++++++++---------- .../main/src/store/slices/ThemeSlice.ts | 8 +++++ 4 files changed, 39 insertions(+), 38 deletions(-) diff --git a/src/frontend/main/src/api/Submission.ts b/src/frontend/main/src/api/Submission.ts index 4ac5c76b22..c282acefe5 100644 --- a/src/frontend/main/src/api/Submission.ts +++ b/src/frontend/main/src/api/Submission.ts @@ -1,21 +1,20 @@ import axios from 'axios'; import { SubmissionActions } from '../store/slices/SubmissionSlice'; - export const SubmissionService: Function = (url: string) => { - return async (dispatch) => { - dispatch(SubmissionActions.SetSubmissionDetailsLoading(true)) - const getSubmissionDetails = async (url) => { - try { - const getSubmissionDetailsResponse = await axios.get(url); - const response: any = getSubmissionDetailsResponse.data; - dispatch(SubmissionActions.SetSubmissionDetails(response[0].value[0])) - } catch (error) { - dispatch(SubmissionActions.SetSubmissionDetailsLoading(false)) - } finally { - dispatch(SubmissionActions.SetSubmissionDetailsLoading(false)); - } - } - await getSubmissionDetails(url); - } -} + return async (dispatch) => { + dispatch(SubmissionActions.SetSubmissionDetailsLoading(true)); + const getSubmissionDetails = async (url) => { + try { + const getSubmissionDetailsResponse = await axios.get(url); + const response: any = getSubmissionDetailsResponse.data; + dispatch(SubmissionActions.SetSubmissionDetails(response[0].value[0])); + } catch (error) { + dispatch(SubmissionActions.SetSubmissionDetailsLoading(false)); + } finally { + dispatch(SubmissionActions.SetSubmissionDetailsLoading(false)); + } + }; + await getSubmissionDetails(url); + }; +}; diff --git a/src/frontend/main/src/components/createproject/UploadArea.tsx b/src/frontend/main/src/components/createproject/UploadArea.tsx index 7e1276fd0d..4320f18b55 100755 --- a/src/frontend/main/src/components/createproject/UploadArea.tsx +++ b/src/frontend/main/src/components/createproject/UploadArea.tsx @@ -113,9 +113,6 @@ const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue, Next - {/* - - */} {/* END */} diff --git a/src/frontend/main/src/store/slices/SubmissionSlice.ts b/src/frontend/main/src/store/slices/SubmissionSlice.ts index 1f09fad03b..1e70745326 100644 --- a/src/frontend/main/src/store/slices/SubmissionSlice.ts +++ b/src/frontend/main/src/store/slices/SubmissionSlice.ts @@ -1,23 +1,20 @@ -import { createSlice } from "@reduxjs/toolkit"; - +import { createSlice } from '@reduxjs/toolkit'; const SubmissionSlice = createSlice({ - name: 'submission', - initialState: { - submissionDetailsLoading: true, - submissionDetails: [], + name: 'submission', + initialState: { + submissionDetailsLoading: true, + submissionDetails: [], + }, + reducers: { + SetSubmissionDetailsLoading(state, action) { + state.submissionDetailsLoading = action.payload; }, - reducers: { - SetSubmissionDetailsLoading(state, action) { - state.submissionDetailsLoading = action.payload - }, - SetSubmissionDetails(state, action) { - state.submissionDetails = action.payload - }, - - } -}) - + SetSubmissionDetails(state, action) { + state.submissionDetails = action.payload; + }, + }, +}); export const SubmissionActions = SubmissionSlice.actions; -export default SubmissionSlice; \ No newline at end of file +export default SubmissionSlice; diff --git a/src/frontend/main/src/store/slices/ThemeSlice.ts b/src/frontend/main/src/store/slices/ThemeSlice.ts index eff6b6fc94..60b1ce5416 100755 --- a/src/frontend/main/src/store/slices/ThemeSlice.ts +++ b/src/frontend/main/src/store/slices/ThemeSlice.ts @@ -79,6 +79,10 @@ const ThemeSlice = CoreModules.createSlice({ //custom htmlFontSize: 18, + barlowCondensed: { + fontFamily: 'Barlow Condensed', + fontSize: '24px', + }, caption: { fontFamily: 'BarlowBold', fontSize: 24, @@ -118,6 +122,10 @@ const ThemeSlice = CoreModules.createSlice({ fontFamily: 'BarlowLight', fontSize: 16, }, + p: { + fontFamily: 'Archivo', + fontSize: 16, + }, }, }, }, From f010c4a18a5e86533e735dc546249f4f65461c1c Mon Sep 17 00:00:00 2001 From: Varun Date: Wed, 9 Aug 2023 19:57:52 +0545 Subject: [PATCH 188/222] Feat: JOSM Integration with Convert --- .../ProjectInfo/ProjectInfoSidebar.jsx | 27 +++- .../src/views/ProjectInfo.jsx | 147 ++++++++++++++---- .../createproject/ProjectDetailsForm.tsx | 7 - src/frontend/main/src/shared/CoreModules.js | 2 + .../main/src/store/slices/TaskSlice.ts | 90 ++++++----- .../main/src/utilities/CustomizedModal.tsx | 25 +-- 6 files changed, 199 insertions(+), 99 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx index 7f3655b5e8..672a82dcfa 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfoSidebar.jsx @@ -1,14 +1,17 @@ import React from "react"; import CoreModules from "fmtm/CoreModules"; import ProjectCard from "./ProjectCard"; +import environment from "fmtm/environment"; -const ProjectInfoSidebar = ({ taskInfo }) => { +const ProjectInfoSidebar = ({ projectId, taskInfo }) => { const dispatch = CoreModules.useDispatch(); + const params = CoreModules.useParams(); const taskInfoData = Array.from(taskInfo); const selectedTask = CoreModules.useSelector( (state) => state.task.selectedTask ); + const encodedId = params.projectId; const onTaskClick = (taskId) => { dispatch(CoreModules.TaskActions.SetSelectedTask(taskId)); }; @@ -67,11 +70,31 @@ const ProjectInfoSidebar = ({ taskInfo }) => { - + #{task.task_id} + + + Go To Task Submissions + + { const dispatch = CoreModules.useDispatch(); const navigate = CoreModules.useNavigate(); const [isMonitoring, setIsMonitoring] = useState(false); + const themes = CoreModules.useSelector((state) => state.theme.hotTheme); const taskInfo = CoreModules.useSelector((state) => state.task.taskInfo); const selectedTask = CoreModules.useSelector( @@ -40,13 +43,13 @@ const ProjectInfo = () => { const decodedId = environment.decode(encodedId); const handleDownload = (downloadType) => { - if(downloadType === 'csv'){ + if (downloadType === "csv") { dispatch( getDownloadProjectSubmission( `${environment.baseApiUrl}/submission/download?project_id=${decodedId}&export_json=false` ) ); - }else if(downloadType === 'json'){ + } else if (downloadType === "json") { dispatch( getDownloadProjectSubmission( `${environment.baseApiUrl}/submission/download?project_id=${decodedId}&export_json=true` @@ -58,7 +61,11 @@ const ProjectInfo = () => { const handleConvert = () => { dispatch( fetchConvertToOsmDetails( - `${environment.baseApiUrl}/submission/convert-to-osm?project_id=${decodedId}&${selectedTask ?`task_id=${selectedTask}`:''}` + `${ + environment.baseApiUrl + }/submission/convert-to-osm?project_id=${decodedId}&${ + selectedTask ? `task_id=${selectedTask}` : "" + }` ) ); }; @@ -89,10 +96,65 @@ const ProjectInfo = () => { const projectInfo = CoreModules.useSelector( (state) => state.project.projectInfo ); - const downloadSubmissionLoading = CoreModules.useSelector((state)=>state.task.downloadSubmissionLoading) - + const josmEditorError = CoreModules.useSelector( + (state) => state.task.josmEditorError + ); + const downloadSubmissionLoading = CoreModules.useSelector( + (state) => state.task.downloadSubmissionLoading + ); + const uploadToJOSM = () => { + dispatch( + ConvertXMLToJOSM( + `${environment.baseApiUrl}/submission/get_osm_xml/${decodedId}` + ) + ); + }; + const modalStyle = (theme) => ({ + width: "30%", + height: "24%", + bgcolor: theme.palette.mode === "dark" ? "#0A1929" : "white", + border: "1px solid ", + padding: "16px 32px 24px 32px", + }); return ( <> + + <> +

+ Connection with JOSM failed +

+

+ {" "} + Please verify if JOSM is running on your computer and the remote + control is enabled. +

+ { + dispatch(CoreModules.TaskActions.SetJosmEditorError(null)); + }} + > + Close + + +
{ }} > - { navigate(-1); // setOpen(true); }} color="info" > - - - Back - + + + Back + #{projectInfo?.id} @@ -125,6 +196,15 @@ const ProjectInfo = () => { + + Upload to JOSM + { Convert handleDownload('csv')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type=== 'csv' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - - CSV + onClick={() => handleDownload("csv")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "csv" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + CSV handleDownload('json')} - sx={{width:'unset'}} - loading={downloadSubmissionLoading.type === 'json' && downloadSubmissionLoading.loading} - loadingPosition="end" - endIcon={} - variant="contained" - color="error" - > - JSON + onClick={() => handleDownload("json")} + sx={{ width: "unset" }} + loading={ + downloadSubmissionLoading.type === "json" && + downloadSubmissionLoading.loading + } + loadingPosition="end" + endIcon={} + variant="contained" + color="error" + > + JSON diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index 7a35125a0a..d3704e6f4b 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -9,13 +9,9 @@ import { CreateProjectActions } from '../../store/slices/CreateProjectSlice'; import { OrganisationService } from '../../api/CreateProjectService'; import environment from '../../environment'; import { MenuItem, Select } from '@mui/material'; -import CustomizedModal from '../../utilities/CustomizedModal'; -import OrganizationAddForm from '../organization/OrganizationAddForm'; import { createPopup } from '../../utilfunctions/createPopup'; const ProjectDetailsForm: React.FC = () => { - const [openOrganizationModal, setOpenOrganizationModal] = useState(false); - const defaultTheme: any = CoreModules.useSelector((state) => state.theme.hotTheme); // // const state:any = useSelector(state=>state.project.projectData) // // console.log('state main :',state) @@ -405,9 +401,6 @@ const ProjectDetailsForm: React.FC = () => { - - - ); }; diff --git a/src/frontend/main/src/shared/CoreModules.js b/src/frontend/main/src/shared/CoreModules.js index 4f3bc7950f..023d3331b0 100755 --- a/src/frontend/main/src/shared/CoreModules.js +++ b/src/frontend/main/src/shared/CoreModules.js @@ -64,6 +64,7 @@ import { createSlice, configureStore, getDefaultMiddleware } from '@reduxjs/tool import { combineReducers } from 'redux'; import LoadingBar from '../components/createproject/LoadingBar'; import { TaskActions } from '../store/slices/TaskSlice'; +import CustomizedModal from '../utilities/CustomizedModal'; export default { Provider, @@ -136,4 +137,5 @@ export default { LoadingBar, TaskActions, LoadingButton, + CustomizedModal, }; diff --git a/src/frontend/main/src/store/slices/TaskSlice.ts b/src/frontend/main/src/store/slices/TaskSlice.ts index 1f357f768e..14580c21ff 100644 --- a/src/frontend/main/src/store/slices/TaskSlice.ts +++ b/src/frontend/main/src/store/slices/TaskSlice.ts @@ -1,45 +1,53 @@ -import { createSlice } from "@reduxjs/toolkit"; +import { createSlice } from '@reduxjs/toolkit'; const TaskSlice = createSlice({ - name: 'task', - initialState: { - taskLoading: true, - taskInfo: [], - selectedTask: null, - projectBoundaryLoading: true, - projectBoundary: [], - convertToOsmLoading: null, - convertToOsm: [], - downloadSubmissionLoading:{type:'',loading:false} - }, - reducers: { - SetTaskLoading(state, action) { - state.taskLoading = action.payload - }, - GetProjectBoundaryLoading(state, action) { - state.projectBoundaryLoading = action.payload - }, - FetchConvertToOsmLoading(state, action) { - state.convertToOsmLoading = action.payload - }, - FetchTaskInfoDetails(state, action) { - state.taskInfo = action.payload; - }, - SetSelectedTask(state, action) { - state.selectedTask = action.payload; - }, - - GetDownloadProjectBoundary(state, action) { - state.projectBoundary = action.payload; - }, - FetchConvertToOsm(state, action) { - state.convertToOsm = action.payload; - }, - GetDownloadProjectSubmissionLoading(state, action) { - state.downloadSubmissionLoading = action.payload; - } - }, -}) + name: 'task', + initialState: { + taskLoading: true, + taskInfo: [], + selectedTask: null, + projectBoundaryLoading: true, + projectBoundary: [], + convertToOsmLoading: null, + convertToOsm: [], + downloadSubmissionLoading: { type: '', loading: false }, + convertXMLToJOSMLoading: false, + josmEditorError: null, + }, + reducers: { + SetTaskLoading(state, action) { + state.taskLoading = action.payload; + }, + GetProjectBoundaryLoading(state, action) { + state.projectBoundaryLoading = action.payload; + }, + FetchConvertToOsmLoading(state, action) { + state.convertToOsmLoading = action.payload; + }, + FetchTaskInfoDetails(state, action) { + state.taskInfo = action.payload; + }, + SetSelectedTask(state, action) { + state.selectedTask = action.payload; + }, + + GetDownloadProjectBoundary(state, action) { + state.projectBoundary = action.payload; + }, + FetchConvertToOsm(state, action) { + state.convertToOsm = action.payload; + }, + GetDownloadProjectSubmissionLoading(state, action) { + state.downloadSubmissionLoading = action.payload; + }, + SetConvertXMLToJOSMLoading(state, action) { + state.convertXMLToJOSMLoading = action.payload; + }, + SetJosmEditorError(state, action) { + state.josmEditorError = action.payload; + }, + }, +}); export const TaskActions = TaskSlice.actions; -export default TaskSlice; \ No newline at end of file +export default TaskSlice; diff --git a/src/frontend/main/src/utilities/CustomizedModal.tsx b/src/frontend/main/src/utilities/CustomizedModal.tsx index 090e7476f1..6cf4c8e632 100644 --- a/src/frontend/main/src/utilities/CustomizedModal.tsx +++ b/src/frontend/main/src/utilities/CustomizedModal.tsx @@ -3,7 +3,7 @@ import clsx from 'clsx'; import { styled, Box, Theme } from '@mui/system'; import Modal from '@mui/base/ModalUnstyled'; -export default function CustomizedModal({ children, isOpen, toggleOpen }) { +export default function CustomizedModal({ style = defaultStyle, children, isOpen, toggleOpen }) { const handleClose = () => toggleOpen(false); return ( @@ -15,26 +15,15 @@ export default function CustomizedModal({ children, isOpen, toggleOpen }) { onClose={handleClose} slots={{ backdrop: StyledBackdrop }} > - - {React.Children.only(children)} - + {React.Children.only(children)} -
+
); } -const Backdrop = React.forwardRef< - HTMLDivElement, - { open?: boolean; className: string } ->((props, ref) => { +const Backdrop = React.forwardRef((props, ref) => { const { open, className, ...other } = props; - return ( -
- ); + return
; }); const StyledModal = styled(Modal)` @@ -60,11 +49,11 @@ const StyledBackdrop = styled(Backdrop)` -webkit-tap-highlight-color: transparent; `; -const style = (theme: Theme) => ({ +const defaultStyle = (theme: Theme) => ({ width: '80%', height: '80%', bgcolor: theme.palette.mode === 'dark' ? '#0A1929' : 'white', border: '1px solid ', borderRadius: '10px', padding: '16px 32px 24px 32px', -}); \ No newline at end of file +}); From 3e5d3a7bd9e4491c8d90bd443eff12afd4ba79d8 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 10 Aug 2023 14:45:54 +0545 Subject: [PATCH 189/222] feat: bounds in geometry_to_geojson --- src/backend/app/db/postgis_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/backend/app/db/postgis_utils.py b/src/backend/app/db/postgis_utils.py index c2e60d8c4e..00ed26cbfc 100644 --- a/src/backend/app/db/postgis_utils.py +++ b/src/backend/app/db/postgis_utils.py @@ -37,6 +37,7 @@ def geometry_to_geojson(geometry: Geometry, properties: str = {}, id: int = None "geometry": mapping(shape), "properties": properties, "id": id, + "bbox":shape.bounds } return Feature(**geojson) From 96c866760291faf0d35462a1bb822fe27832b8b7 Mon Sep 17 00:00:00 2001 From: Varun Date: Thu, 10 Aug 2023 14:46:31 +0545 Subject: [PATCH 190/222] feat: josm zoom and load added --- .../fmtm_openlayer_map/src/api/task.ts | 24 ++++++++++++------- .../src/views/ProjectInfo.jsx | 3 ++- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/api/task.ts b/src/frontend/fmtm_openlayer_map/src/api/task.ts index a993f7f40d..035d94fb76 100644 --- a/src/frontend/fmtm_openlayer_map/src/api/task.ts +++ b/src/frontend/fmtm_openlayer_map/src/api/task.ts @@ -93,29 +93,35 @@ export const fetchConvertToOsmDetails: Function = (url: string) => { }; }; -export const ConvertXMLToJOSM: Function = (url: string) => { +export const ConvertXMLToJOSM: Function = (url: string, projectBbox) => { return async (dispatch) => { dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(true)); const getConvertXMLToJOSM = async (url) => { try { - const params = { - url: url, - }; // checkJOSMOpen - To check if JOSM Editor is Open Or Not. await CoreModules.axios.get( `http://127.0.0.1:8111/version?jsonp=checkJOSM` ); //importToJosmEditor - To open JOSM Editor and add XML of Project Submission To JOSM. - CoreModules.axios.get( `http://127.0.0.1:8111/imagery?title=osm&type=tms&url=https://tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png` - // `http://127.0.0.1:8111/imagery?title=osm&type=tms&min_zoom=4&max_zoom=14&url=https://tile.openstreetmap.org/%7Bzoom%7D/%7Bx%7D/%7By%7D.png` ); await CoreModules.axios.get(`http://127.0.0.1:8111/import?url=${url}`); - // const getConvertXMLToJOSMResponse = await CoreModules.axios.get(url); - // const response: any = getConvertXMLToJOSMResponse.data; + // `http://127.0.0.1:8111/load_and_zoom?left=80.0580&right=88.2015&top=27.9268&bottom=26.3470`; - // dispatch(CoreModules.TaskActions.SetConvertXMLToJOSMLoading(response[0].value[0])); + const loadAndZoomParams = { + left: projectBbox[0], + bottom: projectBbox[1], + right: projectBbox[2], + top: projectBbox[3], + changeset_comment: "fmtm", + // changeset_source: project.imagery ? project.imagery : '', + new_layer: "true", + layer_name: "OSM Data", + }; + await CoreModules.axios.get(`http://127.0.0.1:8111/zoom`, { + params: loadAndZoomParams, + }); } catch (error: any) { dispatch(CoreModules.TaskActions.SetJosmEditorError("JOSM Error")); // alert(error.response.data); diff --git a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx index cbf191568b..c7d499bee5 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx @@ -105,7 +105,8 @@ const ProjectInfo = () => { const uploadToJOSM = () => { dispatch( ConvertXMLToJOSM( - `${environment.baseApiUrl}/submission/get_osm_xml/${decodedId}` + `${environment.baseApiUrl}/submission/get_osm_xml/${decodedId}`, + projectInfo.outline_geojson.bbox ) ); }; From 2fbf5e58fa87cfcf0208d523736aa07c2a6cf95e Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Wed, 9 Aug 2023 17:01:13 +0545 Subject: [PATCH 191/222] asyncio used in tasks-feature count api --- src/backend/app/tasks/tasks_routes.py | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/backend/app/tasks/tasks_routes.py b/src/backend/app/tasks/tasks_routes.py index 4524d986ec..6b191d14c2 100644 --- a/src/backend/app/tasks/tasks_routes.py +++ b/src/backend/app/tasks/tasks_routes.py @@ -17,6 +17,7 @@ # import json +import asyncio from typing import List from fastapi import APIRouter, Depends, HTTPException, UploadFile, File @@ -148,24 +149,28 @@ async def task_features_count( odk_central_password = project.odk_central_password, ) - data = [] - for task in task_list: - + def process_task(task): feature_count_query = f""" select count(*) from features where project_id = {project_id} and task_id = {task} """ result = db.execute(feature_count_query) feature_count = result.fetchone() - submission_list = central_crud.list_task_submissions(project.odkid, task, odk_credentials) + submission_list = central_crud.list_task_submissions( + project.odkid, task, odk_credentials) # form_details = central_crud.get_form_full_details(project.odkid, task, odk_credentials) - data.append({ - 'task_id': task, - 'feature_count': feature_count['count'], + return { + "task_id": task, + "feature_count": feature_count["count"], # 'submission_count': form_details['submissions'], - 'submission_count': len(submission_list) if isinstance(submission_list, list) else 0 + "submission_count": len(submission_list) + if isinstance(submission_list, list) + else 0, + } - }) + loop = asyncio.get_event_loop() + tasks = [loop.run_in_executor(None, process_task, task) for task in task_list] + processed_results = await asyncio.gather(*tasks) - return data + return processed_results From eb835c80fa9da4bd29fff90be3013bc4265f169f Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 14:57:31 +0100 Subject: [PATCH 192/222] build: add josm+nginx img to proxy 127.0.0.1:8111 --- josm/Dockerfile | 78 ++++++++++++++++++++++++++++++++++++ josm/container-entrypoint.sh | 6 +++ josm/nginx-josm.conf | 13 ++++++ josm/preferences.xml | 27 +++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 josm/Dockerfile create mode 100644 josm/container-entrypoint.sh create mode 100644 josm/nginx-josm.conf create mode 100644 josm/preferences.xml diff --git a/josm/Dockerfile b/josm/Dockerfile new file mode 100644 index 0000000000..0b7bb5885b --- /dev/null +++ b/josm/Dockerfile @@ -0,0 +1,78 @@ +# Copyright (c) 2022, 2023 Humanitarian OpenStreetMap Team +# This file is part of FMTM. +# +# FMTM is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# FMTM is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with FMTM. If not, see . +# + +FROM docker.io/debian:bookworm as base +ARG MAINTAINER=admin@hotosm.org +LABEL org.hotosm.fmtm.maintainer="${MAINTAINER}" \ + org.hotosm.fmtm.josm-port="8111" \ + org.hotosm.fmtm.nginx-port="80" +RUN set -ex \ + && apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install \ + -y --no-install-recommends "locales" "ca-certificates" \ + && DEBIAN_FRONTEND=noninteractive apt-get upgrade -y \ + && rm -rf /var/lib/apt/lists/* \ + && update-ca-certificates +# Set locale +RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 + + + +FROM base as gpg-key +RUN set -ex \ + && apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install \ + -y --no-install-recommends \ + "curl" \ + "gnupg2" \ + && rm -rf /var/lib/apt/lists/* +RUN curl -sS https://josm.openstreetmap.de/josm-apt.key \ + | gpg --dearmor | tee /opt/josm.gpg + + + +FROM base as runtime +COPY --from=gpg-key \ + /opt/josm.gpg /etc/apt/trusted.gpg.d/josm.gpg +RUN echo \ + "deb [arch=$(dpkg --print-architecture) \ + signed-by=/etc/apt/trusted.gpg.d/josm.gpg] \ + https://josm.openstreetmap.de/apt alldist universe" \ + | tee /etc/apt/sources.list.d/josm.list > /dev/null +RUN set -ex \ + && apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install \ + -y --no-install-recommends \ + "gosu" \ + "josm" \ + "nginx" \ + && rm -rf /var/lib/apt/lists/* +COPY container-entrypoint.sh /container-entrypoint.sh +# Add non-root user +RUN useradd --system -r -u 101 -m -c "nginx user" \ + -d /home/nginx -s /bin/false nginx \ + && chmod +x /container-entrypoint.sh +COPY --chown=nginx \ + preferences.xml /home/nginx/.config/JOSM/preferences.xml +# Replace default nginx config +COPY --chown=nginx \ + nginx-josm.conf /etc/nginx/sites-enabled/default +# Run as root, change to nginx user in entrypoint +ENTRYPOINT ["/container-entrypoint.sh"] diff --git a/josm/container-entrypoint.sh b/josm/container-entrypoint.sh new file mode 100644 index 0000000000..7e1dc919b6 --- /dev/null +++ b/josm/container-entrypoint.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Start JOSM as nginx (unpriv) user +gosu nginx josm & + +exec nginx -g "daemon off;" diff --git a/josm/nginx-josm.conf b/josm/nginx-josm.conf new file mode 100644 index 0000000000..c130fdde7f --- /dev/null +++ b/josm/nginx-josm.conf @@ -0,0 +1,13 @@ +server { + listen 80 default_server; + server_name _; + + location / { + proxy_pass http://127.0.0.1:8111; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/josm/preferences.xml b/josm/preferences.xml new file mode 100644 index 0000000000..374f214a66 --- /dev/null +++ b/josm/preferences.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From 473900bbe7c02a0d27f12136c86a85a7461491eb Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 14:59:17 +0100 Subject: [PATCH 193/222] build: novnc img extended to auto forward url --- josm/novnc/Dockerfile | 6 ++++++ josm/novnc/index.html | 8 ++++++++ 2 files changed, 14 insertions(+) create mode 100644 josm/novnc/Dockerfile create mode 100644 josm/novnc/index.html diff --git a/josm/novnc/Dockerfile b/josm/novnc/Dockerfile new file mode 100644 index 0000000000..a1c362c2b5 --- /dev/null +++ b/josm/novnc/Dockerfile @@ -0,0 +1,6 @@ +FROM docker.io/theasp/novnc:latest +COPY index.html /usr/share/novnc/ +RUN useradd -r -u 900 -m -c "novnc account" -d /home/appuser -s /bin/false appuser \ + && chown -R appuser:appuser /app +WORKDIR /app +USER appuser diff --git a/josm/novnc/index.html b/josm/novnc/index.html new file mode 100644 index 0000000000..5927bc740c --- /dev/null +++ b/josm/novnc/index.html @@ -0,0 +1,8 @@ + + + + + +

If you see this click here.

+ + From 53bedc32e50048d79275c487b715307561078366 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 15:00:35 +0100 Subject: [PATCH 194/222] build: add josm to docker compose dev config --- docker-compose.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index f8207136a6..41014f8dff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,6 +24,7 @@ volumes: networks: fmtm-dev: + x11: services: fmtm-db: @@ -186,6 +187,38 @@ services: - fmtm-dev restart: unless-stopped + josm: + image: "ghcr.io/hotosm/fmtm/josm:latest" + build: + context: josm + container_name: josm + environment: + - DISPLAY=josm-novnc:0.0 + depends_on: + - josm-novnc + networks: + - fmtm-dev + - x11 + ports: + - 8111:80 + restart: unless-stopped + + josm-novnc: + image: "ghcr.io/hotosm/fmtm/josm-novnc:latest" + build: + context: josm/novnc + container_name: josm_novnc + environment: + - DISPLAY_WIDTH=1280 + - DISPLAY_HEIGHT=600 + - RUN_XTERM=no + - RUN_FLUXBOX=no + ports: + - "8112:8080" + networks: + - x11 + restart: unless-stopped + pyxform: image: "ghcr.io/getodk/pyxform-http:v1.10.1.1" networks: From 47fc402c86f5c758cbb002cd92cc5059186c4ada Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 15:06:40 +0100 Subject: [PATCH 195/222] build: move JOSM config into separate compose config --- docker-compose.josm.yml | 54 +++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 33 ------------------------- 2 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 docker-compose.josm.yml diff --git a/docker-compose.josm.yml b/docker-compose.josm.yml new file mode 100644 index 0000000000..fb59cde604 --- /dev/null +++ b/docker-compose.josm.yml @@ -0,0 +1,54 @@ +# Copyright (c) 2022, 2023 Humanitarian OpenStreetMap Team +# This file is part of FMTM. +# +# FMTM is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# FMTM is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with FMTM. If not, see . +# + +version: "3" + +networks: + x11: + +services: + josm: + image: "ghcr.io/hotosm/fmtm/josm:latest" + build: + context: josm + container_name: josm + environment: + - DISPLAY=josm-novnc:0.0 + depends_on: + - josm-novnc + networks: + - fmtm-dev + - x11 + ports: + - 8111:80 + restart: unless-stopped + + josm-novnc: + image: "ghcr.io/hotosm/fmtm/josm-novnc:latest" + build: + context: josm/novnc + container_name: josm_novnc + environment: + - DISPLAY_WIDTH=1280 + - DISPLAY_HEIGHT=600 + - RUN_XTERM=no + - RUN_FLUXBOX=no + ports: + - "8112:8080" + networks: + - x11 + restart: unless-stopped diff --git a/docker-compose.yml b/docker-compose.yml index 41014f8dff..f8207136a6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,6 @@ volumes: networks: fmtm-dev: - x11: services: fmtm-db: @@ -187,38 +186,6 @@ services: - fmtm-dev restart: unless-stopped - josm: - image: "ghcr.io/hotosm/fmtm/josm:latest" - build: - context: josm - container_name: josm - environment: - - DISPLAY=josm-novnc:0.0 - depends_on: - - josm-novnc - networks: - - fmtm-dev - - x11 - ports: - - 8111:80 - restart: unless-stopped - - josm-novnc: - image: "ghcr.io/hotosm/fmtm/josm-novnc:latest" - build: - context: josm/novnc - container_name: josm_novnc - environment: - - DISPLAY_WIDTH=1280 - - DISPLAY_HEIGHT=600 - - RUN_XTERM=no - - RUN_FLUXBOX=no - ports: - - "8112:8080" - networks: - - x11 - restart: unless-stopped - pyxform: image: "ghcr.io/getodk/pyxform-http:v1.10.1.1" networks: From 1fb013232f2fbc2d35a8a4f6b508727cebde98fd Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 9 Aug 2023 15:11:14 +0100 Subject: [PATCH 196/222] docs: info on local dev with JOSM API --- docs/DEV-2.-Backend.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/DEV-2.-Backend.md b/docs/DEV-2.-Backend.md index fe0c9f8709..3ecf82d07f 100644 --- a/docs/DEV-2.-Backend.md +++ b/docs/DEV-2.-Backend.md @@ -155,6 +155,23 @@ Creating a new release during development may not always be feasible. > Note: this is useful for debugging features during active development. +## Running JOSM in the dev stack + +- Run JOSM with FMTM: + +```bash +docker compose \ + -f docker-compose.yml \ + -f docker-compose.josm.yml \ + up -d +``` + +This adds JOSM to the docker compose stack for local development. +Access the JOSM Remote API: +Access the JOSM GUI in browser: + +You can now call the JOSM API from FMTM and changes will be reflected in the GUI. + ## Conclusion Running the FMTM project is easy with Docker. You can also run the From 1a03e86f04dcf5dfd9976585ccb0eb00785d203c Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Thu, 10 Aug 2023 10:18:27 +0545 Subject: [PATCH 197/222] fix: user with existing username in osm login --- src/backend/app/auth/auth_routes.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/backend/app/auth/auth_routes.py b/src/backend/app/auth/auth_routes.py index 7372059ccb..ad0ab6f884 100644 --- a/src/backend/app/auth/auth_routes.py +++ b/src/backend/app/auth/auth_routes.py @@ -16,7 +16,7 @@ # along with FMTM. If not, see . # -from fastapi import APIRouter, Depends, Request +from fastapi import APIRouter, Depends, Request, HTTPException from fastapi.logger import logger as log from fastapi.responses import JSONResponse from sqlalchemy.orm import Session @@ -89,9 +89,17 @@ def my_data( Returns: user_data """ + # Save user info in User table user = user_crud.get_user_by_id(db, user_data['id']) if not user: + user_by_username = user_crud.get_user_by_username(db, user_data['username']) + if user_by_username: + raise HTTPException( + status_code=400, detail=f"User with this username {user_data['username']} already exists. \ + Please contact the administrator for this." + ) + db_user = DbUser(id=user_data['id'], username=user_data['username']) db.add(db_user) db.commit() From 0732ae0c09e6a3b893f59839629077ac10faa8b7 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 11 Aug 2023 14:49:15 +0545 Subject: [PATCH 198/222] feat: tile generation process moved into fastapi background task --- src/backend/app/projects/project_crud.py | 104 +++++++++++++-------- src/backend/app/projects/project_routes.py | 19 +++- 2 files changed, 80 insertions(+), 43 deletions(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 02ecd8e460..57b83378c6 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -2092,51 +2092,73 @@ async def get_extracted_data_from_db(db:Session, project_id:int, outfile:str): dump(features, jsonfile) -async def get_project_tiles(db: Session, project_id: int, source: str): - """Get the tiles for a project""" - zooms = [12,13,14,15,16,17,18,19] - source = source - base = f"/tmp/tiles/{source}tiles" - outfile = "/tmp/thamel.mbtiles" +async def get_project_tiles(db: Session, + project_id: int, + source: str, + background_task_id: uuid.UUID, + ): + try: + """Get the tiles for a project""" + zooms = [12,13,14,15,16,17,18,19] + source = source + base = f"/tmp/tiles/{source}tiles" + outfile = "/tmp/thamel.mbtiles" - # Project Outline - query = f'''SELECT jsonb_build_object( - 'type', 'FeatureCollection', - 'features', jsonb_agg(feature) - ) - FROM ( - SELECT jsonb_build_object( - 'type', 'Feature', - 'id', id, - 'geometry', ST_AsGeoJSON(outline)::jsonb - ) AS feature - FROM projects - WHERE id={project_id} - ) features;''' + # Project Outline + query = f'''SELECT jsonb_build_object( + 'type', 'FeatureCollection', + 'features', jsonb_agg(feature) + ) + FROM ( + SELECT jsonb_build_object( + 'type', 'Feature', + 'id', id, + 'geometry', ST_AsGeoJSON(outline)::jsonb + ) AS feature + FROM projects + WHERE id={project_id} + ) features;''' - result = db.execute(query) - features = result.fetchone()[0] + result = db.execute(query) + features = result.fetchone()[0] - # Boundary - boundary_file = f"/tmp/{project_id}_boundary.geojson" + # Boundary + boundary_file = f"/tmp/{project_id}_boundary.geojson" - # Update outfile containing osm extracts with the new geojson contents containing title in the properties. - with open(boundary_file, "w") as jsonfile: - jsonfile.truncate(0) - dump(features, jsonfile) + # Update outfile containing osm extracts with the new geojson contents containing title in the properties. + with open(boundary_file, "w") as jsonfile: + jsonfile.truncate(0) + dump(features, jsonfile) + + basemap = basemapper.BaseMapper(boundary_file, base, source) + outf = basemapper.DataFile(outfile, basemap.getFormat()) + suffix = os.path.splitext(outfile)[1] + if suffix == ".mbtiles": + outf.addBounds(basemap.bbox) + for level in zooms: + basemap.getTiles(level) + if outfile: + # Create output database and specify image format, png, jpg, or tif + outf.writeTiles(basemap.tiles, base) + else: + logging.info("Only downloading tiles to %s!" % base) + + # Update background task status to COMPLETED + update_background_task_status_in_database( + db, background_task_id, 4 + ) # 4 is COMPLETED + + logger.info(f"Tiles generation process completed for project id {project_id}") + + except Exception as e: + logger.error(f'Tiles generation process failed for project id {project_id}') + logger.error(str(e)) + + # Update background task status to FAILED + update_background_task_status_in_database( + db, background_task_id, 2, str(e) + ) # 2 is FAILED - basemap = basemapper.BaseMapper(boundary_file, base, source) - outf = basemapper.DataFile(outfile, basemap.getFormat()) - suffix = os.path.splitext(outfile)[1] - if suffix == ".mbtiles": - outf.addBounds(basemap.bbox) - for level in zooms: - basemap.getTiles(level) - if outfile: - # Create output database and specify image format, png, jpg, or tif - outf.writeTiles(basemap.tiles, base) - else: - logging.info("Only downloading tiles to %s!" % base) - return FileResponse(outfile, headers={"Content-Disposition": f"attachment; filename=tiles.mbtiles"}) + # return FileResponse(outfile, headers={"Content-Disposition": f"attachment; filename=tiles.mbtiles"}) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 5f92f3b19b..0cf9ff94c3 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -832,6 +832,7 @@ async def download_task_boundaries( @router.get("/tiles/{project_id}") async def get_project_tiles( + background_tasks: BackgroundTasks, project_id: int, source: str = Query(..., description="Select a source for tiles", enum=TILES_SOURCE), db: Session = Depends(database.get_db), @@ -847,6 +848,20 @@ async def get_project_tiles( Response: The File response object containing the tiles. """ - tiles = await project_crud.get_project_tiles(db, project_id, source) + # generate a unique task ID using uuid + background_task_id = uuid.uuid4() + + # insert task and task ID into database + await project_crud.insert_background_task_into_database( + db, task_id=background_task_id + ) + + background_tasks.add_task( + project_crud.get_project_tiles, + db, + project_id, + source, + background_task_id + ) - return tiles \ No newline at end of file + return {"Message": "Tile generation started"} \ No newline at end of file From e853d14bc903e72d52316fe0cda12f05c13bd499 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 11 Aug 2023 15:16:04 +0545 Subject: [PATCH 199/222] db models to store mbtiles path --- src/backend/app/db/db_models.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/backend/app/db/db_models.py b/src/backend/app/db/db_models.py index bec8a45ab9..fd7f42a55d 100644 --- a/src/backend/app/db/db_models.py +++ b/src/backend/app/db/db_models.py @@ -628,3 +628,15 @@ class DbBuildings(Base): osm_id = Column(String) geom = Column(Geometry(geometry_type="GEOMETRY", srid=4326)) tags = Column(JSONB) + + +class DbTilesPath(Base): + __tablename__ = "mbtiles_path" + + id = Column(Integer, primary_key=True) + project_id = Column(String) + status = Column(Enum(BackgroundTaskStatus), nullable=False) + path = Column(String) + tile_source = Column(String) + task_id = Column(String) + created_at = Column(DateTime, default=timestamp) \ No newline at end of file From 043e4f89f0edc3d15cb6990baed825f26522a606 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 11 Aug 2023 15:16:51 +0545 Subject: [PATCH 200/222] tiles path stores in db model --- src/backend/app/projects/project_crud.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 57b83378c6..e5713b6383 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -2099,10 +2099,21 @@ async def get_project_tiles(db: Session, ): try: """Get the tiles for a project""" + zooms = [12,13,14,15,16,17,18,19] source = source base = f"/tmp/tiles/{source}tiles" - outfile = "/tmp/thamel.mbtiles" + outfile = f"/tmp/{project_id}_{uuid.uuid4()}_tiles.mbtiles" + + tile_path_instance = db_models.DbTilesPath( + project_id = project_id, + task_id = str(background_task_id), + status = 1, + tile_source = source, + path = outfile + ) + db.add(tile_path_instance) + db.commit() # Project Outline @@ -2144,6 +2155,9 @@ async def get_project_tiles(db: Session, else: logging.info("Only downloading tiles to %s!" % base) + tile_path_instance.status = 4 + db.commit() + # Update background task status to COMPLETED update_background_task_status_in_database( db, background_task_id, 4 From b4720d809f7c806caee65bef56afe1a18395de01 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Fri, 11 Aug 2023 15:21:57 +0545 Subject: [PATCH 201/222] updated status when process failed --- src/backend/app/projects/project_crud.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index e5713b6383..dd3dfe5ba9 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -2169,6 +2169,9 @@ async def get_project_tiles(db: Session, logger.error(f'Tiles generation process failed for project id {project_id}') logger.error(str(e)) + tile_path_instance.status = 2 + db.commit() + # Update background task status to FAILED update_background_task_status_in_database( db, background_task_id, 2, str(e) From d245cf4b198fb9a2319ff55d033c0c39b2e957e3 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sat, 12 Aug 2023 20:37:24 +0545 Subject: [PATCH 202/222] removed mercantile and pysmartdl from dependencies --- src/backend/pdm.lock | 27 ++------------------------- src/backend/pyproject.toml | 2 -- 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index 80d5e77f22..718130fdc4 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -469,14 +469,6 @@ dependencies = [ "traitlets", ] -[[package]] -name = "mercantile" -version = "1.2.1" -summary = "Web mercator XYZ tile utilities" -dependencies = [ - "click>=3.0", -] - [[package]] name = "numpy" version = "1.24.3" @@ -735,11 +727,6 @@ name = "pypng" version = "0.20220715.0" summary = "Pure Python library for saving and loading PNG images" -[[package]] -name = "pysmartdl" -version = "1.3.4" -summary = "A Smart Download Manager for Python" - [[package]] name = "pytest" version = "7.2.2" @@ -1085,10 +1072,8 @@ requires_python = ">=3.7" summary = "Backport of pathlib-compatible object wrapper for zip files" [metadata] -lock_version = "4.2" -cross_platform = true -groups = ["default", "dev"] -content_hash = "sha256:631f54b4db88856e27bb2f42fed5f39e8f899e0b8dfc6788811285095d6aae96" +lock_version = "4.0" +content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893522a467" [metadata.files] "alembic 1.8.1" = [ @@ -1851,10 +1836,6 @@ content_hash = "sha256:631f54b4db88856e27bb2f42fed5f39e8f899e0b8dfc6788811285095 {url = "https://files.pythonhosted.org/packages/d9/50/3af8c0362f26108e54d58c7f38784a3bdae6b9a450bab48ee8482d737f44/matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, {url = "https://files.pythonhosted.org/packages/f2/51/c34d7a1d528efaae3d8ddb18ef45a41f284eacf9e514523b191b7d0872cc/matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, ] -"mercantile 1.2.1" = [ - {url = "https://files.pythonhosted.org/packages/b2/d6/de0cc74f8d36976aeca0dd2e9cbf711882ff8e177495115fd82459afdc4d/mercantile-1.2.1-py3-none-any.whl", hash = "sha256:30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f"}, - {url = "https://files.pythonhosted.org/packages/d2/c6/87409bcb26fb68c393fa8cf58ba09363aa7298cfb438a0109b5cb14bc98b/mercantile-1.2.1.tar.gz", hash = "sha256:fa3c6db15daffd58454ac198b31887519a19caccee3f9d63d17ae7ff61b3b56b"}, -] "numpy 1.24.3" = [ {url = "https://files.pythonhosted.org/packages/0d/43/643629a4a278b4815541c7d69856c07ddb0e99bdc62b43538d3751eae2d8/numpy-1.24.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4"}, {url = "https://files.pythonhosted.org/packages/15/b8/cbe1750b9ec78062e5a00ef39ff8bdf189ce753b411b6b35931ababaee47/numpy-1.24.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4"}, @@ -2138,10 +2119,6 @@ content_hash = "sha256:631f54b4db88856e27bb2f42fed5f39e8f899e0b8dfc6788811285095 {url = "https://files.pythonhosted.org/packages/3e/b9/3766cc361d93edb2ce81e2e1f87dd98f314d7d513877a342d31b30741680/pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, {url = "https://files.pythonhosted.org/packages/93/cd/112f092ec27cca83e0516de0a3368dbd9128c187fb6b52aaaa7cde39c96d/pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, ] -"pysmartdl 1.3.4" = [ - {url = "https://files.pythonhosted.org/packages/5a/4c/ed073b2373f115094a4a612431abe25b58e542bebd951557dcc881999ef9/pySmartDL-1.3.4.tar.gz", hash = "sha256:35275d1694f3474d33bdca93b27d3608265ffd42f5aeb28e56f38b906c0c35f4"}, - {url = "https://files.pythonhosted.org/packages/ac/6a/582286ea74c54363cba30413214767904f0a239e12253c3817feaf78453f/pySmartDL-1.3.4-py3-none-any.whl", hash = "sha256:671c277ca710fb9b6603b19176f5c091041ec4ef6dcdb507c9a983a89ca35d31"}, -] "pytest 7.2.2" = [ {url = "https://files.pythonhosted.org/packages/b2/68/5321b5793bd506961bd40bdbdd0674e7de4fb873ee7cab33dd27283ad513/pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, {url = "https://files.pythonhosted.org/packages/b9/29/311895d9cd3f003dd58e8fdea36dd895ba2da5c0c90601836f7de79f76fe/pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 097c3a2ae4..588f9d3a52 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -50,8 +50,6 @@ dependencies = [ "sentry-sdk==1.9.6", "py-cpuinfo==9.0.0", "gdal==3.6.2", - "mercantile==1.2.1", - "pySmartDL==1.3.4" ] requires-python = ">=3.10" readme = "../../README.md" From aad9f7a5fa1d848ba31a5449e43bc3147d79a1ab Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sat, 12 Aug 2023 21:00:26 +0545 Subject: [PATCH 203/222] osm-fieldwork updated to 0.3.5 --- src/backend/pdm.lock | 1334 +++++++++++++++++++----------------- src/backend/pyproject.toml | 2 +- 2 files changed, 688 insertions(+), 648 deletions(-) diff --git a/src/backend/pdm.lock b/src/backend/pdm.lock index 718130fdc4..cbc45b04e2 100644 --- a/src/backend/pdm.lock +++ b/src/backend/pdm.lock @@ -13,10 +13,11 @@ dependencies = [ [[package]] name = "anyio" -version = "3.6.2" -requires_python = ">=3.6.2" +version = "3.7.1" +requires_python = ">=3.7" summary = "High level compatibility layer for multiple asynchronous event loop implementations" dependencies = [ + "exceptiongroup; python_version < \"3.11\"", "idna>=2.8", "sniffio>=1.1", ] @@ -28,7 +29,7 @@ summary = "Disable App Nap on macOS >= 10.9" [[package]] name = "argcomplete" -version = "3.0.8" +version = "3.1.1" requires_python = ">=3.6" summary = "Bash tab completion for argparse" @@ -68,7 +69,7 @@ dependencies = [ [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" requires_python = ">=3.6" summary = "Python package for providing Mozilla's CA Bundle." @@ -82,13 +83,13 @@ dependencies = [ [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" requires_python = ">=3.7.0" summary = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." [[package]] name = "click" -version = "8.1.3" +version = "8.1.6" requires_python = ">=3.7" summary = "Composable command line interface toolkit" dependencies = [ @@ -109,11 +110,11 @@ summary = "Cross-platform colored terminal text." [[package]] name = "commitizen" -version = "3.2.2" +version = "3.6.0" requires_python = ">=3.7,<4.0" summary = "Python commitizen client tool" dependencies = [ - "argcomplete<3.1,>=1.12.1", + "argcomplete<3.2,>=1.12.1", "charset-normalizer<4,>=2.1.0", "colorama<0.5.0,>=0.4.1", "decli<0.7.0,>=0.6.0", @@ -128,7 +129,7 @@ dependencies = [ [[package]] name = "contourpy" -version = "1.0.7" +version = "1.1.0" requires_python = ">=3.8" summary = "Python library for calculating contours of 2D quadrilateral grids" dependencies = [ @@ -158,7 +159,7 @@ summary = "An implementation of the Debug Adapter Protocol for Python" [[package]] name = "decli" -version = "0.6.0" +version = "0.6.1" requires_python = ">=3.7" summary = "Minimal, easy-to-use, declarative cli tool" @@ -199,7 +200,7 @@ summary = "An implementation of lxml.xmlfile for the standard library" [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.1.2" requires_python = ">=3.7" summary = "Backport of PEP 654 (exception groups)" @@ -235,7 +236,7 @@ summary = "Python module for interacting with nested dicts as a single level dic [[package]] name = "fonttools" -version = "4.39.3" +version = "4.42.0" requires_python = ">=3.8" summary = "Tools to manipulate font files" @@ -346,8 +347,8 @@ summary = "Internationalized Domain Names in Applications (IDNA)" [[package]] name = "importlib-metadata" -version = "6.6.0" -requires_python = ">=3.7" +version = "6.8.0" +requires_python = ">=3.8" summary = "Read metadata from Python packages" dependencies = [ "zipp>=0.5", @@ -374,7 +375,7 @@ dependencies = [ [[package]] name = "ipython" -version = "8.13.2" +version = "8.14.0" requires_python = ">=3.9" summary = "IPython: Productive Interactive Computing" dependencies = [ @@ -400,11 +401,11 @@ summary = "Safely pass data to untrusted environments and back." [[package]] name = "jedi" -version = "0.18.2" +version = "0.19.0" requires_python = ">=3.6" summary = "An autocompletion tool for Python that can be used for text editors." dependencies = [ - "parso<0.9.0,>=0.8.0", + "parso<0.9.0,>=0.8.3", ] [[package]] @@ -424,7 +425,7 @@ summary = "A fast implementation of the Cassowary constraint solver" [[package]] name = "lxml" -version = "4.9.2" +version = "4.9.3" requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" summary = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." @@ -439,13 +440,13 @@ dependencies = [ [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" requires_python = ">=3.7" summary = "Safely add untrusted strings to HTML/XML markup." [[package]] name = "matplotlib" -version = "3.7.1" +version = "3.7.2" requires_python = ">=3.8" summary = "Python plotting package" dependencies = [ @@ -456,7 +457,7 @@ dependencies = [ "numpy>=1.20", "packaging>=20.0", "pillow>=6.2.0", - "pyparsing>=2.3.1", + "pyparsing<3.1,>=2.3.1", "python-dateutil>=2.7", ] @@ -469,10 +470,18 @@ dependencies = [ "traitlets", ] +[[package]] +name = "mercantile" +version = "1.2.1" +summary = "Web mercator XYZ tile utilities" +dependencies = [ + "click>=3.0", +] + [[package]] name = "numpy" -version = "1.24.3" -requires_python = ">=3.8" +version = "1.25.2" +requires_python = ">=3.9" summary = "Fundamental package for array computing in Python" [[package]] @@ -508,7 +517,7 @@ dependencies = [ [[package]] name = "osm-fieldwork" -version = "0.3.4" +version = "0.3.5" requires_python = ">=3.9" summary = "Convert CSV files from ODK Central to OSM format." dependencies = [ @@ -519,9 +528,11 @@ dependencies = [ "geodex>=0.1.2", "geojson>=2.5.0", "haversine>=2.8.0", + "mercantile>=1.2.1", "ogr>=0.44.0", "overpy>=0.6", "progress>=1.6", + "pySmartDL>=1.3.4", "pymbtiles>=0.5.0", "qrcode>=7.4.2", "requests>=2.28.2", @@ -570,7 +581,7 @@ summary = "Core utilities for Python packages" [[package]] name = "pandas" -version = "2.0.1" +version = "2.0.3" requires_python = ">=3.8" summary = "Powerful data structures for data analysis, time series, and statistics" dependencies = [ @@ -602,14 +613,14 @@ summary = "Tiny 'shelve'-like database with concurrency support" [[package]] name = "pillow" -version = "9.5.0" -requires_python = ">=3.7" +version = "10.0.0" +requires_python = ">=3.8" summary = "Python Imaging Library (Fork)" [[package]] name = "pluggy" -version = "1.0.0" -requires_python = ">=3.6" +version = "1.2.0" +requires_python = ">=3.7" summary = "plugin and hook calling mechanisms for python" [[package]] @@ -619,7 +630,7 @@ summary = "Easy to use progress bars" [[package]] name = "prompt-toolkit" -version = "3.0.38" +version = "3.0.39" requires_python = ">=3.7.0" summary = "Library for building powerful interactive command lines in Python" dependencies = [ @@ -681,7 +692,7 @@ dependencies = [ [[package]] name = "pygments" -version = "2.15.1" +version = "2.16.1" requires_python = ">=3.7" summary = "Pygments is a syntax highlighting package written in Python." @@ -727,6 +738,11 @@ name = "pypng" version = "0.20220715.0" summary = "Pure Python library for saving and loading PNG images" +[[package]] +name = "pysmartdl" +version = "1.3.4" +summary = "A Smart Download Manager for Python" + [[package]] name = "pytest" version = "7.2.2" @@ -793,7 +809,7 @@ dependencies = [ [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" requires_python = ">=3.6" summary = "YAML parser and emitter for Python" @@ -819,7 +835,7 @@ dependencies = [ [[package]] name = "requests" -version = "2.30.0" +version = "2.31.0" requires_python = ">=3.7" summary = "Python HTTP for Humans." dependencies = [ @@ -931,7 +947,7 @@ dependencies = [ [[package]] name = "sqlalchemy2-stubs" -version = "0.0.2a34" +version = "0.0.2a35" requires_python = ">=3.6" summary = "Typing Stubs for SQLAlchemy 1.4" dependencies = [ @@ -987,7 +1003,7 @@ summary = "A lil' TOML parser" [[package]] name = "tomlkit" -version = "0.11.8" +version = "0.12.1" requires_python = ">=3.7" summary = "Style preserving TOML library" @@ -999,7 +1015,7 @@ summary = "Traitlets Python configuration system" [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.7.1" requires_python = ">=3.7" summary = "Backported and Experimental Type Hints for Python 3.7+" @@ -1011,13 +1027,13 @@ summary = "Provider of IANA time zone data" [[package]] name = "ujson" -version = "5.7.0" -requires_python = ">=3.7" +version = "5.8.0" +requires_python = ">=3.8" summary = "Ultra fast JSON encoder and decoder for Python" [[package]] name = "urllib3" -version = "2.0.2" +version = "2.0.4" requires_python = ">=3.7" summary = "HTTP library with thread-safe connection pooling, file post, and more." @@ -1044,7 +1060,7 @@ summary = "Module for decorators, wrappers and monkey patching." [[package]] name = "xarray" -version = "2023.4.2" +version = "2023.7.0" requires_python = ">=3.9" summary = "N-D labeled arrays and datasets in Python" dependencies = [ @@ -1067,30 +1083,32 @@ summary = "Makes working with XML feel like you are working with JSON" [[package]] name = "zipp" -version = "3.15.0" -requires_python = ">=3.7" +version = "3.16.2" +requires_python = ">=3.8" summary = "Backport of pathlib-compatible object wrapper for zip files" [metadata] -lock_version = "4.0" -content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893522a467" +lock_version = "4.2" +cross_platform = true +groups = ["default", "dev"] +content_hash = "sha256:1959bfbfc03a2a3aa7fb94f306cd02045e86822b2555a019b7dce923401d06ec" [metadata.files] "alembic 1.8.1" = [ {url = "https://files.pythonhosted.org/packages/37/ab/80e6d86ca81235ea1a7104089dddf74de4b45f8af0a05d4b265be44d6ff9/alembic-1.8.1.tar.gz", hash = "sha256:cd0b5e45b14b706426b833f06369b9a6d5ee03f826ec3238723ce8caaf6e5ffa"}, {url = "https://files.pythonhosted.org/packages/b3/c8/69600a8138a56794713ecdb8b75b14fbe32a410bc444683f27dbab93c0ca/alembic-1.8.1-py3-none-any.whl", hash = "sha256:0a024d7f2de88d738d7395ff866997314c837be6104e90c5724350313dee4da4"}, ] -"anyio 3.6.2" = [ - {url = "https://files.pythonhosted.org/packages/77/2b/b4c0b7a3f3d61adb1a1e0b78f90a94e2b6162a043880704b7437ef297cad/anyio-3.6.2-py3-none-any.whl", hash = "sha256:fbbe32bd270d2a2ef3ed1c5d45041250284e31fc0a4df4a5a6071842051a51e3"}, - {url = "https://files.pythonhosted.org/packages/8b/94/6928d4345f2bc1beecbff03325cad43d320717f51ab74ab5a571324f4f5a/anyio-3.6.2.tar.gz", hash = "sha256:25ea0d673ae30af41a0c442f81cf3b38c7e79fdc7b60335a4c14e05eb0947421"}, +"anyio 3.7.1" = [ + {url = "https://files.pythonhosted.org/packages/19/24/44299477fe7dcc9cb58d0a57d5a7588d6af2ff403fdd2d47a246c91a3246/anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, + {url = "https://files.pythonhosted.org/packages/28/99/2dfd53fd55ce9838e6ff2d4dac20ce58263798bd1a0dbe18b3a9af3fcfce/anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, ] "appnope 0.1.3" = [ {url = "https://files.pythonhosted.org/packages/41/4a/381783f26df413dde4c70c734163d88ca0550a1361cb74a1c68f47550619/appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, {url = "https://files.pythonhosted.org/packages/6a/cd/355842c0db33192ac0fc822e2dcae835669ef317fe56c795fb55fcddb26f/appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, ] -"argcomplete 3.0.8" = [ - {url = "https://files.pythonhosted.org/packages/42/cd/fdb872d826b76b65b23147e83b1ca4c033445bbff59f8836a118657dd050/argcomplete-3.0.8.tar.gz", hash = "sha256:b9ca96448e14fa459d7450a4ab5a22bbf9cee4ba7adddf03e65c398b5daeea28"}, - {url = "https://files.pythonhosted.org/packages/ab/ce/2141e1cabe39c90e01fde7feb44c07867fb49bf1c0c091d68fd8924fd6a2/argcomplete-3.0.8-py3-none-any.whl", hash = "sha256:e36fd646839933cbec7941c662ecb65338248667358dd3d968405a4506a60d9b"}, +"argcomplete 3.1.1" = [ + {url = "https://files.pythonhosted.org/packages/4f/ef/8b604222ba5e5190e25851aa3a5b754f2002361dc62a258a8e9f13e866f4/argcomplete-3.1.1-py3-none-any.whl", hash = "sha256:35fa893a88deea85ea7b20d241100e64516d6af6d7b0ae2bed1d263d26f70948"}, + {url = "https://files.pythonhosted.org/packages/54/c9/41c4dfde7623e053cbc37ac8bc7ca03b28093748340871d4e7f1630780c4/argcomplete-3.1.1.tar.gz", hash = "sha256:6c4c563f14f01440aaffa3eae13441c5db2357b5eec639abe7c0b15334627dff"}, ] "asttokens 2.2.1" = [ {url = "https://files.pythonhosted.org/packages/c8/e3/b0b4f32162621126fbdaba636c152c6b6baec486c99f48686e66343d638f/asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, @@ -1131,9 +1149,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/57/f4/a69c20ee4f660081a7dedb1ac57f29be9378e04edfcb90c526b923d4bebc/beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, {url = "https://files.pythonhosted.org/packages/af/0b/44c39cf3b18a9280950ad63a579ce395dda4c32193ee9da7ff0aed547094/beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, ] -"certifi 2023.5.7" = [ - {url = "https://files.pythonhosted.org/packages/93/71/752f7a4dd4c20d6b12341ed1732368546bc0ca9866139fe812f6009d9ac7/certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, - {url = "https://files.pythonhosted.org/packages/9d/19/59961b522e6757f0c9097e4493fa906031b95b3ebe9360b2c3083561a6b4/certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, +"certifi 2023.7.22" = [ + {url = "https://files.pythonhosted.org/packages/4c/dd/2234eab22353ffc7d94e8d13177aaa050113286e93e7b40eae01fbf7c3d9/certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {url = "https://files.pythonhosted.org/packages/98/98/c2ff18671db109c9f10ed27f5ef610ae05b73bd876664139cf95bd1429aa/certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] "cffi 1.15.1" = [ {url = "https://files.pythonhosted.org/packages/00/05/23a265a3db411b0bfb721bf7a116c7cecaf3eb37ebd48a6ea4dfb0a3244d/cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, @@ -1201,86 +1219,86 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/f9/96/fc9e118c47b7adc45a0676f413b4a47554e5f3b6c99b8607ec9726466ef1/cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, {url = "https://files.pythonhosted.org/packages/ff/fe/ac46ca7b00e9e4f9c62e7928a11bc9227c86e2ff43526beee00cdfb4f0e8/cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, ] -"charset-normalizer 3.1.0" = [ - {url = "https://files.pythonhosted.org/packages/00/47/f14533da238134f5067fb1d951eb03d5c4be895d6afb11c7ebd07d111acb/charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {url = "https://files.pythonhosted.org/packages/01/c7/0407de35b70525dba2a58a2724a525cf882ee76c3d2171d834463c5d2881/charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {url = "https://files.pythonhosted.org/packages/05/f3/86b5fcb5c8fe8b4231362918a7c4d8f549c56561c5fdb495a3c5b41c6862/charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {url = "https://files.pythonhosted.org/packages/07/6b/98d41a0221991a806e88c95bfeecf8935fbf465b02eb4b469770d572183a/charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {url = "https://files.pythonhosted.org/packages/0a/67/8d3d162ec6641911879651cdef670c3c6136782b711d7f8e82e2fffe06e0/charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {url = "https://files.pythonhosted.org/packages/12/12/c5c39f5a149cd6788d2e40cea5618bae37380e2754fcdf53dc9e01bdd33a/charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {url = "https://files.pythonhosted.org/packages/12/68/4812f9b05ac0a2b7619ac3dd7d7e3fc52c12006b84617021c615fc2fcf42/charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {url = "https://files.pythonhosted.org/packages/13/b7/21729a6d512246aa0bb872b90aea0d9fcd1b293762cdb1d1d33c01140074/charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {url = "https://files.pythonhosted.org/packages/16/58/19fd2f62e6ff44ba0db0cd44b584790555e2cde09293149f4409d654811b/charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {url = "https://files.pythonhosted.org/packages/18/36/7ae10a3dd7f9117b61180671f8d1e4802080cca88ad40aaabd3dad8bab0e/charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {url = "https://files.pythonhosted.org/packages/1c/9b/de2adc43345623da8e7c958719528a42b6d87d2601017ce1187d43b8a2d7/charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {url = "https://files.pythonhosted.org/packages/1f/be/c6c76cf8fcf6918922223203c83ba8192eff1c6a709e8cfec7f5ca3e7d2d/charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {url = "https://files.pythonhosted.org/packages/21/16/1b0d8fdcb81bbf180976af4f867ce0f2244d303ab10d452fde361dec3b5c/charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {url = "https://files.pythonhosted.org/packages/23/13/cf5d7bb5bc95f120df64d6c470581189df51d7f011560b2a06a395b7a120/charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {url = "https://files.pythonhosted.org/packages/26/20/83e1804a62b25891c4e770c94d9fd80233bbb3f2a51c4fadee7a196e5a5b/charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {url = "https://files.pythonhosted.org/packages/2c/2f/ec805104098085728b7cb610deede7195c6fa59f51942422f02cc427b6f6/charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {url = "https://files.pythonhosted.org/packages/2e/25/3eab2b38fef9ae59f7b4e9c1e62eb50609d911867e5acabace95fe25c0b1/charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {url = "https://files.pythonhosted.org/packages/31/8b/81c3515a69d06b501fcce69506af57a7a19bd9f42cabd1a667b1b40f2c55/charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {url = "https://files.pythonhosted.org/packages/33/10/c87ba15f779f8251ae55fa147631339cd91e7af51c3c133d2687c6e41800/charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {url = "https://files.pythonhosted.org/packages/33/97/9967fb2d364a9da38557e4af323abcd58cc05bdd8f77e9fd5ae4882772cc/charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {url = "https://files.pythonhosted.org/packages/45/3d/fa2683f5604f99fba5098a7313e5d4846baaecbee754faf115907f21a85f/charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {url = "https://files.pythonhosted.org/packages/4e/11/f7077d78b18aca8ea3186a706c0221aa2bc34c442a3d3bdf3ad401a29052/charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {url = "https://files.pythonhosted.org/packages/4f/18/92866f050f7114ba38aba4f4a69f83cc2a25dc2e5a8af4b44fd1bfd6d528/charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {url = "https://files.pythonhosted.org/packages/4f/7c/af43743567a7da2a069b4f9fa31874c3c02b963cd1fb84fe1e7568a567e6/charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {url = "https://files.pythonhosted.org/packages/4f/a2/9031ba4a008e11a21d7b7aa41751290d2f2035a2f14ecb6e589771a17c47/charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {url = "https://files.pythonhosted.org/packages/56/24/5f2dedcf3d0673931b6200c410832ae44b376848bc899dbf1fa6c91c4ebe/charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {url = "https://files.pythonhosted.org/packages/5d/2b/4d8c80400c04ae3c8dbc847de092e282b5c7b17f8f9505d68bb3e5815c71/charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {url = "https://files.pythonhosted.org/packages/61/e3/ad9ae58b28482d1069eba1edec2be87701f5dd6fd6024a665020d66677a0/charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {url = "https://files.pythonhosted.org/packages/67/30/dbab1fe5ab2ce5d3d517ad9936170d896e9687f3860a092519f1fe359812/charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {url = "https://files.pythonhosted.org/packages/67/df/660e9665ace7ad711e275194a86cb757fb4d4e513fae5ff3d39573db4984/charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {url = "https://files.pythonhosted.org/packages/68/77/af702eba147ba963b27eb00832cef6b8c4cb9fcf7404a476993876434b93/charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {url = "https://files.pythonhosted.org/packages/69/22/66351781e668158feef71c5e3b059a79ecc9efc3ef84a45888b0f3a933d5/charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {url = "https://files.pythonhosted.org/packages/6d/59/59a3f4d8a59ee270da77f9e954a0e284c9d6884d39ec69d696d9aa5ff2f2/charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {url = "https://files.pythonhosted.org/packages/72/90/667a6bc6abe42fc10adf4cd2c1e1c399d78e653dbac4c8018350843d4ab7/charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {url = "https://files.pythonhosted.org/packages/74/5f/361202de730532028458b729781b8435f320e31a622c27f30e25eec80513/charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {url = "https://files.pythonhosted.org/packages/74/f1/d0b8385b574f7e086fb6709e104b696707bd3742d54a6caf0cebbb7e975b/charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {url = "https://files.pythonhosted.org/packages/76/ad/516fed8ffaf02e7a01cd6f6e9d101a6dec64d4db53bec89d30802bf30a96/charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {url = "https://files.pythonhosted.org/packages/82/b9/51b66a647be8685dee75b7807e0f750edf5c1e4f29bc562ad285c501e3c7/charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {url = "https://files.pythonhosted.org/packages/84/23/f60cda6c70ae922ad78368982f06e7fef258fba833212f26275fe4727dc4/charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {url = "https://files.pythonhosted.org/packages/85/e8/18d408d8fe29a56012c10d6b15960940b83f06620e9d7481581cdc6d9901/charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {url = "https://files.pythonhosted.org/packages/94/70/23981e7bf098efbc4037e7c66d28a10e950d9296c08c6dea8ef290f9c79e/charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {url = "https://files.pythonhosted.org/packages/9a/f1/ff81439aa09070fee64173e6ca6ce1342f2b1cca997bcaae89e443812684/charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {url = "https://files.pythonhosted.org/packages/9e/62/a1e0a8f8830c92014602c8a88a1a20b8a68d636378077381f671e6e1cec9/charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {url = "https://files.pythonhosted.org/packages/a2/6c/5167f08da5298f383036c33cb749ab5b3405fd07853edc8314c6882c01b8/charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {url = "https://files.pythonhosted.org/packages/a4/03/355281b62c26712a50c6a9dd75339d8cdd58488fd7bf2556ba1320ebd315/charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {url = "https://files.pythonhosted.org/packages/a9/83/138d2624fdbcb62b7e14715eb721d44347e41a1b4c16544661e940793f49/charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {url = "https://files.pythonhosted.org/packages/ac/7f/62d5dff4e9cb993e4b0d4ea78a74cc84d7d92120879529e0ce0965765936/charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {url = "https://files.pythonhosted.org/packages/ac/c5/990bc41a98b7fa2677c665737fdf278bb74ad4b199c56b6b564b3d4cbfc5/charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {url = "https://files.pythonhosted.org/packages/ad/83/994bfca99e29f1bab66b9248e739360ee70b5aae0a5ee488cd776501edbc/charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {url = "https://files.pythonhosted.org/packages/b0/55/d8ef4c8c7d2a8b3a16e7d9b03c59475c2ee96a0e0c90b14c99faaac0ee3b/charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {url = "https://files.pythonhosted.org/packages/bb/dc/58fdef3ab85e8e7953a8b89ef1d2c06938b8ad88d9617f22967e1a90e6b8/charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {url = "https://files.pythonhosted.org/packages/bc/08/7e7c97399806366ca515a049c3a1e4b644a6a2048bed16e5e67bfaafd0aa/charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {url = "https://files.pythonhosted.org/packages/bc/92/ac692a303e53cdc8852ce72b1ac364b493ca5c9206a5c8db5b30a7f3019c/charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {url = "https://files.pythonhosted.org/packages/c2/35/dfb4032f5712747d3dcfdd19d0768f6d8f60910ae24ed066ecbf442be013/charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {url = "https://files.pythonhosted.org/packages/c6/ab/43ea052756b2f2dcb6a131897811c0e2704b0288f090336217d3346cd682/charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {url = "https://files.pythonhosted.org/packages/c9/8c/a76dd9f2c8803eb147e1e715727f5c3ba0ef39adaadf66a7b3698c113180/charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {url = "https://files.pythonhosted.org/packages/cc/f6/21a66e524658bd1dd7b89ac9d1ee8f7823f2d9701a2fbc458ab9ede53c63/charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {url = "https://files.pythonhosted.org/packages/d1/ff/51fe7e6446415f143b159740c727850172bc35622b2a06dde3354bdebaf3/charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {url = "https://files.pythonhosted.org/packages/d5/92/86c0f0e66e897f6818c46dadef328a5b345d061688f9960fc6ca1fd03dbe/charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {url = "https://files.pythonhosted.org/packages/d7/4c/37ad75674e8c6bc22ab01bef673d2d6e46ee44203498c9a26aa23959afe5/charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {url = "https://files.pythonhosted.org/packages/d8/ca/a7ff600781bf1e5f702ba26bb82f2ba1d3a873a3f8ad73cc44c79dfaefa9/charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {url = "https://files.pythonhosted.org/packages/dd/39/6276cf5a395ffd39b77dadf0e2fcbfca8dbfe48c56ada250c40086055143/charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {url = "https://files.pythonhosted.org/packages/e1/7c/398600268fc98b7e007f5a716bd60903fff1ecff75e45f5700212df5cd76/charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {url = "https://files.pythonhosted.org/packages/e1/b4/53678b2a14e0496fc167fe9b9e726ad33d670cfd2011031aa5caeee6b784/charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {url = "https://files.pythonhosted.org/packages/e5/aa/9d2d60d6a566423da96c15cd11cbb88a70f9aff9a4db096094ee19179cab/charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {url = "https://files.pythonhosted.org/packages/e6/98/a3f65f57651da1cecaed91d6f75291995d56c97442fa2a43d2a421139adf/charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {url = "https://files.pythonhosted.org/packages/ea/38/d31c7906c4be13060c1a5034087966774ef33ab57ff2eee76d71265173c3/charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {url = "https://files.pythonhosted.org/packages/ef/81/14b3b8f01ddaddad6cdec97f2f599aa2fa466bd5ee9af99b08b7713ccd29/charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, - {url = "https://files.pythonhosted.org/packages/f2/b7/e21e16c98575616f4ce09dc766dbccdac0ca119c176b184d46105e971a84/charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {url = "https://files.pythonhosted.org/packages/f2/d7/6ee92c11eda3f3c9cac1e059901092bfdf07388be7d2e60ac627527eee62/charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {url = "https://files.pythonhosted.org/packages/f4/0a/8c03913ed1eca9d831db0c28759edb6ce87af22bb55dbc005a52525a75b6/charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {url = "https://files.pythonhosted.org/packages/f6/0f/de1c4030fd669e6719277043e3b0f152a83c118dd1020cf85b51d443d04a/charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {url = "https://files.pythonhosted.org/packages/f8/ed/500609cb2457b002242b090c814549997424d72690ef3058cfdfca91f68b/charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {url = "https://files.pythonhosted.org/packages/fa/8e/2e5c742c3082bce3eea2ddd5b331d08050cda458bc362d71c48e07a44719/charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {url = "https://files.pythonhosted.org/packages/ff/d7/8d757f8bd45be079d76309248845a04f09619a7b17d6dfc8c9ff6433cac2/charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, -] -"click 8.1.3" = [ - {url = "https://files.pythonhosted.org/packages/59/87/84326af34517fca8c58418d148f2403df25303e02736832403587318e9e8/click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, - {url = "https://files.pythonhosted.org/packages/c2/f1/df59e28c642d583f7dacffb1e0965d0e00b218e0186d7858ac5233dce840/click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, +"charset-normalizer 3.2.0" = [ + {url = "https://files.pythonhosted.org/packages/08/f7/3f36bb1d0d74846155c7e3bf1477004c41243bb510f9082e785809787735/charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {url = "https://files.pythonhosted.org/packages/09/79/1b7af063e7c57a51aab7f2aaccd79bb8a694dfae668e8aa79b0b045b17bc/charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {url = "https://files.pythonhosted.org/packages/0d/dd/e598cc4e4052aa0779d4c6d5e9840d21ed238834944ccfbc6b33f792c426/charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {url = "https://files.pythonhosted.org/packages/0f/16/8d50877a7215d31f024245a0acbda9e484dd70a21794f3109a6d8eaeba99/charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {url = "https://files.pythonhosted.org/packages/13/de/10c14aa51375b90ed62232935e6c8997756178e6972c7695cdf0500a60ad/charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {url = "https://files.pythonhosted.org/packages/16/36/72dcb89fbd0ff89c556ed4a2cc79fc1b262dcc95e9082d8a5911744dadc9/charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {url = "https://files.pythonhosted.org/packages/19/9f/552f15cb1dade9332d6f0208fa3e6c21bb3eecf1c89862413ed8a3c75900/charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {url = "https://files.pythonhosted.org/packages/1b/2c/7376d101efdec15e61e9861890cf107c6ce3cceba89eb87cc416ee0528cd/charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {url = "https://files.pythonhosted.org/packages/23/59/8011a01cd8b904d08d86b4a49f407e713d20ee34155300dc698892a29f8b/charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {url = "https://files.pythonhosted.org/packages/27/19/49de2049561eca73233ba0ed7a843c184d364ef3b8886969a48d6793c830/charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {url = "https://files.pythonhosted.org/packages/28/ec/cda85baa366071c48593774eb59a5031793dd974fa26f4982829e971df6b/charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {url = "https://files.pythonhosted.org/packages/2a/53/cf0a48de1bdcf6ff6e1c9a023f5f523dfe303e4024f216feac64b6eb7f67/charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {url = "https://files.pythonhosted.org/packages/2e/29/dc806e009ddb357371458de3e93cfde78ea6e5c995df008fb6b048769457/charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {url = "https://files.pythonhosted.org/packages/2e/56/faee2b51d73e9675b4766366d925f17c253797e5839c28e1c720ec9dfbfc/charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {url = "https://files.pythonhosted.org/packages/31/e9/ae16eca3cf24a15ebfb1e36d755c884a91d61ed40de5e612de6555827729/charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {url = "https://files.pythonhosted.org/packages/3d/91/47454b64516f83c5affdcdb0398bff540185d2c37b687410d67507006624/charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {url = "https://files.pythonhosted.org/packages/45/60/1b2113fe172ac66ac4d210034e937ebe0be30bcae9a7a4d2ae5ad3c018b3/charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {url = "https://files.pythonhosted.org/packages/47/03/2cde6c5fba0115e8726272aabfca33b9d84d377cc11c4bab092fa9617d7a/charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {url = "https://files.pythonhosted.org/packages/47/71/2ce8dca3e8cf1f65c36b6317cf68382bb259966e3a208da6e5550029ab79/charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {url = "https://files.pythonhosted.org/packages/49/60/87a026215ed77184c413ebb85bafa6c0a998bdc0d1e03b894fa326f2b0f9/charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {url = "https://files.pythonhosted.org/packages/4a/46/a22af93e707f0d3c3865a2c21b4363c778239f5a6405aadd220992ac3058/charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {url = "https://files.pythonhosted.org/packages/4d/ce/8ce85a7d61bbfb5e49094040642f1558b3cf6cf2ad91bbb3616a967dea38/charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {url = "https://files.pythonhosted.org/packages/59/8e/62651b09599938e5e6d068ea723fd22d3f8c14d773c3c11c58e5e7d1eab7/charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {url = "https://files.pythonhosted.org/packages/5a/60/eeb158f11b0dee921d3e44bf37971271060b234ee60b14fa16ccc1947cbe/charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {url = "https://files.pythonhosted.org/packages/5c/f2/f3faa20684729d3910af2ee142e30432c7a46a817eadeeab87366ed87bbb/charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {url = "https://files.pythonhosted.org/packages/5d/28/f69dac79bf3986a52bc2f7dc561360c2c9c88cb0270738d86ee5a3d8a0ba/charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {url = "https://files.pythonhosted.org/packages/5f/52/e8ca03368aeecdd5c0057bd1f8ef189796d232b152e3de4244bb5a72d135/charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {url = "https://files.pythonhosted.org/packages/63/f9/14ffa4b88c1b42837dfa488b0943b7bd7f54f5b63135bf97e5001f6957e7/charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {url = "https://files.pythonhosted.org/packages/6b/b2/9d0c8fe83572a37bd66150399e289d8e96d62eca359ffa67c021b4120887/charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {url = "https://files.pythonhosted.org/packages/6b/b7/f042568ee89c378b457f73fda1642fd3b795df79c285520e4ec8a74c8b09/charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {url = "https://files.pythonhosted.org/packages/6f/14/8e317fa69483a2823ea358a77e243c37f23f536a7add1b605460269593b5/charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {url = "https://files.pythonhosted.org/packages/79/55/9aef5046a1765acacf28f80994f5a964ab4f43ab75208b1265191a11004b/charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {url = "https://files.pythonhosted.org/packages/7b/c6/7f75892d87d7afcf8ed909f3e74de1bc61abd9d77cd9aab1f449430856c5/charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {url = "https://files.pythonhosted.org/packages/80/75/eadff07a61d5602b6b19859d464bc0983654ae79114ef8aa15797b02271c/charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {url = "https://files.pythonhosted.org/packages/81/a0/96317ce912b512b7998434eae5e24b28bcc5f1680ad85348e31e1ca56332/charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {url = "https://files.pythonhosted.org/packages/85/52/77ab28e0eb07f12a02732c55abfc3be481bd46c91d5ade76a8904dfb59a4/charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {url = "https://files.pythonhosted.org/packages/89/f5/88e9dd454756fea555198ddbe6fa40d6408ec4f10ad4f0a911e0b7e471e4/charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {url = "https://files.pythonhosted.org/packages/8b/b4/e6da7d4c044852d7a08ba945868eaefa32e8c43665e746f420ef14bdb130/charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {url = "https://files.pythonhosted.org/packages/8b/c4/62b920ec8f4ec7b55cd29db894ced9a649214fd506295ac19fb786fe3c6f/charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {url = "https://files.pythonhosted.org/packages/8e/a2/77cf1f042a4697822070fd5f3f5f58fd0e3ee798d040e3863eac43e3a2e5/charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {url = "https://files.pythonhosted.org/packages/91/6e/db0e545302bf93b6dbbdc496dd192c7f8e8c3bb1584acba069256d8b51d4/charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {url = "https://files.pythonhosted.org/packages/91/e6/8fa919fc84a106e9b04109de62bdf8526899e2754a64da66e1cd50ac1faa/charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {url = "https://files.pythonhosted.org/packages/94/fc/53e12f67fff7a127fe2998de3469a9856c6c7cf67f18dc5f417df3e5e60f/charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {url = "https://files.pythonhosted.org/packages/95/d2/6f25fddfbe31448ceea236e03b70d2bbd647d4bc9148bf9665307794c4f2/charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {url = "https://files.pythonhosted.org/packages/95/d3/ed29b2d14ec9044a223dcf7c439fa550ef9c6d06c9372cd332374d990559/charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {url = "https://files.pythonhosted.org/packages/95/ee/8bb03c3518a228dc5956d1b4f46d8258639ff118881fba456b72b06561cf/charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {url = "https://files.pythonhosted.org/packages/97/f6/0bae7bdfb07ca42bf5e3e37dbd0cce02d87dd6e87ea85dff43106dfc1f48/charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {url = "https://files.pythonhosted.org/packages/99/23/7262c6a7c8a8c2ec783886166a432985915f67277bc44020d181e5c04584/charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {url = "https://files.pythonhosted.org/packages/9c/71/bf12b8e0d6e1d84ed29c3e16ea1efc47ae96487bde823130d12139c434a0/charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {url = "https://files.pythonhosted.org/packages/9c/74/10a518cd27c2c595768f70ddbd7d05c9acb01b26033f79433105ccc73308/charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {url = "https://files.pythonhosted.org/packages/a1/5c/c4ae954751f285c6170c3ef4de04492f88ddb29d218fefbdcbd9fb32ba5c/charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {url = "https://files.pythonhosted.org/packages/a4/65/057bf29660aae6ade0816457f8db4e749e5c0bfa2366eb5f67db9912fa4c/charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {url = "https://files.pythonhosted.org/packages/ad/0d/9aa61083c35dc21e75a97c0ee53619daf0e5b4fd3b8b4d8bb5e7e56ed302/charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {url = "https://files.pythonhosted.org/packages/af/3d/57e7e401f8db6dd0c56e366d69dc7366173fc549bcd533dea15f2a805000/charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {url = "https://files.pythonhosted.org/packages/af/6f/b9b1613a5b672004f08ef3c02242b07406ff36164725ff15207737601de5/charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {url = "https://files.pythonhosted.org/packages/b6/2a/03e909cad170b0df5ce8b731fecbc872b7b922a1d38da441b5062a89e53f/charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {url = "https://files.pythonhosted.org/packages/bc/85/ef25d4ba14c7653c3020a1c6e1a7413e6791ef36a0ac177efa605fc2c737/charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {url = "https://files.pythonhosted.org/packages/bf/a0/188f223c7d8b924fb9b554b9d27e0e7506fd5bf9cfb6dbacb2dfd5832b53/charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {url = "https://files.pythonhosted.org/packages/c1/92/4e30c977d2dc49ca7f84a053ccefd86097a9d1a220f3e1d1f9932561a992/charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {url = "https://files.pythonhosted.org/packages/cb/dd/dce14328e6abe0f475e606131298b4c8f628abd62a4e6f27fdfa496b9efe/charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {url = "https://files.pythonhosted.org/packages/cb/e7/5e43745003bf1f90668c7be23fc5952b3a2b9c2558f16749411c18039b36/charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {url = "https://files.pythonhosted.org/packages/cb/f9/a652e1b495345000bb7f0e2a960a82ca941db55cb6de158d542918f8b52b/charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {url = "https://files.pythonhosted.org/packages/d3/d8/50a33f82bdf25e71222a55cef146310e3e9fe7d5790be5281d715c012eae/charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {url = "https://files.pythonhosted.org/packages/e8/74/077cb06aed5d41118a5803e842943311032ab2fb94cf523be620c5be9911/charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {url = "https://files.pythonhosted.org/packages/e8/ad/ac491a1cf960ec5873c1b0e4fd4b90b66bfed4a1063933612f2da8189eb8/charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {url = "https://files.pythonhosted.org/packages/ec/a7/96835706283d63fefbbbb4f119d52f195af00fc747e67cc54397c56312c8/charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {url = "https://files.pythonhosted.org/packages/ed/21/03b4a3533b7a845ee31ed4542ca06debdcf7f12c099ae3dd6773c275b0df/charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {url = "https://files.pythonhosted.org/packages/ee/ff/997d61ca61efe90662181f494c8e9fdac14e32de26cc6cb7c7a3fe96c862/charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {url = "https://files.pythonhosted.org/packages/f0/24/7e6c604d80a8eb4378cb075647e65b7905f06645243b43c79fe4b7487ed7/charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {url = "https://files.pythonhosted.org/packages/f1/f2/ef1479e741a7ed166b8253987071b2cf2d2b727fc8fa081520e3f7c97e44/charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {url = "https://files.pythonhosted.org/packages/f2/e8/d9651a0afd4ee792207b24bd1d438ed750f1c0f29df62bd73d24ded428f9/charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {url = "https://files.pythonhosted.org/packages/f4/39/b024eb6c2a2b8136f1f48fd2f2eee22ed98fbfe3cd7ddf81dad2b8dd3c1b/charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {url = "https://files.pythonhosted.org/packages/f5/50/410da81fd67eb1becef9d633f6aae9f6e296f60126cfc3d19631f7919f76/charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {url = "https://files.pythonhosted.org/packages/f9/0d/514be8597d7a96243e5467a37d337b9399cec117a513fcf9328405d911c0/charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {url = "https://files.pythonhosted.org/packages/fd/17/0a1dba835ec37a3cc025f5c49653effb23f8cd391dea5e60a5696d639a92/charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, +] +"click 8.1.6" = [ + {url = "https://files.pythonhosted.org/packages/1a/70/e63223f8116931d365993d4a6b7ef653a4d920b41d03de7c59499962821f/click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {url = "https://files.pythonhosted.org/packages/72/bd/fedc277e7351917b6c4e0ac751853a97af261278a4c7808babafa8ef2120/click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, ] "codetiming 1.4.0" = [ {url = "https://files.pythonhosted.org/packages/ad/4e/c40bf151af20ba2748bd6ea24e484d7b6196b1056ba3a1a4ee33b6939c37/codetiming-1.4.0.tar.gz", hash = "sha256:4937bf913a2814258b87eaaa43d9a1bb24711ffd3557a9ab6934fa1fe3ba0dbc"}, @@ -1290,66 +1308,50 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -"commitizen 3.2.2" = [ - {url = "https://files.pythonhosted.org/packages/92/f1/6497bf06484f89c15d14a6bd41e38832638aa9b96fa6891209c54da00087/commitizen-3.2.2-py3-none-any.whl", hash = "sha256:1d967de9d1dc3210947fdbe280b34ac184d83dbe35661f21463cf0305fe670ef"}, - {url = "https://files.pythonhosted.org/packages/c8/28/bc979f5406ed681cd098ae337073f9f3fde70a159aa9dcb16dddf5d57dde/commitizen-3.2.2.tar.gz", hash = "sha256:62e06077e657ab6156baa8656a8d5e54db7c5c3f51feab6ea4d7b867ddeab325"}, -] -"contourpy 1.0.7" = [ - {url = "https://files.pythonhosted.org/packages/02/4d/009c25f6a3f27dab8fabd5e0f9eeb2bc2697bfcf533e9d07ee825d7fae22/contourpy-1.0.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f99e9486bf1bb979d95d5cffed40689cb595abb2b841f2991fc894b3452290e8"}, - {url = "https://files.pythonhosted.org/packages/03/a4/0119e530f7926377d283ed742b120ef5cf3f37f7c5aef5e77cfc59ebabfc/contourpy-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130230b7e49825c98edf0b428b7aa1125503d91732735ef897786fe5452b1ec2"}, - {url = "https://files.pythonhosted.org/packages/08/ce/9bfe9f028cb5a8ee97898da52f4905e0e2d9ca8203ffdcdbe80e1769b549/contourpy-1.0.7-cp38-cp38-win_amd64.whl", hash = "sha256:57119b0116e3f408acbdccf9eb6ef19d7fe7baf0d1e9aaa5381489bc1aa56556"}, - {url = "https://files.pythonhosted.org/packages/09/c4/72ffdbea5f0f2a89e544b5e91793548488b892855c170f89f4b2d8d0597e/contourpy-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a9d7587d2fdc820cc9177139b56795c39fb8560f540bba9ceea215f1f66e1566"}, - {url = "https://files.pythonhosted.org/packages/17/22/ae833bbd6ec6dc4b2134d095332dc9853d8ab81c9ced3ec18f1db1942134/contourpy-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5dd34c1ae752515318224cba7fc62b53130c45ac6a1040c8b7c1a223c46e8967"}, - {url = "https://files.pythonhosted.org/packages/26/df/b5c53b350d9f8c8672fa96a756c12445854be430469a92ca081dfc0f3585/contourpy-1.0.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b8d587cc39057d0afd4166083d289bdeff221ac6d3ee5046aef2d480dc4b503c"}, - {url = "https://files.pythonhosted.org/packages/2f/e2/02a1b7aa790981af054917154e4c35d5c00fdfaa018b77369758c08918c4/contourpy-1.0.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0f9d350b639db6c2c233d92c7f213d94d2e444d8e8fc5ca44c9706cf72193772"}, - {url = "https://files.pythonhosted.org/packages/30/99/a966df6cb28bab6090527e562682067737c5c6816ffcd7a02812e4a4ffdd/contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31a55dccc8426e71817e3fe09b37d6d48ae40aae4ecbc8c7ad59d6893569c436"}, - {url = "https://files.pythonhosted.org/packages/31/d7/247a889a9c425197aeac5e31286f3050dee63aa3466c939aa302cdb2b6cb/contourpy-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e20e5a1908e18aaa60d9077a6d8753090e3f85ca25da6e25d30dc0a9e84c2c6"}, - {url = "https://files.pythonhosted.org/packages/33/2e/1338f7b7ba17815c00507d0ace2804e37eb85a8c340fd64da5e38690c6d1/contourpy-1.0.7-cp311-cp311-win32.whl", hash = "sha256:4ee3ee247f795a69e53cd91d927146fb16c4e803c7ac86c84104940c7d2cabf0"}, - {url = "https://files.pythonhosted.org/packages/50/de/28740ce2298fee83d7ce2c935a122c8f38e46b6a904e7533ef32e7206e96/contourpy-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:95c3acddf921944f241b6773b767f1cbce71d03307270e2d769fd584d5d1092d"}, - {url = "https://files.pythonhosted.org/packages/54/d0/27e77c2028f9df32184427d73f4547d8cb1aca5087e013de1ad414dd3183/contourpy-1.0.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71b0bf0c30d432278793d2141362ac853859e87de0a7dee24a1cea35231f0d50"}, - {url = "https://files.pythonhosted.org/packages/55/31/be8029093f8b1181f59f4d1f0438a7c60babaf6230947edb387e09ed5c1e/contourpy-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc1464c97579da9f3ab16763c32e5c5d5bb5fa1ec7ce509a4ca6108b61b84fab"}, - {url = "https://files.pythonhosted.org/packages/59/65/33affcc4d0e1459eaa66f057260076fecd418aa00167f95670e1fbbf597a/contourpy-1.0.7-cp39-cp39-win32.whl", hash = "sha256:c5210e5d5117e9aec8c47d9156d1d3835570dd909a899171b9535cb4a3f32693"}, - {url = "https://files.pythonhosted.org/packages/59/f6/d1b30d463175af6316e30c45e4618aaabb4d302fd53308fa7d7a62c8f677/contourpy-1.0.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:64757f6460fc55d7e16ed4f1de193f362104285c667c112b50a804d482777edd"}, - {url = "https://files.pythonhosted.org/packages/5a/49/05e1215b1a528db06e4cb84d11aef00f0256ccd7b4a13a9132973e27aa62/contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24847601071f740837aefb730e01bd169fbcaa610209779a78db7ebb6e6a7051"}, - {url = "https://files.pythonhosted.org/packages/63/e6/15b60f93ba888278381cf0cb8f04a988c97f52c3dd235abf9a157b959d79/contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abf298af1e7ad44eeb93501e40eb5a67abbf93b5d90e468d01fc0c4451971afa"}, - {url = "https://files.pythonhosted.org/packages/70/a7/22a5fe12c38e978b941719b04cd81085877eb567165b93358193ec1b3bdc/contourpy-1.0.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce41676b3d0dd16dbcfabcc1dc46090aaf4688fd6e819ef343dbda5a57ef0161"}, - {url = "https://files.pythonhosted.org/packages/72/2e/4d50b842a8747776dcd172f9c19514800844d1e67dd1dfdb41c1f74a8b58/contourpy-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9056c5310eb1daa33fc234ef39ebfb8c8e2533f088bbf0bc7350f70a29bde1ac"}, - {url = "https://files.pythonhosted.org/packages/81/ac/44b8499389fa3d88fa38fe3301a5b7e22352f1b642cf72f25dc457e9f4b2/contourpy-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6d0f9e1d39dbfb3977f9dd79f156c86eb03e57a7face96f199e02b18e58d32a"}, - {url = "https://files.pythonhosted.org/packages/82/42/6084f3424d47cc47c3eecf926ea2718fcc3cefd5ddd599964f2bccc74b96/contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69f8ff4db108815addd900a74df665e135dbbd6547a8a69333a68e1f6e368ac2"}, - {url = "https://files.pythonhosted.org/packages/82/5b/5eaf7098f38f1b98ed56993e87dd34a5c64e6abff6d4f11394ca2091e600/contourpy-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6381fa66866b0ea35e15d197fc06ac3840a9b2643a6475c8fff267db8b9f1e69"}, - {url = "https://files.pythonhosted.org/packages/89/70/b1490db2282e28fef85a29e17ffa976efa621b24e0e36774248805125a5f/contourpy-1.0.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fd7dc0e6812b799a34f6d12fcb1000539098c249c8da54f3566c6a6461d0dbad"}, - {url = "https://files.pythonhosted.org/packages/8b/f0/eb4bce3032b612a920a044b654164040c3392d3eaa95ec482895815a0f51/contourpy-1.0.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:769eef00437edf115e24d87f8926955f00f7704bede656ce605097584f9966dc"}, - {url = "https://files.pythonhosted.org/packages/8d/cc/c8e32001298b50331348312ac2a965279ddf1c20d25e68ca596fd8a7aaa2/contourpy-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c71fdd8f1c0f84ffd58fca37d00ca4ebaa9e502fb49825484da075ac0b0b803"}, - {url = "https://files.pythonhosted.org/packages/8e/d2/38b3da76c0a654dac29f7768a870b930be9a0d35fb469acb86f8d0aaeb54/contourpy-1.0.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efb8f6d08ca7998cf59eaf50c9d60717f29a1a0a09caa46460d33b2924839dbd"}, - {url = "https://files.pythonhosted.org/packages/95/f1/7e052a263afca2a36417957b7acb56290599458b84135b504dc3ef4ca88d/contourpy-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:366a0cf0fc079af5204801786ad7a1c007714ee3909e364dbac1729f5b0849e5"}, - {url = "https://files.pythonhosted.org/packages/a5/54/307c937af1875abf17d007e738f244fe128a85f1ac82bbd8876a41b84261/contourpy-1.0.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6c180d89a28787e4b73b07e9b0e2dac7741261dbdca95f2b489c4f8f887dd810"}, - {url = "https://files.pythonhosted.org/packages/a7/40/0aed6d92734ffad008a841b43723ca0216292df27b706de0afbf7a84dff4/contourpy-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed33433fc3820263a6368e532f19ddb4c5990855e4886088ad84fd7c4e561c71"}, - {url = "https://files.pythonhosted.org/packages/af/5b/1030d528eea1ba29b18681085086ae8c255aada1d38b4809bdc39d4131e0/contourpy-1.0.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:031154ed61f7328ad7f97662e48660a150ef84ee1bc8876b6472af88bf5a9b98"}, - {url = "https://files.pythonhosted.org/packages/b1/5e/9da7dd3f5916f63b7cacb5d13a2eff294b3041cfbae5bc296991df8aa784/contourpy-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:152fd8f730c31fd67fe0ffebe1df38ab6a669403da93df218801a893645c6ccc"}, - {url = "https://files.pythonhosted.org/packages/b3/0c/0840a89d63cc0866a5118367ae1c789269e350682e6f4aceee5a1f3d608d/contourpy-1.0.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efe99298ba37e37787f6a2ea868265465410822f7bea163edcc1bd3903354ea9"}, - {url = "https://files.pythonhosted.org/packages/b4/9b/6edb9d3e334a70a212f66a844188fcb57ddbd528cbc3b1fe7abfc317ddd7/contourpy-1.0.7.tar.gz", hash = "sha256:d8165a088d31798b59e91117d1f5fc3df8168d8b48c4acc10fc0df0d0bdbcc5e"}, - {url = "https://files.pythonhosted.org/packages/b6/4b/18a8a0c4d4f935d3711fe1325d4f0b5277886bcef01ced6ecc45074c3f19/contourpy-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d43960d809c4c12508a60b66cb936e7ed57d51fb5e30b513934a4a23874fae"}, - {url = "https://files.pythonhosted.org/packages/b6/b8/6894c9e851f7442ebbc054537f56021c9ebc0691799ac4b92e380f3a2712/contourpy-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:3caea6365b13119626ee996711ab63e0c9d7496f65641f4459c60a009a1f3e80"}, - {url = "https://files.pythonhosted.org/packages/c4/27/90f82ec9667b3b4fceced99e11c3519879e949ecb74ff976567cf1e5ba7d/contourpy-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ae90d5a8590e5310c32a7630b4b8618cef7563cebf649011da80874d0aa8f414"}, - {url = "https://files.pythonhosted.org/packages/c7/97/ba9ace011734cd01b63eb7d39b2cf97afbfa985b0239ab0db85bafa9b207/contourpy-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7281244c99fd7c6f27c1c6bfafba878517b0b62925a09b586d88ce750a016d2"}, - {url = "https://files.pythonhosted.org/packages/ca/37/fb73c2052d498f61c2208b5190c209534d2afe89980f6a567e2c0e946304/contourpy-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30676ca45084ee61e9c3da589042c24a57592e375d4b138bd84d8709893a1ba4"}, - {url = "https://files.pythonhosted.org/packages/cb/6c/cef46debcbe1cc2072f6367f4430e55331df5776a8d2ee9eb6b33a3d160f/contourpy-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ba9bb365446a22411f0673abf6ee1fea3b2cf47b37533b970904880ceb72f3"}, - {url = "https://files.pythonhosted.org/packages/cc/89/fae9ae6d8e9d1149bed7b0377a4ee77a40293bdd8b681212ab4af2c3fbb2/contourpy-1.0.7-cp310-cp310-win32.whl", hash = "sha256:3c184ad2433635f216645fdf0493011a4667e8d46b34082f5a3de702b6ec42e3"}, - {url = "https://files.pythonhosted.org/packages/d0/4f/ebdb24671582b56c953f79b6b1261adc0fdf6f7ec8f30cc45efefd5dbcc9/contourpy-1.0.7-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a1e97b86f73715e8670ef45292d7cc033548266f07d54e2183ecb3c87598888f"}, - {url = "https://files.pythonhosted.org/packages/d3/b1/e0151100124d28729622bf714462c76b2bce38e136215d9236863d130eb9/contourpy-1.0.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58569c491e7f7e874f11519ef46737cea1d6eda1b514e4eb5ac7dab6aa864d02"}, - {url = "https://files.pythonhosted.org/packages/d5/d6/6feb6ddca04c3459beaf126a81e5921b944300d5c926e439327590ab26fb/contourpy-1.0.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a011cf354107b47c58ea932d13b04d93c6d1d69b8b6dce885e642531f847566"}, - {url = "https://files.pythonhosted.org/packages/e0/10/12f2e41e84841a825b31d91c74f64761be470953823b87e340c898dffd92/contourpy-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7f6979d20ee5693a1057ab53e043adffa1e7418d734c1532e2d9e915b08d8ec2"}, - {url = "https://files.pythonhosted.org/packages/e3/95/08d6e4c5f53411fdc4ef48b451a6427d68ec761865436e84ab77a0d64db3/contourpy-1.0.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e96a08b62bb8de960d3a6afbc5ed8421bf1a2d9c85cc4ea73f4bc81b4910500f"}, - {url = "https://files.pythonhosted.org/packages/ea/75/3ed26ede7745109880373de515a273e6dbe43d31960279982fac6d6ddf1d/contourpy-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e927b3868bd1e12acee7cc8f3747d815b4ab3e445a28d2e5373a7f4a6e76ba1"}, - {url = "https://files.pythonhosted.org/packages/ea/d6/5be880ae773716ec35863e034d47914de5083cdd2da97fd6c22f84ec9245/contourpy-1.0.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc331c13902d0f50845099434cd936d49d7a2ca76cb654b39691974cb1e4812d"}, - {url = "https://files.pythonhosted.org/packages/ec/56/7736333adc941087b0f86db37b0dffce83fd4e35400ab86ce1bf0690d04f/contourpy-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8acf74b5d383414401926c1598ed77825cd530ac7b463ebc2e4f46638f56cce6"}, - {url = "https://files.pythonhosted.org/packages/ec/59/5eac40e348a7bf803cea221bcd27f74a49cb81667b400fdfbb680e86e7bb/contourpy-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87f4d8941a9564cda3f7fa6a6cd9b32ec575830780677932abdec7bcb61717b0"}, - {url = "https://files.pythonhosted.org/packages/ed/71/546cbcae0cc0653b33afe445a1215f8dddea86f4dd8b31834008588eb8d7/contourpy-1.0.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e9ebb4425fc1b658e13bace354c48a933b842d53c458f02c86f371cecbedecc"}, - {url = "https://files.pythonhosted.org/packages/f2/de/7ddc513caca0e287434cd389855a5d2e185c22685fb1dc6789169dd858be/contourpy-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a877ada905f7d69b2a31796c4b66e31a8068b37aa9b78832d41c82fc3e056ddd"}, - {url = "https://files.pythonhosted.org/packages/f3/a9/3640440269719283a250df109a7f91b48d657bf9c0ceb5fe950eb894ecf7/contourpy-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:5caeacc68642e5f19d707471890f037a13007feba8427eb7f2a60811a1fc1350"}, - {url = "https://files.pythonhosted.org/packages/f9/a1/d5c6350a39a2cf221236883d3c6f2b50e3ef5e4f4b7ebf06ee280521a32d/contourpy-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:60835badb5ed5f4e194a6f21c09283dd6e007664a86101431bf870d9e86266c4"}, - {url = "https://files.pythonhosted.org/packages/f9/ca/e9208ba62f5c14d950273d2d4da75aa9f3879809d6813b058514fc5dcccb/contourpy-1.0.7-cp38-cp38-win32.whl", hash = "sha256:62398c80ef57589bdbe1eb8537127321c1abcfdf8c5f14f479dbbe27d0322e66"}, - {url = "https://files.pythonhosted.org/packages/fa/56/ab73a8bab463df907ac2c2249bfee428900e2b88e28ccf5ab059c106e07c/contourpy-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38e2e577f0f092b8e6774459317c05a69935a1755ecfb621c0a98f0e3c09c9a5"}, +"commitizen 3.6.0" = [ + {url = "https://files.pythonhosted.org/packages/5d/dd/8e2a7bf66232aa054474ab83e55b03eed39f516fdb40ad7c041c475ee40d/commitizen-3.6.0.tar.gz", hash = "sha256:979f659f9fc071c675f41796bb7c56a827aacc2e312db4ec3920951211a72ce3"}, + {url = "https://files.pythonhosted.org/packages/8a/58/10bf173e15d259ff23bcaac4dc88f1eb746136e956a0a728214740047300/commitizen-3.6.0-py3-none-any.whl", hash = "sha256:4414724b306b252d08a5ae6701401c65cd53554d446c0cc4cedcae7ab8591a5a"}, +] +"contourpy 1.1.0" = [ + {url = "https://files.pythonhosted.org/packages/03/31/b03e9ea7c9ecb019e445484ca898372cebad399b07aa077c3145d0d061c1/contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, + {url = "https://files.pythonhosted.org/packages/0b/3e/8f0028495f4abcf42d4887242e42cc46ef12ef4d68827374b952c355b244/contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, + {url = "https://files.pythonhosted.org/packages/15/c4/aae3954fce0e22362cc55430d1a395bf0be5a22b40fce63edda9eb6ea339/contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, + {url = "https://files.pythonhosted.org/packages/16/09/989b982322439faa4bafffcd669e6f942b38fee897c2664c987bcd091dec/contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, + {url = "https://files.pythonhosted.org/packages/19/67/839b82a102c97bf954a2f5b537587b1eb22081c513cf85355ba40f147ded/contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, + {url = "https://files.pythonhosted.org/packages/1b/26/192990fa4d10747d59c34d9eac2da0e045ae80aff9ae8a3e8d198146f11f/contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, + {url = "https://files.pythonhosted.org/packages/1e/ea/e373bd6b790b87d51eaf1a7fb74bf60e65a8dbbc1a596405b421ef3c4a26/contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, + {url = "https://files.pythonhosted.org/packages/24/4a/28c39911ae83f3fce3aab4134d29e5460209b36f36aaac9753dd994f468f/contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, + {url = "https://files.pythonhosted.org/packages/30/af/afd3a9cf806d6364c11b13324d1e9609b1496d7a81d2f38e20089575acf4/contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, + {url = "https://files.pythonhosted.org/packages/32/c8/aa9e87941002150b1a8e7087e48da1c76290268b9fdfa3034a98a5806198/contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, + {url = "https://files.pythonhosted.org/packages/38/0a/a17e1db0648eab998cfcd8bdc9d1cd4ca3f8d9bfbd6868ac7ca869e5f290/contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, + {url = "https://files.pythonhosted.org/packages/38/6f/5382bdff9dda60cb17cef6dfa2bad3e6edacffd5c2243e282e851c63f721/contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, + {url = "https://files.pythonhosted.org/packages/42/99/144a55b0de26710116438716e908e553eb932f927743927181d8d03441f6/contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, + {url = "https://files.pythonhosted.org/packages/44/b4/2bcb2f8afcb7a4652af0fbfa47d5f01ae599c4b35af6f89c1f33c9c56fa3/contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, + {url = "https://files.pythonhosted.org/packages/72/60/83f837ac6c935be5c7a0dd74943f0ebe9f72d64ac2bf53de4440fee42728/contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, + {url = "https://files.pythonhosted.org/packages/80/4a/884f93efc62c8709354f6553063e87d9a29b080944d994af2098ad6fafb3/contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, + {url = "https://files.pythonhosted.org/packages/83/8f/96308fb975ef0a177f9d38bfe98f1dc3aadee1d8cbc22172bc4085a1e439/contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, + {url = "https://files.pythonhosted.org/packages/88/e3/696e96ee197b1f60242d12b215332af9fc1961c81990c8b5630b89b34ce6/contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, + {url = "https://files.pythonhosted.org/packages/90/21/79c7121aefa4e6dcfede1a54ca0911a6ca32e9c1d15615a164017e4e75a0/contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, + {url = "https://files.pythonhosted.org/packages/91/2f/53150a2900f48e900088a1ce6ee40bfcff2141ff3832816d25b905738cb5/contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, + {url = "https://files.pythonhosted.org/packages/92/4d/fe7a7098d98a8889252105193f5e869532f9dc37e39d917a82d2b0b874a1/contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, + {url = "https://files.pythonhosted.org/packages/94/0a/5eb57dd395fade977786b2d2c98c2bee8234358794be44422fe58a719d42/contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, + {url = "https://files.pythonhosted.org/packages/a2/83/9e5b42071761f5eb68da6f9d5250d59d81fc52ef80d0acd07b0a3098f23c/contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, + {url = "https://files.pythonhosted.org/packages/a4/67/ab422872caf036e95c764b25163619da59c35e34cc70c166c0250a05900e/contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, + {url = "https://files.pythonhosted.org/packages/a5/d6/80258c2759bd34abe267b5d3bc6300f7105aa70181b99d531283f7e7c79e/contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, + {url = "https://files.pythonhosted.org/packages/a7/3b/632c003e1dfbc82d32c0466762f2d2cf139d26032626dc65944e38d0e5b9/contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, + {url = "https://files.pythonhosted.org/packages/a7/50/2caa9aeffff75acf9f9115ce154b9d103fc0fad5f5585c7cb8fc707059fc/contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, + {url = "https://files.pythonhosted.org/packages/aa/55/02c6d24804592b862b38a85c9b3283edc245081390a520ccd11697b6b24f/contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, + {url = "https://files.pythonhosted.org/packages/aa/d2/9a50ca9e71aa8f6d4d2115a1c3da205bf688dad43229e8ff3043767c7ce4/contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, + {url = "https://files.pythonhosted.org/packages/b2/e5/6a7a6f2bdfcc0a235adf6f40be4f0ab5d23e65b766af1b2570c26b33d3b3/contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, + {url = "https://files.pythonhosted.org/packages/b4/d8/c88ede6ab07b5d4a3f40a2ba663fcf619d19da7d1c5ce188f37bd4e592b6/contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, + {url = "https://files.pythonhosted.org/packages/b6/dc/c1344ecb08ceb2724e058f8f5c1546fb4e4734fdc5866e2daa8dc495193b/contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, + {url = "https://files.pythonhosted.org/packages/cf/bd/4608b7b304353a47dbf2726c06d3e61ad1dbc452d934c15d8d6d6f4ba045/contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, + {url = "https://files.pythonhosted.org/packages/d1/c8/7cbe42c5c171c5fc03a51699e813f019b7af72b920a214c4aeaf4cd0d378/contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, + {url = "https://files.pythonhosted.org/packages/d8/23/8d968922459b1c8a2c6ffca28fac00324b06b3a0633be2a39b0b1c3f84ab/contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, + {url = "https://files.pythonhosted.org/packages/dd/1f/b0942d6f124da8c3e944f755b1ba536621eb38d858d1a164c3192ee2c208/contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, + {url = "https://files.pythonhosted.org/packages/e7/65/ea7fb46a70b76a6f8767e3ff9a68630b64f2813f99d488583b90d96eb19d/contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, + {url = "https://files.pythonhosted.org/packages/f4/41/674384fc46e8a45f4e170cadd1796cf9b7266a45c57df80db4a2dda12301/contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, + {url = "https://files.pythonhosted.org/packages/ff/dd/5d44bc3a5993c25b75b7aef4f810ebd74ef9057dd2a4eab37eba240ee401/contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, ] "cryptography 41.0.3" = [ {url = "https://files.pythonhosted.org/packages/00/d7/51516ad1da024d331ed2f4f0f8836ec8373e4a6b3e3ac190753f1cd6fffe/cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"}, @@ -1399,9 +1401,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/f4/99/b65528ecd9507241c0f49dad313e711d03277ce923aa2de13a93d106cc29/debugpy-1.6.6-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:78739f77c58048ec006e2b3eb2e0cd5a06d5f48c915e2fc7911a337354508110"}, {url = "https://files.pythonhosted.org/packages/f9/35/325e53d2a75b28777c28e790f84ea1ee45e1ecc00ae76550a53872a541f9/debugpy-1.6.6-py2.py3-none-any.whl", hash = "sha256:be596b44448aac14eb3614248c91586e2bc1728e020e82ef3197189aae556115"}, ] -"decli 0.6.0" = [ - {url = "https://files.pythonhosted.org/packages/56/2f/3fc5689255b35918179fee6319fab19e68f8394bb570b963c6afad6265be/decli-0.6.0.tar.gz", hash = "sha256:2915a55525ef2b1a0ce88b8ccba62ac22df5b6ff3ed2094448e0f951f08e7ba5"}, - {url = "https://files.pythonhosted.org/packages/6c/ef/e43cb1fc03184b14e1851b1dcf8c33bffda2b90ace6fa1414964992757dc/decli-0.6.0-py3-none-any.whl", hash = "sha256:d5ed1d509f5a6cf765a4d7350f7ffb0be0c1770840cbd38b05fb0aab642645e8"}, +"decli 0.6.1" = [ + {url = "https://files.pythonhosted.org/packages/2e/9c/b76485e6120795c8b632707bafb4a9a4a2b75584ca5277e3e175c5d02225/decli-0.6.1.tar.gz", hash = "sha256:ed88ccb947701e8e5509b7945fda56e150e2ac74a69f25d47ac85ef30ab0c0f0"}, + {url = "https://files.pythonhosted.org/packages/ac/0a/cd94a388fa19a7c512009dc879939591221eae603c1c2ed2e73fa5378961/decli-0.6.1-py3-none-any.whl", hash = "sha256:7815ac58617764e1a200d7cadac6315fcaacc24d727d182f9878dd6378ccf869"}, ] "decorator 5.1.1" = [ {url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -1424,9 +1426,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/3d/5d/0413a31d184a20c763ad741cc7852a659bf15094c24840c5bdd1754765cd/et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, {url = "https://files.pythonhosted.org/packages/96/c2/3dd434b0108730014f1b96fd286040dc3bcb70066346f7e01ec2ac95865f/et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, ] -"exceptiongroup 1.1.1" = [ - {url = "https://files.pythonhosted.org/packages/61/97/17ed81b7a8d24d8f69b62c0db37abbd8c0042d4b3fc429c73dab986e7483/exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {url = "https://files.pythonhosted.org/packages/cc/38/57f14ddc8e8baeddd8993a36fe57ce7b4ba174c35048b9a6d270bb01e833/exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, +"exceptiongroup 1.1.2" = [ + {url = "https://files.pythonhosted.org/packages/55/09/5d2079ecab0ca483e527a1707a483562bdc17abf829d3e73f0c1a73b61c7/exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {url = "https://files.pythonhosted.org/packages/fe/17/f43b7c9ccf399d72038042ee72785c305f6c6fdc6231942f8ab99d995742/exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, ] "executing 1.2.0" = [ {url = "https://files.pythonhosted.org/packages/28/3c/bc3819dd8b1a1588c9215a87271b6178cc5498acaa83885211f5d4d9e693/executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, @@ -1443,9 +1445,41 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 "flatdict 4.0.1" = [ {url = "https://files.pythonhosted.org/packages/3e/0d/424de6e5612f1399ff69bf86500d6a62ff0a4843979701ae97f120c7f1fe/flatdict-4.0.1.tar.gz", hash = "sha256:cd32f08fd31ed21eb09ebc76f06b6bd12046a24f77beb1fd0281917e47f26742"}, ] -"fonttools 4.39.3" = [ - {url = "https://files.pythonhosted.org/packages/16/07/1c7547e27f559ec078801d522cc4d5127cdd4ef8e831c8ddcd9584668a07/fonttools-4.39.3-py3-none-any.whl", hash = "sha256:64c0c05c337f826183637570ac5ab49ee220eec66cf50248e8df527edfa95aeb"}, - {url = "https://files.pythonhosted.org/packages/39/d7/ab05ae34dd57dd657e492d95ce7ec6bfebfb3bfcdc7316660ac5a13fcfee/fonttools-4.39.3.zip", hash = "sha256:9234b9f57b74e31b192c3fc32ef1a40750a8fbc1cd9837a7b7bfc4ca4a5c51d7"}, +"fonttools 4.42.0" = [ + {url = "https://files.pythonhosted.org/packages/0d/37/08eba3b620278100b01d01a023483e4ce69086f897fc8ff815a47eb667a2/fonttools-4.42.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fae4e801b774cc62cecf4a57b1eae4097903fced00c608d9e2bc8f84cd87b54a"}, + {url = "https://files.pythonhosted.org/packages/11/18/aa29a68963fcb3f997e68f80dcad15801cb9428bec7451f27df50095ce1f/fonttools-4.42.0-cp38-cp38-win32.whl", hash = "sha256:4655c480a1a4d706152ff54f20e20cf7609084016f1df3851cce67cef768f40a"}, + {url = "https://files.pythonhosted.org/packages/23/f6/d0b88fcefdcec2e51a9dc698741c551c88214a5188cabf172c49df8ac26d/fonttools-4.42.0-cp311-cp311-win32.whl", hash = "sha256:83b98be5d291e08501bd4fc0c4e0f8e6e05b99f3924068b17c5c9972af6fff84"}, + {url = "https://files.pythonhosted.org/packages/2a/26/2ccd772ae7a771d0bb5a2b23554713b87f93001b72e88f118e8a693eb51a/fonttools-4.42.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c36c904ce0322df01e590ba814d5d69e084e985d7e4c2869378671d79662a7d4"}, + {url = "https://files.pythonhosted.org/packages/2c/bd/e6b6c3c25c29fd732e9aba29530bd36970cafd27596fa5bab8c6b568ccb7/fonttools-4.42.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd2363ea7728496827658682d049ffb2e98525e2247ca64554864a8cc945568"}, + {url = "https://files.pythonhosted.org/packages/32/9a/6fe79bfc6b23f2d5e24a7d9d3402df34128b5df939777d57b94ac8251fa5/fonttools-4.42.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0a1466713e54bdbf5521f2f73eebfe727a528905ff5ec63cda40961b4b1eea95"}, + {url = "https://files.pythonhosted.org/packages/3c/19/5e9587719c06568c9aff7ee8715af10b131caa05ef61674da3670d6c2457/fonttools-4.42.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:703101eb0490fae32baf385385d47787b73d9ea55253df43b487c89ec767e0d7"}, + {url = "https://files.pythonhosted.org/packages/48/9a/f2992ef20435a8660462246d02047d0a5b550048e676d0a31cf77e2e3b7d/fonttools-4.42.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c8bf88f9e3ce347c716921804ef3a8330cb128284eb6c0b6c4b3574f3c580023"}, + {url = "https://files.pythonhosted.org/packages/49/af/1fae921d2c406691314e0e285cab4a925b543b3b9d49d91c79546cba237c/fonttools-4.42.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:685a4dd6cf31593b50d6d441feb7781a4a7ef61e19551463e14ed7c527b86f9f"}, + {url = "https://files.pythonhosted.org/packages/50/d1/9b33abce8c6484ed164c6c548912079e02f8935ca3a4b65d5013ddf7bc0c/fonttools-4.42.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9c456d1f23deff64ffc8b5b098718e149279abdea4d8692dba69172fb6a0d597"}, + {url = "https://files.pythonhosted.org/packages/52/65/aaa3d2b7a292d93cc2cf1c534d03ba3f744e480f15b3b2ab6ad68189f7ee/fonttools-4.42.0-cp311-cp311-win_amd64.whl", hash = "sha256:e35bed436726194c5e6e094fdfb423fb7afaa0211199f9d245e59e11118c576c"}, + {url = "https://files.pythonhosted.org/packages/56/f8/c75c747124c7a57a020a24d8e627a0c75648209c6fa7a06912991f6a9d70/fonttools-4.42.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ece1886d12bb36c48c00b2031518877f41abae317e3a55620d38e307d799b7e"}, + {url = "https://files.pythonhosted.org/packages/72/47/4f577e02faf96949c2bf66449e1febb5a3f914814ba92c3481ce16f2c07d/fonttools-4.42.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9b55d2a3b360e0c7fc5bd8badf1503ca1c11dd3a1cd20f2c26787ffa145a9c7"}, + {url = "https://files.pythonhosted.org/packages/76/91/6fba2df21ee367ffe50ef096a4b6984d1580cfcbcacde777c4753e76f0e4/fonttools-4.42.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0df8ef75ba5791e873c9eac2262196497525e3f07699a2576d3ab9ddf41cb619"}, + {url = "https://files.pythonhosted.org/packages/87/61/f50ab3237b0cbf2b0be12274227f912d30f94e2b93fb8bae92c91107eee8/fonttools-4.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58c1165f9b2662645de9b19a8c8bdd636b36294ccc07e1b0163856b74f10bafc"}, + {url = "https://files.pythonhosted.org/packages/8a/74/9177b5d0ac31a0985bf96e3de44e2f18258f41a43f6f5954a6486748547d/fonttools-4.42.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:150122ed93127a26bc3670ebab7e2add1e0983d30927733aec327ebf4255b072"}, + {url = "https://files.pythonhosted.org/packages/8e/8a/2780329735ae21d7624f174616407aea106e19b149c46e7efbf2073d62f9/fonttools-4.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:57b68eab183fafac7cd7d464a7bfa0fcd4edf6c67837d14fb09c1c20516cf20b"}, + {url = "https://files.pythonhosted.org/packages/91/0e/8303b815e3bcc211a2da3e4427748cb963247594837dceb051e28d4e4b66/fonttools-4.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40673b2e927f7cd0819c6f04489dfbeb337b4a7b10fc633c89bf4f34ecb9620"}, + {url = "https://files.pythonhosted.org/packages/92/29/a7ad80d750558337aa235a7d4d3402a8a84521d3f5676c6d4f7fa5e6ea01/fonttools-4.42.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:329341ba3d86a36e482610db56b30705384cb23bd595eac8cbb045f627778e9d"}, + {url = "https://files.pythonhosted.org/packages/96/cd/5be911b001b36e23697d8aad7b84978a19ea6d28cf763adb375f07085308/fonttools-4.42.0-py3-none-any.whl", hash = "sha256:dfe7fa7e607f7e8b58d0c32501a3a7cac148538300626d1b930082c90ae7f6bd"}, + {url = "https://files.pythonhosted.org/packages/a2/63/d07aebf9960aaff8a2f3d98653be7ccc649e54afce801f0b7327fc5c6085/fonttools-4.42.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01cfe02416b6d416c5c8d15e30315cbcd3e97d1b50d3b34b0ce59f742ef55258"}, + {url = "https://files.pythonhosted.org/packages/a8/7e/7e452ce27201f650a30c04463a300af597f083c4abce209a2ae1cdda3f4f/fonttools-4.42.0-cp310-cp310-win32.whl", hash = "sha256:b8600ae7dce6ec3ddfb201abb98c9d53abbf8064d7ac0c8a0d8925e722ccf2a0"}, + {url = "https://files.pythonhosted.org/packages/bd/8b/b9325804c73b037933beef888da5686b25d20524a0a8836216ddca3f8626/fonttools-4.42.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:10dac980f2b975ef74532e2a94bb00e97a95b4595fb7f98db493c474d5f54d0e"}, + {url = "https://files.pythonhosted.org/packages/c0/46/94ee6ba732a9e10977919ad23b5477e8ae14deb772d1c68ab150b03299cc/fonttools-4.42.0.tar.gz", hash = "sha256:614b1283dca88effd20ee48160518e6de275ce9b5456a3134d5f235523fc5065"}, + {url = "https://files.pythonhosted.org/packages/c0/fe/08dc05d73ff063776fb2d5eddb1fe4978e5e146e25e49154f83044e1f75a/fonttools-4.42.0-cp39-cp39-win32.whl", hash = "sha256:f0290ea7f9945174bd4dfd66e96149037441eb2008f3649094f056201d99e293"}, + {url = "https://files.pythonhosted.org/packages/c7/5c/693d01ad33704976c3b39e097da78ccfaf8a6f494b63ab18263d5a200a54/fonttools-4.42.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48e82d776d2e93f88ca56567509d102266e7ab2fb707a0326f032fe657335238"}, + {url = "https://files.pythonhosted.org/packages/cd/b1/8ba85c3d50562438d5991f5698d46b66dcadd43d230c7ba72edbd0c96ce8/fonttools-4.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:ae7df0ae9ee2f3f7676b0ff6f4ebe48ad0acaeeeaa0b6839d15dbf0709f2c5ef"}, + {url = "https://files.pythonhosted.org/packages/d3/e2/0dc07c946b98a036b25b97899bf38d51aef24f793b80ac686f07f817b7ac/fonttools-4.42.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f81ed9065b4bd3f4f3ce8e4873cd6a6b3f4e92b1eddefde35d332c6f414acc3"}, + {url = "https://files.pythonhosted.org/packages/dd/f3/8f7471c92d235e2bbd0a96829d136040e07e0672089d83a55468d40a3385/fonttools-4.42.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae881e484702efdb6cf756462622de81d4414c454edfd950b137e9a7352b3cb9"}, + {url = "https://files.pythonhosted.org/packages/e7/d3/af9167ba077c2b8f4b1468e635dbf53298efbe38c89dab6f1e5f3f6db44d/fonttools-4.42.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d54e600a2bcfa5cdaa860237765c01804a03b08404d6affcd92942fa7315ffba"}, + {url = "https://files.pythonhosted.org/packages/e8/e0/d1a65471a945b0764ee17ce4afb59af8761b33c4418ca35687639315fcb7/fonttools-4.42.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3fb2a69870bfe143ec20b039a1c8009e149dd7780dd89554cc8a11f79e5de86b"}, + {url = "https://files.pythonhosted.org/packages/ef/1c/08385ebd1cb58e89e1d30616684b492153cab32849d67e21d27298df5ff6/fonttools-4.42.0-cp38-cp38-win_amd64.whl", hash = "sha256:6bd7e4777bff1dcb7c4eff4786998422770f3bfbef8be401c5332895517ba3fa"}, + {url = "https://files.pythonhosted.org/packages/fb/a9/05d2539c0db482964df238d29d306886030c26102634447b2c9ad44b3b6b/fonttools-4.42.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27ec3246a088555629f9f0902f7412220c67340553ca91eb540cf247aacb1983"}, + {url = "https://files.pythonhosted.org/packages/fd/b4/8d2bcbc54ffea7b809406988d60cea7a181621b8e96e40de4e2b1ea3e8b9/fonttools-4.42.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2d6dc3fa91414ff4daa195c05f946e6a575bd214821e26d17ca50f74b35b0fe4"}, ] "gdal 3.6.2" = [ {url = "https://files.pythonhosted.org/packages/49/4f/174743caf64d1999c46ab2ee72b2cb0d77a47bd7ed04f954f863e35a25fd/GDAL-3.6.2.tar.gz", hash = "sha256:a167cde1813707d91a938dad1a22f280f5ad28c45980d42e948fb8c59f890f5a"}, @@ -1556,9 +1590,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/8b/e1/43beb3d38dba6cb420cefa297822eac205a277ab43e5ba5d5c46faf96438/idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, {url = "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, ] -"importlib-metadata 6.6.0" = [ - {url = "https://files.pythonhosted.org/packages/0b/1f/9de392c2b939384e08812ef93adf37684ec170b5b6e7ea302d9f163c2ea0/importlib_metadata-6.6.0.tar.gz", hash = "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705"}, - {url = "https://files.pythonhosted.org/packages/30/bb/bf2944b8b88c65b797acc2c6a2cb0fb817f7364debf0675792e034013858/importlib_metadata-6.6.0-py3-none-any.whl", hash = "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed"}, +"importlib-metadata 6.8.0" = [ + {url = "https://files.pythonhosted.org/packages/33/44/ae06b446b8d8263d712a211e959212083a5eda2bf36d57ca7415e03f6f36/importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {url = "https://files.pythonhosted.org/packages/cc/37/db7ba97e676af155f5fcb1a35466f446eadc9104e25b83366e8088c9c926/importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, ] "iniconfig 2.0.0" = [ {url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -1568,17 +1602,17 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/23/b2/c972cc266b0ba8508b42dab7f5dea1be03ea32213258441bf1b00baca555/ipdb-0.13.11.tar.gz", hash = "sha256:c23b6736f01fd4586cc2ecbebdf79a5eb454796853e1cd8f2ed3b7b91d4a3e93"}, {url = "https://files.pythonhosted.org/packages/65/49/381dbeff0a35b2f96f8847c4ca7ddac260762b3edb74722cfbcae24aa0b2/ipdb-0.13.11-py3-none-any.whl", hash = "sha256:f74c2f741c18b909eaf89f19fde973f745ac721744aa1465888ce45813b63a9c"}, ] -"ipython 8.13.2" = [ - {url = "https://files.pythonhosted.org/packages/d5/16/2161195dd2f617933f8ada5bc567eb47ddbb7c99dc16ffa3e729dd25a1a0/ipython-8.13.2-py3-none-any.whl", hash = "sha256:ffca270240fbd21b06b2974e14a86494d6d29290184e788275f55e0b55914926"}, - {url = "https://files.pythonhosted.org/packages/ee/ad/d908d8aac3e8ac8aec2b89103b6c10f289544623879be0e249de3e508123/ipython-8.13.2.tar.gz", hash = "sha256:7dff3fad32b97f6488e02f87b970f309d082f758d7b7fc252e3b19ee0e432dbb"}, +"ipython 8.14.0" = [ + {url = "https://files.pythonhosted.org/packages/52/d1/f70cdafba20030cbc1412d7a7d6a89c5035071835cc50e47fc5ed8da553c/ipython-8.14.0-py3-none-any.whl", hash = "sha256:248aca623f5c99a6635bc3857677b7320b9b8039f99f070ee0d20a5ca5a8e6bf"}, + {url = "https://files.pythonhosted.org/packages/fa/cb/2b777f625cca49b4a747b0dfe9986c21f5b46e5b548176903a914cdbec55/ipython-8.14.0.tar.gz", hash = "sha256:1d197b907b6ba441b692c48cf2a3a2de280dc0ac91a3405b39349a50272ca0a1"}, ] "itsdangerous 2.1.2" = [ {url = "https://files.pythonhosted.org/packages/68/5f/447e04e828f47465eeab35b5d408b7ebaaaee207f48b7136c5a7267a30ae/itsdangerous-2.1.2-py3-none-any.whl", hash = "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44"}, {url = "https://files.pythonhosted.org/packages/7f/a1/d3fb83e7a61fa0c0d3d08ad0a94ddbeff3731c05212617dff3a94e097f08/itsdangerous-2.1.2.tar.gz", hash = "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a"}, ] -"jedi 0.18.2" = [ - {url = "https://files.pythonhosted.org/packages/15/02/afd43c5066de05f6b3188f3aa74136a3289e6c30e7a45f351546cab0928c/jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, - {url = "https://files.pythonhosted.org/packages/6d/60/4acda63286ef6023515eb914543ba36496b8929cb7af49ecce63afde09c6/jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, +"jedi 0.19.0" = [ + {url = "https://files.pythonhosted.org/packages/57/38/4ac6f712c308de92af967142bd67e9d27e784ea5a3524c9e84f33507d82f/jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {url = "https://files.pythonhosted.org/packages/8e/46/7e3ae3aa2dcfcffc5138c6cef5448523218658411c84a2000bf75c8d3ec1/jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, ] "jinja2 3.1.2" = [ {url = "https://files.pythonhosted.org/packages/7a/ff/75c28576a1d900e87eb6335b063fab47a8ef3c8b4d88524c4bf78f670cce/Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, @@ -1654,217 +1688,233 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/f6/e8/194a4b4eee0990a648711bfb769a7110d10fd8d8b370a0464cb3d1060381/kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, {url = "https://files.pythonhosted.org/packages/f8/f4/724d454e95c7e9be6a05f1da3fb85251b5dbb8c3b7d06bdc61d56b16035a/kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, ] -"lxml 4.9.2" = [ - {url = "https://files.pythonhosted.org/packages/00/d9/d2ae5c7032157798df585321fc190b51062eb9970edb017ef15127ac899b/lxml-4.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457"}, - {url = "https://files.pythonhosted.org/packages/06/5a/e11cad7b79f2cf3dd2ff8f81fa8ca667e7591d3d8451768589996b65dec1/lxml-4.9.2.tar.gz", hash = "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67"}, - {url = "https://files.pythonhosted.org/packages/08/14/bf49d3676262c31343d27f8d2b8553dd0ca62d0d7a7a44faf9d98f52a10b/lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c"}, - {url = "https://files.pythonhosted.org/packages/0a/69/4e78395c575852fcccb493203b4ac5923f18c8503fcc2cb232a27828d3ca/lxml-4.9.2-cp36-cp36m-win32.whl", hash = "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5"}, - {url = "https://files.pythonhosted.org/packages/12/88/9b4be59b4e9d99762bb6301ee712202eaafc79b6db46fba613e854419759/lxml-4.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f"}, - {url = "https://files.pythonhosted.org/packages/12/fd/5d21bb2d12b5d2a738ee7dd2700c33ebbab0604a356691bebe0a8cd18970/lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a"}, - {url = "https://files.pythonhosted.org/packages/13/10/df73ec75b58f62c28dd82e43e33bf74f5ed1fd2955af287c01304b17d364/lxml-4.9.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53"}, - {url = "https://files.pythonhosted.org/packages/1a/05/3d577c89508572e151fb450d475c6953c07e57bc87c7c1093f0a07689bee/lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746"}, - {url = "https://files.pythonhosted.org/packages/1f/0c/37beca6894c43a79b365146ca806fbd833ac3ec0219617476a92bf3b96c3/lxml-4.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38"}, - {url = "https://files.pythonhosted.org/packages/20/5b/caca461e172d696b151e50a182c6111d192175571e34f483a477122c5d79/lxml-4.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9"}, - {url = "https://files.pythonhosted.org/packages/22/3f/df1810ea8396b85e875c90cb38a5b0a468a9a6247ed3def782c5d468ddd7/lxml-4.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726"}, - {url = "https://files.pythonhosted.org/packages/23/9e/d7dc52daaf44818c7cd0f4caea5eaa73ec2d23b3395987762dec9c736695/lxml-4.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184"}, - {url = "https://files.pythonhosted.org/packages/27/39/108ba389da9daa7224803ff2200fefa72e133534927d492838c4bd343186/lxml-4.9.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0"}, - {url = "https://files.pythonhosted.org/packages/29/64/a12d2f9e2c547801563c726ea03321417dad1195ad68857ce757cca96f52/lxml-4.9.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1"}, - {url = "https://files.pythonhosted.org/packages/29/9e/22767c3d192f73a0465dcb3c9fa9ac2c0ca44ff92f29329488718e14d1b3/lxml-4.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2"}, - {url = "https://files.pythonhosted.org/packages/33/96/b85767e0b7e91a5495031913cec6bf6d38627891b2d46949bed6e60678c2/lxml-4.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1"}, - {url = "https://files.pythonhosted.org/packages/38/3c/0fdab49d310d931a8b81e2795037fbd5789d1bce12a1795b9cbc87bc1ceb/lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380"}, - {url = "https://files.pythonhosted.org/packages/39/54/ddafeec12c7c5d36a322ecc251f981dc8a7e5dff1d3a901646230a4b0838/lxml-4.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f"}, - {url = "https://files.pythonhosted.org/packages/3b/a0/4977685b1e1414933765e404d9f3f4cf57ccbc4000af44dbdb951c165ea7/lxml-4.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7"}, - {url = "https://files.pythonhosted.org/packages/3c/e9/da84a6a2da41c899d0472e5ced1f71d4ae61b7a03251d0cffe1d09143764/lxml-4.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7"}, - {url = "https://files.pythonhosted.org/packages/3e/ab/dbab52317bd9f9a6aba4c4dbedf2ca8e81f0b79da62fde7cb1ebf11ed846/lxml-4.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab"}, - {url = "https://files.pythonhosted.org/packages/3f/2f/8379eb85d10f06c01cab2b8a93fe676b6d7234e43441b17d348fdc735420/lxml-4.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f"}, - {url = "https://files.pythonhosted.org/packages/3f/6c/d120c9de2f0079300c9cf86f3bb0e527b6f7a57f0bdc3fce37d67d840212/lxml-4.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a"}, - {url = "https://files.pythonhosted.org/packages/41/6e/50e5df3cdf4fce28c71ff028560fab5f739150697ba9d1fc76546e282d51/lxml-4.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4"}, - {url = "https://files.pythonhosted.org/packages/46/f5/3f61ae971a41c993ce3365e92354090ebf661426cb96fdc826108a9c31a2/lxml-4.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4"}, - {url = "https://files.pythonhosted.org/packages/48/7c/c5c2aa0b2426b37a21eb689d4195388d881155342bdb6703c01b8fb55fbb/lxml-4.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b"}, - {url = "https://files.pythonhosted.org/packages/4b/24/300d0fd5130cf55e5bbab2c53d339728370cb4ac12ca80a4f421c2e228eb/lxml-4.9.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45"}, - {url = "https://files.pythonhosted.org/packages/4b/91/86455b609d7e2becb347dc5f337a8c5c845a4cbc0f1028d1b67e7966c562/lxml-4.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24"}, - {url = "https://files.pythonhosted.org/packages/57/2b/16c83248ea7793abfefd1730d844263ba424d33c1509e72df347e61522ba/lxml-4.9.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50"}, - {url = "https://files.pythonhosted.org/packages/5f/50/c53d63ca4feac0040f1cfab26217b5bdbcdb195cdc3461bd7030709bca59/lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7"}, - {url = "https://files.pythonhosted.org/packages/60/15/23b52d805ce834c657d7b4d52a399e47d43bbf3ab7dcc50357e41f13cd3d/lxml-4.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947"}, - {url = "https://files.pythonhosted.org/packages/63/fd/5884bb71d71fd20abd7decdf527f1dfb0e757f8a1e7b5c515b1e7650916c/lxml-4.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03"}, - {url = "https://files.pythonhosted.org/packages/64/79/cc63b632c8dab0e9b0884da1fdb1cfa012f93b1ed50dcf334a65022d982f/lxml-4.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140"}, - {url = "https://files.pythonhosted.org/packages/64/fe/111c096bdc4ebe05a2caad6d19ac9ece84075f9cfe99c3d21003cb5ef9f0/lxml-4.9.2-cp35-cp35m-win32.whl", hash = "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df"}, - {url = "https://files.pythonhosted.org/packages/67/4d/bc99a9b61bae76bf11eef16eb1edf42e4638c6e002bc3c07c791c8cbd068/lxml-4.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3"}, - {url = "https://files.pythonhosted.org/packages/6a/ce/b57517af12ba9c4e850f44fe51f35f3c9911007361d6e8b725e9193264a3/lxml-4.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5"}, - {url = "https://files.pythonhosted.org/packages/6d/b9/44f7e3b8a27eeef778188c50ad11feb46c7572f06227b4842188730591db/lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e"}, - {url = "https://files.pythonhosted.org/packages/6e/2c/3db7353011aff7f979be467ec1b9c72752e86e46f5b0fe1c3e1763f63a1f/lxml-4.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5"}, - {url = "https://files.pythonhosted.org/packages/71/0b/fc24380449979b0a0705c4c0ed635b2fbcd72e0d4424476bf750265749fc/lxml-4.9.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e"}, - {url = "https://files.pythonhosted.org/packages/76/d0/1d6b0b1137709691244943b8dbb18cc4810cf9a902d902eaa6f303fbe48e/lxml-4.9.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a"}, - {url = "https://files.pythonhosted.org/packages/83/d5/9b6beb833925ed3423e2a8f6e138bcc8ee98d399e5646a8f2ed97f71d4cf/lxml-4.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9"}, - {url = "https://files.pythonhosted.org/packages/87/c9/9947bbff03f1ed07c4401f732630a9c34085bc7c179f7a8d7d9d61114f06/lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f"}, - {url = "https://files.pythonhosted.org/packages/89/9c/be3ebeb6053c6625c0497f282e0d8acc36c309212d47201e9cb1198ffb54/lxml-4.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4"}, - {url = "https://files.pythonhosted.org/packages/89/d8/4c2d295e65301cffae78978fb54272d76ebe6950d0561c0b40ff662a4a75/lxml-4.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e"}, - {url = "https://files.pythonhosted.org/packages/8b/4b/ea4db497722076e4352f8d43eae4f0064c2072897383c92bb19b3e50c7cf/lxml-4.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889"}, - {url = "https://files.pythonhosted.org/packages/95/2c/b6326b95954fcd2d1133ff60e7c10af8d7dd17b52d09eaa6db828fd13afb/lxml-4.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7"}, - {url = "https://files.pythonhosted.org/packages/95/79/450c6284d26f7f2abd1ec3506f494b6d848eed3ff7233be60220fef70c85/lxml-4.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf"}, - {url = "https://files.pythonhosted.org/packages/96/57/1f945e3f8068a5b2a299a10946dfe0c192c701bd707d2bada0e81c0067eb/lxml-4.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3"}, - {url = "https://files.pythonhosted.org/packages/98/9c/fbbbcafca14a8711c8a036375389cb8c5b1d40185357ae6fbb62d9658d41/lxml-4.9.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c"}, - {url = "https://files.pythonhosted.org/packages/9e/86/e1f135e123344e32dd9bfcbf420dcc2566fa3894fda78b27f981e26c170d/lxml-4.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd"}, - {url = "https://files.pythonhosted.org/packages/9f/ec/28eb72dd6365a74a6e8ea4b459ab6f02b7dfb0540c24d9b27eb95e6793b9/lxml-4.9.2-cp39-cp39-win32.whl", hash = "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1"}, - {url = "https://files.pythonhosted.org/packages/a7/e4/9a4cd8e7e18ba46a25b945fc59b5c395d1c5ddcddea5ad85ba7b205caacf/lxml-4.9.2-cp38-cp38-win32.whl", hash = "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b"}, - {url = "https://files.pythonhosted.org/packages/aa/05/217be981db0455d1c23e190683a6ab52c797f84f69501c930fee3b1109b5/lxml-4.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf"}, - {url = "https://files.pythonhosted.org/packages/ac/21/424f7ffbea6a6022c60e9f4ba542326f813bd9e36582bf01ac9a9eb54a87/lxml-4.9.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8"}, - {url = "https://files.pythonhosted.org/packages/af/cc/2136ec0afa2625ae45c2318c40a74ed8de2d669af12e98bb2fb356069698/lxml-4.9.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03"}, - {url = "https://files.pythonhosted.org/packages/b0/4b/2f1c7dfbba9199cd2dc894e7aea3e0a0c380703f1a4631e9ade0de34a7bb/lxml-4.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5"}, - {url = "https://files.pythonhosted.org/packages/b5/68/997ec0a4246850a78aefeb64c5b80e40982bd4ef3cc2f459f2f673a8724c/lxml-4.9.2-cp27-cp27m-win32.whl", hash = "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de"}, - {url = "https://files.pythonhosted.org/packages/b7/c3/943be3c483432fba57caa40ec37152883640e69a74c7fa8d2d236d8a107b/lxml-4.9.2-cp37-cp37m-win32.whl", hash = "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe"}, - {url = "https://files.pythonhosted.org/packages/bb/8f/e164d5177dd6ffc64a80d5b088f3ecd327f5765a8c2d7b867291dadb1bd1/lxml-4.9.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2"}, - {url = "https://files.pythonhosted.org/packages/bd/4b/f3122ba68422b29537f38f8871e92d829a28c2b1295545406d893dc6d0ec/lxml-4.9.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c"}, - {url = "https://files.pythonhosted.org/packages/be/42/57fa86961a28a58a207577e6ab91bac2cd6aa04f17494d1b9f54bb394369/lxml-4.9.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9"}, - {url = "https://files.pythonhosted.org/packages/c2/84/e9a7b24051364c4c90ed5f8b981bc35206ccd78b942d3a077133cb350c29/lxml-4.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5"}, - {url = "https://files.pythonhosted.org/packages/c3/5b/2847940c3b94a9475e867c53208fc94cddd0716fce104dce2f599a065ed7/lxml-4.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"}, - {url = "https://files.pythonhosted.org/packages/cb/b0/ceeddfabbfa5f8484526a32f25cbff31968674582895c2ee7a5df55b5d4a/lxml-4.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe"}, - {url = "https://files.pythonhosted.org/packages/cc/1f/79e12599f48515178471af9c79444528bd3f70c67c450907c6489590f94f/lxml-4.9.2-cp311-cp311-win32.whl", hash = "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33"}, - {url = "https://files.pythonhosted.org/packages/d3/18/a7a2d7a028c97fe08a50e361e5affdc76fe49e2bf356215fc260c6fe3fec/lxml-4.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b"}, - {url = "https://files.pythonhosted.org/packages/d4/2d/a9905da517818634ac0c3b02ef57638be9fd573fc25cb069a31e8bb05a65/lxml-4.9.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419"}, - {url = "https://files.pythonhosted.org/packages/da/1d/95d7efe733cfb11b2ec05bc6c6373b6652f7a432be39e9ecad7ea7977fe1/lxml-4.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941"}, - {url = "https://files.pythonhosted.org/packages/da/f2/43b619092a2f881bed73d627bdaca8085d425f23b2db888248014016b3d6/lxml-4.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74"}, - {url = "https://files.pythonhosted.org/packages/dc/31/c2ebd5703dafc804bfc784e3ddf72d783c329bbc0ab08ee29f1246d5e52c/lxml-4.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894"}, - {url = "https://files.pythonhosted.org/packages/e3/74/2e60c896fc763ee8e4d790968764a792138d53fa9a85bf2af69fd4093c80/lxml-4.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92"}, - {url = "https://files.pythonhosted.org/packages/e4/8f/33930d85e451a570a93c0d2412493fe5b5a018b4bf7483b91c5549a24606/lxml-4.9.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892"}, - {url = "https://files.pythonhosted.org/packages/e5/f8/16f7c72f753d4797e74960540b8b816cb567f0f368d66e6bf75f7fe98763/lxml-4.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409"}, - {url = "https://files.pythonhosted.org/packages/e9/45/a99074e82808d81b63300b1bfb46ccfdc2dd7c1bc44c935d2f24f985da78/lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05"}, - {url = "https://files.pythonhosted.org/packages/ee/4f/a17ce532b1a4254f5286b4f0738d81cbec79dcc10ccc72ab6370fafbb0cb/lxml-4.9.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975"}, - {url = "https://files.pythonhosted.org/packages/f6/45/232a3be71587fc534c009147b36081eb9bebd3bf6e608aec84598325aa41/lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"}, - {url = "https://files.pythonhosted.org/packages/ff/d9/e821232295ec540a9c62bbfd6121c2e2969996ee8bc3b0c5325cc88272d0/lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"}, +"lxml 4.9.3" = [ + {url = "https://files.pythonhosted.org/packages/01/ae/ce23856fb6065f254101c1df381050b13adf26088dd554a15776615d470f/lxml-4.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c"}, + {url = "https://files.pythonhosted.org/packages/02/25/3b7661ee15a5c93066f95d8e492a6389d33d34745ae6fa99cb57791396c2/lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, + {url = "https://files.pythonhosted.org/packages/04/8a/db479820a6ca92e729f75de16905311d8fffcb433116551d1529c9e19c85/lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, + {url = "https://files.pythonhosted.org/packages/06/d4/f95105414c4bf7e4c87ec5e3c600dd88909c628d77a2760c0e5ef186bba4/lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, + {url = "https://files.pythonhosted.org/packages/08/c8/f071fecbbc6099ee37b96f19539f69107afae744288566049a9bbb21fbd6/lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, + {url = "https://files.pythonhosted.org/packages/0a/d1/769777acdd8a02a2d9d3eea25202b007948fadde53c725aacdd85f59813f/lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, + {url = "https://files.pythonhosted.org/packages/0e/18/b9d8ce46bd1edbe8870efaa983749e190290000b444edb7ec183a70cb272/lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, + {url = "https://files.pythonhosted.org/packages/11/56/403d94094015e9c0bae8b55a5611507390f0c1d9941410d4a7bbecf0ba9e/lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, + {url = "https://files.pythonhosted.org/packages/12/a6/10ef79dd4d88d85a250982b844ea5822b37b3b102d77280b5f4cd96a6ccb/lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, + {url = "https://files.pythonhosted.org/packages/18/d8/fa063e45aa69f5cc206d0dda0ddb66fd2e400cc82a2ba87eae92f8f0d795/lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, + {url = "https://files.pythonhosted.org/packages/1b/ea/50d8357ed72f6c8352fe08657a9b05d672a4ab2470b9447fd73d87f0d47a/lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, + {url = "https://files.pythonhosted.org/packages/1d/f0/fe37367434330e30a97f79e124c9bb82dca3d0688330d8781ca52d9d459e/lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, + {url = "https://files.pythonhosted.org/packages/1e/28/7a484fe7f3861070393a9ee0ce4aa410a2631e76c559e59154533b8e491c/lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, + {url = "https://files.pythonhosted.org/packages/1f/89/afb20bc0750383dadc28ed82783a346e6dc474891cbac6dc179a97aed5a4/lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, + {url = "https://files.pythonhosted.org/packages/20/56/36fa38255306236b3cebb109c83002d29eddbf5e0f969a311e5e25aa38d6/lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, + {url = "https://files.pythonhosted.org/packages/2a/4f/b996a0f79433af201db5b00424b23eeda0b1c2ec0454cec38513ff6edfa2/lxml-4.9.3-cp27-cp27m-win32.whl", hash = "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7"}, + {url = "https://files.pythonhosted.org/packages/2d/55/05a3b72a5c02121be3224fe0155322c1f8c781b696ef80ecd86cbe5fb11e/lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, + {url = "https://files.pythonhosted.org/packages/30/39/7305428d1c4f28282a4f5bdbef24e0f905d351f34cf351ceb131f5cddf78/lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, + {url = "https://files.pythonhosted.org/packages/31/58/e3b3dd6bb2ab7404f1f4992e2d0e6926ed40cef8ce1b3bbefd95877499e1/lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, + {url = "https://files.pythonhosted.org/packages/35/0b/7c3b67cf80d3b826273f860c20810c791c39ce55df612c8bf4bbdfa1ec11/lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, + {url = "https://files.pythonhosted.org/packages/35/0b/b317a62e8597ca9f3a54f8094f9911a17fe68a98f1d7df67e2a70be4f2ac/lxml-4.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db"}, + {url = "https://files.pythonhosted.org/packages/39/6f/ed4327ac1370da702b7ac4047f4664fbdfb92a98b87ac779863202efc1ff/lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, + {url = "https://files.pythonhosted.org/packages/3b/0a/4fa53c2fd464ae1c634b61faa65f9f5a5199460018f77a3779e5db81b3c7/lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, + {url = "https://files.pythonhosted.org/packages/3c/d2/11533f0bc47ff4d828a20cfb702f3453fe714bd5b475fcdc8cec6e6b7dcf/lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, + {url = "https://files.pythonhosted.org/packages/40/c8/28f5a2b374296eac5ddf48829a2fd677d57c09d8eb58d62d6ec64746984d/lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, + {url = "https://files.pythonhosted.org/packages/43/6a/721980ef3bacaba2ffc811130e8b42244ce5e6e0218dbf65f1c36e314efd/lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, + {url = "https://files.pythonhosted.org/packages/44/1b/0771c38e65ad23e25368b5e07c920054774b8d12477a4fad116bf500de73/lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, + {url = "https://files.pythonhosted.org/packages/4c/26/09a59774eb7dbd51b57c3ea41f518e8921ebb2ffbc440d5207e6b9a58ea7/lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, + {url = "https://files.pythonhosted.org/packages/4d/4d/75f22748dec1276f27484f051f0731517fbd4c4b18b032c0bc1745f4c4a7/lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, + {url = "https://files.pythonhosted.org/packages/50/ba/cb7bc9728a3be4e00dfd658fc76dc64fd9dbc3d5492ff44cda70574329c6/lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, + {url = "https://files.pythonhosted.org/packages/50/e1/1c23a817d68418a59b39e6d2b353e211728c21353900279a04e65f6507a0/lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, + {url = "https://files.pythonhosted.org/packages/5d/43/42780ffb72d13a369facb5e6ee669f10d3dc8987ad7a3313b0d1dec46aed/lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, + {url = "https://files.pythonhosted.org/packages/5f/77/da7432d154f782bfc37e5eae41d0b109ce5ab0f93e466bcc4d9426539672/lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, + {url = "https://files.pythonhosted.org/packages/66/bf/02b4f6e208138993f7e60d0e6a54e48b142f894236edc14a6db1ba61146c/lxml-4.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4"}, + {url = "https://files.pythonhosted.org/packages/66/c2/e2a735d84803cdd178d4157b49baced9d98739b99c60f0d0f617bc0de197/lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, + {url = "https://files.pythonhosted.org/packages/68/39/302daccb88fc640ee582b8bfc45b87e5df5a983be60192fa26aad222b00d/lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, + {url = "https://files.pythonhosted.org/packages/6a/bf/a2f75c3c1e4e310e14cfe81117c8c1fca092bbb595babebd7df66b8eb5e6/lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, + {url = "https://files.pythonhosted.org/packages/6b/2b/6c39045068ad10cebd1e8c90536de207623c0267f1cfed415994c0b124e8/lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, + {url = "https://files.pythonhosted.org/packages/6d/8f/eb30dead5cd2dd8f0a91f8bcb371688e158c8cbb4a3496e41196ea1171c0/lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, + {url = "https://files.pythonhosted.org/packages/72/68/e57ff4acfb64448784c3090b3fe731d7dc86a6d02d9b04ff6b93237caab2/lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, + {url = "https://files.pythonhosted.org/packages/72/7e/72a2f5cc51f5338890fdefbf525349a35f74d804739b75fee9fe25cef008/lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, + {url = "https://files.pythonhosted.org/packages/73/e9/9d657d55914d90f0720c9f5c6d0c06d0a6eb70f0e7dbb015caa37052b98b/lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d"}, + {url = "https://files.pythonhosted.org/packages/77/e5/1f23e56678244258483521872507d64130cac9466902aca3f3141b8fb06b/lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, + {url = "https://files.pythonhosted.org/packages/78/8d/96b95d704fab4a95651ceeb6022855ae5a3c631f86c6647749a2e868af92/lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, + {url = "https://files.pythonhosted.org/packages/7a/2f/61afbbb627e910d83613f198ceea270376f6708f52a95b534db10c67b4eb/lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, + {url = "https://files.pythonhosted.org/packages/7b/73/832a113f9362cadb0766950b79c4951d2044524fba242bb6e6990c5f9b48/lxml-4.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a"}, + {url = "https://files.pythonhosted.org/packages/7c/28/6ae28e8f9f385a7adc333fee75020d94858f21e938cb1a1e9351655b1232/lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, + {url = "https://files.pythonhosted.org/packages/7c/e2/db654ad1b98fe20ad675e2dd0873770bb76fb0becaab7457a72e34f02437/lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, + {url = "https://files.pythonhosted.org/packages/80/2e/49751104148b03ad880aaf381cc24d67b7d8f401f7d074ad7db4f6d95597/lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, + {url = "https://files.pythonhosted.org/packages/80/50/ae1ef250b8a51634955e2efae82d2d75f1466b4c982355050feb5f429dd5/lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, + {url = "https://files.pythonhosted.org/packages/80/7f/7a5dcc05f5931d10af349f8bf5a06ff534d320d5506814101e9f30135ba5/lxml-4.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190"}, + {url = "https://files.pythonhosted.org/packages/81/87/7a4bf9bf803ab3d137c4aca3823a05c80893923de9c47ebcca24c39b3ff7/lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, + {url = "https://files.pythonhosted.org/packages/83/28/7d74840ef5480828f87c014e8a37405881e68a73a02067128a6cdffcbb72/lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, + {url = "https://files.pythonhosted.org/packages/85/8f/80f7f1674f05dc5f5da411aa3d96ba33411947422cb6491a6a28c8cf2a00/lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, + {url = "https://files.pythonhosted.org/packages/8d/cd/85172c7528ff46c48513ec882614073ad0746a65e2df7bc7a0fb6b3bbabe/lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, + {url = "https://files.pythonhosted.org/packages/8e/a1/c2108723d6cd0a53e64ea66e9954279d967dc3e40591e6f0f77236d2b18a/lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, + {url = "https://files.pythonhosted.org/packages/8f/5d/881f16bb9d6fc3a7436611e3dcf2e9a3dd7e337b617e715a9e70e0885dfc/lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, + {url = "https://files.pythonhosted.org/packages/93/5e/efdec1c3ad12e49547f04072368e7e42a727aacda25a56c5156129aa7f66/lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, + {url = "https://files.pythonhosted.org/packages/93/83/5325376f8b5fe393f47d5aafd4bad8325a8292680dcc8e2ab9437625d2e0/lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, + {url = "https://files.pythonhosted.org/packages/97/1d/52ffb30c7f9e22b79924bce8c7d8f69c71f6180511233e0ccf49c9d45504/lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, + {url = "https://files.pythonhosted.org/packages/9a/b1/ea9e6c1d624f7d6e1b4cffba896a1041383e0a6df90c7a55083e48f5ccfa/lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, + {url = "https://files.pythonhosted.org/packages/a0/df/d7069beaf752549ea2e6e3e9ffe771f33b9acf904746189e8b57373ead7f/lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3"}, + {url = "https://files.pythonhosted.org/packages/a1/9f/dce91f9d709f0414bcb97ce5eb0cbbff088c5e641d6e0d661ae9a6719e74/lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, + {url = "https://files.pythonhosted.org/packages/a2/e5/78402bb7bc3e9b43c7857f9e2c60ab5b5d5d9aa35ae76b4043b12535eb18/lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, + {url = "https://files.pythonhosted.org/packages/a8/f8/56c3889b1737b65c41ef71d7a9a1053ea0c669678dedf29463c52c50787d/lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, + {url = "https://files.pythonhosted.org/packages/a9/9b/840009e6680b6d550bd70429fc0bb09069940d43ed626719ba4eb2dbd954/lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, + {url = "https://files.pythonhosted.org/packages/ac/1c/004715613a74cefc27d1227c9eff5299762ad45e2b92753713b62b9cc9d6/lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, + {url = "https://files.pythonhosted.org/packages/ac/6d/7124edcc105e9ed42010c679678d41fa9a3ecfea36771a0bea9c9f04bdc6/lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, + {url = "https://files.pythonhosted.org/packages/ad/cc/e232d54754704edac66ebaf0f9acc176037ace6f2f5fb32dd133377c4d6d/lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, + {url = "https://files.pythonhosted.org/packages/b0/7a/b3e6500808e0fa4115e47a07ecdea65e2ae415a3f29d25feab306816f3ae/lxml-4.9.3-cp27-cp27m-win_amd64.whl", hash = "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1"}, + {url = "https://files.pythonhosted.org/packages/b2/9a/3222015b0d835aa6d98497fe4a1ed02cb29f1849db0a228e87b0aacb1851/lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, + {url = "https://files.pythonhosted.org/packages/b2/d7/415d594535f81bd4fb90ebd16a38b9c98b619567fd1ba9e1dbb5e57b018b/lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, + {url = "https://files.pythonhosted.org/packages/b6/4b/8964ca1238c6952d33afdcd89771a95a7e4ac7949e543c6685a6bd7b47c2/lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, + {url = "https://files.pythonhosted.org/packages/ba/ea/ae9fe2e825dda8ff680c522b0b8a32d155a241b21bd12b708b542bf0620d/lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, + {url = "https://files.pythonhosted.org/packages/be/b1/cdb59a58cbf47cc833aac796b1c50f5f13b0ccf79829f00d72e8ec65ae0d/lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, + {url = "https://files.pythonhosted.org/packages/c2/74/3a00052f9249b9a037a8c0cd0afac6e26cc21655ceb3d6b12221a171aeb7/lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, + {url = "https://files.pythonhosted.org/packages/c5/a2/7876f76606725340c989b1c73b5501fc41fb21e50a8597c9ecdb63a05b27/lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, + {url = "https://files.pythonhosted.org/packages/c5/c3/5d4c530891dc77121536883772dd81e93142ef4fe82e07d156821f2df037/lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, + {url = "https://files.pythonhosted.org/packages/c6/20/cbef33359be33304ca3519f3ad10a7ba2b7bfcbb8a17b48bd7bd5264eb2c/lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, + {url = "https://files.pythonhosted.org/packages/cc/b9/d822b2fc9b9406cff3ec6be03d69adb0e44fcad09608489ea4acaf2443bb/lxml-4.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b"}, + {url = "https://files.pythonhosted.org/packages/d0/5d/e9e3d4af7f4cf0c39f9136d1aca781abd6b95ec21caf299ad162062b963f/lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, + {url = "https://files.pythonhosted.org/packages/d6/56/9d5cb3438143a5aebad59088ca392950d74a531e1b96d0959144370b3b59/lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, + {url = "https://files.pythonhosted.org/packages/d8/0a/7f434f475ef235a555f43fe0d7794752092d1e82cd67da85ecf7792909f0/lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, + {url = "https://files.pythonhosted.org/packages/d8/e4/80ed0b5ac164fe452ceffb6733f008770e34878bc6f1104bb0f2266c1cb8/lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, + {url = "https://files.pythonhosted.org/packages/de/07/fcfc5adfb793e6181049a361b2909723c5821b2bc18a21064da4429631a8/lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, + {url = "https://files.pythonhosted.org/packages/e0/04/e52a904f4cf06075e2a864069e0259397a4d1aab1f56ac98760400f007a6/lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, + {url = "https://files.pythonhosted.org/packages/e4/f0/715c36f1fa3a12c0df47aef20b2ddcb09dbb346c7861628bbccf4a7cb8f4/lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, + {url = "https://files.pythonhosted.org/packages/e5/47/fab85a1b473be9fc2a3b3329e0970b287123bd02367fe83ae06ca6ef5f58/lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7"}, + {url = "https://files.pythonhosted.org/packages/e9/d0/30c3e26fb5115ba2f113692e08468f9a873805e513687981c51930022974/lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, + {url = "https://files.pythonhosted.org/packages/ed/62/ffc30348ae141f69f9f23b65ba769db7ca209856c9a9b3406279e0ea24de/lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, + {url = "https://files.pythonhosted.org/packages/f0/9f/48448a5fc80d94defff25362f1eae685e4823709ddce1c79c0058c0f188d/lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, + {url = "https://files.pythonhosted.org/packages/f1/ed/428a1eba7f27ec86424a9c5c383cf63d02ba8b0bf52cbc16041c3a319cd7/lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, ] "mako 1.2.4" = [ {url = "https://files.pythonhosted.org/packages/03/3b/68690a035ba7347860f1b8c0cde853230ba69ff41df5884ea7d89fe68cd3/Mako-1.2.4-py3-none-any.whl", hash = "sha256:c97c79c018b9165ac9922ae4f32da095ffd3c4e6872b45eded42926deea46818"}, {url = "https://files.pythonhosted.org/packages/05/5f/2ba6e026d33a0e6ddc1dddf9958677f76f5f80c236bd65309d280b166d3e/Mako-1.2.4.tar.gz", hash = "sha256:d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34"}, ] -"markupsafe 2.1.2" = [ - {url = "https://files.pythonhosted.org/packages/02/2c/18d55e5df6a9ea33709d6c33e08cb2e07d39e20ad05d8c6fbf9c9bcafd54/MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {url = "https://files.pythonhosted.org/packages/04/cf/9464c3c41b7cdb8df660cda75676697e7fb49ce1be7691a1162fc88da078/MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {url = "https://files.pythonhosted.org/packages/06/3b/d026c21cd1dbee89f41127e93113dcf5fa85c6660d108847760b59b3a66d/MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {url = "https://files.pythonhosted.org/packages/0a/88/78cb3d95afebd183d8b04442685ab4c70cfc1138b850ba20e2a07aff2f53/MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {url = "https://files.pythonhosted.org/packages/0d/15/82b108c697bec4c26c00aed6975b778cf0eac6cbb77598862b10550b7fcc/MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {url = "https://files.pythonhosted.org/packages/19/00/3b8eb0093c885576a1ce7f2263e7b8c01e55b9977433f8246f57cd81b0be/MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {url = "https://files.pythonhosted.org/packages/1f/20/76f6337f1e7238a626ab34405ddd634636011b2ff947dcbd8995f16a7776/MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {url = "https://files.pythonhosted.org/packages/22/88/9c0cae2f5ada778182f2842b377dd273d6be689953345c10b165478831eb/MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {url = "https://files.pythonhosted.org/packages/29/d2/243e6b860d97c18d848fc2bee2f39d102755a2b04a5ce4d018d839711b46/MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {url = "https://files.pythonhosted.org/packages/30/3e/0a69a24adb38df83e2f6989c38d68627a5f27181c82ecaa1fd03d1236dca/MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {url = "https://files.pythonhosted.org/packages/34/19/64b0abc021b22766e86efee32b0e2af684c4b731ce8ac1d519c791800c13/MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {url = "https://files.pythonhosted.org/packages/37/b2/6f4d5cac75ba6fe9f17671304fe339ea45a73c5609b5f5e652aa79c915c8/MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {url = "https://files.pythonhosted.org/packages/39/8d/5c5ce72deb8567ab48a18fbd99dc0af3dd651b6691b8570947e54a28e0f3/MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {url = "https://files.pythonhosted.org/packages/3d/66/2f636ba803fd6eb4cee7b3106ae02538d1e84a7fb7f4f8775c6528a87d31/MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {url = "https://files.pythonhosted.org/packages/41/54/6e88795c64ab5dcda31b06406c062c2740d1a64db18219d4e21fc90928c1/MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {url = "https://files.pythonhosted.org/packages/46/0c/10ee33673c5e36fa3809cf136971f81d951ca38516188ee11a965d9b2fe9/MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {url = "https://files.pythonhosted.org/packages/48/cc/d027612e17b56088cfccd2c8e083518995fcb25a7b4f17fc146362a0499d/MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {url = "https://files.pythonhosted.org/packages/4b/34/dc837e5ad9e14634aac4342eb8b12a9be20a4f74f50cc0d765f7aa2fc1e3/MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {url = "https://files.pythonhosted.org/packages/50/41/1442b693a40eb76d835ca2016e86a01479f17d7fd8288f9830f6790e366a/MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {url = "https://files.pythonhosted.org/packages/52/36/b35c577c884ea352fc0c1eaed9ca4946ffc22cc9c3527a70408bfa9e9496/MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {url = "https://files.pythonhosted.org/packages/56/0d/c9818629672a3368b773fa94597d79da77bdacc3186f097bb85023f785f6/MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {url = "https://files.pythonhosted.org/packages/5a/94/d056bf5dbadf7f4b193ee2a132b3d49ffa1602371e3847518b2982045425/MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {url = "https://files.pythonhosted.org/packages/5e/f6/8eb8a5692c1986b6e863877b0b8a83628aff14e5fbfaf11d9522b532bd9d/MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {url = "https://files.pythonhosted.org/packages/66/21/dadb671aade8eb67ef96e0d8f90b1bd5e8cfb6ad9d8c7fa2c870ec0c257b/MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {url = "https://files.pythonhosted.org/packages/76/b5/05ce70a3e31ecebcd3628cd180dc4761293aa496db85170fdc085ed2d79a/MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {url = "https://files.pythonhosted.org/packages/77/26/af46880038c6eac3832e751298f1965f3a550f38d1e9ddaabd674860076b/MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {url = "https://files.pythonhosted.org/packages/78/e6/91c9a20a943ea231c59024e181c4c5480097daf132428f2272670974637f/MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {url = "https://files.pythonhosted.org/packages/79/e2/b818bf277fa6b01244943498cb2127372c01dde5eff7682837cc72740618/MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {url = "https://files.pythonhosted.org/packages/7b/0f/0e99c2f342933c43af69849a6ba63f2eef54e14c6d0e10a26470fb6b40a9/MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {url = "https://files.pythonhosted.org/packages/7c/e6/454df09f18e0ea34d189b447a9e1a9f66c2aa332b77fd5577ebc7ca14d42/MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {url = "https://files.pythonhosted.org/packages/80/64/ccb65aadd71e7685caa69a885885a673e8748525a243fb26acea37201b44/MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {url = "https://files.pythonhosted.org/packages/82/70/b3978786c7b576c25d84b009d2a20a11b5300d252fc3ce984e37b932e97c/MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {url = "https://files.pythonhosted.org/packages/82/e3/4efcd74f10a7999783955aec36386f71082e6d7dafcc06b77b9df72b325a/MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {url = "https://files.pythonhosted.org/packages/87/a1/d0f05a09c6c1aef89d1eea0ab0ff1ea897d4117d27f1571034a7e3ff515b/MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {url = "https://files.pythonhosted.org/packages/93/ca/1c3ae0c6a5712d4ba98610cada03781ea0448436b17d1dcd4759115b15a1/MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {url = "https://files.pythonhosted.org/packages/93/fa/d72f68f84f8537ee8aa3e0764d1eb11e5e025a5ca90c16e94a40f894c2fc/MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {url = "https://files.pythonhosted.org/packages/95/7e/68018b70268fb4a2a605e2be44ab7b4dd7ce7808adae6c5ef32e34f4b55a/MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, - {url = "https://files.pythonhosted.org/packages/95/88/8c8cce021ac1b1eedde349c6a41f6c256da60babf95e572071361ff3f66b/MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {url = "https://files.pythonhosted.org/packages/96/92/a873b4a7fa20c2e30bffe883bb560330f3b6ce03aaf278f75f96d161935b/MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {url = "https://files.pythonhosted.org/packages/9d/80/8320f182d06a9b289b1a9f266f593feb91d3781c7e104bbe09e0c4c11439/MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {url = "https://files.pythonhosted.org/packages/be/18/988e1913a40cc8eb725b1e073eacc130f7803a061577bdc0b9343eb3c696/MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {url = "https://files.pythonhosted.org/packages/c3/e5/42842a44bfd9ba2955c562b1139334a2f64cedb687e8969777fd07de42a9/MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {url = "https://files.pythonhosted.org/packages/c7/0e/22d0c8e6ee84414e251bd1bc555b2705af6b3fb99f0ba1ead2a0f51d423b/MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {url = "https://files.pythonhosted.org/packages/cf/c1/d7596976a868fe3487212a382cc121358a53dc8e8d85ff2ee2c3d3b40f04/MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {url = "https://files.pythonhosted.org/packages/d1/10/ff89b23d4a24051c4e4f689b79ee06f230d7e9431445e24f5dd9d9a89730/MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {url = "https://files.pythonhosted.org/packages/e3/a9/e366665c7eae59c9c9d34b747cd5a3994847719a2304e0c8dec8b604dd98/MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {url = "https://files.pythonhosted.org/packages/e6/ff/d2378ca3cb3ac4a37af767b820b0f0bf3f5e9193a6acce0eefc379425c1c/MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {url = "https://files.pythonhosted.org/packages/e9/c6/2da36728c1310f141395176556500aeedfdea8c2b02a3b72ba61b69280e8/MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {url = "https://files.pythonhosted.org/packages/ea/60/2400ba59cf2465fa136487ee7299f52121a9d04b2cf8539ad43ad10e70e8/MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {url = "https://files.pythonhosted.org/packages/f9/aa/ebcd114deab08f892b1d70badda4436dbad1747f9e5b72cffb3de4c7129d/MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, -] -"matplotlib 3.7.1" = [ - {url = "https://files.pythonhosted.org/packages/05/92/8a7449693adc4480a4777b407b44d21c0c6e3d2ace3250091fe1a89bc825/matplotlib-3.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:3ba2af245e36990facf67fde840a760128ddd71210b2ab6406e640188d69d136"}, - {url = "https://files.pythonhosted.org/packages/07/67/0d84ca088fa164ac9ad9bf1a896517ee9eeb98a27a315e1bcad619cde30c/matplotlib-3.7.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3032884084f541163f295db8a6536e0abb0db464008fadca6c98aaf84ccf4717"}, - {url = "https://files.pythonhosted.org/packages/07/76/fde990f131450f08eb06e50814b98d347b14d7916c0ec31cba0a65a9be2b/matplotlib-3.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d7bc90727351fb841e4d8ae620d2d86d8ed92b50473cd2b42ce9186104ecbba"}, - {url = "https://files.pythonhosted.org/packages/0e/61/255b0ab4fd319bb8274bde67eeb8b56e52c4d1b66123a6ed3de2b835d108/matplotlib-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f67bfdb83a8232cb7a92b869f9355d677bce24485c460b19d01970b64b2ed476"}, - {url = "https://files.pythonhosted.org/packages/10/94/36527e47d0719e7ae3649cc290a4d0b5faeac3453867cdf633f4b2480d87/matplotlib-3.7.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:438196cdf5dc8d39b50a45cb6e3f6274edbcf2254f85fa9b895bf85851c3a613"}, - {url = "https://files.pythonhosted.org/packages/13/0d/a3c01d8dd48957029f5ea5eac3d778fdedefaef43533597def65e29e5414/matplotlib-3.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99bc9e65901bb9a7ce5e7bb24af03675cbd7c70b30ac670aa263240635999a4"}, - {url = "https://files.pythonhosted.org/packages/16/23/d81f74e722eb064e726e7b6da999fd9e50de13b28e6496d67e9f09b6fe19/matplotlib-3.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:cf0e4f727534b7b1457898c4f4ae838af1ef87c359b76dcd5330fa31893a3ac7"}, - {url = "https://files.pythonhosted.org/packages/18/70/31f7b317e5575b590ed7227a9c3d6f42f8e8838ce7d5e763ff16440ac1d4/matplotlib-3.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8704726d33e9aa8a6d5215044b8d00804561971163563e6e6591f9dcf64340cc"}, - {url = "https://files.pythonhosted.org/packages/1d/24/72b0b7069d268b22c40f42d973f4b4971debd0f9ddc0fbf4753d5f0a2469/matplotlib-3.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:544764ba51900da4639c0f983b323d288f94f65f4024dc40ecb1542d74dc0500"}, - {url = "https://files.pythonhosted.org/packages/1e/5c/bae8d15f7dec470ee0269d503132678e5ce4abd1306b70b180d66ede13d5/matplotlib-3.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83111e6388dec67822e2534e13b243cc644c7494a4bb60584edbff91585a83c6"}, - {url = "https://files.pythonhosted.org/packages/23/7c/3e9366cf2259785de934d0bb5a7e03828e23cd722439d1c78abc4b7d89eb/matplotlib-3.7.1-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:770a205966d641627fd5cf9d3cb4b6280a716522cd36b8b284a8eb1581310f61"}, - {url = "https://files.pythonhosted.org/packages/34/b3/c81bbb3de820e0eaba4d7d41b9df34ffdc3336159de5bb6c959cd2028670/matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b867e2f952ed592237a1828f027d332d8ee219ad722345b79a001f49df0936eb"}, - {url = "https://files.pythonhosted.org/packages/35/a8/eb84f46e133fc0be5d50c3e1bec0aaa18a58bb53fc9ea96797289ffb2cd2/matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a2cb34336110e0ed8bb4f650e817eed61fa064acbefeb3591f1b33e3a84fd96"}, - {url = "https://files.pythonhosted.org/packages/3a/4e/83499803b641c40e33c118b461a7c110bfa8cc6b3be10a2dc174232522dd/matplotlib-3.7.1-cp311-cp311-win32.whl", hash = "sha256:fbdeeb58c0cf0595efe89c05c224e0a502d1aa6a8696e68a73c3efc6bc354304"}, - {url = "https://files.pythonhosted.org/packages/4d/71/a0d28c6123773075f056ff2ce7b2a16a19a4ff2982f0de0f285c9866c420/matplotlib-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bf26ade3ff0f27668989d98c8435ce9327d24cffb7f07d24ef609e33d582439"}, - {url = "https://files.pythonhosted.org/packages/51/3e/2e266434cf7aa82ab5d860b774a1ece49debffa3f5c32f7c6e305f0f5728/matplotlib-3.7.1-cp38-cp38-win32.whl", hash = "sha256:7c9a4b2da6fac77bcc41b1ea95fadb314e92508bf5493ceff058e727e7ecf5b0"}, - {url = "https://files.pythonhosted.org/packages/51/d8/ba69105b4b72aace5d3501af1b0886b248fa5363519df04dc17577578bab/matplotlib-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a867bf73a7eb808ef2afbca03bcdb785dae09595fbe550e1bab0cd023eba3de0"}, - {url = "https://files.pythonhosted.org/packages/5c/b0/050bcf86c57255066915eb805d36409e2e093a07d4615249b07aa2530ef5/matplotlib-3.7.1-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:6eb88d87cb2c49af00d3bbc33a003f89fd9f78d318848da029383bfc08ecfbfb"}, - {url = "https://files.pythonhosted.org/packages/5d/22/f55638bea4af17edf23e1c919ad5d256141bbeec0196c450be9785f1dcb6/matplotlib-3.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4cf327e98ecf08fcbb82685acaf1939d3338548620ab8dfa02828706402c34de"}, - {url = "https://files.pythonhosted.org/packages/5d/7e/0647f19705d819d2249df96625d83ff5de2e913a247610b753c504b7bfd0/matplotlib-3.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2bf092f9210e105f414a043b92af583c98f50050559616930d884387d0772aba"}, - {url = "https://files.pythonhosted.org/packages/62/6d/3817522ca223796703b68ffd38577582f2dc7a0c0dd410d1803e36b5e1db/matplotlib-3.7.1-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:95cbc13c1fc6844ab8812a525bbc237fa1470863ff3dace7352e910519e194b1"}, - {url = "https://files.pythonhosted.org/packages/6c/70/5f8b981680fc0bdb85f0dd00174e41f98d4cdb641921295822c8e14272fe/matplotlib-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:28506a03bd7f3fe59cd3cd4ceb2a8d8a2b1db41afede01f66c42561b9be7b4b7"}, - {url = "https://files.pythonhosted.org/packages/80/c0/1d29eafc057e516ffc1ba07da2054926f219c44ad4ea5df57ff97825182c/matplotlib-3.7.1-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:81a6b377ea444336538638d31fdb39af6be1a043ca5e343fe18d0f17e098770b"}, - {url = "https://files.pythonhosted.org/packages/81/f7/1c9145e24195723da3cb668637b98b6016be4692b335ba543058a7297c9e/matplotlib-3.7.1-cp39-cp39-win32.whl", hash = "sha256:4f99e1b234c30c1e9714610eb0c6d2f11809c9c78c984a613ae539ea2ad2eb4b"}, - {url = "https://files.pythonhosted.org/packages/83/3e/08d551274d660cd38af04b14366725c195f18ad0bd359e192ecf3ec2f2bb/matplotlib-3.7.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:97cc368a7268141afb5690760921765ed34867ffb9655dd325ed207af85c7529"}, - {url = "https://files.pythonhosted.org/packages/86/2b/a04f22015a03025a8c9c0363c4ecfd89eb45fc3af545ff838e02ac58b39d/matplotlib-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:08308bae9e91aca1ec6fd6dda66237eef9f6294ddb17f0d0b3c863169bf82353"}, - {url = "https://files.pythonhosted.org/packages/89/f3/84a9a6613ab0d89931d785f13fa2606e03f07252875acc8ebf5b676fa3c5/matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb7d248c34a341cd4c31a06fd34d64306624c8cd8d0def7abb08792a5abfd556"}, - {url = "https://files.pythonhosted.org/packages/8a/d3/35c62c9f64ddef5f25763580a10cb1ff4a19dc1a2bf940ad06dbb10b248d/matplotlib-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d94989191de3fcc4e002f93f7f1be5da476385dde410ddafbb70686acf00ea"}, - {url = "https://files.pythonhosted.org/packages/91/ae/410dca50b2b0b4d48bfaa41a20d7344078ac63a7178d3b5716b1014c90b9/matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21e9cff1a58d42e74d01153360de92b326708fb205250150018a52c70f43c290"}, - {url = "https://files.pythonhosted.org/packages/92/01/2c04d328db6955d77f8f60c17068dde8aa66f153b2c599ca03c2cb0d5567/matplotlib-3.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:14645aad967684e92fc349493fa10c08a6da514b3d03a5931a1bac26e6792bd1"}, - {url = "https://files.pythonhosted.org/packages/9f/77/0cd22f92f7103383cb1ce3b3efc77411b9cc3a495242c8f2a623b498f586/matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f883a22a56a84dba3b588696a2b8a1ab0d2c3d41be53264115c71b0a942d8fdb"}, - {url = "https://files.pythonhosted.org/packages/a8/14/83b722ae5bec25cd1b44067d2165952aa0943af287ea06f2e1e594220805/matplotlib-3.7.1-cp310-cp310-win32.whl", hash = "sha256:ce463ce590f3825b52e9fe5c19a3c6a69fd7675a39d589e8b5fbe772272b3a24"}, - {url = "https://files.pythonhosted.org/packages/b7/65/d6e00376dbdb6c227d79a2d6ec32f66cfb163f0cd924090e3133a4f85a11/matplotlib-3.7.1.tar.gz", hash = "sha256:7b73305f25eab4541bd7ee0b96d87e53ae9c9f1823be5659b806cd85786fe882"}, - {url = "https://files.pythonhosted.org/packages/b7/ed/32d00261ac6067b13af9181b2450d30599875ab61807defa85c05a28432a/matplotlib-3.7.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:57bfb8c8ea253be947ccb2bc2d1bb3862c2bccc662ad1b4626e1f5e004557042"}, - {url = "https://files.pythonhosted.org/packages/bc/22/52dd9b0f8da380309ceb4c5e6a9018417b56ad3b56bfd18fe0e1d1310541/matplotlib-3.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:617f14ae9d53292ece33f45cba8503494ee199a75b44de7717964f70637a36aa"}, - {url = "https://files.pythonhosted.org/packages/bd/5d/a9083be15f9bed89c1c5897473eae6dd1bab4acbcfb82fdae417149674d0/matplotlib-3.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:def58098f96a05f90af7e92fd127d21a287068202aa43b2a93476170ebd99e87"}, - {url = "https://files.pythonhosted.org/packages/cf/2c/41b330eeb47806abc19c1a4ab22821cb5a2be2cabe34c37f0d8483ae0e26/matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d4725d70b7c03e082bbb8a34639ede17f333d7247f56caceb3801cb6ff703d"}, - {url = "https://files.pythonhosted.org/packages/e0/2e/a9fc4c317bc8cc679d344dd881b97f67580b38e6eedc645c3623d6c5d139/matplotlib-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89768d84187f31717349c6bfadc0e0d8c321e8eb34522acec8a67b1236a66332"}, - {url = "https://files.pythonhosted.org/packages/e8/5a/2661b38ebd4b1d58f335be7e8150af0a7eb94d13bf7a6563e7c49ed40c4d/matplotlib-3.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8c587963b85ce41e0a8af53b9b2de8dddbf5ece4c34553f7bd9d066148dc719c"}, - {url = "https://files.pythonhosted.org/packages/f3/99/7010ae81984908cc655b7d24145aeed2784614957ed7f0cb5a72b17a63d3/matplotlib-3.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:46a561d23b91f30bccfd25429c3c706afe7d73a5cc64ef2dfaf2b2ac47c1a5dc"}, - {url = "https://files.pythonhosted.org/packages/fb/8c/391e3c105edb7e193bb163ed48988135228d0b5ce3143e1cbec2350e23c8/matplotlib-3.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c0bd19c72ae53e6ab979f0ac6a3fafceb02d2ecafa023c5cca47acd934d10be7"}, +"markupsafe 2.1.3" = [ + {url = "https://files.pythonhosted.org/packages/03/06/e72e88f81f8c91d4f488d21712d2d403fd644e3172eaadc302094377bc22/MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {url = "https://files.pythonhosted.org/packages/03/65/3473d2cb84bb2cda08be95b97fc4f53e6bcd701a2d50ba7b7c905e1e9273/MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {url = "https://files.pythonhosted.org/packages/10/b3/c2b0a61cc0e1d50dd8a1b663ba4866c667cb58fb35f12475001705001680/MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {url = "https://files.pythonhosted.org/packages/12/b3/d9ed2c0971e1435b8a62354b18d3060b66c8cb1d368399ec0b9baa7c0ee5/MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {url = "https://files.pythonhosted.org/packages/20/1d/713d443799d935f4d26a4f1510c9e61b1d288592fb869845e5cc92a1e055/MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {url = "https://files.pythonhosted.org/packages/22/81/b5659e2b6ae1516495a22f87370419c1d79c8d853315e6cbe5172fc01a06/MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {url = "https://files.pythonhosted.org/packages/32/d4/ce98c4ca713d91c4a17c1a184785cc00b9e9c25699d618956c2b9999500a/MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {url = "https://files.pythonhosted.org/packages/3c/c8/74d13c999cbb49e3460bf769025659a37ef4a8e884de629720ab4e42dcdb/MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {url = "https://files.pythonhosted.org/packages/43/70/f24470f33b2035b035ef0c0ffebf57006beb2272cf3df068fc5154e04ead/MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {url = "https://files.pythonhosted.org/packages/43/ad/7246ae594aac948b17408c0ff0f9ff0bc470bdbe9c672a754310db64b237/MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {url = "https://files.pythonhosted.org/packages/44/53/93405d37bb04a10c43b1bdd6f548097478d494d7eadb4b364e3e1337f0cc/MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {url = "https://files.pythonhosted.org/packages/47/26/932140621773bfd4df3223fbdd9e78de3477f424f0d2987c313b1cb655ff/MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {url = "https://files.pythonhosted.org/packages/4d/e4/77bb622d6a37aeb51ee55857100986528b7f47d6dbddc35f9b404622ed50/MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {url = "https://files.pythonhosted.org/packages/4f/13/cf36eff21600fb21d5bd8c4c1b6ff0b7cc0ff37b955017210cfc6f367972/MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {url = "https://files.pythonhosted.org/packages/62/9b/4908a57acf39d8811836bc6776b309c2e07d63791485589acf0b6d7bc0c6/MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {url = "https://files.pythonhosted.org/packages/68/8d/c33c43c499c19f4b51181e196c9a497010908fc22c5de33551e298aa6a21/MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {url = "https://files.pythonhosted.org/packages/6a/86/654dc431513cd4417dfcead8102f22bece2d6abf2f584f0e1cc1524f7b94/MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {url = "https://files.pythonhosted.org/packages/6d/7c/59a3248f411813f8ccba92a55feaac4bf360d29e2ff05ee7d8e1ef2d7dbf/MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {url = "https://files.pythonhosted.org/packages/71/61/f5673d7aac2cf7f203859008bb3fc2b25187aa330067c5e9955e5c5ebbab/MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {url = "https://files.pythonhosted.org/packages/74/a3/54fc60ee2da3ab6d68b1b2daf4897297c597840212ee126e68a4eb89fcd7/MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {url = "https://files.pythonhosted.org/packages/7d/48/6ba4db436924698ca22109325969e00be459d417830dafec3c1001878b57/MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {url = "https://files.pythonhosted.org/packages/84/a8/c4aebb8a14a1d39d5135eb8233a0b95831cdc42c4088358449c3ed657044/MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {url = "https://files.pythonhosted.org/packages/8b/bb/72ca339b012054a84753accabe3258e0baf6e34bd0ab6e3670b9a65f679d/MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {url = "https://files.pythonhosted.org/packages/8d/66/4a46c7f1402e0377a8b220fd4b53cc4f1b2337ab0d97f06e23acd1f579d1/MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {url = "https://files.pythonhosted.org/packages/96/e4/4db3b1abc5a1fe7295aa0683eafd13832084509c3b8236f3faf8dd4eff75/MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {url = "https://files.pythonhosted.org/packages/9b/c1/9f44da5ca74f95116c644892152ca6514ecdc34c8297a3f40d886147863d/MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {url = "https://files.pythonhosted.org/packages/a2/b2/624042cb58cc6b3529a6c3a7b7d230766e3ecb768cba118ba7befd18ed6f/MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {url = "https://files.pythonhosted.org/packages/a2/f7/9175ad1b8152092f7c3b78c513c1bdfe9287e0564447d1c2d3d1a2471540/MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {url = "https://files.pythonhosted.org/packages/a6/56/f1d4ee39e898a9e63470cbb7fae1c58cce6874f25f54220b89213a47f273/MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {url = "https://files.pythonhosted.org/packages/a8/12/fd9ef3e09a7312d60467c71037283553ff2acfcd950159cd4c3ca9558af4/MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {url = "https://files.pythonhosted.org/packages/ab/20/f59423543a8422cb8c69a579ebd0ef2c9dafa70cc8142b7372b5b4073caa/MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {url = "https://files.pythonhosted.org/packages/b2/0d/cbaade3ee8efbd5ce2fb72b48cc51479ebf3d4ce2c54dcb6557d3ea6a950/MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {url = "https://files.pythonhosted.org/packages/b2/27/07e5aa9f93314dc65ad2ad9b899656dee79b70a9425ee199dd5a4c4cf2cd/MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {url = "https://files.pythonhosted.org/packages/bb/82/f88ccb3ca6204a4536cf7af5abdad7c3657adac06ab33699aa67279e0744/MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {url = "https://files.pythonhosted.org/packages/be/bb/08b85bc194034efbf572e70c3951549c8eca0ada25363afc154386b5390a/MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {url = "https://files.pythonhosted.org/packages/bf/b7/c5ba9b7ad9ad21fc4a60df226615cf43ead185d328b77b0327d603d00cc5/MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {url = "https://files.pythonhosted.org/packages/c0/c7/171f5ac6b065e1425e8fabf4a4dfbeca76fd8070072c6a41bd5c07d90d8b/MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {url = "https://files.pythonhosted.org/packages/c9/80/f08e782943ee7ae6e9438851396d00a869f5b50ea8c6e1f40385f3e95771/MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {url = "https://files.pythonhosted.org/packages/d2/a1/4ae49dd1520c7b891ea4963258aab08fb2554c564781ecb2a9c4afdf9cb1/MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {url = "https://files.pythonhosted.org/packages/d5/c1/1177f712d4ab91eb67f79d763a7b5f9c5851ee3077d6b4eee15e23b6b93e/MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {url = "https://files.pythonhosted.org/packages/de/63/cb7e71984e9159ec5f45b5e81e896c8bdd0e45fe3fc6ce02ab497f0d790e/MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {url = "https://files.pythonhosted.org/packages/de/e2/32c14301bb023986dff527a49325b6259cab4ebb4633f69de54af312fc45/MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {url = "https://files.pythonhosted.org/packages/e5/dd/49576e803c0d974671e44fa78049217fcc68af3662a24f831525ed30e6c7/MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {url = "https://files.pythonhosted.org/packages/e6/5c/8ab8f67bbbbf90fe88f887f4fa68123435c5415531442e8aefef1e118d5c/MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {url = "https://files.pythonhosted.org/packages/f4/a0/103f94793c3bf829a18d2415117334ece115aeca56f2df1c47fa02c6dbd6/MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {url = "https://files.pythonhosted.org/packages/f7/9c/86cbd8e0e1d81f0ba420f20539dd459c50537c7751e28102dbfee2b6f28c/MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {url = "https://files.pythonhosted.org/packages/f8/33/e9e83b214b5f8d9a60b26e60051734e7657a416e5bce7d7f1c34e26badad/MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {url = "https://files.pythonhosted.org/packages/fa/bb/12fb5964c4a766eb98155dd31ec070adc8a69a395564ffc1e7b34d91335a/MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {url = "https://files.pythonhosted.org/packages/fe/09/c31503cb8150cf688c1534a7135cc39bb9092f8e0e6369ec73494d16ee0e/MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {url = "https://files.pythonhosted.org/packages/fe/21/2eff1de472ca6c99ec3993eab11308787b9879af9ca8bbceb4868cf4f2ca/MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, +] +"matplotlib 3.7.2" = [ + {url = "https://files.pythonhosted.org/packages/1d/57/888776de79e1c2e787368ecbe63e3e57dbec984a5c83220e44c15fefe226/matplotlib-3.7.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:71f7a8c6b124e904db550f5b9fe483d28b896d4135e45c4ea381ad3b8a0e3256"}, + {url = "https://files.pythonhosted.org/packages/40/28/2cadcff6fe0b7498726d9efe259c0d85625dda59932ec04fb1de811b0968/matplotlib-3.7.2-cp38-cp38-win32.whl", hash = "sha256:5dea00b62d28654b71ca92463656d80646675628d0828e08a5f3b57e12869e13"}, + {url = "https://files.pythonhosted.org/packages/47/57/fe4ebc5133923500e8c6965e6691746568142549f18b87346889c5480852/matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebf577c7a6744e9e1bd3fee45fc74a02710b214f94e2bde344912d85e0c9af7c"}, + {url = "https://files.pythonhosted.org/packages/47/b9/6c0daa9b953a80b4e6933bf6a11a2d0633f257e84ee5995c5fd35de564c9/matplotlib-3.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:318c89edde72ff95d8df67d82aca03861240512994a597a435a1011ba18dbc7f"}, + {url = "https://files.pythonhosted.org/packages/4d/9c/65830d4a56c47f5283eaa244dc1228c5da9c844a9f999ebcc2e69bf6cc65/matplotlib-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4860132c8c05261a5f5f8467f1b269bf1c7c23902d75f2be57c4a7f2394b3e"}, + {url = "https://files.pythonhosted.org/packages/4f/d7/3303f11188122f66c940056f162d030992e7fbc9c702869bab163e85156b/matplotlib-3.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60c521e21031632aa0d87ca5ba0c1c05f3daacadb34c093585a0be6780f698e4"}, + {url = "https://files.pythonhosted.org/packages/51/93/61bc85bda07e1242b2a4ab1bbcee0c3ea9429c6c15ef4a89613e685474c3/matplotlib-3.7.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdcd28360dbb6203fb5219b1a5658df226ac9bebc2542a9e8f457de959d713d0"}, + {url = "https://files.pythonhosted.org/packages/54/6d/78dd357b35a9c94a56c51a34c123460313e3bdf2e454ce4274ac67b9a5e0/matplotlib-3.7.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a8035ba590658bae7562786c9cc6ea1a84aa49d3afab157e414c9e2ea74f496d"}, + {url = "https://files.pythonhosted.org/packages/54/e2/ac7a37a36f6ab1f83896cfd3d4832a0082e4106de10087a5afe29da2e990/matplotlib-3.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cd120fca3407a225168238b790bd5c528f0fafde6172b140a2f3ab7a4ea63e9"}, + {url = "https://files.pythonhosted.org/packages/5d/23/5efd23e54a6992df25b656956576781e8c8064acc570c0f6f3dbf0a573f0/matplotlib-3.7.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:30e1409b857aa8a747c5d4f85f63a79e479835f8dffc52992ac1f3f25837b544"}, + {url = "https://files.pythonhosted.org/packages/5d/f1/1f2dc9a7e380b05f13b16d7af451664ee862a7ce93e887e55e3fc316c933/matplotlib-3.7.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:a1733b8e84e7e40a9853e505fe68cc54339f97273bdfe6f3ed980095f769ddc7"}, + {url = "https://files.pythonhosted.org/packages/61/4d/f57df318c3e9dc1167271f08f7f058dec0f575a469edccf873cd16dcfc8a/matplotlib-3.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7e28d6396563955f7af437894a36bf2b279462239a41028323e04b85179058b"}, + {url = "https://files.pythonhosted.org/packages/64/e1/e7ee2ac522b66aed3022da0ab33b90e7d7f58aa17adbfaf123247598a0af/matplotlib-3.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71667eb2ccca4c3537d9414b1bc00554cb7f91527c17ee4ec38027201f8f1603"}, + {url = "https://files.pythonhosted.org/packages/6d/f8/ff4acac6ea3f896146fd2a9f76dafb7c36973f2a329cae1d60a7c7252395/matplotlib-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f506a1776ee94f9e131af1ac6efa6e5bc7cb606a3e389b0ccb6e657f60bb676"}, + {url = "https://files.pythonhosted.org/packages/72/7d/2ad1b94106f8b1971d1eff0ebb97a81d980c448732a3e624bba281bd274d/matplotlib-3.7.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:2699f7e73a76d4c110f4f25be9d2496d6ab4f17345307738557d345f099e07de"}, + {url = "https://files.pythonhosted.org/packages/7e/2c/1e25437f4419f2828bbd213be42c8fd23a3b795c5c4bb776987d177fc615/matplotlib-3.7.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:50e0a55ec74bf2d7a0ebf50ac580a209582c2dd0f7ab51bc270f1b4a0027454e"}, + {url = "https://files.pythonhosted.org/packages/80/99/6cb77705e4801b4483410b9b917790fdc2da311ec8dd1ed8c9e90320c0e1/matplotlib-3.7.2-cp39-cp39-win32.whl", hash = "sha256:ce55289d5659b5b12b3db4dc9b7075b70cef5631e56530f14b2945e8836f2d20"}, + {url = "https://files.pythonhosted.org/packages/83/ed/eeaa45dadeb1614761195cc7931823d6fee50645299d02b348f48bbeea1e/matplotlib-3.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbcf59334ff645e6a67cd5f78b4b2cdb76384cdf587fa0d2dc85f634a72e1a3e"}, + {url = "https://files.pythonhosted.org/packages/85/44/2b91e75fd133393e76455bb3ac44b9b885668264eafb0f9510f6aeb41fb5/matplotlib-3.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f081c03f413f59390a80b3e351cc2b2ea0205839714dbc364519bcf51f4b56ca"}, + {url = "https://files.pythonhosted.org/packages/85/7c/7ad0e30d26afc8913248e4aa71cc360944d3ccff38ed78f6a4578bd9ff73/matplotlib-3.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:305e3da477dc8607336ba10bac96986d6308d614706cae2efe7d3ffa60465b24"}, + {url = "https://files.pythonhosted.org/packages/85/9d/45157aebc2e78225106cc21f195f38d9fcc2c6bf5a947309406cfbcbef51/matplotlib-3.7.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6515e878f91894c2e4340d81f0911857998ccaf04dbc1bba781e3d89cbf70608"}, + {url = "https://files.pythonhosted.org/packages/88/4c/a7779dd6cf666ce115f9da4f6cca94f5f6fa31c5354e9efa1da6269c0457/matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3cca3e842b11b55b52c6fb8bd6a4088693829acbfcdb3e815fa9b7d5c92c1b"}, + {url = "https://files.pythonhosted.org/packages/88/a1/87831b97514680828bfbac6054c38bda114ef8acd58150309467e9190cb7/matplotlib-3.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:152ee0b569a37630d8628534c628456b28686e085d51394da6b71ef84c4da201"}, + {url = "https://files.pythonhosted.org/packages/8d/22/719f4fff33b13b0708711fb52ca3fc44617a26728e0e023358288d5197ae/matplotlib-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f8e4a49493add46ad4a8c92f63e19d548b2b6ebbed75c6b4c7f46f57d36cdd1"}, + {url = "https://files.pythonhosted.org/packages/99/e2/87294a9455c6a6b9d8f69d046032c2ef04220094b590474b3b51526082ab/matplotlib-3.7.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bc221ffbc2150458b1cd71cdd9ddd5bb37962b036e41b8be258280b5b01da1dd"}, + {url = "https://files.pythonhosted.org/packages/a3/e5/c9cdc737ea2256285dc1b28e8ecbf649c716cfc7b1ee12a8be6d4cf1feb7/matplotlib-3.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12f01b92ecd518e0697da4d97d163b2b3aa55eb3eb4e2c98235b3396d7dad55f"}, + {url = "https://files.pythonhosted.org/packages/ab/43/734eddeb4636775467287e2626ffe64d7a94f432ed829c60f687ebd0b1d4/matplotlib-3.7.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:936bba394682049919dda062d33435b3be211dc3dcaa011e09634f060ec878b2"}, + {url = "https://files.pythonhosted.org/packages/b2/b6/c6596fbc30899e6da31450053054d7da61a21a3f510544fb7cb7658a3de3/matplotlib-3.7.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d9881356dc48e58910c53af82b57183879129fa30492be69058c5b0d9fddf391"}, + {url = "https://files.pythonhosted.org/packages/b4/c2/f74e0deb26379aead0956a6ecf9acd4587debba0c7abe4bd8fe53fe04ec2/matplotlib-3.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c1590b90aa7bd741b54c62b78de05d4186271e34e2377e0289d943b3522273"}, + {url = "https://files.pythonhosted.org/packages/c2/da/a5622266952ab05dc3995d77689cba600e49ea9d6c51d469c077695cb719/matplotlib-3.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070f8dddd1f5939e60aacb8fa08f19551f4b0140fab16a3669d5cd6e9cb28fc8"}, + {url = "https://files.pythonhosted.org/packages/c9/46/6cbaf20f5bd0e7c1d204b45b853c2cd317b303fada90245f2825ecca47de/matplotlib-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:2ecb5be2b2815431c81dc115667e33da0f5a1bcf6143980d180d09a717c4a12e"}, + {url = "https://files.pythonhosted.org/packages/cd/e6/1843e183dd56287e8c33cd163c245b551e56b82ce8d54049e0810166be30/matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35d74ebdb3f71f112b36c2629cf32323adfbf42679e2751252acd468f5001c07"}, + {url = "https://files.pythonhosted.org/packages/d0/39/4c4fb38ec2356bcbc9017a5421623aec69aacde110e4e76d34d0a43702f0/matplotlib-3.7.2-cp310-cp310-win32.whl", hash = "sha256:fdbb46fad4fb47443b5b8ac76904b2e7a66556844f33370861b4788db0f8816a"}, + {url = "https://files.pythonhosted.org/packages/d8/76/ed92bfa302782be7cf6d9ac4338cd2a1a3c131892fc04bddf6cf07adcb01/matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717157e61b3a71d3d26ad4e1770dc85156c9af435659a25ee6407dc866cb258d"}, + {url = "https://files.pythonhosted.org/packages/e0/a9/afd0e7b98e4b855c884b737256c53e51c0126a4a40e8350228eb544644fb/matplotlib-3.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d2ff3c984b8a569bc1383cd468fc06b70d7b59d5c2854ca39f1436ae8394117"}, + {url = "https://files.pythonhosted.org/packages/e5/59/b859fa2539b4121b016ea85758188203522fc12b0711de8b247cfec3cdac/matplotlib-3.7.2.tar.gz", hash = "sha256:a8cdb91dddb04436bd2f098b8fdf4b81352e68cf4d2c6756fcc414791076569b"}, + {url = "https://files.pythonhosted.org/packages/f3/3c/b6f83a7e516aa4058b3878107390b6d9dfb24491a5018937886b54008e0b/matplotlib-3.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c308b255efb9b06b23874236ec0f10f026673ad6515f602027cc8ac7805352d"}, + {url = "https://files.pythonhosted.org/packages/f4/33/41a775c34ec6ae0d84c188c09da3fe3a268c1cd28045e8013aeda346b8b9/matplotlib-3.7.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:20f844d6be031948148ba49605c8b96dfe7d3711d1b63592830d650622458c11"}, + {url = "https://files.pythonhosted.org/packages/f6/22/9c31044ff7339c63727a135872e5cb59564f11625372a81c3eebf148f4af/matplotlib-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac60daa1dc83e8821eed155796b0f7888b6b916cf61d620a4ddd8200ac70cd64"}, + {url = "https://files.pythonhosted.org/packages/f6/e4/9621a1ec9312ca20f18c045690757f2276fb980d1b2beb23a7ee28d914db/matplotlib-3.7.2-cp311-cp311-win32.whl", hash = "sha256:26bede320d77e469fdf1bde212de0ec889169b04f7f1179b8930d66f82b30cbc"}, + {url = "https://files.pythonhosted.org/packages/ff/1f/2b83c7acf453318a80dc619e99fc30a663b2c1fb18be3d358a96addfecd9/matplotlib-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:23fb1750934e5f0128f9423db27c474aa32534cec21f7b2153262b066a581fd1"}, ] "matplotlib-inline 0.1.6" = [ {url = "https://files.pythonhosted.org/packages/d9/50/3af8c0362f26108e54d58c7f38784a3bdae6b9a450bab48ee8482d737f44/matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, {url = "https://files.pythonhosted.org/packages/f2/51/c34d7a1d528efaae3d8ddb18ef45a41f284eacf9e514523b191b7d0872cc/matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, ] -"numpy 1.24.3" = [ - {url = "https://files.pythonhosted.org/packages/0d/43/643629a4a278b4815541c7d69856c07ddb0e99bdc62b43538d3751eae2d8/numpy-1.24.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4"}, - {url = "https://files.pythonhosted.org/packages/15/b8/cbe1750b9ec78062e5a00ef39ff8bdf189ce753b411b6b35931ababaee47/numpy-1.24.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4"}, - {url = "https://files.pythonhosted.org/packages/1a/62/af7e78a12207608b23e3b2e248fc823fbef75f17d5defc8a127c5661daca/numpy-1.24.3-cp38-cp38-win_amd64.whl", hash = "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289"}, - {url = "https://files.pythonhosted.org/packages/2c/d4/590ae7df5044465cc9fa2db152ae12468694d62d952b1528ecff328ef7fc/numpy-1.24.3.tar.gz", hash = "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155"}, - {url = "https://files.pythonhosted.org/packages/53/f7/bf6e2b973c6d6a4c60f722dd95322d4997b4999347d67c5c74a4042a07b7/numpy-1.24.3-cp38-cp38-win32.whl", hash = "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4"}, - {url = "https://files.pythonhosted.org/packages/54/41/fb17c1d48a574c50422ff3f1b17ed979b755adc6ed291c4a44a76e226c67/numpy-1.24.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187"}, - {url = "https://files.pythonhosted.org/packages/5a/ab/d0eff89e0c05cc86fa7955c5e54e8ed0957a8a97a2516384b9ffd82008cc/numpy-1.24.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0"}, - {url = "https://files.pythonhosted.org/packages/62/e4/cd77d5f3d02c30d9ca8f2995df3cb3974c75cf1cc777fad445753475c4e4/numpy-1.24.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463"}, - {url = "https://files.pythonhosted.org/packages/65/5d/46da284b0bf6cfbf04082c3c5e84399664d69e41c11a33587ad49b0c64e5/numpy-1.24.3-cp310-cp310-win_amd64.whl", hash = "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7"}, - {url = "https://files.pythonhosted.org/packages/6f/72/38f9a536bdb5bfb1682f2520f133ec6e08dde8bcca1f632e347641d90763/numpy-1.24.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6"}, - {url = "https://files.pythonhosted.org/packages/72/eb/9c77bbc4d2b4ca17ef253621794a2d42897d896f86cd493db3eabe1a7d25/numpy-1.24.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385"}, - {url = "https://files.pythonhosted.org/packages/76/7c/cfb8ac4925defbe222aec15ac6b42b2a3d9bab7c9d13a2e767f534b35c2e/numpy-1.24.3-cp39-cp39-win_amd64.whl", hash = "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17"}, - {url = "https://files.pythonhosted.org/packages/79/4a/63a79242763edde0b5025d104cc2b78c44d89310b1bbc9b0f64a96b72ea0/numpy-1.24.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078"}, - {url = "https://files.pythonhosted.org/packages/82/19/321d369ede7458500f59151101470129d14f3b6768bb9b99bb7156f526b5/numpy-1.24.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950"}, - {url = "https://files.pythonhosted.org/packages/83/be/de078ac5e4ff572b1bdac1808b77cea2013b2c6286282f89b1de3e951273/numpy-1.24.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4"}, - {url = "https://files.pythonhosted.org/packages/89/e3/e2f478b2ff131e7c3171044a87e74df61db4b67fbcb90be479c07a44d0a7/numpy-1.24.3-cp310-cp310-win32.whl", hash = "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b"}, - {url = "https://files.pythonhosted.org/packages/8b/d9/814a619ab84d8eb0d95e08d4c723e665f1e694b5a6068ca505a61bdc3745/numpy-1.24.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f"}, - {url = "https://files.pythonhosted.org/packages/94/84/ed45416c8319c02348a5812d5647796a0833e3fb5576d01758f2a72e9200/numpy-1.24.3-cp311-cp311-win32.whl", hash = "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096"}, - {url = "https://files.pythonhosted.org/packages/96/92/2a8c1356e226311cf885e04eff576df8c357b2626c47c9283024bc24e01e/numpy-1.24.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02"}, - {url = "https://files.pythonhosted.org/packages/a7/fe/72493149c65dcd39d8c8dc09870e242bd689d1db2bde3ec479807bf0d414/numpy-1.24.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c"}, - {url = "https://files.pythonhosted.org/packages/ca/13/c5bc0100b425f007412c3ba5d71e5ae9c08260fecbffd620764a9df1f4de/numpy-1.24.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c"}, - {url = "https://files.pythonhosted.org/packages/d5/d6/07b37e7fecad7d158aabb4782a1b941e10afe8b80ec24cd64285a5bbb81b/numpy-1.24.3-cp39-cp39-win32.whl", hash = "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c"}, - {url = "https://files.pythonhosted.org/packages/eb/10/2c3c672034d860bcca50b65d656e24c4e2ace9fb452fdd81da78cb7418a1/numpy-1.24.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812"}, - {url = "https://files.pythonhosted.org/packages/ec/7d/f69c47ea3db0cd8ca444aec241a80b538eb176ae756820489a9d2946ec8c/numpy-1.24.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3"}, - {url = "https://files.pythonhosted.org/packages/ee/6c/7217a8844dfe22e349bccbecd35571fa72c5d7fe8b33d8c5540e8cc2535c/numpy-1.24.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf"}, - {url = "https://files.pythonhosted.org/packages/f0/e8/1ea9adebdccaadfc208c7517e09f5145ed5a73069779ff436393085d47a2/numpy-1.24.3-cp311-cp311-win_amd64.whl", hash = "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80"}, - {url = "https://files.pythonhosted.org/packages/f3/23/7cc851bae09cf4db90d42a701dfe525780883ada86bece45e3da7a07e76b/numpy-1.24.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570"}, - {url = "https://files.pythonhosted.org/packages/fa/7d/8dfb40eecbb6bc83ca00ef979f5cdeca5909a250cb8b642dcf1fbd34c078/numpy-1.24.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7"}, +"mercantile 1.2.1" = [ + {url = "https://files.pythonhosted.org/packages/b2/d6/de0cc74f8d36976aeca0dd2e9cbf711882ff8e177495115fd82459afdc4d/mercantile-1.2.1-py3-none-any.whl", hash = "sha256:30f457a73ee88261aab787b7069d85961a5703bb09dc57a170190bc042cd023f"}, + {url = "https://files.pythonhosted.org/packages/d2/c6/87409bcb26fb68c393fa8cf58ba09363aa7298cfb438a0109b5cb14bc98b/mercantile-1.2.1.tar.gz", hash = "sha256:fa3c6db15daffd58454ac198b31887519a19caccee3f9d63d17ae7ff61b3b56b"}, +] +"numpy 1.25.2" = [ + {url = "https://files.pythonhosted.org/packages/0f/a8/5057b97c395a710999b5697ffedd648caee82c24a29595952d26bd750155/numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {url = "https://files.pythonhosted.org/packages/11/58/e921b73d1a181d49fc5a797f5151b7be78cbc5b4483f8f6042e295b85c01/numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {url = "https://files.pythonhosted.org/packages/2c/53/9a023f6960ea6c8f66eafae774ba7ab1700fd987158df5aa9dbb28f98f8b/numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {url = "https://files.pythonhosted.org/packages/2d/2a/5d85ca5d889363ffdec3e3258c7bacdc655801787d004a55e04cf19eeb4a/numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {url = "https://files.pythonhosted.org/packages/32/6a/65dbc57a89078af9ff8bfcd4c0761a50172d90192eaeb1b6f56e5fbf1c3d/numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {url = "https://files.pythonhosted.org/packages/50/67/3e966d99a07d60a21a21d7ec016e9e4c2642a86fea251ec68677daf71d4d/numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {url = "https://files.pythonhosted.org/packages/5c/e4/990c6cb09f2cd1a3f53bcc4e489dad903faa01b058b625d84bb62d2e9391/numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {url = "https://files.pythonhosted.org/packages/63/bd/a1c256cdea5d99e2f7e1acc44fc287455420caeb2e97d43ff0dda908fae8/numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {url = "https://files.pythonhosted.org/packages/69/1f/c95b1108a9972a52d7b1b63ed8ca70466b59b8c1811bd121f1e667cc45d8/numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {url = "https://files.pythonhosted.org/packages/6d/b6/94a587cd64ef090f844ab1d8c8f1af44d07be7387f5f1a40eb729a0ff9c9/numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {url = "https://files.pythonhosted.org/packages/71/3c/3b1981c6a1986adc9ee7db760c0c34ea5b14ac3da9ecfcf1ea2a4ec6c398/numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {url = "https://files.pythonhosted.org/packages/72/b2/02770e60c4e2f7e158d923ab0dea4e9f146a2dbf267fec6d8dc61d475689/numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {url = "https://files.pythonhosted.org/packages/73/6f/2a0d0ad31a588d303178d494787f921c246c6234eccced236866bc1beaa5/numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {url = "https://files.pythonhosted.org/packages/81/e3/f562c2d76af16c1d79e73de04f9d08e5a7fd0e50ae12692acd4dbd2501f7/numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {url = "https://files.pythonhosted.org/packages/86/a1/b8ef999c32f26a97b5f714887e21f96c12ae99a38583a0a96e65283ac0a1/numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {url = "https://files.pythonhosted.org/packages/8b/d9/22c304cd123e0a1b7d89213e50ed6ec4b22f07f1117d64d28f81c08be428/numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {url = "https://files.pythonhosted.org/packages/a0/41/8f53eff8e969dd8576ddfb45e7ed315407d27c7518ae49418be8ed532b07/numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, + {url = "https://files.pythonhosted.org/packages/b1/39/3f88e2bfac1fb510c112dc0c78a1e7cad8f3a2d75e714d1484a044c56682/numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {url = "https://files.pythonhosted.org/packages/b7/db/4d37359e2c9cf8bf071c08b8a6f7374648a5ab2e76e2e22e3b808f81d507/numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {url = "https://files.pythonhosted.org/packages/c3/ea/1d95b399078ecaa7b5d791e1fdbb3aee272077d9fd5fb499593c87dec5ea/numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {url = "https://files.pythonhosted.org/packages/c9/57/3cb8131a0e6d559501e088d3e685f4122e9ff9104c4b63e4dfd3a577b491/numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {url = "https://files.pythonhosted.org/packages/cd/fe/e900cb2ebafae04b7570081cefc65b6fdd9e202b9b353572506cea5cafdf/numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {url = "https://files.pythonhosted.org/packages/d3/76/fe6b9e75883d1f2bd3cd27cbc7307ec99a0cc76fa941937c177f464fd60a/numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {url = "https://files.pythonhosted.org/packages/d5/50/8aedb5ff1460e7c8527af15c6326115009e7c270ec705487155b779ebabb/numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {url = "https://files.pythonhosted.org/packages/df/18/181fb40f03090c6fbd061bb8b1f4c32453f7c602b0dc7c08b307baca7cd7/numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, ] "oauthlib 3.2.2" = [ {url = "https://files.pythonhosted.org/packages/6d/fa/fbf4001037904031639e6bfbfc02badfc7e12f137a8afa254df6c4c8a670/oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -1878,9 +1928,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/1c/a6/8ce4d2ef2c29be3235c08bb00e0b81e29d38ebc47d82b17af681bf662b74/openpyxl-3.0.9-py2.py3-none-any.whl", hash = "sha256:8f3b11bd896a95468a4ab162fc4fcd260d46157155d1f8bfaabb99d88cfcf79f"}, {url = "https://files.pythonhosted.org/packages/9e/19/c45fb7a40cd46e03e36d60d1db26a50a795fa0b6b8a2a8094f4ac0c71ae5/openpyxl-3.0.9.tar.gz", hash = "sha256:40f568b9829bf9e446acfffce30250ac1fa39035124d55fc024025c41481c90f"}, ] -"osm-fieldwork 0.3.4" = [ - {url = "https://files.pythonhosted.org/packages/61/80/82ec3082520d277f27764ee7bafbc66c8ebf7ae7f2a9a217e5b03f0a6290/osm_fieldwork-0.3.4-py3-none-any.whl", hash = "sha256:70e2fee90987424f376ced55d694dc9b1472ffdda93efbe5ef68f0c09df59934"}, - {url = "https://files.pythonhosted.org/packages/a5/b1/35c9e1f24b62e84c5acfab0e75d9c5b2f850dfd7178d8d1dfc5bddcf8a22/osm-fieldwork-0.3.4.tar.gz", hash = "sha256:0054b2a58f3c551789c5c2a37c13a9fe5fcdf209f61bba1272a4a3cebf97b34c"}, +"osm-fieldwork 0.3.5" = [ + {url = "https://files.pythonhosted.org/packages/3c/78/b845869c7fd99f0829205763f4232aaddb6461c793f83a971f8b8eb2fcf7/osm_fieldwork-0.3.5-py3-none-any.whl", hash = "sha256:75a012c8945c3086da5937bd80673cc275e7fa1ee2dae3596b9115233f7e345a"}, + {url = "https://files.pythonhosted.org/packages/5f/fc/ce3ca01ac9bd017cfbe79677e59397a2c9f7cd9e0b99924b646934cb1f7a/osm-fieldwork-0.3.5.tar.gz", hash = "sha256:69d8fc3c4f362ba2ddf7a5df7379d751baa26805875f8a8e0d7e856ac97d18d2"}, ] "osm-login-python 0.0.4" = [ {url = "https://files.pythonhosted.org/packages/d1/81/9c36618b20b570ddcf6fd7770a528a5d93f5b1f853d7ef81e536fdd39f76/osm-login-python-0.0.4.tar.gz", hash = "sha256:f10c9bc91978aebb38c5083502d42d78463b617d4a9a05d9a8bdc44550de32b8"}, @@ -1895,32 +1945,32 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/ab/c3/57f0601a2d4fe15de7a553c00adbc901425661bf048f2a22dfc500caf121/packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, {url = "https://files.pythonhosted.org/packages/b9/6c/7c6658d258d7971c5eb0d9b69fa9265879ec9a9158031206d47800ae2213/packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] -"pandas 2.0.1" = [ - {url = "https://files.pythonhosted.org/packages/16/75/924e3a52c35cb105a152d29622d0f06bb0f48a677e77ddd6e11ef0004164/pandas-2.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e09a53a4fe8d6ae2149959a2d02e1ef2f4d2ceb285ac48f74b79798507e468b4"}, - {url = "https://files.pythonhosted.org/packages/17/10/712e0566d1f561d1fcbb8f620523bc1777c7f1183365b5747b74e0585637/pandas-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:70a996a1d2432dadedbb638fe7d921c88b0cc4dd90374eab51bb33dc6c0c2a12"}, - {url = "https://files.pythonhosted.org/packages/32/49/d7240d653397a74f181015bbf0a412098e54aa72f59660d0dd82e336fac8/pandas-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af2449e9e984dfad39276b885271ba31c5e0204ffd9f21f287a245980b0e4091"}, - {url = "https://files.pythonhosted.org/packages/41/07/4bf208b31ae6e78a70baa706c5cb90c02d458d418a707c193466bf8cd4e5/pandas-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:909a72b52175590debbf1d0c9e3e6bce2f1833c80c76d80bd1aa09188be768e5"}, - {url = "https://files.pythonhosted.org/packages/41/77/a8210fab9a40a3546ab24f69e81c77539818d4379b6255a4510892d91015/pandas-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:03e677c6bc9cfb7f93a8b617d44f6091613a5671ef2944818469be7b42114a00"}, - {url = "https://files.pythonhosted.org/packages/4b/1a/252a5933e9c7fcf632b34d5a269d04b313b0181a58eb1395377503eccc7c/pandas-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d099ecaa5b9e977b55cd43cf842ec13b14afa1cfa51b7e1179d90b38c53ce6a"}, - {url = "https://files.pythonhosted.org/packages/55/4f/934c0be7d9d50f9c0ca306281e3fc306b17b086c672deed55c6fe55ab2c6/pandas-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a37ee35a3eb6ce523b2c064af6286c45ea1c7ff882d46e10d0945dbda7572753"}, - {url = "https://files.pythonhosted.org/packages/6c/e0/73987b6ecc7246e02ab557240843f93fd5adf45d1355abb458aa1f2a0932/pandas-2.0.1.tar.gz", hash = "sha256:19b8e5270da32b41ebf12f0e7165efa7024492e9513fb46fb631c5022ae5709d"}, - {url = "https://files.pythonhosted.org/packages/6f/cf/d52394af3194f41db6cf99ec0975e913ad1bab14b69962d7ae7da5e4f01a/pandas-2.0.1-cp310-cp310-win32.whl", hash = "sha256:12bd6618e3cc737c5200ecabbbb5eaba8ab645a4b0db508ceeb4004bb10b060e"}, - {url = "https://files.pythonhosted.org/packages/90/30/8b857447b0f4b59d5bd84e934e82ef8c82b73d71d1c9611c8aaaa8d44a50/pandas-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:2b6fe5f7ce1cba0e74188c8473c9091ead9b293ef0a6794939f8cc7947057abd"}, - {url = "https://files.pythonhosted.org/packages/91/ff/6af7586c9e8982dcf7078adfba1b0af244ae4dd7e5cbd617c24be9210ed5/pandas-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:99f7192d8b0e6daf8e0d0fd93baa40056684e4b4aaaef9ea78dff34168e1f2f0"}, - {url = "https://files.pythonhosted.org/packages/93/1f/85327a36a8fdc441a58424cfeb9104c2fa884eea1c9249a3c061c5c805a7/pandas-2.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c0853d487b6c868bf107a4b270a823746175b1932093b537b9b76c639fc6f7e"}, - {url = "https://files.pythonhosted.org/packages/95/df/ed5395174b7659e13444690073faaf3fcd5b7574e2a5180a2c44796c6728/pandas-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7bbf173d364130334e0159a9a034f573e8b44a05320995127cf676b85fd8ce86"}, - {url = "https://files.pythonhosted.org/packages/a3/40/eca46f6af07a83ea3b8706586b2d8a28c01bdccee789d24f2ccc5e148b28/pandas-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a514ae436b23a92366fbad8365807fc0eed15ca219690b3445dcfa33597a5cc"}, - {url = "https://files.pythonhosted.org/packages/a3/6b/adebe4415a929833cce8f63465b19386382ec855ab161a21ab08344a7a43/pandas-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe7914d8ddb2d54b900cec264c090b88d141a1eed605c9539a187dbc2547f022"}, - {url = "https://files.pythonhosted.org/packages/ac/99/ebdcc8665b7a94bf4dba22cbd6883ee633caa760b149ffe63cc1957b90ae/pandas-2.0.1-cp38-cp38-win32.whl", hash = "sha256:a2564629b3a47b6aa303e024e3d84e850d36746f7e804347f64229f8c87416ea"}, - {url = "https://files.pythonhosted.org/packages/b2/4c/e04a85386949b0849c310e980f0e16d970b932f15d8eacd81987b97fe6da/pandas-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25e23a03f7ad7211ffa30cb181c3e5f6d96a8e4cb22898af462a7333f8a74eb"}, - {url = "https://files.pythonhosted.org/packages/b3/3b/acb903edc6d4a9272af71181eee2840b0b1ca104ea3545127393246b7c32/pandas-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:00959a04a1d7bbc63d75a768540fb20ecc9e65fd80744c930e23768345a362a7"}, - {url = "https://files.pythonhosted.org/packages/c9/35/5337271d6cd24ec58d44991abe8adc6686e6796fc5ac893bcefa905b7423/pandas-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:320b180d125c3842c5da5889183b9a43da4ebba375ab2ef938f57bf267a3c684"}, - {url = "https://files.pythonhosted.org/packages/d2/cb/7cb0c973d7ae336f46a6e2b29c84496fadde49fe651739efdc2035af1779/pandas-2.0.1-cp39-cp39-win32.whl", hash = "sha256:90d1d365d77d287063c5e339f49b27bd99ef06d10a8843cf00b1a49326d492c1"}, - {url = "https://files.pythonhosted.org/packages/e9/d7/ee1b27176addc1236f4a59a9ca105bbdf60424a597ab9b4e13f09e0a816f/pandas-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18d22cb9043b6c6804529810f492ab09d638ddf625c5dea8529239607295cb59"}, - {url = "https://files.pythonhosted.org/packages/f3/32/2fae5c7e886d543c09328301baf1c79cf5e0a111b22dbf01779d97a702f7/pandas-2.0.1-cp311-cp311-win32.whl", hash = "sha256:7b8395d335b08bc8b050590da264f94a439b4770ff16bb51798527f1dd840388"}, - {url = "https://files.pythonhosted.org/packages/f3/ac/8bfddafc42a0c801902efa2c3f4ee286369df1a4acafc0409a13c458c8bf/pandas-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fa0067f2419f933101bdc6001bcea1d50812afbd367b30943417d67fbb99678"}, - {url = "https://files.pythonhosted.org/packages/f7/56/38f5d7ccd495451979d38dc7d534035989f2dadf183600c53ae5501dff3d/pandas-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910df06feaf9935d05247db6de452f6d59820e432c18a2919a92ffcd98f8f79b"}, - {url = "https://files.pythonhosted.org/packages/fc/79/a3ae8a668af15210d03e06bd8051892cab0826e7be7993d3b1e4a03ab420/pandas-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:8db5a644d184a38e6ed40feeb12d410d7fcc36648443defe4707022da127fc35"}, +"pandas 2.0.3" = [ + {url = "https://files.pythonhosted.org/packages/26/7d/d8aa0a2c4f3f5f8ea59fb946c8eafe8f508090ca73e2b08a9af853c1103e/pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {url = "https://files.pythonhosted.org/packages/3c/b2/0d4a5729ce1ce11630c4fc5d5522a33b967b3ca146c210f58efde7c40e99/pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {url = "https://files.pythonhosted.org/packages/4a/f6/f620ca62365d83e663a255a41b08d2fc2eaf304e0b8b21bb6d62a7390fe3/pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {url = "https://files.pythonhosted.org/packages/53/c3/f8e87361f7fdf42012def602bfa2a593423c729f5cb7c97aed7f51be66ac/pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {url = "https://files.pythonhosted.org/packages/6c/1c/689c9d99bc4e5d366a5fd871f0bcdee98a6581e240f96b78d2d08f103774/pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {url = "https://files.pythonhosted.org/packages/78/a8/07dd10f90ca915ed914853cd57f79bfc22e1ef4384ab56cb4336d2fc1f2a/pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {url = "https://files.pythonhosted.org/packages/8f/bb/aea1fbeed5b474cb8634364718abe9030d7cc7a30bf51f40bd494bbc89a2/pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {url = "https://files.pythonhosted.org/packages/94/71/3a0c25433c54bb29b48e3155b959ac78f4c4f2f06f94d8318aac612cb80f/pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {url = "https://files.pythonhosted.org/packages/9a/f2/0ad053856debbe90c83de1b4f05915f85fd2146f20faf9daa3b320d36df3/pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {url = "https://files.pythonhosted.org/packages/9e/0d/91a9fd2c202f2b1d97a38ab591890f86480ecbb596cbc56d035f6f23fdcc/pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {url = "https://files.pythonhosted.org/packages/9e/71/756a1be6bee0209d8c0d8c5e3b9fc72c00373f384a4017095ec404aec3ad/pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {url = "https://files.pythonhosted.org/packages/a7/87/828d50c81ce0f434163bf70b925a0eec6076808e0bca312a79322b141f66/pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {url = "https://files.pythonhosted.org/packages/b1/a7/824332581e258b5aa4f3763ecb2a797e5f9a54269044ba2e50ac19936b32/pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, + {url = "https://files.pythonhosted.org/packages/b3/92/a5e5133421b49e901a12e02a6a7ef3a0130e10d13db8cb657fdd0cba3b90/pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {url = "https://files.pythonhosted.org/packages/c2/59/cb4234bc9b968c57e81861b306b10cd8170272c57b098b724d3de5eda124/pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {url = "https://files.pythonhosted.org/packages/c3/6c/ea362eef61f05553aaf1a24b3e96b2d0603f5dc71a3bd35688a24ed88843/pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {url = "https://files.pythonhosted.org/packages/cc/b8/4d082f41c27c95bf90485d1447b647cc7e5680fea75e315669dc6e4cb398/pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {url = "https://files.pythonhosted.org/packages/d0/28/88b81881c056376254618fad622a5e94b5126db8c61157ea1910cd1c040a/pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {url = "https://files.pythonhosted.org/packages/d6/90/e7d387f1a416b14e59290baa7a454a90d719baebbf77433ff1bdcc727800/pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {url = "https://files.pythonhosted.org/packages/e3/59/35a2892bf09ded9c1bf3804461efe772836a5261ef5dfb4e264ce813ff99/pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {url = "https://files.pythonhosted.org/packages/e4/a5/212b9039e25bf8ebb97e417a96660e3dc925dacd3f8653d531b8f7fd9be4/pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {url = "https://files.pythonhosted.org/packages/ea/ae/26a2eda7fa581347d69e51f93892493b2074ef3352ac71033c9f32c52389/pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {url = "https://files.pythonhosted.org/packages/ed/30/b97456e7063edac0e5a405128065f0cd2033adfe3716fb2256c186bd41d0/pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {url = "https://files.pythonhosted.org/packages/f8/7f/5b047effafbdd34e52c9e2d7e44f729a0655efafb22198c45cf692cdc157/pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {url = "https://files.pythonhosted.org/packages/f8/c7/cfef920b7b457dff6928e824896cb82367650ea127d048ee0b820026db4f/pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, ] "parso 0.8.3" = [ {url = "https://files.pythonhosted.org/packages/05/63/8011bd08a4111858f79d2b09aad86638490d62fbf881c44e434a6dfca87b/parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, @@ -1934,84 +1984,74 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/9a/41/220f49aaea88bc6fa6cba8d05ecf24676326156c23b991e80b3f2fc24c77/pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, {url = "https://files.pythonhosted.org/packages/d8/b6/df3c1c9b616e9c0edbc4fbab6ddd09df9535849c64ba51fcb6531c32d4d8/pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] -"pillow 9.5.0" = [ - {url = "https://files.pythonhosted.org/packages/00/d5/4903f310765e0ff2b8e91ffe55031ac6af77d982f0156061e20a4d1a8b2d/Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, - {url = "https://files.pythonhosted.org/packages/02/4a/d362f7f44f1e5801c6726f0eaaeaf869d0d43c554b717072b2c5540cefb4/Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, - {url = "https://files.pythonhosted.org/packages/05/80/40ec3390eb39f128f9c81dfdce6fe419fad1296e816232c2785e74bb6255/Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, - {url = "https://files.pythonhosted.org/packages/0c/02/7729c8aecbc525b560c7eb283ffa34c6f5a6d0ed6d1339570c65a3e63088/Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, - {url = "https://files.pythonhosted.org/packages/0d/4f/e31e4814b09f15c13d6fe069458a3b32a240ffaeb603b973456de3ea6d2a/Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, - {url = "https://files.pythonhosted.org/packages/17/66/20db69c0361902a2f6ee2086d3e83c70133e3fb4cb31470e59a8ed37184e/Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, - {url = "https://files.pythonhosted.org/packages/18/e4/f13369726d14e550f0028265b299f7c8262ccb7fb295df29e4f2fd79e0ab/Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, - {url = "https://files.pythonhosted.org/packages/1b/bc/cff591742feea45f88a3b8a83f7cab4a1dcdb4bcdfc51a06d92f96c81165/Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, - {url = "https://files.pythonhosted.org/packages/1b/dc/2d0919633097a93dcad35a2fb97304f4a9297f746e830a8b441af3db2007/Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, - {url = "https://files.pythonhosted.org/packages/1e/e4/de633d85be3b3c770c554a37a89e8273069bd19c34b15a419c2795600310/Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, - {url = "https://files.pythonhosted.org/packages/22/3b/db9837995e3d51ff356e39726e2ec0925850fdfef104996c2767baca4407/Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, - {url = "https://files.pythonhosted.org/packages/24/35/92032a00f41bea9bf93f19d48f15daac27d1365c0038fe22dc4e7fc7c8b0/Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, - {url = "https://files.pythonhosted.org/packages/25/6b/d3c35d207c9c0b6c2f855420f62e64ef43d348e8c797ad1c32b9f2106a19/Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, - {url = "https://files.pythonhosted.org/packages/28/a2/f2d0d584d45100a5419fd70a1233ade8f12469ffe6e8e3acd40364beaadb/Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, - {url = "https://files.pythonhosted.org/packages/29/8a/f4cf3f32bc554f9260b645ea1151449ac13525796d3d1a42076d75945d8d/Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, - {url = "https://files.pythonhosted.org/packages/2c/a2/2d565cb1d754384a88998b9c86daf803a3a7908577875231eb99b8c7973d/Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, - {url = "https://files.pythonhosted.org/packages/2e/ad/d29c8c48498da680521665b8483beb78a9343269bbd0730970e9396b01f0/Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, - {url = "https://files.pythonhosted.org/packages/33/a8/0d37d73387b8ea9cb3ad391a93e65ed9f62a331c0dfed1869891b6efd7a2/Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, - {url = "https://files.pythonhosted.org/packages/37/95/48565d6beb34deaacda1543b515dab9479b8fa8b9046703fd08ad447ddfe/Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, - {url = "https://files.pythonhosted.org/packages/38/06/de304914ecd2c911939a28579546bd4d9b6ae0b3c07ce5fe9bd7d100eb34/Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, - {url = "https://files.pythonhosted.org/packages/3b/2b/57915b8af178e2c20bfd403ffed4521947881f9dbbfbaba48210dc59b9d7/Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, - {url = "https://files.pythonhosted.org/packages/3b/70/e9a45a2e9c58c23e023fcda5af9686f5b42c718cc9bc86194e0025cf0ec5/Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, - {url = "https://files.pythonhosted.org/packages/3d/59/e6bd2c3715ace343d9739276ceed79657fe116923238d102cf731ab463dd/Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, - {url = "https://files.pythonhosted.org/packages/3e/14/0030e542f2acfea43635e55584c114e6cfd94d342393a5f71f74c172dc35/Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, - {url = "https://files.pythonhosted.org/packages/46/a0/e410f655300932308e70e883dd60c0c51e6f74bed138641ea9193e64fd7c/Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, - {url = "https://files.pythonhosted.org/packages/49/ef/98941488c7491a249692787dc741c97c22d5212a6d85f017519011195cfe/Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, - {url = "https://files.pythonhosted.org/packages/50/ce/d39869c22904558ce32e664904cf72f13a9d47703b72392e881d9e7b6082/Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, - {url = "https://files.pythonhosted.org/packages/51/3a/a6701b987007aaa43559b7d8510629845b25686f09a0eb29f8946a62d767/Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, - {url = "https://files.pythonhosted.org/packages/51/d2/c10f72c44e000d08e41f822083cf322bb59afa7ed01ae7e3e47875b47600/Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, - {url = "https://files.pythonhosted.org/packages/52/f8/099a6b9de39763b40ed6be5c0aa5b5aed800ecad98535c6c77dfa79484f1/Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, - {url = "https://files.pythonhosted.org/packages/59/1d/26a56ed1deae695a8c7d13fb514284ba8b9fd62bab9ebe6d6b474523b8b0/Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, - {url = "https://files.pythonhosted.org/packages/5b/d9/8599b0e4f750aa3cc43613f57cae5a0dfe841b1a8c8c8bde97e83828cdfd/Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, - {url = "https://files.pythonhosted.org/packages/5c/a8/ff526cdec6b56eb20c992e7083f02c8065049ed1e62fbc159390d7a3dd5e/Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, - {url = "https://files.pythonhosted.org/packages/5d/06/2f319e3244bdd84567ed2d7d405a6e0fd9dd03fc6d7e24794ac1e14d570d/Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, - {url = "https://files.pythonhosted.org/packages/5d/38/b7bcbab3bfe1946ba9cf71c1fa03e541b498069457be49eadcdc229412ef/Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, - {url = "https://files.pythonhosted.org/packages/61/a5/ee306d6cc53c9a30c23ba2313b43b67fdf76c611ca5afd0cdd62922cbd3e/Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, - {url = "https://files.pythonhosted.org/packages/62/88/46a35f690ee4f8b08aef5fdb47f63d29c34f6874834155e52bf4456d9566/Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, - {url = "https://files.pythonhosted.org/packages/64/46/672289c0ff87733fb93854dedf3a8d65642a25c0bfc88e7f6d722f9161a5/Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, - {url = "https://files.pythonhosted.org/packages/69/72/48cc52bff8731cf72bc4101e34dc44807a410c171f921afb582a511da50e/Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, - {url = "https://files.pythonhosted.org/packages/78/a8/3c2d737d856eb9cd8c18e78f6fe0ed08a2805bded74cbb0455584859023b/Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, - {url = "https://files.pythonhosted.org/packages/7a/6a/a7df39c502caeadd942d8bf97bc2fdfc819fbdc7499a2ab05e7db43611ac/Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, - {url = "https://files.pythonhosted.org/packages/7a/75/4a382d1567efc6f4e3054f693167f8ce2d1ad939c5f6f12aa5c50f74b997/Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, - {url = "https://files.pythonhosted.org/packages/85/4d/d0b5c3610a39f01e380489770b10e2b8644a2188eace45c84e40d439b0dd/Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, - {url = "https://files.pythonhosted.org/packages/90/00/123c546069abac47bd4ce2e0a78e6ad4040e43294ebbb266a3a21d3616b2/Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, - {url = "https://files.pythonhosted.org/packages/93/54/9d7f01fd3fe4069c88827728646e3c8f1aff0995e8422d841b38f034f39a/Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, - {url = "https://files.pythonhosted.org/packages/95/62/8a943681db5f6588498ed86aa1568dd31c63f6afdabe50841589fc662c68/Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, - {url = "https://files.pythonhosted.org/packages/97/d2/f0b4c006c8997aff5277cdde18187c55ce767f9fd32b2dd657c1bf71b570/Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, - {url = "https://files.pythonhosted.org/packages/9a/57/7864b6a22acb5f1d4b70af8c92cbd5e3af25f4d5869c24cd8074ca1f3593/Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, - {url = "https://files.pythonhosted.org/packages/9a/6d/9beb596ba5a5e61081c843187bcdbb42a5c9a9ef552751b554894247da7a/Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, - {url = "https://files.pythonhosted.org/packages/a6/8b/cca45afbbd58ca032594ea465ded859b9da6d8bc226afe0e60e64bd8872e/Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, - {url = "https://files.pythonhosted.org/packages/a9/15/310cde63cb15a091de889ded26281924cf9cfa5c000b36b06bd0c7f50261/Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, - {url = "https://files.pythonhosted.org/packages/a9/70/9259e93534d01f846f7d0501f19bb7d8cc1751741bc20826fc8d3a20fe32/Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, - {url = "https://files.pythonhosted.org/packages/aa/a5/ba2eeb1a242babb23a21a782356f8b6fe1312b24b69062ee1cb60107fd95/Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, - {url = "https://files.pythonhosted.org/packages/af/b7/f9faf80e3c93b02712c5748f10c75a8948e74eca61ec2408f7e1d4c9dd16/Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, - {url = "https://files.pythonhosted.org/packages/b0/02/baf83c103657285542bba78978f5f6fb21d419944c2a4c54f950eb84a7bc/Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, - {url = "https://files.pythonhosted.org/packages/b8/c1/2c1daeb1e7c44d477f4f2d92f3316d922c9f8926378afcba424c6d1850aa/Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, - {url = "https://files.pythonhosted.org/packages/b9/8b/d38cc68796be4ac238db327682a1acfbc5deccf64a150aa44ee1efbaafae/Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, - {url = "https://files.pythonhosted.org/packages/c3/ba/c4c2a1411561cd9725979115e7450f1367b44997ae1ff29e5845bce92d52/Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, - {url = "https://files.pythonhosted.org/packages/cb/3c/4f3ef1a14e903d7b2bc43672c20f732b874e1e50a9a58ac9a1726ef3773d/Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, - {url = "https://files.pythonhosted.org/packages/d4/36/d22b0fac821a14572fdb9a8015b2bf19ee81eaa560ea25a6772760c86a30/Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, - {url = "https://files.pythonhosted.org/packages/d9/0e/7c6f054022235830dc2c37ec83e947d9ca09b0b0361e1e5e29983da92294/Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, - {url = "https://files.pythonhosted.org/packages/db/5c/ba9e291850f594f89436cdca93d36c6f8610d4fb7833a6c257f4481d4174/Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, - {url = "https://files.pythonhosted.org/packages/e7/2a/f3ed578595f8486ee2cc07434460097d89aedd406a3db849b890ca8ec416/Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, - {url = "https://files.pythonhosted.org/packages/ec/7d/01404982db598f271ac7c0d0207860f60ab9288cfacce9872eb567cfbfe3/Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, - {url = "https://files.pythonhosted.org/packages/f2/43/0892913d499c8df2c88dee69d59e77de19e0c51754a9be82023880641c09/Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, - {url = "https://files.pythonhosted.org/packages/ff/fc/48a51c0fe2a00d5def57b9981a1e0f8339b516351da7a51500383d833bc8/Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, -] -"pluggy 1.0.0" = [ - {url = "https://files.pythonhosted.org/packages/9e/01/f38e2ff29715251cf25532b9082a1589ab7e4f571ced434f98d0139336dc/pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {url = "https://files.pythonhosted.org/packages/a1/16/db2d7de3474b6e37cbb9c008965ee63835bba517e22cdb8c35b5116b5ce1/pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +"pillow 10.0.0" = [ + {url = "https://files.pythonhosted.org/packages/00/47/b0beca4a69700f28349411b498ec87b8a5ff5c158448a72b4deee1a26506/Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"}, + {url = "https://files.pythonhosted.org/packages/0f/0b/0f37aac8432fb91e9f7eec96a29afb354f172e593d2d6d8201e544f49b55/Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, + {url = "https://files.pythonhosted.org/packages/0f/8b/2ebaf9adcf4260c00f842154865f8730cf745906aa5dd499141fb6063e26/Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"}, + {url = "https://files.pythonhosted.org/packages/12/2e/7f20311309d03ccfefc3df6c00524d996d15a18319b46953ac8ee158b5a9/Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"}, + {url = "https://files.pythonhosted.org/packages/12/56/f3d27a918d53c2f19583bb88e69750af445e7ee49bfab969275ffd06efc8/Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"}, + {url = "https://files.pythonhosted.org/packages/16/89/818fa238e37a47a29bb8495ca2cafdd514599a89f19ada7916348a74b5f9/Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"}, + {url = "https://files.pythonhosted.org/packages/16/b5/b8e7419e1d746246bca06fd38eb988507b382f3fd2ee5dede2e4154022ad/Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"}, + {url = "https://files.pythonhosted.org/packages/23/08/bbd0a562bafe23b4c36d25072c89b8c31815f350a169016ede2644784ed6/Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"}, + {url = "https://files.pythonhosted.org/packages/2c/77/4d990996da3fafdf241f68752b2f267d131d181e0f8b72deb756798095fa/Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"}, + {url = "https://files.pythonhosted.org/packages/2e/a4/06f84d3fe7aa9558d2b80d8d4960fe07071a53e8d3ccac8b079905003048/Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, + {url = "https://files.pythonhosted.org/packages/34/87/483c11f67a654d4a10917b080004dc4a02c0cbf62ff7b2f9e7f8f2fd1bba/Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"}, + {url = "https://files.pythonhosted.org/packages/3d/36/e78f09d510354977e10102dd811e928666021d9c451e05df962d56477772/Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"}, + {url = "https://files.pythonhosted.org/packages/40/58/0a62422b3cf188dac72fe6c54b6f3f372ec2e84043eb4f8d2158626992b7/Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, + {url = "https://files.pythonhosted.org/packages/45/5c/04224bf1a8247d6bbba375248d74668724a5a9879b4c42c23dfadd0c28ae/Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"}, + {url = "https://files.pythonhosted.org/packages/45/de/b07418f00cd78af292ceb4e2855c158ef8477dc1cbcdac3e1f32eb4e53b6/Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"}, + {url = "https://files.pythonhosted.org/packages/4b/d1/1e84a98368897cacb067c6df81d7100967e2f8178be9ff49f70d22102c1c/Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"}, + {url = "https://files.pythonhosted.org/packages/4d/61/eba2506ce68706ccb7d485cee968e35fa9ee797d77520760acf41a65f281/Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, + {url = "https://files.pythonhosted.org/packages/50/e5/0d484d1ac71b934638f91b7156203ba5bf3eb12f596b616a68a85c123808/Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"}, + {url = "https://files.pythonhosted.org/packages/54/2e/04bae205c5bf3ff7e58735b73a1d3943d0e33e0f7ca8637aa30a2acd06d0/Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"}, + {url = "https://files.pythonhosted.org/packages/5a/29/aa1678cae507a480a6d75453c1de98940e5eb6bd8f0e8e8347ec29a4dfc0/Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, + {url = "https://files.pythonhosted.org/packages/5e/ae/0d98e3707678c96d86aec0fe5002637801892f17281cc123521ab929e8fd/Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"}, + {url = "https://files.pythonhosted.org/packages/5f/82/39a266a0626d2c0dd4ee341639fe7749268fc871429b90006eeb1583f24b/Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"}, + {url = "https://files.pythonhosted.org/packages/60/34/c90bacb4a72ead5c78e4d8291e0d3bb88cc3def3c76f059e9a8502fc421e/Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"}, + {url = "https://files.pythonhosted.org/packages/62/66/6b011b44193fe724f10949ae59ad6e045811f9fdc7ee994687eec44a54c5/Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"}, + {url = "https://files.pythonhosted.org/packages/66/d4/054e491f0880bf0119ee79cdc03264e01d5732e06c454da8c69b83a7c8f2/Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, + {url = "https://files.pythonhosted.org/packages/6a/33/c278084a811d7a7a17c8dd14cb261248fdd0265263760fb753a5a719241e/Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"}, + {url = "https://files.pythonhosted.org/packages/6e/4b/350373454133ceef9b14ec804781d9c8e4e10ac112f85c55285140315a67/Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"}, + {url = "https://files.pythonhosted.org/packages/72/17/6c1e6b0f78d21838844318057b7a939ab8a8d92deeb51d22563202b2db64/Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, + {url = "https://files.pythonhosted.org/packages/73/26/75fd7c1adc40bbdcbebc1adc120388d581e1d98a106257369a9bf8c44865/Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"}, + {url = "https://files.pythonhosted.org/packages/77/fc/8af4b17c4681eeba2d6890fbf8d6692af7e5a9b2d343f4d6e81053974dbb/Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"}, + {url = "https://files.pythonhosted.org/packages/78/b9/e5bc84e6ed714c7f0ec0dfe3f82c050c16126294e3d078fe155f10bd5971/Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"}, + {url = "https://files.pythonhosted.org/packages/79/53/3a7277ae95bfe86b8b4db0ed1d08c4924aa2dfbfe51b8fe0e310b160a9c6/Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"}, + {url = "https://files.pythonhosted.org/packages/7a/54/f6a14d95cba8ff082c550d836c9e5c23f1641d2ac291c23efe0494219b8c/Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"}, + {url = "https://files.pythonhosted.org/packages/7b/c9/08de9a629ce7cdeaea0ddca716e9efcd1844b2650f5b9dd8ec5609e40ffe/Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"}, + {url = "https://files.pythonhosted.org/packages/83/c0/aaa4f7f9f0ed854d8b519739392ed17ee1aaaa352fd037646e97634a6bdb/Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"}, + {url = "https://files.pythonhosted.org/packages/8a/ec/3e874bc51ccebf03f1ca4ea1e177569c0d7b37ee5a16ff497a73ed5800e0/Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, + {url = "https://files.pythonhosted.org/packages/8b/b3/d7b6ee16358d829ca482c74a96e2b9079bf33f8d7d37d16f8ebb19ddf5a4/Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"}, + {url = "https://files.pythonhosted.org/packages/8f/b8/1bf1012eee3059d150194d1fab148f553f3df42cf412e4e6656c772afad9/Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"}, + {url = "https://files.pythonhosted.org/packages/90/d9/abb4c3a02034dc538fb7f6e382108738dcc09f54baf86fc158590f279ff7/Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"}, + {url = "https://files.pythonhosted.org/packages/9c/e8/59271ada18cec229d4a79475a45a9e64367e54e5d1f488b030af63805960/Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, + {url = "https://files.pythonhosted.org/packages/a7/55/a71924b9bfb0f5174fd61aca7f5bd4038ebb416addbe0338cefe1ae58c80/Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"}, + {url = "https://files.pythonhosted.org/packages/a8/7b/f8ed885d18096930991bbaac729024435e0343a3c81062811cf865205a79/Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"}, + {url = "https://files.pythonhosted.org/packages/a8/df/f52e3621148bb35d06c8f6a113ee949169388a2a3095550314fa6b6809f5/Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"}, + {url = "https://files.pythonhosted.org/packages/ac/0c/7eeab446ab3acfb1ef0150308b663fa6f886d02f1d0fe66e7f67ffd6a844/Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"}, + {url = "https://files.pythonhosted.org/packages/b7/ad/71982d18fd28ed1f93c31b8648f980ebdbdbcf7d8c9c9b4af59290914ce9/Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"}, + {url = "https://files.pythonhosted.org/packages/ce/e1/861a5508b9fd82b39c05e4d49c0979a9c8ccab07dae39d0ce72bd5f2299d/Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"}, + {url = "https://files.pythonhosted.org/packages/d0/4f/faebe1180e5e6ad6330c539dda7f6081182157393ba6816a438f759a0e59/Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"}, + {url = "https://files.pythonhosted.org/packages/e7/af/06fa67e8c8c4ead837f6a4025b6605f4cb8ec0fcbff1e4c697712fabf9f9/Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, + {url = "https://files.pythonhosted.org/packages/eb/3a/023761d323f51b932ba8aa70bfe9c987f5fa094ffbaba9cd9295b8eee429/Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"}, + {url = "https://files.pythonhosted.org/packages/ec/1c/b97c5fbd67c859ce734c335b8ae33ce5941775cfe33277c9f1f6fdaf00f0/Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"}, + {url = "https://files.pythonhosted.org/packages/ef/0f/eea2ed37a53e816c8ed392a031468498687585c8d62ca89deeb687c0e89c/Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"}, + {url = "https://files.pythonhosted.org/packages/ef/53/024e161112beb11008d6c7529c954e2ec641ae17b99e03fe9a539e114ae6/Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"}, + {url = "https://files.pythonhosted.org/packages/f0/7f/ff6ce4360dccfacc3af3462cfcd2d7481a1cc8d6aa712927072016dd6755/Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, + {url = "https://files.pythonhosted.org/packages/f8/31/4cb552d54380f1d55a7c24db1c6fb8bb2370f57fc2fe31e11c1eb5f7e499/Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"}, + {url = "https://files.pythonhosted.org/packages/fb/f6/f59a7c86f9966b19f20bf42bcb136f2e72352b08c0edec079d9d8087fa36/Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, + {url = "https://files.pythonhosted.org/packages/ff/8c/5927a58c43ebc16e508eef325fdc6473b569e2474d3b4be49798aa371007/Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"}, +] +"pluggy 1.2.0" = [ + {url = "https://files.pythonhosted.org/packages/51/32/4a79112b8b87b21450b066e102d6608907f4c885ed7b04c3fdb085d4d6ae/pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, + {url = "https://files.pythonhosted.org/packages/8a/42/8f2833655a29c4e9cb52ee8a2be04ceac61bcff4a680fb338cbd3d1e322d/pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, ] "progress 1.6" = [ {url = "https://files.pythonhosted.org/packages/2a/68/d8412d1e0d70edf9791cbac5426dc859f4649afc22f2abbeb0d947cf70fd/progress-1.6.tar.gz", hash = "sha256:c9c86e98b5c03fa1fe11e3b67c1feda4788b8d0fe7336c2ff7d5644ccfba34cd"}, ] -"prompt-toolkit 3.0.38" = [ - {url = "https://files.pythonhosted.org/packages/4b/bb/75cdcd356f57d17b295aba121494c2333d26bfff1a837e6199b8b83c415a/prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, - {url = "https://files.pythonhosted.org/packages/87/3f/1f5a0ff475ae6481f4b0d45d4d911824d3218b94ee2a97a8cb84e5569836/prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, +"prompt-toolkit 3.0.39" = [ + {url = "https://files.pythonhosted.org/packages/9a/02/76cadde6135986dc1e82e2928f35ebeb5a1af805e2527fe466285593a2ba/prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, + {url = "https://files.pythonhosted.org/packages/a9/b4/ba77c84edf499877317225d7b7bc047a81f7c2eed9628eeb6bab0ac2e6c9/prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, ] "psycopg2 2.9.3" = [ {url = "https://files.pythonhosted.org/packages/00/7f/a1e886c894385c731dd063dfc4bcc6b252c502222b8dbd58ca40bc970691/psycopg2-2.9.3-cp310-cp310-win32.whl", hash = "sha256:083707a696e5e1c330af2508d8fab36f9700b26621ccbcb538abe22e15485362"}, @@ -2087,9 +2127,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/2c/71/aff5465d9e3d448a5d4beab1dc7c8dec72037e3ae7e0d856ee08538dc934/PyGithub-1.59.1-py3-none-any.whl", hash = "sha256:3d87a822e6c868142f0c2c4bf16cce4696b5a7a4d142a7bd160e1bdf75bc54a9"}, {url = "https://files.pythonhosted.org/packages/fb/30/203d3420960853e399de3b85d6613cea1cf17c1cf7fc9716f7ee7e17e0fc/PyGithub-1.59.1.tar.gz", hash = "sha256:c44e3a121c15bf9d3a5cc98d94c9a047a5132a9b01d22264627f58ade9ddc217"}, ] -"pygments 2.15.1" = [ - {url = "https://files.pythonhosted.org/packages/34/a7/37c8d68532ba71549db4212cb036dbd6161b40e463aba336770e80c72f84/Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {url = "https://files.pythonhosted.org/packages/89/6b/2114e54b290824197006e41be3f9bbe1a26e9c39d1f5fa20a6d62945a0b3/Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +"pygments 2.16.1" = [ + {url = "https://files.pythonhosted.org/packages/43/88/29adf0b44ba6ac85045e63734ae0997d3c58d8b1a91c914d240828d0d73d/Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, + {url = "https://files.pythonhosted.org/packages/d6/f7/4d461ddf9c2bcd6a4d7b2b139267ca32a69439387cc1f02a924ff8883825/Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, ] "pyjwt 2.8.0" = [ {url = "https://files.pythonhosted.org/packages/2b/4f/e04a8067c7c96c364cef7ef73906504e2f40d690811c021e1a1901473a19/PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, @@ -2119,6 +2159,10 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/3e/b9/3766cc361d93edb2ce81e2e1f87dd98f314d7d513877a342d31b30741680/pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, {url = "https://files.pythonhosted.org/packages/93/cd/112f092ec27cca83e0516de0a3368dbd9128c187fb6b52aaaa7cde39c96d/pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, ] +"pysmartdl 1.3.4" = [ + {url = "https://files.pythonhosted.org/packages/5a/4c/ed073b2373f115094a4a612431abe25b58e542bebd951557dcc881999ef9/pySmartDL-1.3.4.tar.gz", hash = "sha256:35275d1694f3474d33bdca93b27d3608265ffd42f5aeb28e56f38b906c0c35f4"}, + {url = "https://files.pythonhosted.org/packages/ac/6a/582286ea74c54363cba30413214767904f0a239e12253c3817feaf78453f/pySmartDL-1.3.4-py3-none-any.whl", hash = "sha256:671c277ca710fb9b6603b19176f5c091041ec4ef6dcdb507c9a983a89ca35d31"}, +] "pytest 7.2.2" = [ {url = "https://files.pythonhosted.org/packages/b2/68/5321b5793bd506961bd40bdbdd0674e7de4fb873ee7cab33dd27283ad513/pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, {url = "https://files.pythonhosted.org/packages/b9/29/311895d9cd3f003dd58e8fdea36dd895ba2da5c0c90601836f7de79f76fe/pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, @@ -2146,47 +2190,47 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/89/7b/eafe12ffcf383f30ff91b1626d9294d628e248fd7849a5d31f80eeb8bafd/pyxform-1.12.0-py3-none-any.whl", hash = "sha256:9fbc4b89d7578d509b1d413f71077279cf79a8598d3e10e74d595d165d6e2cbb"}, {url = "https://files.pythonhosted.org/packages/98/8f/2227edca77cab6eb526bfc641ac56af5e935918df1d9571aa565f3de1708/pyxform-1.12.0.tar.gz", hash = "sha256:16090fc00257b4ebba81f8f5e3f9311b78771d9d1542d2b0e649a9826036ca3e"}, ] -"pyyaml 6.0" = [ - {url = "https://files.pythonhosted.org/packages/02/25/6ba9f6bb50a3d4fbe22c1a02554dc670682a07c8701d1716d19ddea2c940/PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {url = "https://files.pythonhosted.org/packages/08/f4/ffa743f860f34a5e8c60abaaa686f82c9ac7a2b50e5a1c3b1eb564d59159/PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {url = "https://files.pythonhosted.org/packages/0f/93/5f81d1925ce3b531f5ff215376445ec220887cd1c9a8bde23759554dbdfd/PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {url = "https://files.pythonhosted.org/packages/12/fc/a4d5a7554e0067677823f7265cb3ae22aed8a238560b5133b58cda252dad/PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {url = "https://files.pythonhosted.org/packages/21/67/b42191239c5650c9e419c4a08a7a022bbf1abf55b0391c380a72c3af5462/PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {url = "https://files.pythonhosted.org/packages/2e/b3/13dfd4eeb5e4b2d686b6d1822b40702e991bf3a4194ca5cbcce8d43749db/PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {url = "https://files.pythonhosted.org/packages/36/2b/61d51a2c4f25ef062ae3f74576b01638bebad5e045f747ff12643df63844/PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, - {url = "https://files.pythonhosted.org/packages/44/e5/4fea13230bcebf24b28c0efd774a2dd65a0937a2d39e94a4503438b078ed/PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {url = "https://files.pythonhosted.org/packages/4d/7d/c2ab8da648cd2b937de11fb35649b127adab4851cbeaf5fd9b60a2dab0f7/PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {url = "https://files.pythonhosted.org/packages/55/e3/507a92589994a5b3c3d7f2a7a066339d6ff61c5c839bae56f7eff03d9c7b/PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {url = "https://files.pythonhosted.org/packages/56/8f/e8b49ad21d26111493dc2d5cae4d7efbd0e2e065440665f5023515f87f64/PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {url = "https://files.pythonhosted.org/packages/59/00/30e33fcd2a4562cd40c49c7740881009240c5cbbc0e41ca79ca4bba7c24b/PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {url = "https://files.pythonhosted.org/packages/5e/f4/7b4bb01873be78fc9fde307f38f62e380b7111862c165372cf094ca2b093/PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {url = "https://files.pythonhosted.org/packages/63/6b/f5dc7942bac17192f4ef00b2d0cdd1ae45eea453d05c1944c0573debe945/PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {url = "https://files.pythonhosted.org/packages/67/d4/b95266228a25ef5bd70984c08b4efce2c035a4baa5ccafa827b266e3dc36/PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {url = "https://files.pythonhosted.org/packages/68/3f/c027422e49433239267c62323fbc6320d6ac8d7d50cf0cb2a376260dad5f/PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {url = "https://files.pythonhosted.org/packages/6c/3d/524c642f3db37e7e7ab8d13a3f8b0c72d04a619abc19100097d987378fc6/PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {url = "https://files.pythonhosted.org/packages/74/68/3c13deaa496c14a030c431b7b828d6b343f79eb241b4848c7918091a64a2/PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {url = "https://files.pythonhosted.org/packages/77/da/e845437ffe0dffae4e7562faf23a4f264d886431c5d2a2816c853288dc8e/PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {url = "https://files.pythonhosted.org/packages/7f/d9/6a0d14ac8d3b5605dc925d177c1d21ee9f0b7b39287799db1e50d197b2f4/PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {url = "https://files.pythonhosted.org/packages/81/59/561f7e46916b78f3c4cab8d0c307c81656f11e32c846c0c97fda0019ed76/PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {url = "https://files.pythonhosted.org/packages/89/26/0bfd7b756b34c68f8fd158b7bc762b6b1705fc1b3cebf4cdbb53fd9ea75b/PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {url = "https://files.pythonhosted.org/packages/91/49/d46d7b15cddfa98533e89f3832f391aedf7e31f37b4d4df3a7a7855a7073/PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {url = "https://files.pythonhosted.org/packages/9d/f6/7e91fbb58c9ee528759aea5892e062cccb426720c5830ddcce92eba00ff1/PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {url = "https://files.pythonhosted.org/packages/a4/ba/e508fc780e3c94c12753a54fe8f74de535741a10d33b29a576a9bec03500/PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {url = "https://files.pythonhosted.org/packages/a4/e6/4d7a01bc0730c8f958a62d6a4c4f3df23b6139ad68c132b168970d84f192/PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {url = "https://files.pythonhosted.org/packages/a8/32/1bbe38477fb23f1d83041fefeabf93ef1cd6f0efcf44c221519507315d92/PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {url = "https://files.pythonhosted.org/packages/a8/5b/c4d674846ea4b07ee239fbf6010bcc427c4e4552ba5655b446e36b9a40a7/PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {url = "https://files.pythonhosted.org/packages/b3/85/79b9e5b4e8d3c0ac657f4e8617713cca8408f6cdc65d2ee6554217cedff1/PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {url = "https://files.pythonhosted.org/packages/b7/09/2f6f4851bbca08642fef087bade095edc3c47f28d1e7bff6b20de5262a77/PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {url = "https://files.pythonhosted.org/packages/cb/5f/05dd91f5046e2256e35d885f3b8f0f280148568f08e1bf20421887523e9a/PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {url = "https://files.pythonhosted.org/packages/d1/c0/4fe04181b0210ee2647cfbb89ecd10a36eef89f10d8aca6a192c201bbe58/PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {url = "https://files.pythonhosted.org/packages/d7/42/7ad4b6d67a16229496d4f6e74201bdbebcf4bc1e87d5a70c9297d4961bd2/PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {url = "https://files.pythonhosted.org/packages/db/4e/74bc723f2d22677387ab90cd9139e62874d14211be7172ed8c9f9a7c81a9/PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {url = "https://files.pythonhosted.org/packages/df/75/ee0565bbf65133e5b6ffa154db43544af96ea4c42439e6b58c1e0eb44b4e/PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {url = "https://files.pythonhosted.org/packages/eb/5f/6e6fe6904e1a9c67bc2ca5629a69e7a5a0b17f079da838bab98a1e548b25/PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {url = "https://files.pythonhosted.org/packages/ef/ad/b443cce94539e57e1a745a845f95c100ad7b97593d7e104051e43f730ecd/PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {url = "https://files.pythonhosted.org/packages/f5/6f/b8b4515346af7c33d3b07cd8ca8ea0700ca72e8d7a750b2b87ac0268ca4e/PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {url = "https://files.pythonhosted.org/packages/f8/54/799b059314b13e1063473f76e908f44106014d18f54b16c83a16edccd5ec/PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {url = "https://files.pythonhosted.org/packages/fc/48/531ecd926fe0a374346dd811bf1eda59a95583595bb80eadad511f3269b8/PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, +"pyyaml 6.0.1" = [ + {url = "https://files.pythonhosted.org/packages/02/74/b2320ebe006b6a521cf929c78f12a220b9db319b38165023623ed195654b/PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {url = "https://files.pythonhosted.org/packages/03/f7/4f8b71f3ce8cfb2c06e814aeda5b26ecc62ecb5cf85f5c8898be34e6eb6a/PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {url = "https://files.pythonhosted.org/packages/06/92/e0224aa6ebf9dc54a06a4609da37da40bb08d126f5535d81bff6b417b2ae/PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {url = "https://files.pythonhosted.org/packages/0e/88/21b2f16cb2123c1e9375f2c93486e35fdc86e63f02e274f0e99c589ef153/PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {url = "https://files.pythonhosted.org/packages/1e/ae/964ccb88a938f20ece5754878f182cfbd846924930d02d29d06af8d4c69e/PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {url = "https://files.pythonhosted.org/packages/24/62/7fcc372442ec8ea331da18c24b13710e010c5073ab851ef36bf9dacb283f/PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {url = "https://files.pythonhosted.org/packages/24/97/9b59b43431f98d01806b288532da38099cc6f2fea0f3d712e21e269c0279/PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {url = "https://files.pythonhosted.org/packages/27/d5/fb4f7a3c96af89c214387af42c76117d2c2a0a40576e217632548a6e1aff/PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {url = "https://files.pythonhosted.org/packages/28/09/55f715ddbf95a054b764b547f617e22f1d5e45d83905660e9a088078fe67/PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {url = "https://files.pythonhosted.org/packages/29/0f/9782fa5b10152abf033aec56a601177ead85ee03b57781f2d9fced09eefc/PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {url = "https://files.pythonhosted.org/packages/29/61/bf33c6c85c55bc45a29eee3195848ff2d518d84735eb0e2d8cb42e0d285e/PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {url = "https://files.pythonhosted.org/packages/41/9a/1c4c51f1a0d2b6fd805973701ab0ec84d5e622c5aaa573b0e1157f132809/PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {url = "https://files.pythonhosted.org/packages/4a/4b/c71ef18ef83c82f99e6da8332910692af78ea32bd1d1d76c9787dfa36aea/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {url = "https://files.pythonhosted.org/packages/4d/f1/08f06159739254c8947899c9fc901241614195db15ba8802ff142237664c/PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {url = "https://files.pythonhosted.org/packages/57/c5/5d09b66b41d549914802f482a2118d925d876dc2a35b2d127694c1345c34/PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {url = "https://files.pythonhosted.org/packages/5b/07/10033a403b23405a8fc48975444463d3d10a5c2736b7eb2550b07b367429/PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {url = "https://files.pythonhosted.org/packages/5e/94/7d5ee059dfb92ca9e62f4057dcdec9ac08a9e42679644854dc01177f8145/PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {url = "https://files.pythonhosted.org/packages/62/2a/df7727c52e151f9e7b852d7d1580c37bd9e39b2f29568f0f81b29ed0abc2/PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {url = "https://files.pythonhosted.org/packages/73/9c/766e78d1efc0d1fca637a6b62cea1b4510a7fb93617eb805223294fef681/PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {url = "https://files.pythonhosted.org/packages/7b/5e/efd033ab7199a0b2044dab3b9f7a4f6670e6a52c089de572e928d2873b06/PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {url = "https://files.pythonhosted.org/packages/7d/39/472f2554a0f1e825bd7c5afc11c817cd7a2f3657460f7159f691fbb37c51/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {url = "https://files.pythonhosted.org/packages/7f/5d/2779ea035ba1e533c32ed4a249b4e0448f583ba10830b21a3cddafe11a4e/PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {url = "https://files.pythonhosted.org/packages/84/4d/82704d1ab9290b03da94e6425f5e87396b999fd7eb8e08f3a92c158402bf/PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {url = "https://files.pythonhosted.org/packages/96/06/4beb652c0fe16834032e54f0956443d4cc797fe645527acee59e7deaa0a2/PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {url = "https://files.pythonhosted.org/packages/ac/6c/967d91a8edf98d2b2b01d149bd9e51b8f9fb527c98d80ebb60c6b21d60c4/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {url = "https://files.pythonhosted.org/packages/b3/34/65bb4b2d7908044963ebf614fe0fdb080773fc7030d7e39c8d3eddcd4257/PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {url = "https://files.pythonhosted.org/packages/b6/a0/b6700da5d49e9fed49dc3243d3771b598dad07abb37cc32e524607f96adc/PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {url = "https://files.pythonhosted.org/packages/ba/91/090818dfa62e85181f3ae23dd1e8b7ea7f09684864a900cab72d29c57346/PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {url = "https://files.pythonhosted.org/packages/c1/39/47ed4d65beec9ce07267b014be85ed9c204fa373515355d3efa62d19d892/PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {url = "https://files.pythonhosted.org/packages/c7/d1/02baa09d39b1bb1ebaf0d850d106d1bdcb47c91958557f471153c49dc03b/PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {url = "https://files.pythonhosted.org/packages/c8/6b/6600ac24725c7388255b2f5add93f91e58a5d7efaf4af244fdbcc11a541b/PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {url = "https://files.pythonhosted.org/packages/cc/5c/fcabd17918348c7db2eeeb0575705aaf3f7ab1657f6ce29b2e31737dd5d1/PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {url = "https://files.pythonhosted.org/packages/cd/e5/af35f7ea75cf72f2cd079c95ee16797de7cd71f29ea7c68ae5ce7be1eda0/PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {url = "https://files.pythonhosted.org/packages/d6/6a/439d1a6f834b9a9db16332ce16c4a96dd0e3970b65fe08cbecd1711eeb77/PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {url = "https://files.pythonhosted.org/packages/d7/8f/db62b0df635b9008fe90aa68424e99cee05e68b398740c8a666a98455589/PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {url = "https://files.pythonhosted.org/packages/e1/a1/27bfac14b90adaaccf8c8289f441e9f76d94795ec1e7a8f134d9f2cb3d0b/PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {url = "https://files.pythonhosted.org/packages/e5/31/ba812efa640a264dbefd258986a5e4e786230cb1ee4a9f54eb28ca01e14a/PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {url = "https://files.pythonhosted.org/packages/ec/0d/26fb23e8863e0aeaac0c64e03fd27367ad2ae3f3cccf3798ee98ce160368/PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {url = "https://files.pythonhosted.org/packages/f1/26/55e4f21db1f72eaef092015d9017c11510e7e6301c62a6cfee91295d13c6/PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {url = "https://files.pythonhosted.org/packages/fe/88/def2e57fe740544f2eefb1645f1d6e0094f56c00f4eade708140b6137ead/PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, ] "qrcode 7.4.2" = [ {url = "https://files.pythonhosted.org/packages/24/79/aaf0c1c7214f2632badb2771d770b1500d3d7cbdf2590ae62e721ec50584/qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a"}, @@ -2196,9 +2240,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/04/c6/a8dbf1edcbc236d93348f6e7c437cf09c7356dd27119fcc3be9d70c93bb1/questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, {url = "https://files.pythonhosted.org/packages/49/00/151ff8314078efa3087c23b4b7c473f08f601dff7c62bfb894dd462e0fc9/questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, ] -"requests 2.30.0" = [ - {url = "https://files.pythonhosted.org/packages/96/80/034ffeca15c0f4e01b7b9c6ad0fb704b44e190cde4e757edbd60be404c41/requests-2.30.0-py3-none-any.whl", hash = "sha256:10e94cc4f3121ee6da529d358cdaeaff2f1c409cd377dbc72b825852f2f7e294"}, - {url = "https://files.pythonhosted.org/packages/e0/69/122171604bcef06825fa1c05bd9e9b1d43bc9feb8c6c0717c42c92cc6f3c/requests-2.30.0.tar.gz", hash = "sha256:239d7d4458afcb28a692cdd298d87542235f4ca8d36d03a15bfc128a6559a2f4"}, +"requests 2.31.0" = [ + {url = "https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {url = "https://files.pythonhosted.org/packages/9d/be/10918a2eac4ae9f02f6cfe6414b7a155ccd8f7f9d4380d62fd5b955065c3/requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] "requests-oauthlib 1.3.1" = [ {url = "https://files.pythonhosted.org/packages/6f/bb/5deac77a9af870143c684ab46a7934038a53eb4aa975bc0687ed6ca2c610/requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, @@ -2323,9 +2367,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/99/12/73a5f6b2bd385361c7741d56b6a177b5661ac408050ee58ac133acb6c4ae/SQLAlchemy_Utils-0.40.0-py3-none-any.whl", hash = "sha256:4c7098d4857d5cad1248bf7cd940727aecb75b596a5574b86a93b37079929520"}, {url = "https://files.pythonhosted.org/packages/a4/aa/22ee247f7e2cf5e3fb5e90093263a0e48e28c0d00e95b4c59e09a9bc5863/SQLAlchemy-Utils-0.40.0.tar.gz", hash = "sha256:af803089a7929803faeb6173b90f29d1a67ad02f1d1e732f40b054a8eb3c7370"}, ] -"sqlalchemy2-stubs 0.0.2a34" = [ - {url = "https://files.pythonhosted.org/packages/32/12/ecfcbe41207a2c6d8b9a9cbb62f80f398de3a2d426355fc568665c8ae2d3/sqlalchemy2_stubs-0.0.2a34-py3-none-any.whl", hash = "sha256:a313220ac793404349899faf1272e821a62dbe1d3a029bd444faa8d3e966cd07"}, - {url = "https://files.pythonhosted.org/packages/7c/d9/c22d5ea650badce160cfaebf24b05eb265b13309fb2a5912b374ce83fb51/sqlalchemy2-stubs-0.0.2a34.tar.gz", hash = "sha256:2432137ab2fde1a608df4544f6712427b0b7ff25990cfbbc5a9d1db6c8c6f489"}, +"sqlalchemy2-stubs 0.0.2a35" = [ + {url = "https://files.pythonhosted.org/packages/bd/a6/289f42af833bf4e6d14e416f79cdeada07d2e5a37fcdd8e469b535fd8fd6/sqlalchemy2_stubs-0.0.2a35-py3-none-any.whl", hash = "sha256:593784ff9fc0dc2ded1895e3322591689db3be06f3ca006e3ef47640baf2d38a"}, + {url = "https://files.pythonhosted.org/packages/c0/70/42d1281f0ea2f5cefea976e6dbd691aea179a26498402d682af180e58b9a/sqlalchemy2-stubs-0.0.2a35.tar.gz", hash = "sha256:bd5d530697d7e8c8504c7fe792ef334538392a5fb7aa7e4f670bfacdd668a19d"}, ] "sqlmodel 0.0.8" = [ {url = "https://files.pythonhosted.org/packages/64/ba/ad07004536e94e71f99aaae5e667bb6f7230f7e0fbc0b0266e88960dda5f/sqlmodel-0.0.8.tar.gz", hash = "sha256:3371b4d1ad59d2ffd0c530582c2140b6c06b090b32af9b9c6412986d7b117036"}, @@ -2351,92 +2395,88 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -"tomlkit 0.11.8" = [ - {url = "https://files.pythonhosted.org/packages/10/37/dd53019ccb72ef7d73fff0bee9e20b16faff9658b47913a35d79e89978af/tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, - {url = "https://files.pythonhosted.org/packages/ef/a8/b1c193be753c02e2a94af6e37ee45d3378a74d44fe778c2434a63af92731/tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, +"tomlkit 0.12.1" = [ + {url = "https://files.pythonhosted.org/packages/0d/07/d34a911a98e64b07f862da4b10028de0c1ac2222ab848eaf5dd1877c4b1b/tomlkit-0.12.1.tar.gz", hash = "sha256:38e1ff8edb991273ec9f6181244a6a391ac30e9f5098e7535640ea6be97a7c86"}, + {url = "https://files.pythonhosted.org/packages/a0/6d/808775ed618e51edaa7bbe6759e22e1c7eafe359af6e084700c6d39d3455/tomlkit-0.12.1-py3-none-any.whl", hash = "sha256:712cbd236609acc6a3e2e97253dfc52d4c2082982a88f61b640ecf0817eab899"}, ] "traitlets 5.9.0" = [ {url = "https://files.pythonhosted.org/packages/39/c3/205e88f02959712b62008502952707313640369144a7fded4cbc61f48321/traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, {url = "https://files.pythonhosted.org/packages/77/75/c28e9ef7abec2b7e9ff35aea3e0be6c1aceaf7873c26c95ae1f0d594de71/traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, ] -"typing-extensions 4.5.0" = [ - {url = "https://files.pythonhosted.org/packages/31/25/5abcd82372d3d4a3932e1fa8c3dbf9efac10cc7c0d16e78467460571b404/typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {url = "https://files.pythonhosted.org/packages/d3/20/06270dac7316220643c32ae61694e451c98f8caf4c8eab3aa80a2bedf0df/typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, +"typing-extensions 4.7.1" = [ + {url = "https://files.pythonhosted.org/packages/3c/8b/0111dd7d6c1478bf83baa1cab85c686426c7a6274119aceb2bd9d35395ad/typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {url = "https://files.pythonhosted.org/packages/ec/6b/63cc3df74987c36fe26157ee12e09e8f9db4de771e0f3404263117e75b95/typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, ] "tzdata 2023.3" = [ {url = "https://files.pythonhosted.org/packages/70/e5/81f99b9fced59624562ab62a33df639a11b26c582be78864b339dafa420d/tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, {url = "https://files.pythonhosted.org/packages/d5/fb/a79efcab32b8a1f1ddca7f35109a50e4a80d42ac1c9187ab46522b2407d7/tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, ] -"ujson 5.7.0" = [ - {url = "https://files.pythonhosted.org/packages/00/6f/4f16d6a9c30994aabc13b6fbbd0df62077892ad3b4c63d62d8472a1c7d5f/ujson-5.7.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ff0004c3f5a9a6574689a553d1b7819d1a496b4f005a7451f339dc2d9f4cf98c"}, - {url = "https://files.pythonhosted.org/packages/00/8c/ef2884d41cdeb0324c69be5acf4367282e34c0c80b7c255ac6955203b4a8/ujson-5.7.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:581c945b811a3d67c27566539bfcb9705ea09cb27c4be0002f7a553c8886b817"}, - {url = "https://files.pythonhosted.org/packages/01/ac/d06d6361ffb641cda6ffd16c763a76eed07abb073c49a41fbf007c764242/ujson-5.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5eba5e69e4361ac3a311cf44fa71bc619361b6e0626768a494771aacd1c2f09b"}, - {url = "https://files.pythonhosted.org/packages/02/5f/bef7d57cd7dba6c3124ce2c42c215e2194f51835c2e9176e2833ea04e15c/ujson-5.7.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:75204a1dd7ec6158c8db85a2f14a68d2143503f4bafb9a00b63fe09d35762a5e"}, - {url = "https://files.pythonhosted.org/packages/08/47/41f40896aad1a098b4fea2e0bfe66a3fed8305d2457945f7082b7f493307/ujson-5.7.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a5d2f44331cf04689eafac7a6596c71d6657967c07ac700b0ae1c921178645da"}, - {url = "https://files.pythonhosted.org/packages/11/bd/bdc0a3aaae8e14449adb232b15a66f641dee75a2cf5d524a85d78c3c1577/ujson-5.7.0-cp39-cp39-win32.whl", hash = "sha256:cd90027e6d93e8982f7d0d23acf88c896d18deff1903dd96140613389b25c0dd"}, - {url = "https://files.pythonhosted.org/packages/13/c0/a13ebed6b1538c258957a67c0f021e280a28a366d5f298bbbe9785b169d5/ujson-5.7.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:0e4e8981c6e7e9e637e637ad8ffe948a09e5434bc5f52ecbb82b4b4cfc092bfb"}, - {url = "https://files.pythonhosted.org/packages/18/19/2754b8d50affbf4456f31af5a75a1904d40499e89facdb742496b0a9c8c7/ujson-5.7.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b01a9af52a0d5c46b2c68e3f258fdef2eacaa0ce6ae3e9eb97983f5b1166edb6"}, - {url = "https://files.pythonhosted.org/packages/1f/b5/2717793593172454fa7cfd61ca523bca71c9839ea6651b3d37260ef1b225/ujson-5.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:c96e3b872bf883090ddf32cc41957edf819c5336ab0007d0cf3854e61841726d"}, - {url = "https://files.pythonhosted.org/packages/21/0b/9fd1a3dc94175d8cf141c3356776346e1b5fca10571441fc370fbf560e1c/ujson-5.7.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:800bf998e78dae655008dd10b22ca8dc93bdcfcc82f620d754a411592da4bbf2"}, - {url = "https://files.pythonhosted.org/packages/22/27/81b6b0537fbc6ff0baaeb175738ee7464d643ad5ff30105e03a9e744682d/ujson-5.7.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e87cec407ec004cf1b04c0ed7219a68c12860123dfb8902ef880d3d87a71c172"}, - {url = "https://files.pythonhosted.org/packages/23/46/874217a97b822d0d9c072fe49db362ce1ece8e912ea6422a3f12fa5e56e1/ujson-5.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54384ce4920a6d35fa9ea8e580bc6d359e3eb961fa7e43f46c78e3ed162d56ff"}, - {url = "https://files.pythonhosted.org/packages/29/5f/52a99a8ae0ae74213f1994a8180afd32b4d0cde427e2610f6e1ffb0fa15c/ujson-5.7.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e80f0d03e7e8646fc3d79ed2d875cebd4c83846e129737fdc4c2532dbd43d9e"}, - {url = "https://files.pythonhosted.org/packages/2c/fe/855ee750936e9d065e6e49f7340571bd2db756fbcaf338c00456d39dd217/ujson-5.7.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bab10165db6a7994e67001733f7f2caf3400b3e11538409d8756bc9b1c64f7e8"}, - {url = "https://files.pythonhosted.org/packages/2e/4a/e802a5f22e0fffdeaceb3d139c79ab7995f118c2fadb8cdb129a7fd83c8d/ujson-5.7.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c0d1f7c3908357ee100aa64c4d1cf91edf99c40ac0069422a4fd5fd23b263263"}, - {url = "https://files.pythonhosted.org/packages/2f/47/645054e94562a5b43604c55e967d91464603bcb64b6c8c4447211c41a6da/ujson-5.7.0-cp311-cp311-win32.whl", hash = "sha256:26c2b32b489c393106e9cb68d0a02e1a7b9d05a07429d875c46b94ee8405bdb7"}, - {url = "https://files.pythonhosted.org/packages/30/c3/adb327b07e554f9c14f05df79bbad914532054f31303bb0716744354fe51/ujson-5.7.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:341f891d45dd3814d31764626c55d7ab3fd21af61fbc99d070e9c10c1190680b"}, - {url = "https://files.pythonhosted.org/packages/31/5c/c8b9e14583aeaf473596c3861edf20c0c3d850e00873858f8279c6e884f5/ujson-5.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14f9082669f90e18e64792b3fd0bf19f2b15e7fe467534a35ea4b53f3bf4b755"}, - {url = "https://files.pythonhosted.org/packages/32/ca/e1bf3d4d263e4e30f176c454aa7498be0059bc4eecce92563ed403014273/ujson-5.7.0-cp37-cp37m-win32.whl", hash = "sha256:6faf46fa100b2b89e4db47206cf8a1ffb41542cdd34dde615b2fc2288954f194"}, - {url = "https://files.pythonhosted.org/packages/34/ad/98c4bd2cfe2d04330bc7d6b7e3dee5b52b7358430b1cf4973ca25b7413c3/ujson-5.7.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4a3d794afbf134df3056a813e5c8a935208cddeae975bd4bc0ef7e89c52f0ce0"}, - {url = "https://files.pythonhosted.org/packages/37/34/017f0904417617d2af2a30021f0b494535e63cb4a343dc32b05d9f0e96dd/ujson-5.7.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18679484e3bf9926342b1c43a3bd640f93a9eeeba19ef3d21993af7b0c44785d"}, - {url = "https://files.pythonhosted.org/packages/3b/bd/a7ad5d56a4a9491487bd658cda12c2a7a0d5a41c9943086471e6cfa73854/ujson-5.7.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64772a53f3c4b6122ed930ae145184ebaed38534c60f3d859d8c3f00911eb122"}, - {url = "https://files.pythonhosted.org/packages/43/1a/b0a027144aa5c8f4ea654f4afdd634578b450807bb70b9f8bad00d6f6d3c/ujson-5.7.0.tar.gz", hash = "sha256:e788e5d5dcae8f6118ac9b45d0b891a0d55f7ac480eddcb7f07263f2bcf37b23"}, - {url = "https://files.pythonhosted.org/packages/47/f8/8e5668e80f7389281954e283222bfaf7f3936809ecf9b9293b9d8b4b40e2/ujson-5.7.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7312731c7826e6c99cdd3ac503cd9acd300598e7a80bcf41f604fee5f49f566c"}, - {url = "https://files.pythonhosted.org/packages/4a/c4/cabfd64d4b0021285803703af67042aa01e1b1bc646fdf8847cd7e814b15/ujson-5.7.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f7f241488879d91a136b299e0c4ce091996c684a53775e63bb442d1a8e9ae22a"}, - {url = "https://files.pythonhosted.org/packages/4d/f2/035e82d3baacc9c225ca3bae95bed5963bcdd796dd66ffa3fd0a5a087da7/ujson-5.7.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:adf445a49d9a97a5a4c9bb1d652a1528de09dd1c48b29f79f3d66cea9f826bf6"}, - {url = "https://files.pythonhosted.org/packages/50/bf/1893d4f5dc6a2acb9a6db7ff018aa1cb7df367c35d491ebef6e30cdcc8ce/ujson-5.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d3b3499c55911f70d4e074c626acdb79a56f54262c3c83325ffb210fb03e44d"}, - {url = "https://files.pythonhosted.org/packages/52/b9/7909bc873470f3fb663857d05856c4bce2846a9a72439ca51095b88b81ab/ujson-5.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:ed24406454bb5a31df18f0a423ae14beb27b28cdfa34f6268e7ebddf23da807e"}, - {url = "https://files.pythonhosted.org/packages/58/57/bbc3e7efa9967247fba684b60a392174b7d18222931edcef2d52565bc0ac/ujson-5.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9b0f2680ce8a70f77f5d70aaf3f013d53e6af6d7058727a35d8ceb4a71cdd4e9"}, - {url = "https://files.pythonhosted.org/packages/59/9e/447bce1a6f29ff1bfd726ea5aa9b934bc02fef9f2b41689a00e17538f436/ujson-5.7.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c3af9f9f22a67a8c9466a32115d9073c72a33ae627b11de6f592df0ee09b98b6"}, - {url = "https://files.pythonhosted.org/packages/5a/b1/7edca18e74a218d39fd8d00efc489cfd07c94271959103c647b794ce7bd5/ujson-5.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b5ac3d5c5825e30b438ea92845380e812a476d6c2a1872b76026f2e9d8060fc2"}, - {url = "https://files.pythonhosted.org/packages/61/dd/38fc61ee050bd7cd24126721fae6cd7044b34cd8821e9d12a02c04757b7d/ujson-5.7.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7316d3edeba8a403686cdcad4af737b8415493101e7462a70ff73dd0609eafc"}, - {url = "https://files.pythonhosted.org/packages/65/89/398648bb869af5fce3d246ba61fb154528d5e71c24d6bcb008676d15fc2c/ujson-5.7.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b4257307e3662aa65e2644a277ca68783c5d51190ed9c49efebdd3cbfd5fa44"}, - {url = "https://files.pythonhosted.org/packages/69/24/a7df580e9981c4f8a28eb96eb897ab7363b96fca7f8a398ddc735bf190ea/ujson-5.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f242eec917bafdc3f73a1021617db85f9958df80f267db69c76d766058f7b19"}, - {url = "https://files.pythonhosted.org/packages/71/bc/c8851ac5cf2ec8b0a69ef1e220fc27a88f8ff72fe1751fda0d7b28b58604/ujson-5.7.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:afff311e9f065a8f03c3753db7011bae7beb73a66189c7ea5fcb0456b7041ea4"}, - {url = "https://files.pythonhosted.org/packages/73/34/8821ac107019227a5ba3a544208cff444fee14bf779e08ec4e3706c91d00/ujson-5.7.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dda9aa4c33435147262cd2ea87c6b7a1ca83ba9b3933ff7df34e69fee9fced0c"}, - {url = "https://files.pythonhosted.org/packages/75/4e/5b17c981aee3d98aeac66d4e7a8cab8d8bb49172d9bc73692af14c7a18fb/ujson-5.7.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ed22f9665327a981f288a4f758a432824dc0314e4195a0eaeb0da56a477da94d"}, - {url = "https://files.pythonhosted.org/packages/75/82/b08227424871ac0cd739d142a7fd071d2934755dfcf8460e6e13d649f1b1/ujson-5.7.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ee997799a23227e2319a3f8817ce0b058923dbd31904761b788dc8f53bd3e30"}, - {url = "https://files.pythonhosted.org/packages/76/23/86820eb933c7d626380881a2d88bf9e395771ce349e5261df1e6760d209c/ujson-5.7.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7592f40175c723c032cdbe9fe5165b3b5903604f774ab0849363386e99e1f253"}, - {url = "https://files.pythonhosted.org/packages/7b/77/14bef9f13f68f93643d1e8f3652bd40e7bdf54fc8968f20976c3c2a1dbe1/ujson-5.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5593263a7fcfb934107444bcfba9dde8145b282de0ee9f61e285e59a916dda0f"}, - {url = "https://files.pythonhosted.org/packages/7b/f6/f363b991aae592a77fe80f2882753211b59ed6a5174fddbb1ed6f5deccad/ujson-5.7.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d7ff6ebb43bc81b057724e89550b13c9a30eda0f29c2f506f8b009895438f5a6"}, - {url = "https://files.pythonhosted.org/packages/85/4a/1db9cc0d4d78d4485a6527cf5ed2602729d87d8c35a4f11ec6890708ac75/ujson-5.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6411aea4c94a8e93c2baac096fbf697af35ba2b2ed410b8b360b3c0957a952d3"}, - {url = "https://files.pythonhosted.org/packages/87/f1/d5ee0307d455aab6fe90fde167a00feeb8f71eaf66292d2926221d1de2fe/ujson-5.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a19fd8e7d8cc58a169bea99fed5666023adf707a536d8f7b0a3c51dd498abf"}, - {url = "https://files.pythonhosted.org/packages/95/91/b1a647f700e26ec93571992322fe0f92fe03254fefb74ee3eb5342db10ef/ujson-5.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:523ee146cdb2122bbd827f4dcc2a8e66607b3f665186bce9e4f78c9710b6d8ab"}, - {url = "https://files.pythonhosted.org/packages/95/fb/fcd8f947f773ea55f650d64acd15240592c5637b3bfea164b4cd83da84c1/ujson-5.7.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35209cb2c13fcb9d76d249286105b4897b75a5e7f0efb0c0f4b90f222ce48910"}, - {url = "https://files.pythonhosted.org/packages/a8/0d/51c70250116700017a3dc84ca910ff7c480c8d22afa76366920e8b1fdbfc/ujson-5.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aae4d9e1b4c7b61780f0a006c897a4a1904f862fdab1abb3ea8f45bd11aa58f3"}, - {url = "https://files.pythonhosted.org/packages/aa/e5/7655459351a1ce26202bbe971a6e6959d366925babe716f3751e1de96920/ujson-5.7.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00343501dbaa5172e78ef0e37f9ebd08040110e11c12420ff7c1f9f0332d939e"}, - {url = "https://files.pythonhosted.org/packages/af/9d/d9bb491a5a4bcf99dfda45ac60dd803e6950df24ca6462b9a2bc633c4689/ujson-5.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:af4639f684f425177d09ae409c07602c4096a6287027469157bfb6f83e01448b"}, - {url = "https://files.pythonhosted.org/packages/b0/9b/7ae752c8f1e2e7bf261c4d5ded14a7e8dd6878350d130c78a74a833f37ac/ujson-5.7.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea7423d8a2f9e160c5e011119741682414c5b8dce4ae56590a966316a07a4618"}, - {url = "https://files.pythonhosted.org/packages/b4/50/5146b9464506718a9372e12d15f2cff330575ee7cf5faf3c51aa83d82e4a/ujson-5.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6a6961fc48821d84b1198a09516e396d56551e910d489692126e90bf4887d29"}, - {url = "https://files.pythonhosted.org/packages/b5/27/b8d3830cb60adc08505321b21cd2ae3930fe9d140728026dee17b2f795ef/ujson-5.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8cd622c069368d5074bd93817b31bdb02f8d818e57c29e206f10a1f9c6337dd"}, - {url = "https://files.pythonhosted.org/packages/c1/39/a4e45a0b9f1be517d0236a52292adb21ffdf6531bd36310488ed1ee07071/ujson-5.7.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d36a807a24c7d44f71686685ae6fbc8793d784bca1adf4c89f5f780b835b6243"}, - {url = "https://files.pythonhosted.org/packages/c8/0c/68c7e7cf5209f6ecb000a2d9876180db8697e70467631fcc0487bad21848/ujson-5.7.0-cp38-cp38-win32.whl", hash = "sha256:bea8d30e362180aafecabbdcbe0e1f0b32c9fa9e39c38e4af037b9d3ca36f50c"}, - {url = "https://files.pythonhosted.org/packages/cd/9b/79454ea8f78e61ad553307cbdf2f93a2cf56f16fd8cff22deef0365c93be/ujson-5.7.0-cp310-cp310-win32.whl", hash = "sha256:7df3fd35ebc14dafeea031038a99232b32f53fa4c3ecddb8bed132a43eefb8ad"}, - {url = "https://files.pythonhosted.org/packages/d1/7d/ec4dace4c686be92845e3d593f01828465546c5b8254ca296324cbcda8f8/ujson-5.7.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b738282e12a05f400b291966630a98d622da0938caa4bc93cf65adb5f4281c60"}, - {url = "https://files.pythonhosted.org/packages/d2/5b/876d7ca50f6be9c72a806a74d55a585043faae36d9a160ca4351f5d64b4d/ujson-5.7.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:24ad1aa7fc4e4caa41d3d343512ce68e41411fb92adf7f434a4d4b3749dc8f58"}, - {url = "https://files.pythonhosted.org/packages/d4/13/4c59d1dd29f7ec9b80cffb8ac393e735c5171e9430eb9a9af10e8fbc7b66/ujson-5.7.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2e43ccdba1cb5c6d3448eadf6fc0dae7be6c77e357a3abc968d1b44e265866d"}, - {url = "https://files.pythonhosted.org/packages/d9/3e/507663d97fb574b56b35df2fb3d059516f9d11c270ab0ff170ef9cca2853/ujson-5.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:137831d8a0db302fb6828ee21c67ad63ac537bddc4376e1aab1c8573756ee21c"}, - {url = "https://files.pythonhosted.org/packages/da/bc/d8b84c6e1156a7cdc4b3269994aff52e90101ddbfc0a8dabebbd8f484f54/ujson-5.7.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b9dc5a90e2149643df7f23634fe202fed5ebc787a2a1be95cf23632b4d90651"}, - {url = "https://files.pythonhosted.org/packages/df/7f/e86c8dad0935b0bdcff712945fd2387f190700c7594786f829daeb955e5e/ujson-5.7.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c592eb91a5968058a561d358d0fef59099ed152cfb3e1cd14eee51a7a93879e"}, - {url = "https://files.pythonhosted.org/packages/e3/c1/2e7163fdad47acb63ac2231b70b637cd8dada78c2ad985a438930ef0ac8c/ujson-5.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6abb8e6d8f1ae72f0ed18287245f5b6d40094e2656d1eab6d99d666361514074"}, - {url = "https://files.pythonhosted.org/packages/ea/f8/e547383551149f23a9cb40a717d75d2a72c6df50416c68538c64b79cd5bb/ujson-5.7.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:90712dfc775b2c7a07d4d8e059dd58636bd6ff1776d79857776152e693bddea6"}, - {url = "https://files.pythonhosted.org/packages/ef/f5/76dfa7e2e8135213ece8cd18478338bc9a3b4820152ecec5632dce598f66/ujson-5.7.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b522be14a28e6ac1cf818599aeff1004a28b42df4ed4d7bc819887b9dac915fc"}, - {url = "https://files.pythonhosted.org/packages/f8/d1/369fceb26e8eb69f9f8792323d123351c187c7866a0457c3ffe90ee9793c/ujson-5.7.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:16b2254a77b310f118717715259a196662baa6b1f63b1a642d12ab1ff998c3d7"}, - {url = "https://files.pythonhosted.org/packages/fa/d6/01756485dd9c42f12f9b74c6b4b3f3008917e091597390a970cc85486631/ujson-5.7.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ee295761e1c6c30400641f0a20d381633d7622633cdf83a194f3c876a0e4b7e"}, -] -"urllib3 2.0.2" = [ - {url = "https://files.pythonhosted.org/packages/4b/1d/f8383ef593114755429c307449e7717b87044b3bcd5f7860b89b1f759e34/urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, - {url = "https://files.pythonhosted.org/packages/fb/c0/1abba1a1233b81cf2e36f56e05194f5e8a0cec8c03c244cab56cc9dfb5bd/urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, +"ujson 5.8.0" = [ + {url = "https://files.pythonhosted.org/packages/02/54/a5dd810a93612da244869c3ebf46d1bb7b389af396f982d5f4d0b821b466/ujson-5.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c"}, + {url = "https://files.pythonhosted.org/packages/05/0b/24aa313c60e2ae6a87e4f7bff86a9d68ecfc5c859791de77cfe691c79f80/ujson-5.8.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba"}, + {url = "https://files.pythonhosted.org/packages/06/76/55f8db04ee36dac9d015dba720ff83d36c49e52a7049f884454dddafcc11/ujson-5.8.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9"}, + {url = "https://files.pythonhosted.org/packages/07/ff/4c3132bd7b3c4da437518aeaa55b54ece898c7cb2ecebeb206b01c6d6de1/ujson-5.8.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec"}, + {url = "https://files.pythonhosted.org/packages/0f/bf/32441baf63c8f04330c0927fec4ef59594ed6d3ac77fd00d8742f40cf764/ujson-5.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc"}, + {url = "https://files.pythonhosted.org/packages/15/16/ff0a051f9a6e122f07630ed1e9cbe0e0b769273e123673f0d2aa17fe3a36/ujson-5.8.0.tar.gz", hash = "sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425"}, + {url = "https://files.pythonhosted.org/packages/2d/94/67960e910c66cab19c36f9b9dc9999fb89281da4534f751e77a669771512/ujson-5.8.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c"}, + {url = "https://files.pythonhosted.org/packages/2f/17/0ceaf1afa447614b73d5ca1423f356334a62245ceee678bbf20a9498613f/ujson-5.8.0-cp38-cp38-win32.whl", hash = "sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564"}, + {url = "https://files.pythonhosted.org/packages/31/a9/bd4d99acf4d5fda9f145fcc3a58b33c9046b367057322fb57a9fd8804f1a/ujson-5.8.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e"}, + {url = "https://files.pythonhosted.org/packages/36/90/76f17e463f5eb51682c256a2dd2739fa7f27996c7c0c48469de6b97de582/ujson-5.8.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3"}, + {url = "https://files.pythonhosted.org/packages/38/c7/2088ea60e55ee8e98ac2b6189649b35c76a2e0d55e832c307017576aea95/ujson-5.8.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377"}, + {url = "https://files.pythonhosted.org/packages/45/19/b30c976c4cf641964606ffc5bf738f842bbf83d883ea5c8b7b166a2f843c/ujson-5.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75"}, + {url = "https://files.pythonhosted.org/packages/45/82/2121859d3269300adf5738c50844d0532c97080e41dda9529870a6809153/ujson-5.8.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30"}, + {url = "https://files.pythonhosted.org/packages/48/e1/7869ff14f09939e2c1bd5c56712f8471e0b8ab7573cff8b5a6c1fa974c18/ujson-5.8.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94"}, + {url = "https://files.pythonhosted.org/packages/4c/46/0f647c93c00363f8587958ffe751091f1169e03e71ca8a078ae1badca4dc/ujson-5.8.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7"}, + {url = "https://files.pythonhosted.org/packages/4d/e3/e1067eb7331bd2874b9d858bee26dcaebc23eb657ad81af37de1ac5100d5/ujson-5.8.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5"}, + {url = "https://files.pythonhosted.org/packages/4e/ad/a653b96c824f4a6dea09d7eed1509c470b2cf7cc43b754fbcacd3051f83e/ujson-5.8.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b"}, + {url = "https://files.pythonhosted.org/packages/50/02/736de11f8dc6ebce85946061ce2c270387c1521a7fea2daff4e714c3c553/ujson-5.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1"}, + {url = "https://files.pythonhosted.org/packages/50/94/6babbd16fa372779c54a3b24e2e4cc83e979e091b570547e445238ff35bc/ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c"}, + {url = "https://files.pythonhosted.org/packages/53/e5/ad0df8c6dfaef4ac43af675a49ffc594cb703caa0b1e58df62a573699d26/ujson-5.8.0-cp310-cp310-win32.whl", hash = "sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a"}, + {url = "https://files.pythonhosted.org/packages/55/38/bb143d02b0d096842de3849d0da51aab8896386b2e33d4f9e2d9790b9eee/ujson-5.8.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109"}, + {url = "https://files.pythonhosted.org/packages/5f/44/a9b817f209fd47ca042bbad601932db71795b7cbd850b9cc667318cd7d63/ujson-5.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582"}, + {url = "https://files.pythonhosted.org/packages/63/f8/5eab2e6ff5651ae9e42c84b23058efa173b3aa3aed8b88f8ca1a560fbcbd/ujson-5.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721"}, + {url = "https://files.pythonhosted.org/packages/64/6a/9d4cf1c0355a9e793d74dd5f5f4788f8536ddad1f87b473e679a4d696475/ujson-5.8.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296"}, + {url = "https://files.pythonhosted.org/packages/6d/ad/ada60921a729c07d3629aeeae89f1750a3a83aa7f80bc0d76bde9444c9f4/ujson-5.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f"}, + {url = "https://files.pythonhosted.org/packages/70/a8/d2a72079547d703599d4f157ab952c6d56f188dc87562ec45dd71ec11108/ujson-5.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7"}, + {url = "https://files.pythonhosted.org/packages/72/7b/97dab791d9b2e218d586e6f5abf9dcfb2c8f3094b20c204c30b61ad07334/ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282"}, + {url = "https://files.pythonhosted.org/packages/75/1e/ab502af9924476673084696927437695b9b47cbae0ed89f0b0e3e925140e/ujson-5.8.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa"}, + {url = "https://files.pythonhosted.org/packages/78/90/bfa62616208bd5195a113c0aa4e42c9f471e69edfc48feba6a0ab494cccb/ujson-5.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a"}, + {url = "https://files.pythonhosted.org/packages/80/83/440ca17ad0a1316fdd9d3206a34837cd86d4e17d3a76559e76406d0c0914/ujson-5.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0"}, + {url = "https://files.pythonhosted.org/packages/83/f5/5bd92199b0b5d7c3c14e323857a8b67e8b1bd4b2d933a3f6f12f93263332/ujson-5.8.0-cp311-cp311-win32.whl", hash = "sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879"}, + {url = "https://files.pythonhosted.org/packages/85/7e/4aa50bb06b9ca127fd5c515b1fcca70d12b22e2f4491d203b5b2a995e5f1/ujson-5.8.0-cp312-cp312-win32.whl", hash = "sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916"}, + {url = "https://files.pythonhosted.org/packages/8b/9e/a2abe7d666047bbb9d77c1da287513e64448bddc4e3738ec0dc04961606b/ujson-5.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4"}, + {url = "https://files.pythonhosted.org/packages/97/0e/29f5df9459ec1a0b95a562c63fb974d1979e2e89979ed9aa6017d17055da/ujson-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5"}, + {url = "https://files.pythonhosted.org/packages/9f/5f/6a98cafd815f8674d7352669dce3349abcbd2c69187bcb45c4a1e2f1fc84/ujson-5.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76"}, + {url = "https://files.pythonhosted.org/packages/a0/bb/6a1f0e0ec003800402a722511633d9dead569f2050eeef8d20716bedf9b6/ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f"}, + {url = "https://files.pythonhosted.org/packages/a3/30/12ba1b8e54f7869617e1f57beecfcaa304e1c093650003f0e38bf516a5a3/ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130"}, + {url = "https://files.pythonhosted.org/packages/aa/41/58a53884824aa4b64859c7cb4c309629e4bff8f288c21243c288ea417aee/ujson-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3"}, + {url = "https://files.pythonhosted.org/packages/aa/87/e2373d1a423a103f276e27f4ffc28f6deb55b8404665a988161c509b23b8/ujson-5.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf"}, + {url = "https://files.pythonhosted.org/packages/ab/70/898a7a82a4792089715ff5ed425a7f685b80b75bb511b4133edcb70a4403/ujson-5.8.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f"}, + {url = "https://files.pythonhosted.org/packages/ac/c6/11cecc6e72121af011462667761142364d7d7691459c0ad29f5abe8296b8/ujson-5.8.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95"}, + {url = "https://files.pythonhosted.org/packages/b0/2c/17bb279bbb2e1583b8a81de33ba32059d841f30489b488f9b6c4f1ae8163/ujson-5.8.0-cp39-cp39-win32.whl", hash = "sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903"}, + {url = "https://files.pythonhosted.org/packages/b1/ab/ba7ccd41bcc13a1bb5c8f680b0aa935eec668ce38b45e39b500f34068e53/ujson-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c"}, + {url = "https://files.pythonhosted.org/packages/b5/ca/753bce48116e272338f5201bae41b953dc1fca9286eff82c241812a37a7a/ujson-5.8.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405"}, + {url = "https://files.pythonhosted.org/packages/bd/5f/80db257901ba5c3aea02bab7c0a4f40fc79d46ef9f7165261815f9b4be5f/ujson-5.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8"}, + {url = "https://files.pythonhosted.org/packages/be/25/46ca67da624865df574eaefc902c3f776144005c54efc4665966ce33acf4/ujson-5.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83"}, + {url = "https://files.pythonhosted.org/packages/c0/16/d5945c790f3ab4a7c32c7a5449d13abf4a0555926640bd5e9e2fbd5831e1/ujson-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb"}, + {url = "https://files.pythonhosted.org/packages/c1/af/886d82ad014b95a31d9f6600dab38aff9f0f441afede7e56c8915d9011c5/ujson-5.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6"}, + {url = "https://files.pythonhosted.org/packages/ca/29/ab7a93b6304c20a847e0046d090d103d827ab4b108a1cd235a76adc9e94e/ujson-5.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3"}, + {url = "https://files.pythonhosted.org/packages/cb/8c/78e2ece04f3bb4b9417ca092714b7fa94d3401dc51793e655a7c626a6149/ujson-5.8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c"}, + {url = "https://files.pythonhosted.org/packages/cd/e0/c0a4ae34794145a2847642416d269a71ce2d8edacc9547f1d9ac8592fa1c/ujson-5.8.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08"}, + {url = "https://files.pythonhosted.org/packages/d1/b8/2fd1d6a2d7266d10400debbf30e20109ed60485a138b1ba1d70d12e0be02/ujson-5.8.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae"}, + {url = "https://files.pythonhosted.org/packages/d8/e2/76722e6f89d2767acdb329facde419ff1cfa8e1cbdb3e7c82cf3ba6c61f1/ujson-5.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b"}, + {url = "https://files.pythonhosted.org/packages/da/b9/7960bba0a598a79d63f1cd7deb288c1e939f3cffdac5b92542f1fe90b329/ujson-5.8.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2"}, + {url = "https://files.pythonhosted.org/packages/db/2e/ee2c66d813e7629e46bac01f7d06992045c5345963330276e2f5af0fafa5/ujson-5.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07"}, + {url = "https://files.pythonhosted.org/packages/e2/a5/3e4a004c2626340b6149d74dd529027d7166cfd86cadd27decf8480ac149/ujson-5.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a"}, + {url = "https://files.pythonhosted.org/packages/e3/82/7019db84bfa1833e954b64450c18a6226c3e9847298e1bf2d99ffb0502d4/ujson-5.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207"}, + {url = "https://files.pythonhosted.org/packages/ed/2f/04fb635a03e11630ae8fd0dff8617442251a4845b7622e359fdf1256e172/ujson-5.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042"}, + {url = "https://files.pythonhosted.org/packages/f5/3a/1bfa9f4dd5caa166292581975a3c38ea2a612123f473838c34ec26237437/ujson-5.8.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67"}, + {url = "https://files.pythonhosted.org/packages/fd/0d/9b97d3cefd91e0302497e75d0f36c946fbee31351e9c3b80a7631b38d2f9/ujson-5.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6"}, + {url = "https://files.pythonhosted.org/packages/fd/85/2845b952d2e22e9717224d0c0f4af86b204959ffb338fd47c896648ee7b2/ujson-5.8.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7"}, +] +"urllib3 2.0.4" = [ + {url = "https://files.pythonhosted.org/packages/31/ab/46bec149bbd71a4467a3063ac22f4486ecd2ceb70ae8c70d5d8e4c2a7946/urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {url = "https://files.pythonhosted.org/packages/9b/81/62fd61001fa4b9d0df6e31d47ff49cfa9de4af03adecf339c7bc30656b37/urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, ] "uvicorn 0.19.0" = [ {url = "https://files.pythonhosted.org/packages/2b/3f/e3a8b7d42f058e0d50e76b8d41cc18a5d1f989feb17c882e1c61e7403f52/uvicorn-0.19.0-py3-none-any.whl", hash = "sha256:cc277f7e73435748e69e075a721841f7c4a95dba06d12a72fe9874acced16f6f"}, @@ -2523,9 +2563,9 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/fd/8a/db55250ad0b536901173d737781e3b5a7cc7063c46b232c2e3a82a33c032/wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, {url = "https://files.pythonhosted.org/packages/ff/f6/c044dec6bec4ce64fbc92614c5238dd432780b06293d2efbcab1a349629c/wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, ] -"xarray 2023.4.2" = [ - {url = "https://files.pythonhosted.org/packages/8b/33/0bef802b8528e823944becc850c6ea05404e1cdcd15e4d2ad55d5d5e87fb/xarray-2023.4.2.tar.gz", hash = "sha256:958ec588220352343b910cbc05e54e7ab54d4e8c1c3a7783d6bfe7549d0bd0d2"}, - {url = "https://files.pythonhosted.org/packages/d7/eb/e12adfc8a3df6d260c0f15284b736f573621f7ceef42ea47d17c0452c9d5/xarray-2023.4.2-py3-none-any.whl", hash = "sha256:1b6d577c1217ad6bf7458426af19ed7a489ab6c41220ca791f55f5df9648173a"}, +"xarray 2023.7.0" = [ + {url = "https://files.pythonhosted.org/packages/cf/2f/e696512aa1e4e2ee1cf1e0bdbab6042f6c782058eb0a4367184ce4343f36/xarray-2023.7.0-py3-none-any.whl", hash = "sha256:af8b55bf78b792b8ad9326eb9d89980602f1a51e93d8465b445aeea3accca27e"}, + {url = "https://files.pythonhosted.org/packages/d2/8b/6b67b40bc54f2574cd6f2cd5e4427c9fac0e21f6c9efd73444e07451af33/xarray-2023.7.0.tar.gz", hash = "sha256:dace2fdbf1b7ff185d9c1226a24bf83c2ae52f3253dbfe80e17d1162600d055c"}, ] "xlrd 2.0.1" = [ {url = "https://files.pythonhosted.org/packages/a6/0c/c2a72d51fe56e08a08acc85d13013558a2d793028ae7385448a6ccdfae64/xlrd-2.0.1-py2.py3-none-any.whl", hash = "sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd"}, @@ -2535,7 +2575,7 @@ content_hash = "sha256:3655186c3196a916cbbe077cf522705c4ed4093d03563808e56d64893 {url = "https://files.pythonhosted.org/packages/39/0d/40df5be1e684bbaecdb9d1e0e40d5d482465de6b00cbb92b84ee5d243c7f/xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, {url = "https://files.pythonhosted.org/packages/94/db/fd0326e331726f07ff7f40675cd86aa804bfd2e5016c727fa761c934990e/xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, ] -"zipp 3.15.0" = [ - {url = "https://files.pythonhosted.org/packages/00/27/f0ac6b846684cecce1ee93d32450c45ab607f65c2e0255f0092032d91f07/zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, - {url = "https://files.pythonhosted.org/packages/5b/fa/c9e82bbe1af6266adf08afb563905eb87cab83fde00a0a08963510621047/zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, +"zipp 3.16.2" = [ + {url = "https://files.pythonhosted.org/packages/8c/08/d3006317aefe25ea79d3b76c9650afabaf6d63d1c8443b236e7405447503/zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {url = "https://files.pythonhosted.org/packages/e2/45/f3b987ad5bf9e08095c1ebe6352238be36f25dd106fde424a160061dce6d/zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 588f9d3a52..f495045d59 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -46,7 +46,7 @@ dependencies = [ "SQLAlchemy-Utils==0.40.0", "bcrypt==4.0.1", "segno==1.5.2", - "osm-fieldwork==0.3.4", + "osm-fieldwork==0.3.5", "sentry-sdk==1.9.6", "py-cpuinfo==9.0.0", "gdal==3.6.2", From d447cc13b9974807df419594049ae1c2f9248764 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sun, 13 Aug 2023 17:01:44 +0545 Subject: [PATCH 204/222] mbtiles model updated, added few fields --- src/backend/app/db/db_models.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/app/db/db_models.py b/src/backend/app/db/db_models.py index fd7f42a55d..91347166f5 100644 --- a/src/backend/app/db/db_models.py +++ b/src/backend/app/db/db_models.py @@ -634,9 +634,11 @@ class DbTilesPath(Base): __tablename__ = "mbtiles_path" id = Column(Integer, primary_key=True) - project_id = Column(String) + project_id = Column(Integer) status = Column(Enum(BackgroundTaskStatus), nullable=False) path = Column(String) tile_source = Column(String) task_id = Column(String) - created_at = Column(DateTime, default=timestamp) \ No newline at end of file + created_at = Column(DateTime, default=timestamp) + created_by_id = Column(BigInteger, ForeignKey("users.id"), primary_key=True) + created_by = relationship(DbUser, backref="user_roles") From ca26b389ead877437074afc660030f47a0d00e05 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sun, 13 Aug 2023 17:13:58 +0545 Subject: [PATCH 205/222] update: task_id field from mbtiles_path model to background_task_id --- src/backend/app/db/db_models.py | 2 +- src/backend/app/projects/project_crud.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/app/db/db_models.py b/src/backend/app/db/db_models.py index 91347166f5..44f33af5fe 100644 --- a/src/backend/app/db/db_models.py +++ b/src/backend/app/db/db_models.py @@ -638,7 +638,7 @@ class DbTilesPath(Base): status = Column(Enum(BackgroundTaskStatus), nullable=False) path = Column(String) tile_source = Column(String) - task_id = Column(String) + background_task_id = Column(String) created_at = Column(DateTime, default=timestamp) created_by_id = Column(BigInteger, ForeignKey("users.id"), primary_key=True) created_by = relationship(DbUser, backref="user_roles") diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index dd3dfe5ba9..9c9dd96136 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -2107,7 +2107,7 @@ async def get_project_tiles(db: Session, tile_path_instance = db_models.DbTilesPath( project_id = project_id, - task_id = str(background_task_id), + background_task_id = str(background_task_id), status = 1, tile_source = source, path = outfile From 362838a5587607c2d06082c707bdea73723f3c75 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sun, 13 Aug 2023 17:19:49 +0545 Subject: [PATCH 206/222] updated backref in mbtiles model for created_by field --- src/backend/app/db/db_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/app/db/db_models.py b/src/backend/app/db/db_models.py index 44f33af5fe..e9820037db 100644 --- a/src/backend/app/db/db_models.py +++ b/src/backend/app/db/db_models.py @@ -641,4 +641,4 @@ class DbTilesPath(Base): background_task_id = Column(String) created_at = Column(DateTime, default=timestamp) created_by_id = Column(BigInteger, ForeignKey("users.id"), primary_key=True) - created_by = relationship(DbUser, backref="user_roles") + created_by = relationship(DbUser, backref="mbtiles_created") From 555714dda4eadd12ca94a5a4a7c37f8eff98975e Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Sun, 13 Aug 2023 17:23:41 +0545 Subject: [PATCH 207/222] created by removed --- src/backend/app/db/db_models.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/backend/app/db/db_models.py b/src/backend/app/db/db_models.py index e9820037db..f348135121 100644 --- a/src/backend/app/db/db_models.py +++ b/src/backend/app/db/db_models.py @@ -639,6 +639,4 @@ class DbTilesPath(Base): path = Column(String) tile_source = Column(String) background_task_id = Column(String) - created_at = Column(DateTime, default=timestamp) - created_by_id = Column(BigInteger, ForeignKey("users.id"), primary_key=True) - created_by = relationship(DbUser, backref="mbtiles_created") + created_at = Column(DateTime, default=timestamp) \ No newline at end of file From a41188be00adcda4c27a6ed615735ef3ebafb925 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 14 Aug 2023 08:39:12 +0545 Subject: [PATCH 208/222] api to list tiles of the project --- src/backend/app/models/enums.py | 1 + src/backend/app/projects/project_crud.py | 24 +++++++++++++++++++++- src/backend/app/projects/project_routes.py | 22 ++++++++++++++++++-- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/backend/app/models/enums.py b/src/backend/app/models/enums.py index ca9771e133..b9a0c3c361 100644 --- a/src/backend/app/models/enums.py +++ b/src/backend/app/models/enums.py @@ -220,4 +220,5 @@ class BackgroundTaskStatus(IntEnum, Enum): RECEIVED = 3 SUCCESS = 4 + TILES_SOURCE = ["esri", "bing", "google", "topo"] \ No newline at end of file diff --git a/src/backend/app/projects/project_crud.py b/src/backend/app/projects/project_crud.py index 9c9dd96136..3421f790a8 100644 --- a/src/backend/app/projects/project_crud.py +++ b/src/backend/app/projects/project_crud.py @@ -2178,4 +2178,26 @@ async def get_project_tiles(db: Session, ) # 2 is FAILED - # return FileResponse(outfile, headers={"Content-Disposition": f"attachment; filename=tiles.mbtiles"}) +async def get_mbtiles_list(db: Session, project_id: int): + try: + tiles_list = db.query(db_models.DbTilesPath.id, + db_models.DbTilesPath.project_id, + db_models.DbTilesPath.status, + db_models.DbTilesPath.tile_source) \ + .filter(db_models.DbTilesPath.project_id == str(project_id)) \ + .all() + + processed_tiles_list = [ + { + "id": x.id, + "project_id": x.project_id, + "status": x.status.name, + "tile_source": x.tile_source + } + for x in tiles_list + ] + + return processed_tiles_list + + except Exception as e: + raise HTTPException(status_code=400, detail=str(e)) \ No newline at end of file diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 0cf9ff94c3..69d3432d21 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -41,7 +41,7 @@ import json from ..central import central_crud -from ..db import database +from ..db import database, db_models from . import project_crud, project_schemas from ..tasks import tasks_crud from . import utils @@ -864,4 +864,22 @@ async def get_project_tiles( background_task_id ) - return {"Message": "Tile generation started"} \ No newline at end of file + return {"Message": "Tile generation started"} + + +@router.get("/tiles_list/{project_id}/") +async def tiles_list( + project_id: int, + db: Session = Depends(database.get_db) + ): + + """ + Returns the list of tiles for a project. + + Parameters: + project_id: int + + Returns: + Response: List of generated tiles for a project. + """ + return await project_crud.get_mbtiles_list(db, project_id) From 2bce6af16eb43652a858c0c445747cc447cd6e57 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 14 Aug 2023 08:39:28 +0545 Subject: [PATCH 209/222] api to download mbtiles --- src/backend/app/projects/project_routes.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 69d3432d21..2981cc4e5e 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -883,3 +883,12 @@ async def tiles_list( Response: List of generated tiles for a project. """ return await project_crud.get_mbtiles_list(db, project_id) + + +@router.get("/download_tiles/") +async def download_tiles( + tile_id:int, + db: Session = Depends(database.get_db) + ): + tiles_path = db.query(db_models.DbTilesPath).filter(db_models.DbTilesPath.id == str(tile_id)).first() + return FileResponse(tiles_path.path, headers={"Content-Disposition": f"attachment; filename=tiles.mbtiles"}) From a2b424cf7beccf06a79356afffbc088494f4f1d0 Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 14 Aug 2023 09:15:47 +0545 Subject: [PATCH 210/222] submission received from getAllSubmission in convert to osm --- src/backend/app/submission/submission_crud.py | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 7757b80535..4b089b7d17 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -255,12 +255,6 @@ async def convert_to_osm(db: Session, project_id: int, task_id: int): # Get ODK Form with odk credentials from the project. xform = get_odk_form(odk_credentials) - # XML Form Id is a combination or project_name, category and task_id - xml_form_id = f"{project_name}_{form_category}_{task_id}".split("_")[2] - - # Get the task lists of the project if task_id is not provided - tasks = [task_id] if task_id else tasks_crud.get_task_lists(db, project_id) - # Create a new ZIP file for the extracted files final_zip_file_path = f"/tmp/{project_name}_{form_category}_osm.zip" @@ -268,17 +262,31 @@ async def convert_to_osm(db: Session, project_id: int, task_id: int): if os.path.exists(final_zip_file_path): os.remove(final_zip_file_path) - for task in tasks: - xml_form_id = f"{project_name}_{form_category}_{task}".split("_")[2] + # Submission JSON + if task_id: + submission = xform.getSubmissions(odkid, task_id, None, False, True) + submission = (json.loads(submission))['value'] + else: + submission = get_all_submissions(db, project_id) + + if not submission: + raise HTTPException(status_code=404, detail="Submission not found") + + # JSON FILE PATH + jsoninfile = "/tmp/json_infile.json" + + # Write the submission to a file + with open(jsoninfile, 'w') as f: + f.write(json.dumps(submission)) - # Get the osm xml and geojson files for the task - osmoutfile, jsonoutfile = await convert_to_osm_for_task(odkid, xml_form_id, xform) + # Convert the submission to osm xml format + osmoutfile, jsonoutfile = await convert_json_to_osm(jsoninfile) - if osmoutfile and jsonoutfile: - # Add the files to the ZIP file - with zipfile.ZipFile(final_zip_file_path, mode="a") as final_zip_file: - final_zip_file.write(osmoutfile) - final_zip_file.write(jsonoutfile) + if osmoutfile and jsonoutfile: + # Add the files to the ZIP file + with zipfile.ZipFile(final_zip_file_path, mode="a") as final_zip_file: + final_zip_file.write(osmoutfile) + final_zip_file.write(jsonoutfile) return FileResponse(final_zip_file_path) From aa4d36f1d45da4e4200557690346ef19c8fb038a Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 14 Aug 2023 09:18:59 +0545 Subject: [PATCH 211/222] removed extra osm at the end of osm file --- src/backend/app/submission/submission_crud.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 4b089b7d17..401b056e60 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -283,6 +283,22 @@ async def convert_to_osm(db: Session, project_id: int, task_id: int): osmoutfile, jsonoutfile = await convert_json_to_osm(jsoninfile) if osmoutfile and jsonoutfile: + + #FIXME: Need to fix this when generating osm file + + # Remove the extra closing tag from the end of the file + with open(osmoutfile, 'r') as f: + osmoutfile_data = f.read() + # Find the last index of the closing tag + last_osm_index = osmoutfile_data.rfind('') + # Remove the extra closing tag from the end + processed_xml_string = osmoutfile_data[:last_osm_index] + osmoutfile_data[last_osm_index + len(''):] + + # Write the modified XML data back to the file + with open(osmoutfile, 'w') as f: + f.write(processed_xml_string) + + # Add the files to the ZIP file with zipfile.ZipFile(final_zip_file_path, mode="a") as final_zip_file: final_zip_file.write(osmoutfile) From 25276dfe8ed87c6d9119672cc19a92691db1945e Mon Sep 17 00:00:00 2001 From: Niraj Adhikari Date: Mon, 14 Aug 2023 11:43:53 +0545 Subject: [PATCH 212/222] feat: api to test the validity of custom form uploaded --- src/backend/app/central/central_crud.py | 26 ++++++++++++++++++++++ src/backend/app/projects/project_routes.py | 21 +++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/backend/app/central/central_crud.py b/src/backend/app/central/central_crud.py index 5e4a0c8e01..04c09e5d6a 100644 --- a/src/backend/app/central/central_crud.py +++ b/src/backend/app/central/central_crud.py @@ -342,6 +342,32 @@ def download_submissions( return fixed.splitlines() +async def test_form_validity( + xform_content: str, + form_type: str + ): + """ + Validate an XForm. + Parameters: + xform_content: form to be tested + form_type: type of form (xls or xlsx) + """ + try: + xlsform_path = f"/tmp/validate_form.{form_type}" + outfile = f"/tmp/outfile.xml" + + with open(xlsform_path, "wb") as f: + f.write(xform_content) + + xls2xform_convert(xlsform_path=xlsform_path, xform_path=outfile, validate=False) + return {"message": "Your form is valid"} + except Exception as e: + raise HTTPException(status_code=400, detail={ + "message": "Your form is invalid", + "possible_reason":str(e) + }) + + def generate_updated_xform( xlsform: str, xform: str, diff --git a/src/backend/app/projects/project_routes.py b/src/backend/app/projects/project_routes.py index 0cf9ff94c3..fc700c78b2 100644 --- a/src/backend/app/projects/project_routes.py +++ b/src/backend/app/projects/project_routes.py @@ -437,6 +437,27 @@ async def edit_project_boundary( } +@router.post("/validate_form") +async def validate_form( + form: UploadFile, + ): + """ + Tests the validity of the xls form uploaded. + + Parameters: + - form: The xls form to validate + """ + file_name = os.path.splitext(form.filename) + file_ext = file_name[1] + + allowed_extensions = [".xls", '.xlsx'] + if file_ext not in allowed_extensions: + raise HTTPException(status_code=400, detail="Provide a valid .xls file") + + await form.seek(0) + contents = await form.read() + return await central_crud.test_form_validity(contents, file_ext[1:]) + @router.post("/{project_id}/generate") async def generate_files( From a419da773bf2fc50de49ba15b7ad37c6f3736287 Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 14 Aug 2023 15:19:00 +0545 Subject: [PATCH 213/222] fix: Color Changes of Tasks and Lock added --- .../src/components/OpenLayersMap.jsx | 254 ++++++++++-------- .../components/ProjectInfo/ProjectInfomap.jsx | 3 +- .../fmtm_openlayer_map/src/hooks/MapStyles.js | 88 +++--- .../src/layers/TasksLayer.jsx | 14 +- .../fmtm_openlayer_map/src/views/Home.jsx | 12 +- src/frontend/main/src/assets/images/lock.png | Bin 0 -> 320 bytes .../main/src/assets/images/red-lock.png | Bin 0 -> 423 bytes src/frontend/main/src/index.css | 2 +- src/frontend/main/src/shared/AssetModules.js | 5 +- .../main/src/store/slices/ThemeSlice.ts | 64 +++-- 10 files changed, 258 insertions(+), 184 deletions(-) create mode 100644 src/frontend/main/src/assets/images/lock.png create mode 100644 src/frontend/main/src/assets/images/red-lock.png diff --git a/src/frontend/fmtm_openlayer_map/src/components/OpenLayersMap.jsx b/src/frontend/fmtm_openlayer_map/src/components/OpenLayersMap.jsx index e5580b4bb9..cc3bc274e0 100755 --- a/src/frontend/fmtm_openlayer_map/src/components/OpenLayersMap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/OpenLayersMap.jsx @@ -8,13 +8,14 @@ import accDownImg from "../assets/images/acc-down.png"; import accUpImg from "../assets/images/acc-up.png"; import gridIcon from "../assets/images/grid.png"; import QrcodeComponent from "./QrcodeComponent"; -import * as ol from 'ol'; -import { Point } from 'ol/geom'; -import Vector from 'ol/layer/Vector'; +import * as ol from "ol"; +import { Point } from "ol/geom"; +import Vector from "ol/layer/Vector"; import VectorSource from "ol/source/Vector"; import { transform } from "ol/proj"; import { Icon, Style } from "ol/style"; -import LocationImage from '../assets/images/location.png' +import LocationImage from "../assets/images/location.png"; +import AssetModules from "fmtm/AssetModules"; let currentLocationLayer = null; const OpenLayersMap = ({ defaultTheme, @@ -31,7 +32,7 @@ const OpenLayersMap = ({ windowType, }) => { const [toggleCurrentLoc, setToggleCurrentLoc] = useState(false); - const [currentLocLayer, setCurrentLocLayer]=useState(null); + const [currentLocLayer, setCurrentLocLayer] = useState(null); function elastic(t) { return ( Math.pow(2, -10 * t) * Math.sin(((t - 0.075) * (2 * Math.PI)) / 0.3) + 1 @@ -41,7 +42,7 @@ const OpenLayersMap = ({ useEffect(() => { let btnsPosition = 0; var btnList = ["add", "minus", "defaultPosition", "taskBoundries"]; - + if (map != undefined) { var handleOnClick = function (e) { if (e.target.id == "add") { @@ -51,34 +52,39 @@ const OpenLayersMap = ({ let actualZoom = map.getView().getZoom(); map.getView().setZoom(actualZoom - 1); } else if (e.target.id == "defaultPosition") { - const sourceProjection = 'EPSG:4326'; // The current projection of the coordinates - const targetProjection = 'EPSG:3857'; // The desired projection + const sourceProjection = "EPSG:4326"; // The current projection of the coordinates + const targetProjection = "EPSG:3857"; // The desired projection // Create a style for the marker var markerStyle = new Style({ image: new Icon({ src: LocationImage, // Path to your marker icon image anchor: [0.5, 1], // Anchor point of the marker icon (center bottom) - scale: 2 // Scale factor for the marker icon - }) + scale: 2, // Scale factor for the marker icon + }), }); - if ('geolocation' in navigator) { - navigator.geolocation.getCurrentPosition( - (position) => { - const lat = position.coords.latitude; - const lng = position.coords.longitude; - const convertedCoordinates = transform([lng,lat], sourceProjection, targetProjection); - const positionFeature = new ol.Feature(new Point(convertedCoordinates)); - const positionLayer = new Vector({ - source: new VectorSource({ - features: [positionFeature] - }) - }); - positionFeature.setStyle(markerStyle); - setCurrentLocLayer(positionLayer); + if ("geolocation" in navigator) { + navigator.geolocation.getCurrentPosition((position) => { + const lat = position.coords.latitude; + const lng = position.coords.longitude; + const convertedCoordinates = transform( + [lng, lat], + sourceProjection, + targetProjection + ); + const positionFeature = new ol.Feature( + new Point(convertedCoordinates) + ); + const positionLayer = new Vector({ + source: new VectorSource({ + features: [positionFeature], + }), }); + positionFeature.setStyle(markerStyle); + setCurrentLocLayer(positionLayer); + }); } - setToggleCurrentLoc(!toggleCurrentLoc); - + setToggleCurrentLoc(!toggleCurrentLoc); + // map.getView().setZoom(15); } else if (e.target.id == "taskBoundries") { if (state.projectTaskBoundries.length != 0 && map != undefined) { @@ -156,126 +162,138 @@ const OpenLayersMap = ({ const MapDetails = [ { - value: 'Ready', - color: defaultTheme.palette.mapFeatureColors.ready, - status: 'none' + value: "Ready", + color: defaultTheme.palette.mapFeatureColors.ready, + status: "none", }, { - value: 'Locked For Mapping', - color: defaultTheme.palette.mapFeatureColors.locked_for_mapping, - status: 'lock' + value: "Locked For Mapping", + color: defaultTheme.palette.mapFeatureColors.locked_for_mapping, + status: "lock", }, { - value: 'Locked For Validation', - color: defaultTheme.palette.mapFeatureColors.locked_for_validation, - status: 'lock' + value: "Ready For Validation", + color: defaultTheme.palette.mapFeatureColors.mapped, + status: "none", }, { - value: 'Ready For Validation', - color: defaultTheme.palette.mapFeatureColors.mapped, - status: 'none' + value: "Locked For Validation", + color: defaultTheme.palette.mapFeatureColors.locked_for_validation, + status: "lock", }, { - value: 'Validated', - color: defaultTheme.palette.mapFeatureColors.validated, - status: 'none' + value: "Validated", + color: defaultTheme.palette.mapFeatureColors.validated, + status: "none", }, + // { + // value: "Bad", + // color: defaultTheme.palette.mapFeatureColors.bad, + // status: "none", + // }, { - value: 'Bad', - color: defaultTheme.palette.mapFeatureColors.bad, - status: 'none' + value: "More mapping needed", + color: defaultTheme.palette.mapFeatureColors.invalidated, + status: "none", }, { - value: 'More mapping needed', - color: defaultTheme.palette.mapFeatureColors.invalidated, - status: 'none' - } - ] - let legendContainer = document.createElement("div"); - legendContainer.className = "legend-container"; - const legendLabel = document.createElement('span'); - legendLabel.innerHTML= 'Legend'; - const legendAccIcon = document.createElement('span'); - legendAccIcon.className = "legend-acc-icon"; - let img = document.createElement("img"); - img.src = accDownImg; - img.style.width = '24px'; - img.style.height = '24px'; - img.style.display = 'none'; - let accUp = document.createElement("img"); - accUp.src = accUpImg; - accUp.style.width = '18px'; - accUp.style.height = '18px'; - // accUp.style.display = 'none'; - // img.id = `${elmnt}`; - // legendAccIcon.addEventListener("click", function(){ + value: "Locked", + color: defaultTheme.palette.mapFeatureColors.invalidated, + status: "none", + type: "locked", + }, + ]; + let legendContainer = document.createElement("div"); + legendContainer.className = "legend-container"; + const legendLabel = document.createElement("span"); + legendLabel.innerHTML = "Legend"; + const legendAccIcon = document.createElement("span"); + legendAccIcon.className = "legend-acc-icon"; + let img = document.createElement("img"); + img.src = accDownImg; + img.style.width = "24px"; + img.style.height = "24px"; + img.style.display = "none"; + let accUp = document.createElement("img"); + accUp.src = accUpImg; + accUp.style.width = "18px"; + accUp.style.height = "18px"; + // accUp.style.display = 'none'; + // img.id = `${elmnt}`; + // legendAccIcon.addEventListener("click", function(){ - // }, false); - legendAccIcon.appendChild(img); - legendAccIcon.appendChild(accUp); - legendContainer.appendChild(legendLabel) - legendContainer.appendChild(legendAccIcon) - - - - // const legendContainer = document.getElementById('legendContainer'); - let legendContent = document.createElement("div"); - legendContent.className = "legend-content"; - legendContent.style.display = "none"; - legendContainer.style.margin = '552px 6px'; - MapDetails.forEach((detail) => { - const legend = document.createElement('div'); - legend.className = 'legend'; + // }, false); + legendAccIcon.appendChild(img); + legendAccIcon.appendChild(accUp); + legendContainer.appendChild(legendLabel); + legendContainer.appendChild(legendAccIcon); - const legendText = document.createElement('span'); - legendText.className = 'legend-text'; - legendText.textContent = detail.value; + // const legendContainer = document.getElementById('legendContainer'); + let legendContent = document.createElement("div"); + legendContent.className = "legend-content"; + legendContent.style.display = "none"; + legendContainer.style.margin = "552px 6px"; + MapDetails.forEach((detail) => { + const legend = document.createElement("div"); + legend.className = "legend"; - const legendSquare = document.createElement('div'); - legendSquare.className = 'legend-square'; - legendSquare.style.backgroundColor = detail.color; + const legendText = document.createElement("span"); + legendText.className = "legend-text"; + legendText.textContent = detail.value; - legend.appendChild(legendText); - legend.appendChild(legendSquare); + if (detail.type === "locked") { + const legendSquare = document.createElement("img"); + legendSquare.className = "legend-lock-img"; + // legendSquare.style.width = "20px"; + legendSquare.style.height = "20px"; + legendSquare.src = AssetModules.LockPng; + legend.appendChild(legendText); + legend.appendChild(legendSquare); + } else { + const legendSquare = document.createElement("div"); + legendSquare.className = "legend-square"; + legendSquare.style.backgroundColor = detail.color; + legend.appendChild(legendText); + legend.appendChild(legendSquare); + } - legendContent.appendChild(legend); - }); - legendContainer.appendChild(legendContent); - // Add event listener to toggle the accordion content - legendAccIcon.addEventListener('click', function() { - if (legendContent.style.display === 'none') { - accUp.style.display="none"; - img.style.display="inline"; - legendContent.style.display = 'block'; - legendContainer.style.margin = '250px 10px'; - } else { - img.style.display="none"; - accUp.style.display="inline"; - legendContent.style.display = 'none'; - legendContainer.style.margin = '552px 6px'; - } - }); - var controlx = new Control({ - element: legendContainer, - }); + legendContent.appendChild(legend); + }); + legendContainer.appendChild(legendContent); + // Add event listener to toggle the accordion content + legendAccIcon.addEventListener("click", function () { + if (legendContent.style.display === "none") { + accUp.style.display = "none"; + img.style.display = "inline"; + legendContent.style.display = "block"; + legendContainer.style.margin = "200px 10px"; + } else { + img.style.display = "none"; + accUp.style.display = "inline"; + legendContent.style.display = "none"; + legendContainer.style.margin = "552px 6px"; + } + }); + var controlx = new Control({ + element: legendContainer, + }); - map.addControl(controlx); + map.addControl(controlx); } }, [map]); useEffect(() => { - if(!map) return; - if(!currentLocLayer) return; + if (!map) return; + if (!currentLocLayer) return; map.addLayer(currentLocLayer); map.getView().fit(currentLocLayer.getSource().getExtent(), { maxZoom: 18, - duration: 500 + duration: 500, }); return () => { map.removeLayer(currentLocLayer); - } - }, [map,currentLocLayer]) - + }; + }, [map, currentLocLayer]); return ( diff --git a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx index 36c3697678..92a84f406b 100644 --- a/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx +++ b/src/frontend/fmtm_openlayer_map/src/components/ProjectInfo/ProjectInfomap.jsx @@ -116,7 +116,7 @@ const ProjectInfomap = () => { count: task.submission_count, })); - const projectBuildingGeojson = useAppSelector( + const projectBuildingGeojson = CoreModules.useAppSelector( (state) => state.project.projectBuildingGeojson ); const selectedTask = CoreModules.useAppSelector( @@ -234,7 +234,6 @@ const ProjectInfomap = () => { legendColorArray ); stylex.fillColor = choroplethColor; - console.log(choroplethColor, "choroplethColor"); return getStyles({ style: stylex, feature, diff --git a/src/frontend/fmtm_openlayer_map/src/hooks/MapStyles.js b/src/frontend/fmtm_openlayer_map/src/hooks/MapStyles.js index 798d27cedf..a02534d849 100755 --- a/src/frontend/fmtm_openlayer_map/src/hooks/MapStyles.js +++ b/src/frontend/fmtm_openlayer_map/src/hooks/MapStyles.js @@ -1,64 +1,81 @@ import Fill from 'ol/style/Fill'; import Stroke from 'ol/style/Stroke'; -import Style from 'ol/style/Style'; +import { Icon, Style,} from 'ol/style'; import React, { useEffect, useState } from 'react' import CoreModules from 'fmtm/CoreModules'; -export default function MapStyles() { - +import AssetModules from 'fmtm/AssetModules'; +import {getCenter} from 'ol/extent'; +import Point from 'ol/geom/Point.js'; +function createPolygonStyle(fillColor, strokeColor) { + return new Style({ + stroke: new Stroke({ + color: strokeColor, + width: 3, + }), + fill: new Fill({ + color: fillColor, + }), + }); +} +function createIconStyle(iconSrc) { + return new Style({ + image: new Icon({ + anchor: [0.5, 1], + scale:1.5, + anchorXUnits: "fraction", + anchorYUnits: "pixels", + src: iconSrc, + }), + geometry: function (feature) { + // return the coordinates of the centroid of the polygon + const coordinates = feature.getGeometry().getExtent(); + const center = getCenter(coordinates); + return new Point(center); + }, + }); +} +export default function MapStyles() { const mapTheme = CoreModules.useAppSelector(state => state.theme.hotTheme) const [style, setStyle] = useState({}) + const strokeColor= 'rgb(0,0,0,0.5)'; useEffect(() => { - + + + + // Example usage: + const lockedPolygonStyle = createPolygonStyle(mapTheme.palette.mapFeatureColors.locked_for_mapping_rgb, strokeColor); + const lockedValidationStyle = createPolygonStyle(mapTheme.palette.mapFeatureColors.locked_for_validation_rgb, strokeColor); + const iconStyle = createIconStyle(AssetModules.LockPng); + const redIconStyle = createIconStyle(AssetModules.RedLockPng); + const geojsonStyles = { 'READY': new Style({ stroke: new Stroke({ - color: mapTheme.palette.mapFeatureColors.ready, - lineDash: [4], + color: strokeColor, width: 3, }), fill: new Fill({ color: mapTheme.palette.mapFeatureColors.ready_rgb, }), }), - 'LOCKED_FOR_MAPPING': new Style({ - stroke: new Stroke({ - color: mapTheme.palette.mapFeatureColors.locked_for_mapping, - lineDash: [4], - width: 3, - }), - fill: new Fill({ - color: mapTheme.palette.mapFeatureColors.locked_for_mapping_rgb - }), - }), + 'LOCKED_FOR_MAPPING': [lockedPolygonStyle, iconStyle], 'MAPPED': new Style({ stroke: new Stroke({ - color: mapTheme.palette.mapFeatureColors.mapped, - lineDash: [4], + color: strokeColor, width: 3, }), fill: new Fill({ color: mapTheme.palette.mapFeatureColors.mapped_rgb }), }), - 'LOCKED_FOR_VALIDATION': new Style({ - stroke: new Stroke({ - color: mapTheme.palette.mapFeatureColors.locked_for_validation, - lineDash: [4], - width: 3, - }), - fill: new Fill({ - color: mapTheme.palette.mapFeatureColors.locked_for_validation_rgb - }), - }), + 'LOCKED_FOR_VALIDATION': [lockedValidationStyle,redIconStyle], 'VALIDATED': new Style({ - stroke: new Stroke({ - color: mapTheme.palette.mapFeatureColors.validated, - lineDash: [4], + color: strokeColor, width: 3, }), fill: new Fill({ @@ -67,8 +84,7 @@ export default function MapStyles() { }), 'INVALIDATED': new Style({ stroke: new Stroke({ - color: mapTheme.palette.mapFeatureColors.invalidated, - lineDash: [4], + color: strokeColor, width: 3, }), fill: new Fill({ @@ -77,8 +93,7 @@ export default function MapStyles() { }), 'BAD': new Style({ stroke: new Stroke({ - color: mapTheme.palette.mapFeatureColors.bad, - lineDash: [4], + color: strokeColor, width: 3, }), fill: new Fill({ @@ -87,8 +102,7 @@ export default function MapStyles() { }), 'SPLIT': new Style({ stroke: new Stroke({ - color: mapTheme.palette.mapFeatureColors.split, - lineDash: [4], + color: strokeColor, width: 3, }), fill: new Fill({ diff --git a/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx b/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx index ed09925b3d..08d6c0bdb2 100755 --- a/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx +++ b/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx @@ -52,6 +52,7 @@ const TasksLayer = (map, view, feature) => { const vectorLayer = new VectorLayer({ source: vectorSource, style: styleFunction, + zIndex: 10, }); // Initialize variables to store the extent var minX = Infinity; @@ -77,13 +78,12 @@ const TasksLayer = (map, view, feature) => { duration: 2000, // Animation duration in milliseconds padding: [50, 50, 50, 200], // Optional padding around the extent }); - - map.addLayer(vectorLayer); - window.vector = vectorLayer; - window.testmap = map; - map.on("loadend", function () { - map.getTargetElement().classList.remove("spinner"); - }); + setTimeout(() => { + map.addLayer(vectorLayer); + map.on("loadend", function () { + map.getTargetElement().classList.remove("spinner"); + }); + }, 3000); } } }, [state.newProjectTrigger, map]); diff --git a/src/frontend/fmtm_openlayer_map/src/views/Home.jsx b/src/frontend/fmtm_openlayer_map/src/views/Home.jsx index 3546cf9257..392b93f12b 100755 --- a/src/frontend/fmtm_openlayer_map/src/views/Home.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/Home.jsx @@ -21,6 +21,7 @@ import View from "ol/View"; import { HomeActions } from "fmtm/HomeSlice"; import CoreModules from "fmtm/CoreModules"; import AssetModules from "fmtm/AssetModules"; +// import MapboxVector from "ol/layer/MapboxVector.js"; import Overlay from "ol/Overlay"; const Home = () => { @@ -148,7 +149,12 @@ const Home = () => { center: [0, 0], zoom: 1, }); - + // const mapboxBaseLayer = new MapboxVector({ + // styleUrl: "mapbox://styles/mapbox/bright-v9", + // accessToken: + // "pk.eyJ1IjoidmFydW4yNjYiLCJhIjoiY2xsNmU1ZWtrMGhoNjNkcWpqejhhb2IycyJ9.DiPTq9YEErGUHhgW4pINdg", + // }); + // mapboxBaseLayer.setZIndex(0); const initialMap = new Map({ target: mapElement.current, controls: new defaults({ @@ -156,11 +162,12 @@ const Home = () => { zoom: false, }), layers: [ + initalFeaturesLayer, + // mapboxBaseLayer, new TileLayer({ source: new OSM(), visible: true, }), - initalFeaturesLayer, ], overlays: [overlay], view: view, @@ -212,6 +219,7 @@ const Home = () => { }, [map, y]); // if(map && mainView && featuresLayer){ // } + TasksLayer(map, mainView, featuresLayer); const handleDownload = (downloadType) => { diff --git a/src/frontend/main/src/assets/images/lock.png b/src/frontend/main/src/assets/images/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..e503a93757732351f4618b3d6be5ef5fd329cdf6 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^f9gP2NC6e?^>lFz zvFLq!!O)A@QR3*w`HDFmt~$!MT%%7i7IEYjvA$ojUBL1Eggb{Ev~+!LxJX}5N`IKV zdG&&%sqBYs?)`pt{>+6n#dne#%WWRArR#pS-sRM{DDmlzKYRwq%w&EYFnSxh?cmYy z3BL{gG$fwt|0uC*x7mS(pZ>DWGhFf2y~6Xa^sms1oX*QnOq!n@+Po)eT8;kM_YRvL zT-V*+Te+U|Q*vqH+&`Wt+!e!5Yx^2DGCy_y>s9}0j%^D6PxBM%kGQqsRPV3!1$u#|sC)!_AHWI=0)Yncr!q<`uryj2BPN1i?%3RoE36g9iqp-RGhfaqB6Q>X>z2qK zunjCKcoHZ(wtbkcRy(74HEP`Y{*Dqk2D}LVyRxj^jau#GSIAvHzp1r817?gRz$35} z%JvZ1$}}3+!JQR`Xst^DK%o5TILn!OJ*kyS0;eW6i&CY?CYRZ)7f&Q!fEe)X^!uyn zR;wHAJB7mBU^u)77J!e$U@*VZZ1#RM@#6860RUWt0RU^2$}4bgMz`y_sj+v&wqv22 zH=_0JE9H(sCXs6Aaz#TD%E8r+1Uj(uye}KqC0Fg~{bF002ovPDHLkV1jjPtZ)DT literal 0 HcmV?d00001 diff --git a/src/frontend/main/src/index.css b/src/frontend/main/src/index.css index 42f480aed9..7e97204957 100755 --- a/src/frontend/main/src/index.css +++ b/src/frontend/main/src/index.css @@ -126,7 +126,7 @@ button { .legend-square { width: 20px; height: 20px; - background-color: red; + border:1px solid black; } .submission-item{ diff --git a/src/frontend/main/src/shared/AssetModules.js b/src/frontend/main/src/shared/AssetModules.js index 6265b26dc7..f35991b60e 100755 --- a/src/frontend/main/src/shared/AssetModules.js +++ b/src/frontend/main/src/shared/AssetModules.js @@ -30,7 +30,8 @@ import { SettingsSuggest as SettingsSuggestIcon, ArrowBack as ArrowBackIcon, } from '@mui/icons-material'; - +import LockPng from '../assets/images/lock.png'; +import RedLockPng from '../assets/images/red-lock.png'; import { styled, alpha } from '@mui/material/styles'; export default { ExitToAppIcon, @@ -65,4 +66,6 @@ export default { KeyboardDoubleArrowDownIcon, SettingsSuggestIcon, ArrowBackIcon, + LockPng, + RedLockPng, }; diff --git a/src/frontend/main/src/store/slices/ThemeSlice.ts b/src/frontend/main/src/store/slices/ThemeSlice.ts index 60b1ce5416..de67e64a6d 100755 --- a/src/frontend/main/src/store/slices/ThemeSlice.ts +++ b/src/frontend/main/src/store/slices/ThemeSlice.ts @@ -49,28 +49,60 @@ const ThemeSlice = CoreModules.createSlice({ }, mapFeatureColors: { //blue - ready: '#008099', - ready_rgb: 'rgb(0, 128, 153,0.4)', - locked_for_mapping: '#0063cc', - locked_for_mapping_rgb: 'rgb(0, 99, 204,0.4)', - mapped: '#161969', - mapped_rgb: 'rgb(22, 25, 105,0.4)', - locked_for_validation: '#3d1c97', - locked_for_validation_rgb: 'rgb(61, 28, 151,0.4)', + ready: 'rgba(255,255,255, 0.5)', + ready_rgb: 'rgba(255,255,255, 0.5)', + locked_for_mapping: 'rgba(0, 128, 153, 0.5)', + locked_for_mapping_rgb: 'rgba(0, 128, 153, 0.5)', + mapped: 'rgba(173, 230, 239, 0.8)', + mapped_rgb: 'rgba(173, 230, 239, 0.8)', + locked_for_validation: 'rgb(252,236,164,0.5)', + locked_for_validation_rgb: 'rgb(252,236,164,0.5)', //green - validated: '#006600', - validated_rgb: 'rgb(0, 102, 0,0.4)', + validated: 'rgba(64, 172, 140, 0.5)', + validated_rgb: 'rgba(64, 172, 140, 0.5)', //yellow // invalidated: '#ffff00', - invalidated: '#ffcc00', - invalidated_rgb: 'rgb(255, 204, 0,0.4)', + invalidated: 'rgb(215,63,62,0.5)', + invalidated_rgb: 'rgb(215,63,62,0.5)', //brown - bad: '#704343', - bad_rgb: 'rgb(112, 67, 67,0.4)', - split: '#704343', - split_rgb: 'rgb(112, 67, 67,0.4)', + bad: 'rgba(216, 218, 228, 0.5)', + bad_rgb: 'rgba(216, 218, 228, 0.5)', + split: 'rgb(112, 67, 67,0.5)', + split_rgb: 'rgb(112, 67, 67,0.5)', }, }, + READY: '#fff', + LOCKED_FOR_MAPPING: '#fff', + MAPPED: '#ade6ef', + LOCKED_FOR_VALIDATION: '#ade6ef', + VALIDATED: '#40ac8c', + INVALIDATED: '#fceca4', + BADIMAGERY: '#d8dae4', + PRIORITY_AREAS: '#efd1d1', + // mapFeatureColors: { + // //blue + // ready: '#008099', + // ready_rgb: 'rgb(0, 128, 153,0.4)', + // locked_for_mapping: '#0063cc', + // locked_for_mapping_rgb: 'rgb(0, 99, 204,0.4)', + // mapped: '#161969', + // mapped_rgb: 'rgb(22, 25, 105,0.4)', + // locked_for_validation: '#3d1c97', + // locked_for_validation_rgb: 'rgb(61, 28, 151,0.4)', + // //green + // validated: '#006600', + // validated_rgb: 'rgb(0, 102, 0,0.4)', + // //yellow + // // invalidated: '#ffff00', + // invalidated: '#ffcc00', + // invalidated_rgb: 'rgb(255, 204, 0,0.4)', + // //brown + // bad: '#704343', + // bad_rgb: 'rgb(112, 67, 67,0.4)', + // split: '#704343', + // split_rgb: 'rgb(112, 67, 67,0.4)', + // }, + // }, typography: { //default font family changed to BarlowMedium fontSize: 16, From 3d674cd6807d36f47c0da7d81323253578c16f47 Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 14 Aug 2023 15:36:55 +0545 Subject: [PATCH 214/222] hotfix: remove timeout of loader --- .../fmtm_openlayer_map/src/layers/TasksLayer.jsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx b/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx index 08d6c0bdb2..7fef957b25 100755 --- a/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx +++ b/src/frontend/fmtm_openlayer_map/src/layers/TasksLayer.jsx @@ -78,12 +78,10 @@ const TasksLayer = (map, view, feature) => { duration: 2000, // Animation duration in milliseconds padding: [50, 50, 50, 200], // Optional padding around the extent }); - setTimeout(() => { - map.addLayer(vectorLayer); - map.on("loadend", function () { - map.getTargetElement().classList.remove("spinner"); - }); - }, 3000); + map.addLayer(vectorLayer); + map.on("loadend", function () { + map.getTargetElement().classList.remove("spinner"); + }); } } }, [state.newProjectTrigger, map]); From 2b97625c49b352c5c3ddc0ff49f0b5c3e7a68fda Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 14 Aug 2023 15:59:13 +0545 Subject: [PATCH 215/222] fix: hashtag validation create project --- .../createproject/ProjectDetailsForm.tsx | 4 ++-- .../validation/CreateProjectValidation.tsx | 6 +++++- .../validation/DataExtractValidation.tsx | 18 ++++++++++-------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx index 1aeb1eaead..049ac70f3e 100755 --- a/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx +++ b/src/frontend/main/src/components/createproject/ProjectDetailsForm.tsx @@ -298,7 +298,7 @@ const ProjectDetailsForm: React.FC = () => { {/* Project Name Form Input For Create Project */} - Hashtag + Tags { onChange={(e) => { handleCustomChange('hashtags', e.target.value); }} - helperText={errors.odk_central_url} + helperText={errors.hashtags} FormHelperTextProps={inputFormStyles()} /> {/* {errors.name} * */} diff --git a/src/frontend/main/src/components/createproject/validation/CreateProjectValidation.tsx b/src/frontend/main/src/components/createproject/validation/CreateProjectValidation.tsx index d2547e1c9f..1283d81b3b 100755 --- a/src/frontend/main/src/components/createproject/validation/CreateProjectValidation.tsx +++ b/src/frontend/main/src/components/createproject/validation/CreateProjectValidation.tsx @@ -1,4 +1,3 @@ - interface ProjectValues { organization: string; name: string; @@ -6,6 +5,7 @@ interface ProjectValues { id: string; short_description: string; description: string; + hashtags: string; odk_central_url: string; odk_central_user: string; odk_central_password: string; @@ -17,6 +17,7 @@ interface ValidationErrors { id?: string; short_description?: string; description?: string; + hashtags?: string; odk_central_url?: string; odk_central_user?: string; odk_central_password?: string; @@ -47,6 +48,9 @@ function CreateProjectValidation(values: ProjectValues) { if (!values?.short_description) { errors.short_description = 'Short Description is Required.'; } + if (!values?.hashtags) { + errors.hashtags = 'Tags is Required.'; + } if (!values?.description) { errors.description = 'Description is Required.'; } diff --git a/src/frontend/main/src/components/createproject/validation/DataExtractValidation.tsx b/src/frontend/main/src/components/createproject/validation/DataExtractValidation.tsx index ecf639355f..6483130cd1 100644 --- a/src/frontend/main/src/components/createproject/validation/DataExtractValidation.tsx +++ b/src/frontend/main/src/components/createproject/validation/DataExtractValidation.tsx @@ -1,17 +1,16 @@ - interface ProjectValues { xform_title: string; form_ways: string; data_extractWays: string; data_extractFile: object; - data_extract_options:string; + data_extract_options: string; } interface ValidationErrors { xform_title?: string; form_ways?: string; data_extractWays?: string; data_extractFile?: string; - data_extract_options?:string; + data_extract_options?: string; } function DataExtractValidation(values: ProjectValues) { @@ -20,17 +19,20 @@ function DataExtractValidation(values: ProjectValues) { if (!values?.xform_title) { errors.xform_title = 'Form Category is Required.'; } - if(!values.data_extract_options){ - errors.data_extract_options= 'Select Data Extract Options.'; + if (!values.data_extract_options) { + errors.data_extract_options = 'Select Data Extract Options.'; } - if(values.data_extract_options && values.data_extract_options === 'Upload Custom Data Extract' && !values.data_extractFile){ + if ( + values.data_extract_options && + values.data_extract_options === 'Upload Custom Data Extract' && + !values.data_extractFile + ) { errors.data_extractFile = 'Data Extract File is Required.'; } - if(values.data_extract_options && values.data_extract_options === 'Data Extract Ways' && !values.data_extractWays){ + if (values.data_extract_options && values.data_extract_options === 'Data Extract Ways' && !values.data_extractWays) { errors.data_extractWays = 'Data Extract Ways is Required.'; } - console.log(errors); return errors; } From 65eb4a9ac5247e10c1c50777dbe9b86248aa2e53 Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 14 Aug 2023 15:59:45 +0545 Subject: [PATCH 216/222] feat: order change define task and data extract --- .../components/createproject/DataExtract.tsx | 2 +- .../components/createproject/DefineTasks.tsx | 2 +- .../components/createproject/UploadArea.tsx | 4 +-- src/frontend/main/src/views/CreateProject.tsx | 26 +++++++++---------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/frontend/main/src/components/createproject/DataExtract.tsx b/src/frontend/main/src/components/createproject/DataExtract.tsx index 067a22ef1a..589d802ed3 100755 --- a/src/frontend/main/src/components/createproject/DataExtract.tsx +++ b/src/frontend/main/src/components/createproject/DataExtract.tsx @@ -54,7 +54,7 @@ const DataExtract: React.FC = ({ const submission = () => { // const previousValues = location.state.values; dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, ...values })); - navigate('/select-form'); + navigate('/define-tasks'); // navigate("/select-form", { replace: true, state: { values: values } }); }; diff --git a/src/frontend/main/src/components/createproject/DefineTasks.tsx b/src/frontend/main/src/components/createproject/DefineTasks.tsx index 2647c7429b..160c3590f3 100755 --- a/src/frontend/main/src/components/createproject/DefineTasks.tsx +++ b/src/frontend/main/src/components/createproject/DefineTasks.tsx @@ -41,7 +41,7 @@ const DefineTasks: React.FC = ({ geojsonFile, setGeojsonFile }) => { generateTasksOnMap(); } dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, ...formValues })); - navigate('/data-extract'); + navigate('/select-form'); }; const { diff --git a/src/frontend/main/src/components/createproject/UploadArea.tsx b/src/frontend/main/src/components/createproject/UploadArea.tsx index 6d0cd4e5cb..d53cf5ec7f 100755 --- a/src/frontend/main/src/components/createproject/UploadArea.tsx +++ b/src/frontend/main/src/components/createproject/UploadArea.tsx @@ -24,12 +24,12 @@ const UploadArea: React.FC = ({ geojsonFile, setGeojsonFile, setInputValue, const onCreateProjectSubmission = () => { if (drawnGeojson) { dispatch(CreateProjectActions.SetCreateProjectFormStep('select-form')); - navigate('/define-tasks'); + navigate('/data-extract'); } else if (!drawnGeojson && !geojsonFile) { return; } else { dispatch(CreateProjectActions.SetCreateProjectFormStep('select-form')); - navigate('/define-tasks'); + navigate('/data-extract'); } // dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ ...projectDetails, areaGeojson: fileUpload?.[0], areaGeojsonfileName: fileUpload?.name })); }; diff --git a/src/frontend/main/src/views/CreateProject.tsx b/src/frontend/main/src/views/CreateProject.tsx index a7ef169b12..fa8a4ac904 100755 --- a/src/frontend/main/src/views/CreateProject.tsx +++ b/src/frontend/main/src/views/CreateProject.tsx @@ -75,18 +75,18 @@ const CreateProject: React.FC = () => { > { {/* END */} - {/* Define Tasks SideBar Button for define tasks page */} - + {/* Extract Data SideBar Button for extracting data page */} + - Define Tasks + Data Extract {/* END */} - {/* Extract Data SideBar Button for extracting data page */} - + + {/* Define Tasks SideBar Button for define tasks page */} + - Data Extract + Define Tasks {/* END */} - {/* Upload Area SideBar Button for uploading Area page */} Date: Mon, 14 Aug 2023 16:11:45 +0545 Subject: [PATCH 217/222] form list passed in the get all submission function --- src/backend/app/submission/submission_crud.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/backend/app/submission/submission_crud.py b/src/backend/app/submission/submission_crud.py index 7757b80535..a2cb44b6e4 100644 --- a/src/backend/app/submission/submission_crud.py +++ b/src/backend/app/submission/submission_crud.py @@ -375,11 +375,8 @@ def get_all_submissions(db: Session, project_id): project = get_odk_project(odk_credentials) - #TODO: pass xform id list in getAllSubmissions. Next release of osm-fieldwork will support this. - # task_lists = tasks_crud.get_task_lists(db, project_id) - # submissions = project.getAllSubmissions(project_info.odkid, task_lists) - - submissions = project.getAllSubmissions(project_info.odkid) + task_lists = tasks_crud.get_task_lists(db, project_id) + submissions = project.getAllSubmissions(project_info.odkid, task_lists) return submissions From 7f5d719612cffc1e263bc5daf56ef814525525a4 Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 14 Aug 2023 16:51:33 +0545 Subject: [PATCH 218/222] Fix : Swipeable Area Remove 20px width --- src/frontend/main/src/utilities/CustomDrawer.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/frontend/main/src/utilities/CustomDrawer.jsx b/src/frontend/main/src/utilities/CustomDrawer.jsx index 094d917926..cc1171e785 100644 --- a/src/frontend/main/src/utilities/CustomDrawer.jsx +++ b/src/frontend/main/src/utilities/CustomDrawer.jsx @@ -3,8 +3,11 @@ import SwipeableDrawer from '@mui/material/SwipeableDrawer'; import CoreModules from '../shared/CoreModules'; import AssetModules from '../shared/AssetModules'; import { NavLink } from 'react-router-dom'; +import { styled } from '@mui/material/styles'; + export default function CustomDrawer({ open, placement, size, type, onClose, onSignOut }) { const defaultTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); + const onMouseEnter = (event) => { const element = document.getElementById(`text${event.target.id}`); element != null ? (element.style.color = `${defaultTheme.palette.error['main']}`) : null; @@ -83,7 +86,7 @@ export default function CustomDrawer({ open, placement, size, type, onClose, onS return (
- + Date: Mon, 14 Aug 2023 16:53:58 +0545 Subject: [PATCH 219/222] hotfix: remove import --- src/frontend/main/src/utilities/CustomDrawer.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/frontend/main/src/utilities/CustomDrawer.jsx b/src/frontend/main/src/utilities/CustomDrawer.jsx index cc1171e785..a5466e2aec 100644 --- a/src/frontend/main/src/utilities/CustomDrawer.jsx +++ b/src/frontend/main/src/utilities/CustomDrawer.jsx @@ -3,7 +3,6 @@ import SwipeableDrawer from '@mui/material/SwipeableDrawer'; import CoreModules from '../shared/CoreModules'; import AssetModules from '../shared/AssetModules'; import { NavLink } from 'react-router-dom'; -import { styled } from '@mui/material/styles'; export default function CustomDrawer({ open, placement, size, type, onClose, onSignOut }) { const defaultTheme = CoreModules.useAppSelector((state) => state.theme.hotTheme); @@ -17,7 +16,6 @@ export default function CustomDrawer({ open, placement, size, type, onClose, onS const element = document.getElementById(`text${event.target.id}`); element != null ? (element.style.color = `${defaultTheme.palette.info['main']}`) : null; }; - const Drawerstyles = { list: { width: type == 'xs' ? size.width - 48 : type == 'sm' ? size.width - 48 : 350, From 9044580b1d85c6baa06beb34a7b04055921311e3 Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 14 Aug 2023 17:02:57 +0545 Subject: [PATCH 220/222] fix: removed drawn geojson on route change --- src/frontend/main/src/views/CreateProject.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/frontend/main/src/views/CreateProject.tsx b/src/frontend/main/src/views/CreateProject.tsx index fa8a4ac904..5c770313e0 100755 --- a/src/frontend/main/src/views/CreateProject.tsx +++ b/src/frontend/main/src/views/CreateProject.tsx @@ -28,6 +28,7 @@ const CreateProject: React.FC = () => { dispatch(CreateProjectActions.SetIndividualProjectDetailsData({ dimension: 10 })); dispatch(CreateProjectActions.SetGenerateProjectQRSuccess(null)); dispatch(CreateProjectActions.SetDividedTaskGeojson(null)); + dispatch(CreateProjectActions.SetDrawnGeojson(null)); setGeojsonFile(null); setCustomFormFile(null); setDataExtractFile(null); From 899d563c88c66f273babd18d8bab9c18ba138e98 Mon Sep 17 00:00:00 2001 From: Varun Date: Mon, 14 Aug 2023 17:05:38 +0545 Subject: [PATCH 221/222] fix : Should disable the input field for average building count until tasks are being generated #706 --- src/frontend/main/src/components/createproject/DefineTasks.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/frontend/main/src/components/createproject/DefineTasks.tsx b/src/frontend/main/src/components/createproject/DefineTasks.tsx index 160c3590f3..6cd5f1cb6d 100755 --- a/src/frontend/main/src/components/createproject/DefineTasks.tsx +++ b/src/frontend/main/src/components/createproject/DefineTasks.tsx @@ -253,6 +253,7 @@ const DefineTasks: React.FC = ({ geojsonFile, setGeojsonFile }) => { Date: Mon, 14 Aug 2023 18:26:55 +0545 Subject: [PATCH 222/222] fix: project info page not showing projectarea --- .../src/views/ProjectInfo.jsx | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx index 127f934b83..b140eb748e 100644 --- a/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx +++ b/src/frontend/fmtm_openlayer_map/src/views/ProjectInfo.jsx @@ -3,6 +3,7 @@ import CoreModules from "fmtm/CoreModules"; import ProjectInfoSidebar from "../components/ProjectInfo/ProjectInfoSidebar"; import ProjectInfomap from "../components/ProjectInfo/ProjectInfomap"; import environment from "fmtm/environment"; +import { ProjectActions } from "fmtm/ProjectSlice"; import { ConvertXMLToJOSM, @@ -11,6 +12,7 @@ import { getDownloadProjectSubmission, } from "../api/task"; import AssetModules from "fmtm/AssetModules"; +import { ProjectById } from "../api/Project"; const boxStyles = { animation: "blink 1s infinite", @@ -37,6 +39,7 @@ const ProjectInfo = () => { const selectedTask = CoreModules.useAppSelector( (state) => state.task.selectedTask ); + const state = CoreModules.useAppSelector((state) => state.project); const params = CoreModules.useParams(); const encodedId = params.projectId; @@ -57,7 +60,42 @@ const ProjectInfo = () => { ); } }; + //Fetch project for the first time + useEffect(() => { + dispatch(ProjectActions.SetNewProjectTrigger()); + if ( + state.projectTaskBoundries.findIndex( + (project) => project.id == environment.decode(encodedId) + ) == -1 + ) { + dispatch(ProjectActions.SetProjectTaskBoundries([])); + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + // dispatch(ProjectBuildingGeojsonService(`${environment.baseApiUrl}/projects/${environment.decode(encodedId)}/features`)) + } else { + dispatch(ProjectActions.SetProjectTaskBoundries([])); + dispatch( + ProjectById( + `${environment.baseApiUrl}/projects/${environment.decode(encodedId)}`, + state.projectTaskBoundries + ), + state.projectTaskBoundries + ); + } + if (Object.keys(state.projectInfo).length == 0) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } else { + if (state.projectInfo.id != environment.decode(encodedId)) { + dispatch(ProjectActions.SetProjectInfo(projectInfo)); + } + } + }, [params.id]); const handleConvert = () => { dispatch( fetchConvertToOsmDetails(