From 9ad432c5b25430cac4140288a242dcd78ad00724 Mon Sep 17 00:00:00 2001 From: Michael Bell Date: Sun, 23 Oct 2022 14:59:12 +0100 Subject: [PATCH 01/75] Fix adding traffic signal penalties during compression (#6419) Weight and duration penalties are flipped in the lambda function that applies penalties from traffic signals. Duration is in deciseconds, whilst weight is multipled by 10^weight_precision, with weight_precision being 1 by default. Therefore, for default routability profile, the penalties end up being the same, hence why no tests picked this up. If distance weight is used however, it will incorrectly apply an additional penalty to the weight, and not add the traffic signal delay to the duration in the routing graph. To confuse things further, in some API responses the values are correct because they use geometry data instead, but it's still possible that a sub-optimal route was selected. However, given the distance weight is in meters, and the additional penalty per traffic light would be 20, it's unlikely this would have changed the routing results. In any case, we correct the function to apply the arguments correctly. --- CHANGELOG.md | 2 + features/car/traffic_light_penalties.feature | 53 ++++++++++++++++---- src/extractor/graph_compressor.cpp | 35 ++++++------- 3 files changed, 61 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 272a8b59c..591bb24b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ - FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417) - FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/) - FIXED: Fix bindings compilation issue on the latest Node. Update NAN to 2.17.0. [#6416](https://github.com/Project-OSRM/osrm-backend/pull/6416) + - Routing: + - FIXED: Fix adding traffic signal penalties during compression [#6419](https://github.com/Project-OSRM/osrm-backend/pull/6419) # 5.27.1 - Changes from 5.27.0 - Misc: diff --git a/features/car/traffic_light_penalties.feature b/features/car/traffic_light_penalties.feature index 37bbad3a7..048c25f4f 100644 --- a/features/car/traffic_light_penalties.feature +++ b/features/car/traffic_light_penalties.feature @@ -66,15 +66,50 @@ Feature: Car - Handle traffic lights | k | traffic_signals | backward | When I route I should get - | from | to | time | # | - | 1 | 2 | 11.1s | no turn with no traffic light | - | 2 | 1 | 11.1s | no turn with no traffic light | - | 3 | 4 | 13.1s | no turn with traffic light | - | 4 | 3 | 13.1s | no turn with traffic light | - | 5 | 6 | 13.1s | no turn with traffic light | - | 6 | 5 | 11.1s | no turn with no traffic light | - | 7 | 8 | 11.1s | no turn with no traffic light | - | 8 | 7 | 13.1s | no turn with traffic light | + | from | to | time | weight | # | + | 1 | 2 | 11.1s | 11.1 | no turn with no traffic light | + | 2 | 1 | 11.1s | 11.1 | no turn with no traffic light | + | 3 | 4 | 13.1s | 13.1 | no turn with traffic light | + | 4 | 3 | 13.1s | 13.1 | no turn with traffic light | + | 5 | 6 | 13.1s | 13.1 | no turn with traffic light | + | 6 | 5 | 11.1s | 11.1 | no turn with no traffic light | + | 7 | 8 | 11.1s | 11.1 | no turn with no traffic light | + | 8 | 7 | 13.1s | 13.1 | no turn with traffic light | + + + Scenario: Car - Traffic signal direction with distance weight + Given the profile file "car" initialized with + """ + profile.properties.weight_name = 'distance' + profile.properties.traffic_light_penalty = 100000 + """ + + Given the node map + """ + a---b---c + 1 2 + | | + | | + | | + | | + | | + d-------f + + """ + + And the ways + | nodes | highway | + | abc | primary | + | adfc | primary | + + And the nodes + | node | highway | + | b | traffic_signals | + + When I route I should get + | from | to | time | distances | weight | # | + | 1 | 2 | 100033.2s | 599.9m,0m | 599.8 | goes via the expensive traffic signal | + Scenario: Car - Encounters a traffic light diff --git a/src/extractor/graph_compressor.cpp b/src/extractor/graph_compressor.cpp index 000985564..517d3e8d7 100644 --- a/src/extractor/graph_compressor.cpp +++ b/src/extractor/graph_compressor.cpp @@ -276,7 +276,6 @@ void GraphCompressor::Compress(const std::unordered_set &barrier_nodes, const auto forward_weight2 = fwd_edge_data2.weight; const auto forward_duration1 = fwd_edge_data1.duration; const auto forward_duration2 = fwd_edge_data2.duration; - const auto forward_distance2 = fwd_edge_data2.distance; BOOST_ASSERT(0 != forward_weight1); BOOST_ASSERT(0 != forward_weight2); @@ -285,7 +284,6 @@ void GraphCompressor::Compress(const std::unordered_set &barrier_nodes, const auto reverse_weight2 = rev_edge_data2.weight; const auto reverse_duration1 = rev_edge_data1.duration; const auto reverse_duration2 = rev_edge_data2.duration; - const auto reverse_distance2 = rev_edge_data2.distance; #ifndef NDEBUG // Because distances are symmetrical, we only need one @@ -293,6 +291,8 @@ void GraphCompressor::Compress(const std::unordered_set &barrier_nodes, // their mirrors. const auto reverse_distance1 = rev_edge_data1.distance; const auto forward_distance1 = fwd_edge_data1.distance; + const auto forward_distance2 = fwd_edge_data2.distance; + const auto reverse_distance2 = rev_edge_data2.distance; BOOST_ASSERT(forward_distance1 == reverse_distance2); BOOST_ASSERT(forward_distance2 == reverse_distance1); #endif @@ -300,35 +300,30 @@ void GraphCompressor::Compress(const std::unordered_set &barrier_nodes, BOOST_ASSERT(0 != reverse_weight1); BOOST_ASSERT(0 != reverse_weight2); - auto apply_e2_to_e1 = [&graph](EdgeID edge, - EdgeWeight weight, - EdgeDuration duration, - EdgeDistance distance, - EdgeDuration &duration_penalty, - EdgeWeight &weight_penalty) { - auto &edge_data = graph.GetEdgeData(edge); - edge_data.weight += weight; - edge_data.duration += duration; - edge_data.distance += distance; + auto apply_e2_to_e1 = [&graph](EdgeID edge1, + EdgeID edge2, + EdgeWeight &weight_penalty, + EdgeDuration &duration_penalty) { + auto &edge1_data = graph.GetEdgeData(edge1); + const auto &edge2_data = graph.GetEdgeData(edge2); + edge1_data.weight += edge2_data.weight; + edge1_data.duration += edge2_data.duration; + edge1_data.distance += edge2_data.distance; if (weight_penalty != INVALID_EDGE_WEIGHT && duration_penalty != MAXIMAL_EDGE_DURATION) { - edge_data.weight += weight_penalty; - edge_data.duration += duration_penalty; + edge1_data.weight += weight_penalty; + edge1_data.duration += duration_penalty; // Note: no penalties for distances } }; apply_e2_to_e1(forward_e1, - forward_weight2, - forward_duration2, - forward_distance2, + forward_e2, forward_node_weight_penalty, forward_node_duration_penalty); apply_e2_to_e1(reverse_e1, - reverse_weight2, - reverse_duration2, - reverse_distance2, + reverse_e2, reverse_node_weight_penalty, reverse_node_duration_penalty); From 82897791d120e95372409e9bc802397dbb70e1a8 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Mon, 24 Oct 2022 00:52:15 +0200 Subject: [PATCH 02/75] Update actions/cache to v3 (#6420) --- .github/workflows/osrm-backend.yml | 12 ++++++------ CHANGELOG.md | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index e278fd539..057edd241 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -79,7 +79,7 @@ jobs: with: node-version: 12 - name: Enable Node.js cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} @@ -104,7 +104,7 @@ jobs: - name: Check out the repo uses: actions/checkout@v3 - name: Enable osm.pbf cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: berlin-latest.osm.pbf key: v1-berlin-osm-pbf @@ -526,28 +526,28 @@ jobs: with: node-version: ${{ matrix.node }} - name: Enable Node.js cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Enable compiler cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.ccache key: ccache-${{ matrix.name }}-${{ github.sha }} restore-keys: | ccache-${{ matrix.name }}- - name: Enable Conan cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.conan key: v6-conan-${{ matrix.name }}-${{ github.sha }} restore-keys: | v6-conan-${{ matrix.name }}- - name: Enable test cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{github.workspace}}/test/cache key: v3-test-${{ matrix.name }}-${{ github.sha }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 591bb24b3..2a90bbf74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Unreleased - Changes from 5.27.1 + - Build: + - CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - Misc: - FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417) - FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/) From 16685d0de9ac4d0734e0a91c07a0988e0398444e Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Wed, 26 Oct 2022 11:22:28 +0200 Subject: [PATCH 03/75] Add link to Discord server (#6422) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 91f6037fb..d7bce257d 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ ## Open Source Routing Machine -| Linux / macOS / Windows | Code Coverage | -| ----------------------- | ------------- | -| [![osrm-backend CI](https://github.com/Project-OSRM/osrm-backend/actions/workflows/osrm-backend.yml/badge.svg)](https://github.com/Project-OSRM/osrm-backend/actions/workflows/osrm-backend.yml) | [![Codecov](https://codecov.io/gh/Project-OSRM/osrm-backend/branch/master/graph/badge.svg)](https://codecov.io/gh/Project-OSRM/osrm-backend) | + +[![osrm-backend CI](https://github.com/Project-OSRM/osrm-backend/actions/workflows/osrm-backend.yml/badge.svg)](https://github.com/Project-OSRM/osrm-backend/actions/workflows/osrm-backend.yml) [![Codecov](https://codecov.io/gh/Project-OSRM/osrm-backend/branch/master/graph/badge.svg)](https://codecov.io/gh/Project-OSRM/osrm-backend) [![Discord](https://img.shields.io/discord/1034487840219860992)](https://discord.gg/es9CdcCXcb) High performance routing engine written in C++14 designed to run on OpenStreetMap data. @@ -33,6 +32,7 @@ Related [Project-OSRM](https://github.com/Project-OSRM) repositories: ## Contact +- Discord: [https://discord.gg/es9CdcCXcb](join) - IRC: `irc.oftc.net`, channel: `#osrm` ([Webchat](https://webchat.oftc.net)) - Mailinglist: `https://lists.openstreetmap.org/listinfo/osrm-talk` From 5d468f2897d9a629ead1595a9b5bbc554f73db99 Mon Sep 17 00:00:00 2001 From: Michael Bell Date: Fri, 28 Oct 2022 15:16:12 +0100 Subject: [PATCH 04/75] Make edge metrics strongly typed (#6421) This change takes the existing typedefs for weight, duration and distance, and makes them proper types, using the existing Alias functionality. Primarily this is to prevent bugs where the metrics are switched, but it also adds additional documentation. For example, it now makes it clear (despite the naming of variables) that most of the trip algorithm is running on the duration metric. I've not made any changes to the casts performed between metrics and numeric types, they now just more explicit. --- CHANGELOG.md | 1 + include/contractor/contractor_graph.hpp | 6 +- .../contractor/graph_contractor_adaptors.hpp | 22 +-- include/contractor/query_edge.hpp | 8 +- include/customizer/cell_customizer.hpp | 7 +- include/customizer/edge_based_graph.hpp | 2 +- include/engine/api/table_api.hpp | 25 +-- include/engine/api/table_parameters.hpp | 2 +- .../datafacade/algorithm_datafacade.hpp | 2 +- include/engine/geospatial_query.hpp | 77 +++++---- include/engine/guidance/assemble_geometry.hpp | 21 ++- include/engine/guidance/assemble_leg.hpp | 20 +-- include/engine/guidance/assemble_steps.hpp | 35 ++-- include/engine/internal_route_result.hpp | 8 +- include/engine/phantom_node.hpp | 28 +-- .../routing_algorithms/routing_base.hpp | 55 +++--- .../routing_algorithms/routing_base_ch.hpp | 83 +++++---- .../routing_algorithms/routing_base_mld.hpp | 9 +- .../routing_algorithms/shortest_path_impl.hpp | 6 +- .../engine/routing_algorithms/tile_turns.hpp | 2 +- include/engine/search_engine_data.hpp | 10 +- include/engine/trip/trip_brute_force.hpp | 27 +-- .../engine/trip/trip_farthest_insertion.hpp | 25 +-- .../extractor/compressed_edge_container.hpp | 8 +- include/extractor/edge_based_edge.hpp | 10 +- .../extractor/edge_based_graph_factory.hpp | 2 +- include/extractor/internal_extractor_edge.hpp | 2 +- include/extractor/node_based_edge.hpp | 2 +- include/extractor/profile_properties.hpp | 2 +- .../partitioner/edge_based_graph_reader.hpp | 8 +- include/util/alias.hpp | 35 ++++ include/util/dist_table_wrapper.hpp | 4 +- include/util/node_based_graph.hpp | 12 +- include/util/packed_vector.hpp | 36 +++- include/util/typedefs.hpp | 66 +++++-- src/contractor/contractor.cpp | 3 +- src/contractor/graph_contractor.cpp | 6 +- src/customize/customizer.cpp | 3 +- src/engine/plugins/table.cpp | 23 ++- src/engine/plugins/tile.cpp | 32 ++-- src/engine/plugins/trip.cpp | 24 +-- .../alternative_path_ch.cpp | 69 ++++---- .../alternative_path_mld.cpp | 45 +++-- .../routing_algorithms/many_to_many_ch.cpp | 16 +- .../routing_algorithms/many_to_many_mld.cpp | 44 ++--- .../routing_algorithms/map_matching.cpp | 4 +- .../routing_algorithms/routing_base_ch.cpp | 6 +- src/engine/routing_algorithms/tile_turns.cpp | 4 +- src/extractor/compressed_edge_container.cpp | 27 +-- src/extractor/edge_based_graph_factory.cpp | 26 +-- src/extractor/extraction_containers.cpp | 14 +- src/extractor/extractor.cpp | 2 +- src/extractor/extractor_callbacks.cpp | 16 +- src/extractor/graph_compressor.cpp | 34 ++-- src/extractor/scripting_environment_lua.cpp | 2 +- src/updater/updater.cpp | 109 +++++++----- .../contractor/contracted_edge_container.cpp | 52 +++--- unit_tests/contractor/graph_contractor.cpp | 4 +- unit_tests/contractor/helper.hpp | 4 +- unit_tests/customizer/cell_customization.cpp | 162 +++++++++--------- .../engine/collapse_internal_route_result.cpp | 51 ++++-- unit_tests/engine/offline_facade.cpp | 9 +- .../extractor/compressed_edge_container.cpp | 12 +- unit_tests/extractor/graph_compressor.cpp | 6 +- .../extractor/intersection_analysis_tests.cpp | 23 ++- unit_tests/mocks/mock_datafacade.hpp | 4 +- unit_tests/partitioner/cell_storage.cpp | 54 +++--- unit_tests/partitioner/renumber.cpp | 4 +- unit_tests/util/packed_vector.cpp | 46 +++-- 69 files changed, 922 insertions(+), 686 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a90bbf74..84a9ab3a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417) - FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/) - FIXED: Fix bindings compilation issue on the latest Node. Update NAN to 2.17.0. [#6416](https://github.com/Project-OSRM/osrm-backend/pull/6416) + - CHANGED: Make edge metrics strongly typed [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - Routing: - FIXED: Fix adding traffic signal penalties during compression [#6419](https://github.com/Project-OSRM/osrm-backend/pull/6419) # 5.27.1 diff --git a/include/contractor/contractor_graph.hpp b/include/contractor/contractor_graph.hpp index 02cad2e08..e8cef068a 100644 --- a/include/contractor/contractor_graph.hpp +++ b/include/contractor/contractor_graph.hpp @@ -12,12 +12,12 @@ namespace contractor struct ContractorEdgeData { ContractorEdgeData() - : weight(0), duration(0), distance(0), id(0), originalEdges(0), shortcut(0), forward(0), + : weight{0}, duration{0}, distance{0}, id(0), originalEdges(0), shortcut(0), forward(0), backward(0) { } ContractorEdgeData(EdgeWeight weight, - EdgeWeight duration, + EdgeDuration duration, EdgeDistance distance, unsigned original_edges, unsigned id, @@ -30,7 +30,7 @@ struct ContractorEdgeData { } EdgeWeight weight; - EdgeWeight duration; + EdgeDuration duration; EdgeDistance distance; unsigned id; unsigned originalEdges : 29; diff --git a/include/contractor/graph_contractor_adaptors.hpp b/include/contractor/graph_contractor_adaptors.hpp index 94dc7e62b..cfd447efb 100644 --- a/include/contractor/graph_contractor_adaptors.hpp +++ b/include/contractor/graph_contractor_adaptors.hpp @@ -29,18 +29,20 @@ ContractorGraph toContractorGraph(NodeID number_of_nodes, InputEdgeContainer inp #ifndef NDEBUG const unsigned int constexpr DAY_IN_DECI_SECONDS = 24 * 60 * 60 * 10; - if (static_cast(std::max(input_edge.data.weight, 1)) > DAY_IN_DECI_SECONDS) + if (from_alias(std::max(input_edge.data.weight, EdgeWeight{1})) > + DAY_IN_DECI_SECONDS) { util::Log(logWARNING) << "Edge weight large -> " - << static_cast(std::max(input_edge.data.weight, 1)) + << from_alias( + std::max(input_edge.data.weight, EdgeWeight{1})) << " : " << static_cast(input_edge.source) << " -> " << static_cast(input_edge.target); } #endif edges.emplace_back(input_edge.source, input_edge.target, - std::max(input_edge.data.weight, 1), - input_edge.data.duration, + std::max(input_edge.data.weight, {1}), + to_alias(input_edge.data.duration), input_edge.data.distance, 1, input_edge.data.turn_id, @@ -50,8 +52,8 @@ ContractorGraph toContractorGraph(NodeID number_of_nodes, InputEdgeContainer inp edges.emplace_back(input_edge.target, input_edge.source, - std::max(input_edge.data.weight, 1), - input_edge.data.duration, + std::max(input_edge.data.weight, {1}), + to_alias(input_edge.data.duration), input_edge.data.distance, 1, input_edge.data.turn_id, @@ -109,7 +111,7 @@ ContractorGraph toContractorGraph(NodeID number_of_nodes, InputEdgeContainer inp // merge edges (s,t) and (t,s) into bidirectional edge if (forward_edge.data.weight == reverse_edge.data.weight) { - if ((int)forward_edge.data.weight != INVALID_EDGE_WEIGHT) + if (forward_edge.data.weight != INVALID_EDGE_WEIGHT) { forward_edge.data.backward = true; edges[edge++] = forward_edge; @@ -117,11 +119,11 @@ ContractorGraph toContractorGraph(NodeID number_of_nodes, InputEdgeContainer inp } else { // insert seperate edges - if (((int)forward_edge.data.weight) != INVALID_EDGE_WEIGHT) + if (forward_edge.data.weight != INVALID_EDGE_WEIGHT) { edges[edge++] = forward_edge; } - if ((int)reverse_edge.data.weight != INVALID_EDGE_WEIGHT) + if (reverse_edge.data.weight != INVALID_EDGE_WEIGHT) { edges[edge++] = reverse_edge; } @@ -157,7 +159,7 @@ template inline std::vector toEdges(GraphT g new_edge.target = target; BOOST_ASSERT_MSG(SPECIAL_NODEID != new_edge.target, "Target id invalid"); new_edge.data.weight = data.weight; - new_edge.data.duration = data.duration; + new_edge.data.duration = from_alias(data.duration); new_edge.data.distance = data.distance; new_edge.data.shortcut = data.shortcut; new_edge.data.turn_id = data.id; diff --git a/include/contractor/query_edge.hpp b/include/contractor/query_edge.hpp index 1b42faae2..08f163044 100644 --- a/include/contractor/query_edge.hpp +++ b/include/contractor/query_edge.hpp @@ -17,15 +17,15 @@ struct QueryEdge struct EdgeData { explicit EdgeData() - : turn_id(0), shortcut(false), weight(0), duration(0), forward(false), backward(false), - distance(0) + : turn_id(0), shortcut(false), weight{0}, duration(0), forward(false), + backward(false), distance{0} { } EdgeData(const NodeID turn_id, const bool shortcut, const EdgeWeight weight, - const EdgeWeight duration, + const EdgeDuration duration, const EdgeDistance distance, const bool forward, const bool backward) @@ -50,7 +50,7 @@ struct QueryEdge NodeID turn_id : 31; bool shortcut : 1; EdgeWeight weight; - EdgeWeight duration : 30; + EdgeDuration::value_type duration : 30; std::uint32_t forward : 1; std::uint32_t backward : 1; EdgeDistance distance; diff --git a/include/customizer/cell_customizer.hpp b/include/customizer/cell_customizer.hpp index 9e27236d0..8a104e2e0 100644 --- a/include/customizer/cell_customizer.hpp +++ b/include/customizer/cell_customizer.hpp @@ -61,7 +61,7 @@ class CellCustomizer } } heap.Clear(); - heap.Insert(source, 0, {false, 0, 0}); + heap.Insert(source, {0}, {false, {0}, {0}}); // explore search space while (!heap.Empty() && !destinations_set.empty()) @@ -216,12 +216,11 @@ class CellCustomizer partition.GetCell(level - 1, to))) { const EdgeWeight to_weight = weight + data.weight; - const EdgeDuration to_duration = duration + data.duration; + const EdgeDuration to_duration = duration + to_alias(data.duration); const EdgeDistance to_distance = distance + data.distance; if (!heap.WasInserted(to)) { - heap.Insert( - to, to_weight, {false, duration + data.duration, distance + data.distance}); + heap.Insert(to, to_weight, {false, to_duration, to_distance}); } else if (std::tie(to_weight, to_duration, to_distance) < std::tie( diff --git a/include/customizer/edge_based_graph.hpp b/include/customizer/edge_based_graph.hpp index 5ef3277f9..b90f464a7 100644 --- a/include/customizer/edge_based_graph.hpp +++ b/include/customizer/edge_based_graph.hpp @@ -97,7 +97,7 @@ class MultiLevelGraph : public partitioner::MultiLevelGraph 0; + parameters.fallback_speed != from_alias(INVALID_FALLBACK_SPEED) && + parameters.fallback_speed > 0; flatbuffers::Offset> speed_cells; if (have_speed_cells) { @@ -223,7 +224,8 @@ class TableAPI final : public BaseAPI MakeDistanceTable(tables.second, number_of_sources, number_of_destinations); } - if (parameters.fallback_speed != INVALID_FALLBACK_SPEED && parameters.fallback_speed > 0) + if (parameters.fallback_speed != from_alias(INVALID_FALLBACK_SPEED) && + parameters.fallback_speed > 0) { response.values["fallback_speed_cells"] = MakeEstimatesTable(fallback_speed_cells); } @@ -272,17 +274,17 @@ class TableAPI final : public BaseAPI virtual flatbuffers::Offset> MakeDurationTable(flatbuffers::FlatBufferBuilder &builder, - const std::vector &values) const + const std::vector &values) const { std::vector distance_table; distance_table.resize(values.size()); std::transform( - values.begin(), values.end(), distance_table.begin(), [](const EdgeWeight duration) { + values.begin(), values.end(), distance_table.begin(), [](const EdgeDuration duration) { if (duration == MAXIMAL_EDGE_DURATION) { return 0.; } - return duration / 10.; + return from_alias(duration) / 10.; }); return builder.CreateVector(distance_table); } @@ -299,7 +301,7 @@ class TableAPI final : public BaseAPI { return 0.; } - return std::round(distance * 10) / 10.; + return std::round(from_alias(distance) * 10) / 10.; }); return builder.CreateVector(duration_table); } @@ -347,7 +349,7 @@ class TableAPI final : public BaseAPI return json_waypoints; } - virtual util::json::Array MakeDurationTable(const std::vector &values, + virtual util::json::Array MakeDurationTable(const std::vector &values, std::size_t number_of_rows, std::size_t number_of_columns) const { @@ -361,13 +363,14 @@ class TableAPI final : public BaseAPI std::transform(row_begin_iterator, row_end_iterator, json_row.values.begin(), - [](const EdgeWeight duration) { + [](const EdgeDuration duration) { if (duration == MAXIMAL_EDGE_DURATION) { return util::json::Value(util::json::Null()); } // division by 10 because the duration is in deciseconds (10s) - return util::json::Value(util::json::Number(duration / 10.)); + return util::json::Value( + util::json::Number(from_alias(duration) / 10.)); }); json_table.values.push_back(std::move(json_row)); } @@ -394,8 +397,8 @@ class TableAPI final : public BaseAPI return util::json::Value(util::json::Null()); } // round to single decimal place - return util::json::Value( - util::json::Number(std::round(distance * 10) / 10.)); + return util::json::Value(util::json::Number( + std::round(from_alias(distance) * 10) / 10.)); }); json_table.values.push_back(std::move(json_row)); } diff --git a/include/engine/api/table_parameters.hpp b/include/engine/api/table_parameters.hpp index 30e17900b..4d3db980e 100644 --- a/include/engine/api/table_parameters.hpp +++ b/include/engine/api/table_parameters.hpp @@ -59,7 +59,7 @@ struct TableParameters : public BaseParameters { std::vector sources; std::vector destinations; - double fallback_speed = INVALID_FALLBACK_SPEED; + double fallback_speed = from_alias(INVALID_FALLBACK_SPEED); enum class FallbackCoordinateType { diff --git a/include/engine/datafacade/algorithm_datafacade.hpp b/include/engine/datafacade/algorithm_datafacade.hpp index c9337f079..73c6b4732 100644 --- a/include/engine/datafacade/algorithm_datafacade.hpp +++ b/include/engine/datafacade/algorithm_datafacade.hpp @@ -83,7 +83,7 @@ template <> class AlgorithmDataFacade virtual EdgeWeight GetNodeWeight(const NodeID edge_based_node_id) const = 0; - virtual EdgeWeight + virtual EdgeDuration GetNodeDuration(const NodeID edge_based_node_id) const = 0; // TODO: to be removed virtual EdgeDistance GetNodeDistance(const NodeID edge_based_node_id) const = 0; diff --git a/include/engine/geospatial_query.hpp b/include/engine/geospatial_query.hpp index 48696ce0c..463841243 100644 --- a/include/engine/geospatial_query.hpp +++ b/include/engine/geospatial_query.hpp @@ -320,75 +320,84 @@ template class GeospatialQuery const auto forward_weight_offset = // NOLINTNEXTLINE(bugprone-fold-init-type) - std::accumulate(forward_weights.begin(), - forward_weights.begin() + data.fwd_segment_position, - EdgeWeight{0}); + alias_cast( + std::accumulate(forward_weights.begin(), + forward_weights.begin() + data.fwd_segment_position, + SegmentWeight{0})); const auto forward_duration_offset = // NOLINTNEXTLINE(bugprone-fold-init-type) - std::accumulate(forward_durations.begin(), - forward_durations.begin() + data.fwd_segment_position, - EdgeDuration{0}); + alias_cast( + std::accumulate(forward_durations.begin(), + forward_durations.begin() + data.fwd_segment_position, + SegmentDuration{0})); - EdgeDistance forward_distance_offset = 0; + EdgeDistance forward_distance_offset = {0}; // Sum up the distance from the start to the fwd_segment_position for (auto current = forward_geometry.begin(); current < forward_geometry.begin() + data.fwd_segment_position; ++current) { - forward_distance_offset += util::coordinate_calculation::greatCircleDistance( - datafacade.GetCoordinateOfNode(*current), - datafacade.GetCoordinateOfNode(*std::next(current))); + forward_distance_offset += + to_alias(util::coordinate_calculation::greatCircleDistance( + datafacade.GetCoordinateOfNode(*current), + datafacade.GetCoordinateOfNode(*std::next(current)))); } BOOST_ASSERT(data.fwd_segment_position < std::distance(forward_durations.begin(), forward_durations.end())); - EdgeWeight forward_weight = forward_weights[data.fwd_segment_position]; - EdgeDuration forward_duration = forward_durations[data.fwd_segment_position]; - EdgeDistance forward_distance = util::coordinate_calculation::greatCircleDistance( - datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position)), - point_on_segment); + EdgeWeight forward_weight = + alias_cast(forward_weights[data.fwd_segment_position]); + EdgeDuration forward_duration = + alias_cast(forward_durations[data.fwd_segment_position]); + EdgeDistance forward_distance = + to_alias(util::coordinate_calculation::greatCircleDistance( + datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position)), + point_on_segment)); - const auto reverse_weight_offset = + const auto reverse_weight_offset = alias_cast( std::accumulate(reverse_weights.begin(), reverse_weights.end() - data.fwd_segment_position - 1, - EdgeWeight{0}); + SegmentWeight{0})); - const auto reverse_duration_offset = + const auto reverse_duration_offset = alias_cast( std::accumulate(reverse_durations.begin(), reverse_durations.end() - data.fwd_segment_position - 1, - EdgeDuration{0}); + SegmentDuration{0})); - EdgeDistance reverse_distance_offset = 0; + EdgeDistance reverse_distance_offset = {0}; // Sum up the distance from just after the fwd_segment_position to the end for (auto current = forward_geometry.begin() + data.fwd_segment_position + 1; current != std::prev(forward_geometry.end()); ++current) { - reverse_distance_offset += util::coordinate_calculation::greatCircleDistance( - datafacade.GetCoordinateOfNode(*current), - datafacade.GetCoordinateOfNode(*std::next(current))); + reverse_distance_offset += + to_alias(util::coordinate_calculation::greatCircleDistance( + datafacade.GetCoordinateOfNode(*current), + datafacade.GetCoordinateOfNode(*std::next(current)))); } - EdgeWeight reverse_weight = - reverse_weights[reverse_weights.size() - data.fwd_segment_position - 1]; - EdgeDuration reverse_duration = - reverse_durations[reverse_durations.size() - data.fwd_segment_position - 1]; - EdgeDistance reverse_distance = util::coordinate_calculation::greatCircleDistance( - point_on_segment, - datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position + 1))); + EdgeWeight reverse_weight = alias_cast( + reverse_weights[reverse_weights.size() - data.fwd_segment_position - 1]); + EdgeDuration reverse_duration = alias_cast( + reverse_durations[reverse_durations.size() - data.fwd_segment_position - 1]); + EdgeDistance reverse_distance = + to_alias(util::coordinate_calculation::greatCircleDistance( + point_on_segment, + datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position + 1)))); ratio = std::min(1.0, std::max(0.0, ratio)); if (data.forward_segment_id.id != SPECIAL_SEGMENTID) { - forward_weight = static_cast(forward_weight * ratio); - forward_duration = static_cast(forward_duration * ratio); + forward_weight = to_alias(from_alias(forward_weight) * ratio); + forward_duration = to_alias(from_alias(forward_duration) * ratio); } if (data.reverse_segment_id.id != SPECIAL_SEGMENTID) { - reverse_weight -= static_cast(reverse_weight * ratio); - reverse_duration -= static_cast(reverse_duration * ratio); + reverse_weight -= to_alias(from_alias(reverse_weight) * ratio); + reverse_duration -= + to_alias(from_alias(reverse_duration) * ratio); } // check phantom node segments validity diff --git a/include/engine/guidance/assemble_geometry.hpp b/include/engine/guidance/assemble_geometry.hpp index 88bb5e2d8..7f616e13f 100644 --- a/include/engine/guidance/assemble_geometry.hpp +++ b/include/engine/guidance/assemble_geometry.hpp @@ -95,8 +95,9 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade, // the duration_of_turn/weight_of_turn value, which is 0 for // non-preceeding-turn segments, but contains the turn value // for segments before a turn. - (path_point.duration_until_turn - path_point.duration_of_turn) / 10., - (path_point.weight_until_turn - path_point.weight_of_turn) / + from_alias(path_point.duration_until_turn - path_point.duration_of_turn) / + 10., + from_alias(path_point.weight_until_turn - path_point.weight_of_turn) / facade.GetWeightMultiplier(), path_point.datasource_id}); geometry.locations.push_back(coordinate); @@ -121,14 +122,15 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade, if (geometry.annotations.empty()) { auto duration = - std::abs( + std::abs(from_alias( (reversed_target ? target_node.reverse_duration : target_node.forward_duration) - - (reversed_source ? source_node.reverse_duration : source_node.forward_duration)) / + (reversed_source ? source_node.reverse_duration : source_node.forward_duration))) / 10.; BOOST_ASSERT(duration >= 0); auto weight = - std::abs((reversed_target ? target_node.reverse_weight : target_node.forward_weight) - - (reversed_source ? source_node.reverse_weight : source_node.forward_weight)) / + std::abs(from_alias( + (reversed_target ? target_node.reverse_weight : target_node.forward_weight) - + (reversed_source ? source_node.reverse_weight : source_node.forward_weight))) / facade.GetWeightMultiplier(); BOOST_ASSERT(weight >= 0); @@ -142,8 +144,11 @@ inline LegGeometry assembleGeometry(const datafacade::BaseDataFacade &facade, { geometry.annotations.emplace_back(LegGeometry::Annotation{ current_distance, - (reversed_target ? target_node.reverse_duration : target_node.forward_duration) / 10., - (reversed_target ? target_node.reverse_weight : target_node.forward_weight) / + from_alias(reversed_target ? target_node.reverse_duration + : target_node.forward_duration) / + 10., + from_alias(reversed_target ? target_node.reverse_weight + : target_node.forward_weight) / facade.GetWeightMultiplier(), forward_datasources(target_node.fwd_segment_position)}); } diff --git a/include/engine/guidance/assemble_leg.hpp b/include/engine/guidance/assemble_leg.hpp index 7fedf4e53..19e7ebffe 100644 --- a/include/engine/guidance/assemble_leg.hpp +++ b/include/engine/guidance/assemble_leg.hpp @@ -34,7 +34,7 @@ namespace detail const constexpr std::size_t MAX_USED_SEGMENTS = 2; struct NamedSegment { - EdgeWeight duration; + EdgeDuration duration; std::uint32_t position; std::uint32_t name_id; }; @@ -88,7 +88,7 @@ std::array summarizeRoute(const datafacade::BaseDa target_traversed_in_reverse ? target_node.reverse_duration : target_node.forward_duration; const auto target_node_id = target_traversed_in_reverse ? target_node.reverse_segment_id.id : target_node.forward_segment_id.id; - if (target_duration > 1) + if (target_duration > EdgeDuration{1}) segments.push_back({target_duration, index++, facade.GetNameIndex(target_node_id)}); // this makes sure that the segment with the lowest position comes first std::sort( @@ -184,11 +184,11 @@ inline RouteLeg assembleLeg(const datafacade::BaseDataFacade &facade, auto duration = std::accumulate( route_data.begin(), route_data.end(), 0, [](const double sum, const PathData &data) { - return sum + data.duration_until_turn; + return sum + from_alias(data.duration_until_turn); }); auto weight = std::accumulate( route_data.begin(), route_data.end(), 0, [](const double sum, const PathData &data) { - return sum + data.weight_until_turn; + return sum + from_alias(data.weight_until_turn); }); // s @@ -212,14 +212,14 @@ inline RouteLeg assembleLeg(const datafacade::BaseDataFacade &facade, // caputed by the phantom node. So we need to add the target duration here. // On local segments, the target duration is already part of the duration, however. - duration = duration + target_duration; - weight = weight + target_weight; + duration = duration + from_alias(target_duration); + weight = weight + from_alias(target_weight); if (route_data.empty()) { - weight -= - (target_traversed_in_reverse ? source_node.reverse_weight : source_node.forward_weight); - duration -= (target_traversed_in_reverse ? source_node.reverse_duration - : source_node.forward_duration); + weight -= from_alias(target_traversed_in_reverse ? source_node.reverse_weight + : source_node.forward_weight); + duration -= from_alias(target_traversed_in_reverse ? source_node.reverse_duration + : source_node.forward_duration); // use rectified linear unit function to avoid negative duration values // due to flooring errors in phantom snapping duration = std::max(0, duration); diff --git a/include/engine/guidance/assemble_steps.hpp b/include/engine/guidance/assemble_steps.hpp index 97d527c7b..18e09d972 100644 --- a/include/engine/guidance/assemble_steps.hpp +++ b/include/engine/guidance/assemble_steps.hpp @@ -52,7 +52,7 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa const constexpr char *NO_ROTARY_NAME = ""; const EdgeWeight source_weight = source_traversed_in_reverse ? source_node.reverse_weight : source_node.forward_weight; - const EdgeWeight source_duration = + const EdgeDuration source_duration = source_traversed_in_reverse ? source_node.reverse_duration : source_node.forward_duration; const auto source_node_id = source_traversed_in_reverse ? source_node.reverse_segment_id.id : source_node.forward_segment_id.id; @@ -61,7 +61,7 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa const auto source_mode = facade.GetTravelMode(source_node_id); auto source_classes = facade.GetClasses(facade.GetClassData(source_node_id)); - const EdgeWeight target_duration = + const EdgeDuration target_duration = target_traversed_in_reverse ? target_node.reverse_duration : target_node.forward_duration; const EdgeWeight target_weight = target_traversed_in_reverse ? target_node.reverse_weight : target_node.forward_weight; @@ -103,8 +103,8 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa // but a RouteStep is with regard to the segment after the turn. // We need to skip the first segment because it is already covered by the // initial start of a route - EdgeWeight segment_duration = 0; - EdgeWeight segment_weight = 0; + EdgeDuration segment_duration = {0}; + EdgeWeight segment_weight = {0}; // some name changes are not announced in our processing. For these, we have to keep the // first name on the segment @@ -121,7 +121,7 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa : osrm::guidance::TurnInstruction::NO_TURN(); if (turn_instruction.type != osrm::guidance::TurnType::NoTurn) { - BOOST_ASSERT(segment_weight >= 0); + BOOST_ASSERT(segment_weight >= EdgeWeight{0}); const auto name = facade.GetNameForID(step_name_id); const auto ref = facade.GetRefForID(step_name_id); const auto pronunciation = facade.GetPronunciationForID(step_name_id); @@ -147,9 +147,9 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa exits.to_string(), NO_ROTARY_NAME, NO_ROTARY_NAME, - segment_duration / 10., + from_alias(segment_duration) / 10., distance, - segment_weight / weight_multiplier, + from_alias(segment_weight) / weight_multiplier, travel_mode, maneuver, leg_geometry.FrontIndex(segment_index), @@ -228,16 +228,16 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa WaypointType::None, 0}; segment_index++; - segment_duration = 0; - segment_weight = 0; + segment_duration = {0}; + segment_weight = {0}; } } const auto distance = leg_geometry.segment_distances[segment_index]; - const EdgeWeight duration = segment_duration + target_duration; + const EdgeDuration duration = segment_duration + target_duration; const EdgeWeight weight = segment_weight + target_weight; // intersections contain the classes of exiting road intersection.classes = facade.GetClasses(facade.GetClassData(target_node_id)); - BOOST_ASSERT(duration >= 0); + BOOST_ASSERT(duration >= EdgeDuration{0}); steps.push_back(RouteStep{leg_data[leg_data.size() - 1].from_edge_based_node, step_name_id, is_segregated, @@ -248,9 +248,9 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa facade.GetExitsForID(step_name_id).to_string(), NO_ROTARY_NAME, NO_ROTARY_NAME, - duration / 10., + from_alias(duration) / 10., distance, - weight / weight_multiplier, + from_alias(weight) / weight_multiplier, target_mode, maneuver, leg_geometry.FrontIndex(segment_index), @@ -280,8 +280,9 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa // use rectified linear unit function to avoid negative duration values // due to flooring errors in phantom snapping - BOOST_ASSERT(target_duration >= source_duration || weight == 0); - const EdgeWeight duration = std::max(0, target_duration - source_duration); + BOOST_ASSERT(target_duration >= source_duration || weight == EdgeWeight{0}); + const EdgeDuration duration = + std::max({0}, target_duration - source_duration); steps.push_back(RouteStep{source_node_id, source_name_id, @@ -293,9 +294,9 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa facade.GetExitsForID(source_name_id).to_string(), NO_ROTARY_NAME, NO_ROTARY_NAME, - duration / 10., + from_alias(duration) / 10., leg_geometry.segment_distances[segment_index], - weight / weight_multiplier, + from_alias(weight) / weight_multiplier, source_mode, maneuver, leg_geometry.FrontIndex(segment_index), diff --git a/include/engine/internal_route_result.hpp b/include/engine/internal_route_result.hpp index 6962c9c5d..6c0cdcc89 100644 --- a/include/engine/internal_route_result.hpp +++ b/include/engine/internal_route_result.hpp @@ -37,10 +37,10 @@ struct PathData EdgeWeight weight_of_turn; // duration that is traveled on the segment until the turn is reached, // including a turn if the segment precedes one. - EdgeWeight duration_until_turn; + EdgeDuration duration_until_turn; // If this segment immediately precedes a turn, then duration_of_turn // will contain the duration of the turn. Otherwise it will be 0. - EdgeWeight duration_of_turn; + EdgeDuration duration_of_turn; // Source of the speed value on this road segment DatasourceID datasource_id; // If segment precedes a turn, ID of the turn itself @@ -63,9 +63,9 @@ struct InternalRouteResult } // Note: includes duration for turns, except for at start and end node. - EdgeWeight duration() const + EdgeDuration duration() const { - EdgeWeight ret{0}; + EdgeDuration ret{0}; for (const auto &leg : unpacked_path_segments) for (const auto &segment : leg) diff --git a/include/engine/phantom_node.hpp b/include/engine/phantom_node.hpp index 345068f9f..f7ca5b82e 100644 --- a/include/engine/phantom_node.hpp +++ b/include/engine/phantom_node.hpp @@ -48,12 +48,12 @@ struct PhantomNode PhantomNode() : forward_segment_id{SPECIAL_SEGMENTID, false}, reverse_segment_id{SPECIAL_SEGMENTID, false}, - forward_weight(INVALID_EDGE_WEIGHT), reverse_weight(INVALID_EDGE_WEIGHT), - forward_weight_offset(0), reverse_weight_offset(0), + forward_weight(INVALID_EDGE_WEIGHT), + reverse_weight(INVALID_EDGE_WEIGHT), forward_weight_offset{0}, reverse_weight_offset{0}, forward_distance(INVALID_EDGE_DISTANCE), reverse_distance(INVALID_EDGE_DISTANCE), - forward_distance_offset(0), reverse_distance_offset(0), + forward_distance_offset{0}, reverse_distance_offset{0}, forward_duration(MAXIMAL_EDGE_DURATION), reverse_duration(MAXIMAL_EDGE_DURATION), - forward_duration_offset(0), reverse_duration_offset(0), + forward_duration_offset{0}, reverse_duration_offset{0}, component({INVALID_COMPONENTID, 0}), fwd_segment_position(0), is_valid_forward_source{false}, is_valid_forward_target{false}, is_valid_reverse_source{false}, is_valid_reverse_target{false}, bearing(0) @@ -73,13 +73,13 @@ struct PhantomNode return reverse_weight_offset + reverse_weight; } - EdgeWeight GetForwardDuration() const + EdgeDuration GetForwardDuration() const { BOOST_ASSERT(forward_segment_id.enabled); return forward_duration + forward_duration_offset; } - EdgeWeight GetReverseDuration() const + EdgeDuration GetReverseDuration() const { BOOST_ASSERT(reverse_segment_id.enabled); return reverse_duration + reverse_duration_offset; @@ -168,10 +168,10 @@ struct PhantomNode EdgeDistance reverse_distance, EdgeDistance forward_distance_offset, EdgeDistance reverse_distance_offset, - EdgeWeight forward_duration, - EdgeWeight reverse_duration, - EdgeWeight forward_duration_offset, - EdgeWeight reverse_duration_offset, + EdgeDuration forward_duration, + EdgeDuration reverse_duration, + EdgeDuration forward_duration_offset, + EdgeDuration reverse_duration_offset, bool is_valid_forward_source, bool is_valid_forward_target, bool is_valid_reverse_source, @@ -206,10 +206,10 @@ struct PhantomNode EdgeDistance reverse_distance; EdgeDistance forward_distance_offset; // TODO: try to remove -> requires path unpacking changes EdgeDistance reverse_distance_offset; // TODO: try to remove -> requires path unpacking changes - EdgeWeight forward_duration; - EdgeWeight reverse_duration; - EdgeWeight forward_duration_offset; // TODO: try to remove -> requires path unpacking changes - EdgeWeight reverse_duration_offset; // TODO: try to remove -> requires path unpacking changes + EdgeDuration forward_duration; + EdgeDuration reverse_duration; + EdgeDuration forward_duration_offset; // TODO: try to remove -> requires path unpacking changes + EdgeDuration reverse_duration_offset; // TODO: try to remove -> requires path unpacking changes ComponentID component; util::Coordinate location; // this is the coordinate of x diff --git a/include/engine/routing_algorithms/routing_base.hpp b/include/engine/routing_algorithms/routing_base.hpp index 793ac29a8..7be626092 100644 --- a/include/engine/routing_algorithms/routing_base.hpp +++ b/include/engine/routing_algorithms/routing_base.hpp @@ -43,14 +43,14 @@ void insertSourceInForwardHeap(Heap &forward_heap, const PhantomNode &source) if (source.IsValidForwardSource()) { forward_heap.Insert(source.forward_segment_id.id, - -source.GetForwardWeightPlusOffset(), + EdgeWeight{0} - source.GetForwardWeightPlusOffset(), source.forward_segment_id.id); } if (source.IsValidReverseSource()) { forward_heap.Insert(source.reverse_segment_id.id, - -source.GetReverseWeightPlusOffset(), + EdgeWeight{0} - source.GetReverseWeightPlusOffset(), source.reverse_segment_id.id); } } @@ -127,18 +127,18 @@ void insertSourceInHeap(ManyToManyQueryHeap &heap, const PhantomNodeCandidates & if (phantom_node.IsValidForwardSource()) { heap.Insert(phantom_node.forward_segment_id.id, - -phantom_node.GetForwardWeightPlusOffset(), + EdgeWeight{0} - phantom_node.GetForwardWeightPlusOffset(), {phantom_node.forward_segment_id.id, - -phantom_node.GetForwardDuration(), - -phantom_node.GetForwardDistance()}); + EdgeDuration{0} - phantom_node.GetForwardDuration(), + EdgeDistance{0} - phantom_node.GetForwardDistance()}); } if (phantom_node.IsValidReverseSource()) { heap.Insert(phantom_node.reverse_segment_id.id, - -phantom_node.GetReverseWeightPlusOffset(), + EdgeWeight{0} - phantom_node.GetReverseWeightPlusOffset(), {phantom_node.reverse_segment_id.id, - -phantom_node.GetReverseDuration(), - -phantom_node.GetReverseDistance()}); + EdgeDuration{0} - phantom_node.GetReverseDuration(), + EdgeDistance{0} - phantom_node.GetReverseDistance()}); } } } @@ -251,25 +251,24 @@ void annotatePath(const FacadeT &facade, BOOST_ASSERT(start_index < end_index); for (std::size_t segment_idx = start_index; segment_idx < end_index; ++segment_idx) { - unpacked_path.push_back( - PathData{node_id, - id_vector[segment_idx + 1], - static_cast(weight_vector[segment_idx]), - 0, - static_cast(duration_vector[segment_idx]), - 0, - datasource_vector[segment_idx], - boost::none}); + unpacked_path.push_back(PathData{node_id, + id_vector[segment_idx + 1], + alias_cast(weight_vector[segment_idx]), + {0}, + alias_cast(duration_vector[segment_idx]), + {0}, + datasource_vector[segment_idx], + boost::none}); } BOOST_ASSERT(!unpacked_path.empty()); const auto turn_duration = facade.GetDurationPenaltyForEdgeID(turn_id); const auto turn_weight = facade.GetWeightPenaltyForEdgeID(turn_id); - unpacked_path.back().duration_until_turn += turn_duration; - unpacked_path.back().duration_of_turn = turn_duration; - unpacked_path.back().weight_until_turn += turn_weight; - unpacked_path.back().weight_of_turn = turn_weight; + unpacked_path.back().duration_until_turn += alias_cast(turn_duration); + unpacked_path.back().duration_of_turn = alias_cast(turn_duration); + unpacked_path.back().weight_until_turn += alias_cast(turn_weight); + unpacked_path.back().weight_of_turn = alias_cast(turn_weight); unpacked_path.back().turn_edge = turn_id; } @@ -311,10 +310,10 @@ void annotatePath(const FacadeT &facade, unpacked_path.push_back( PathData{target_node_id, id_vector[start_index < end_index ? segment_idx + 1 : segment_idx - 1], - static_cast(weight_vector[segment_idx]), - 0, - static_cast(duration_vector[segment_idx]), - 0, + alias_cast(weight_vector[segment_idx]), + {0}, + alias_cast(duration_vector[segment_idx]), + {0}, datasource_vector[segment_idx], boost::none}); } @@ -341,9 +340,9 @@ void annotatePath(const FacadeT &facade, // node to the first turn would be the same as from end to end of a segment, // which is obviously incorrect and not ideal... unpacked_path.front().weight_until_turn = - std::max(unpacked_path.front().weight_until_turn - source_weight, 0); + std::max(unpacked_path.front().weight_until_turn - source_weight, {0}); unpacked_path.front().duration_until_turn = - std::max(unpacked_path.front().duration_until_turn - source_duration, 0); + std::max(unpacked_path.front().duration_until_turn - source_duration, {0}); } } @@ -410,7 +409,7 @@ template EdgeDistance computeEdgeDistance(const FacadeT &faca { const auto geometry_index = facade.GetGeometryIndex(node_id); - EdgeDistance total_distance = 0.0; + EdgeDistance total_distance = {0}; auto geometry_range = facade.GetUncompressedForwardGeometry(geometry_index.id); for (auto current = geometry_range.begin(); current < geometry_range.end() - 1; ++current) diff --git a/include/engine/routing_algorithms/routing_base_ch.hpp b/include/engine/routing_algorithms/routing_base_ch.hpp index d4e77b839..410f7f464 100644 --- a/include/engine/routing_algorithms/routing_base_ch.hpp +++ b/include/engine/routing_algorithms/routing_base_ch.hpp @@ -34,7 +34,7 @@ bool stallAtNode(const DataFacade &facade, { const NodeID to = facade.GetTarget(edge); const EdgeWeight edge_weight = data.weight; - BOOST_ASSERT_MSG(edge_weight > 0, "edge_weight invalid"); + BOOST_ASSERT_MSG(edge_weight > EdgeWeight{0}, "edge_weight invalid"); const auto toHeapNode = query_heap.GetHeapNodeIfWasInserted(to); if (toHeapNode) { @@ -61,7 +61,7 @@ void relaxOutgoingEdges(const DataFacade &facade, const NodeID to = facade.GetTarget(edge); const EdgeWeight edge_weight = data.weight; - BOOST_ASSERT_MSG(edge_weight > 0, "edge_weight invalid"); + BOOST_ASSERT_MSG(edge_weight > EdgeWeight{0}, "edge_weight invalid"); const EdgeWeight to_weight = heapNode.weight + edge_weight; const auto toHeapNode = heap.GetHeapNodeIfWasInserted(to); @@ -135,7 +135,7 @@ void routingStep(const DataFacade &facade, force_loop(force_loop_reverse_nodes, heapNode) || // in this case we are looking at a bi-directional way where the source // and target phantom are on the same edge based node - new_weight < 0) + new_weight < EdgeWeight{0}) { // check whether there is a loop present at the node for (const auto edge : facade.GetAdjacentEdgeRange(heapNode.node)) @@ -148,7 +148,7 @@ void routingStep(const DataFacade &facade, { const EdgeWeight edge_weight = data.weight; const EdgeWeight loop_weight = new_weight + edge_weight; - if (loop_weight >= 0 && loop_weight < upper_bound) + if (loop_weight >= EdgeWeight{0} && loop_weight < upper_bound) { middle_node_id = heapNode.node; upper_bound = loop_weight; @@ -159,7 +159,7 @@ void routingStep(const DataFacade &facade, } else { - BOOST_ASSERT(new_weight >= 0); + BOOST_ASSERT(new_weight >= EdgeWeight{0}); middle_node_id = heapNode.node; upper_bound = new_weight; @@ -169,7 +169,7 @@ void routingStep(const DataFacade &facade, // make sure we don't terminate too early if we initialize the weight // for the nodes in the forward heap with the forward/reverse offset - BOOST_ASSERT(min_edge_offset <= 0); + BOOST_ASSERT(min_edge_offset <= EdgeWeight{0}); if (heapNode.weight + min_edge_offset > upper_bound) { forward_heap.DeleteAll(); @@ -185,31 +185,6 @@ void routingStep(const DataFacade &facade, relaxOutgoingEdges(facade, heapNode, forward_heap); } -template -std::tuple getLoopWeight(const DataFacade &facade, NodeID node) -{ - EdgeWeight loop_weight = UseDuration ? MAXIMAL_EDGE_DURATION : INVALID_EDGE_WEIGHT; - EdgeDistance loop_distance = MAXIMAL_EDGE_DISTANCE; - for (auto edge : facade.GetAdjacentEdgeRange(node)) - { - const auto &data = facade.GetEdgeData(edge); - if (data.forward) - { - const NodeID to = facade.GetTarget(edge); - if (to == node) - { - const auto value = UseDuration ? data.duration : data.weight; - if (value < loop_weight) - { - loop_weight = value; - loop_distance = data.distance; - } - } - } - } - return std::make_tuple(loop_weight, loop_distance); -} - /** * Given a sequence of connected `NodeID`s in the CH graph, performs a depth-first unpacking of * the shortcut @@ -301,7 +276,7 @@ EdgeDistance calculateEBGNodeAnnotations(const DataFacade &facade, // Make sure we have at least something to unpack if (packed_path_begin == packed_path_end || std::distance(packed_path_begin, packed_path_end) <= 1) - return 0; + return {0}; std::stack> recursion_stack; std::stack distance_stack; @@ -383,7 +358,7 @@ EdgeDistance calculateEBGNodeAnnotations(const DataFacade &facade, } } - EdgeDistance total_distance = 0; + EdgeDistance total_distance = {0}; while (!distance_stack.empty()) { total_distance += distance_stack.top(); @@ -505,8 +480,48 @@ double getNetworkDistance(SearchEngineData &engine_working_data, SearchEngineData::QueryHeap &reverse_heap, const PhantomNode &source_phantom, const PhantomNode &target_phantom, - int duration_upper_bound = INVALID_EDGE_WEIGHT); + EdgeWeight duration_upper_bound = INVALID_EDGE_WEIGHT); +template +std::tuple getLoopMetric(const DataFacade &facade, NodeID node) +{ + EdgeMetric loop_metric; + if constexpr (std::is_same::value) + { + loop_metric = INVALID_EDGE_DURATION; + } + else + { + loop_metric = INVALID_EDGE_WEIGHT; + } + EdgeDistance loop_distance = MAXIMAL_EDGE_DISTANCE; + for (auto edge : facade.GetAdjacentEdgeRange(node)) + { + const auto &data = facade.GetEdgeData(edge); + if (data.forward) + { + const NodeID to = facade.GetTarget(edge); + if (to == node) + { + EdgeMetric value; + if constexpr (std::is_same::value) + { + value = to_alias(data.duration); + } + else + { + value = data.weight; + } + if (value < loop_metric) + { + loop_metric = value; + loop_distance = data.distance; + } + } + } + } + return std::make_tuple(loop_metric, loop_distance); +} } // namespace ch } // namespace routing_algorithms } // namespace engine diff --git a/include/engine/routing_algorithms/routing_base_mld.hpp b/include/engine/routing_algorithms/routing_base_mld.hpp index 2fdb61f98..72bbd7608 100644 --- a/include/engine/routing_algorithms/routing_base_mld.hpp +++ b/include/engine/routing_algorithms/routing_base_mld.hpp @@ -363,7 +363,8 @@ void relaxOutgoingEdges(const DataFacade &facade, // TODO: BOOST_ASSERT(edge_data.weight == node_weight + turn_penalty); - const EdgeWeight to_weight = heapNode.weight + node_weight + turn_penalty; + const EdgeWeight to_weight = + heapNode.weight + node_weight + alias_cast(turn_penalty); const auto toHeapNode = forward_heap.GetHeapNodeIfWasInserted(to); if (!toHeapNode) @@ -410,7 +411,7 @@ void routingStep(const DataFacade &facade, // MLD uses loops forcing only to prune single node paths in forward and/or // backward direction (there is no need to force loops in MLD but in CH) if (!force_loop(force_loop_forward_nodes, heapNode) && - !force_loop(force_loop_reverse_nodes, heapNode) && (path_weight >= 0) && + !force_loop(force_loop_reverse_nodes, heapNode) && (path_weight >= EdgeWeight{0}) && (path_weight < path_upper_bound)) { middle_node = heapNode.node; @@ -529,8 +530,8 @@ UnpackedPath search(SearchEngineData &engine_working_data, // Here heaps can be reused, let's go deeper! forward_heap.Clear(); reverse_heap.Clear(); - forward_heap.Insert(source, 0, {source}); - reverse_heap.Insert(target, 0, {target}); + forward_heap.Insert(source, {0}, {source}); + reverse_heap.Insert(target, {0}, {target}); // TODO: when structured bindings will be allowed change to // auto [subpath_weight, subpath_source, subpath_target, subpath] = ... diff --git a/include/engine/routing_algorithms/shortest_path_impl.hpp b/include/engine/routing_algorithms/shortest_path_impl.hpp index cfeb91463..6206fed16 100644 --- a/include/engine/routing_algorithms/shortest_path_impl.hpp +++ b/include/engine/routing_algorithms/shortest_path_impl.hpp @@ -292,7 +292,7 @@ shortestPathWithWaypointUTurns(SearchEngineData &engine_working_data, const std::vector &waypoint_candidates) { - EdgeWeight total_weight = 0; + EdgeWeight total_weight = {0}; std::vector total_packed_path; std::vector packed_leg_begin; @@ -467,8 +467,8 @@ struct route_state route_state(const PhantomNodeCandidates &init_candidates) : current_leg(0), previous_leg_path_offset(0) { - last.total_weight_to_forward.resize(init_candidates.size(), 0); - last.total_weight_to_reverse.resize(init_candidates.size(), 0); + last.total_weight_to_forward.resize(init_candidates.size(), {0}); + last.total_weight_to_reverse.resize(init_candidates.size(), {0}); // Initialize routability from source validity. std::transform( init_candidates.begin(), diff --git a/include/engine/routing_algorithms/tile_turns.hpp b/include/engine/routing_algorithms/tile_turns.hpp index 269728c84..ffa86c412 100644 --- a/include/engine/routing_algorithms/tile_turns.hpp +++ b/include/engine/routing_algorithms/tile_turns.hpp @@ -23,7 +23,7 @@ struct TurnData final const int in_angle; const int turn_angle; const EdgeWeight weight; - const EdgeWeight duration; + const EdgeDuration duration; const guidance::TurnInstruction turn_instruction; }; diff --git a/include/engine/search_engine_data.hpp b/include/engine/search_engine_data.hpp index 4dafdd1a2..103c34fbd 100644 --- a/include/engine/search_engine_data.hpp +++ b/include/engine/search_engine_data.hpp @@ -29,9 +29,9 @@ struct HeapData struct ManyToManyHeapData : HeapData { - EdgeWeight duration; + EdgeDuration duration; EdgeDistance distance; - ManyToManyHeapData(NodeID p, EdgeWeight duration, EdgeDistance distance) + ManyToManyHeapData(NodeID p, EdgeDuration duration, EdgeDistance distance) : HeapData(p), duration(duration), distance(distance) { } @@ -78,15 +78,15 @@ struct MultiLayerDijkstraHeapData struct ManyToManyMultiLayerDijkstraHeapData : MultiLayerDijkstraHeapData { - EdgeWeight duration; + EdgeDuration duration; EdgeDistance distance; - ManyToManyMultiLayerDijkstraHeapData(NodeID p, EdgeWeight duration, EdgeDistance distance) + ManyToManyMultiLayerDijkstraHeapData(NodeID p, EdgeDuration duration, EdgeDistance distance) : MultiLayerDijkstraHeapData(p), duration(duration), distance(distance) { } ManyToManyMultiLayerDijkstraHeapData(NodeID p, bool from, - EdgeWeight duration, + EdgeDuration duration, EdgeDistance distance) : MultiLayerDijkstraHeapData(p, from), duration(duration), distance(distance) { diff --git a/include/engine/trip/trip_brute_force.hpp b/include/engine/trip/trip_brute_force.hpp index 9e85b4a90..1d3492546 100644 --- a/include/engine/trip/trip_brute_force.hpp +++ b/include/engine/trip/trip_brute_force.hpp @@ -23,12 +23,12 @@ namespace trip { // computes the distance of a given permutation -inline EdgeWeight ReturnDistance(const util::DistTableWrapper &dist_table, - const std::vector &location_order, - const EdgeWeight min_route_dist, - const std::size_t number_of_locations) +inline EdgeDuration ReturnDistance(const util::DistTableWrapper &dist_table, + const std::vector &location_order, + const EdgeDuration min_route_dist, + const std::size_t number_of_locations) { - EdgeWeight route_dist = 0; + EdgeDuration route_dist = {0}; std::size_t current_index = 0; while (current_index < location_order.size() && (route_dist < min_route_dist)) { @@ -36,12 +36,13 @@ inline EdgeWeight ReturnDistance(const util::DistTableWrapper &dist_ std::size_t next_index = (current_index + 1) % number_of_locations; auto edge_weight = dist_table(location_order[current_index], location_order[next_index]); - // If the edge_weight is very large (INVALID_EDGE_WEIGHT) then the algorithm will not choose - // this edge in final minimal path. So instead of computing all the permutations after this - // large edge, discard this edge right here and don't consider the path after this edge. - if (edge_weight == INVALID_EDGE_WEIGHT) + // If the edge_weight is very large (INVALID_EDGE_DURATION) then the algorithm will not + // choose this edge in final minimal path. So instead of computing all the permutations + // after this large edge, discard this edge right here and don't consider the path after + // this edge. + if (edge_weight == INVALID_EDGE_DURATION) { - return INVALID_EDGE_WEIGHT; + return INVALID_EDGE_DURATION; } else { @@ -50,7 +51,7 @@ inline EdgeWeight ReturnDistance(const util::DistTableWrapper &dist_ // This boost assert should not be reached if TFSE table BOOST_ASSERT_MSG(dist_table(location_order[current_index], location_order[next_index]) != - INVALID_EDGE_WEIGHT, + INVALID_EDGE_DURATION, "invalid route found"); ++current_index; } @@ -60,14 +61,14 @@ inline EdgeWeight ReturnDistance(const util::DistTableWrapper &dist_ // computes the route by computing all permutations and selecting the shortest inline std::vector BruteForceTrip(const std::size_t number_of_locations, - const util::DistTableWrapper &dist_table) + const util::DistTableWrapper &dist_table) { // set initial order in which nodes are visited to 0, 1, 2, 3, ... std::vector node_order(number_of_locations); std::iota(std::begin(node_order), std::end(node_order), 0); std::vector route = node_order; - EdgeWeight min_route_dist = INVALID_EDGE_WEIGHT; + EdgeDuration min_route_dist = INVALID_EDGE_DURATION; // check length of all possible permutation of the component ids BOOST_ASSERT_MSG(node_order.size() > 0, "no order permutation given"); diff --git a/include/engine/trip/trip_farthest_insertion.hpp b/include/engine/trip/trip_farthest_insertion.hpp index 74ed56e8c..21d7deefe 100644 --- a/include/engine/trip/trip_farthest_insertion.hpp +++ b/include/engine/trip/trip_farthest_insertion.hpp @@ -23,15 +23,15 @@ namespace trip // given a route and a new location, find the best place of insertion and // check the distance of roundtrip when the new location is additionally visited using NodeIDIter = std::vector::iterator; -inline std::pair +inline std::pair GetShortestRoundTrip(const NodeID new_loc, - const util::DistTableWrapper &dist_table, + const util::DistTableWrapper &dist_table, const std::size_t number_of_locations, std::vector &route) { (void)number_of_locations; // unused - auto min_trip_distance = INVALID_EDGE_WEIGHT; + auto min_trip_distance = INVALID_EDGE_DURATION; NodeIDIter next_insert_point_candidate; // for all nodes in the current trip find the best insertion resulting in the shortest path @@ -48,10 +48,11 @@ GetShortestRoundTrip(const NodeID new_loc, const auto dist_from = dist_table(*from_node, new_loc); const auto dist_to = dist_table(new_loc, *to_node); - // If the edge_weight is very large (INVALID_EDGE_WEIGHT) then the algorithm will not choose - // this edge in final minimal path. So instead of computing all the permutations after this - // large edge, discard this edge right here and don't consider the path after this edge. - if (dist_from == INVALID_EDGE_WEIGHT || dist_to == INVALID_EDGE_WEIGHT) + // If the edge_weight is very large (INVALID_EDGE_DURATION) then the algorithm will not + // choose this edge in final minimal path. So instead of computing all the permutations + // after this large edge, discard this edge right here and don't consider the path after + // this edge. + if (dist_from == INVALID_EDGE_DURATION || dist_to == INVALID_EDGE_DURATION) continue; const auto trip_dist = dist_from + dist_to - dist_table(*from_node, *to_node); @@ -71,14 +72,14 @@ GetShortestRoundTrip(const NodeID new_loc, next_insert_point_candidate = to_node; } } - BOOST_ASSERT_MSG(min_trip_distance != INVALID_EDGE_WEIGHT, "trip has invalid edge weight"); + BOOST_ASSERT_MSG(min_trip_distance != INVALID_EDGE_DURATION, "trip has invalid edge weight"); return std::make_pair(min_trip_distance, next_insert_point_candidate); } // given two initial start nodes, find a roundtrip route using the farthest insertion algorithm inline std::vector FindRoute(const std::size_t &number_of_locations, - const util::DistTableWrapper &dist_table, + const util::DistTableWrapper &dist_table, const NodeID &start1, const NodeID &start2) { @@ -99,7 +100,7 @@ inline std::vector FindRoute(const std::size_t &number_of_locations, // two nodes are already in the initial start trip, so we need to add all other nodes for (std::size_t added_nodes = 2; added_nodes < number_of_locations; ++added_nodes) { - auto farthest_distance = std::numeric_limits::min(); + auto farthest_distance = EdgeDuration{std::numeric_limits::min()}; auto next_node = -1; NodeIDIter next_insert_point; @@ -112,7 +113,7 @@ inline std::vector FindRoute(const std::size_t &number_of_locations, const auto insert_candidate = GetShortestRoundTrip(id, dist_table, number_of_locations, route); - BOOST_ASSERT_MSG(insert_candidate.first != INVALID_EDGE_WEIGHT, + BOOST_ASSERT_MSG(insert_candidate.first != INVALID_EDGE_DURATION, "shortest round trip is invalid"); // add the location to the current trip such that it results in the shortest total @@ -137,7 +138,7 @@ inline std::vector FindRoute(const std::size_t &number_of_locations, inline std::vector FarthestInsertionTrip(const std::size_t number_of_locations, - const util::DistTableWrapper &dist_table) + const util::DistTableWrapper &dist_table) { ////////////////////////////////////////////////////////////////////////////////////////////////// // START FARTHEST INSERTION HERE diff --git a/include/extractor/compressed_edge_container.hpp b/include/extractor/compressed_edge_container.hpp index ec9e1f9ea..a0dc4d994 100644 --- a/include/extractor/compressed_edge_container.hpp +++ b/include/extractor/compressed_edge_container.hpp @@ -44,8 +44,8 @@ class CompressedEdgeContainer void AddUncompressedEdge(const EdgeID edge_id, const NodeID target_node, - const SegmentWeight weight, - const SegmentWeight duration); + const EdgeWeight weight, + const EdgeDuration duration); void InitializeBothwayVector(); unsigned ZipEdges(const unsigned f_edge_pos, const unsigned r_edge_pos); @@ -67,8 +67,8 @@ class CompressedEdgeContainer std::unique_ptr ToSegmentData(); private: - SegmentWeight ClipWeight(const SegmentWeight weight); - SegmentDuration ClipDuration(const SegmentDuration duration); + SegmentWeight ClipWeight(const EdgeWeight weight); + SegmentDuration ClipDuration(const EdgeDuration duration); int free_list_maximum = 0; std::atomic_size_t clipped_weights{0}; diff --git a/include/extractor/edge_based_edge.hpp b/include/extractor/edge_based_edge.hpp index 6c9aaa974..781db7af8 100644 --- a/include/extractor/edge_based_edge.hpp +++ b/include/extractor/edge_based_edge.hpp @@ -16,14 +16,14 @@ struct EdgeBasedEdge struct EdgeData { EdgeData() - : turn_id(0), weight(0), distance(0), duration(0), forward(false), backward(false) + : turn_id(0), weight{0}, distance{0}, duration(0), forward(false), backward(false) { } EdgeData(const NodeID turn_id, const EdgeWeight weight, const EdgeDistance distance, - const EdgeWeight duration, + const EdgeDuration duration, const bool forward, const bool backward) : turn_id(turn_id), weight(weight), distance(distance), duration(duration), @@ -34,7 +34,7 @@ struct EdgeBasedEdge NodeID turn_id; // ID of the edge based node (node based edge) EdgeWeight weight; EdgeDistance distance; - EdgeWeight duration : 30; + EdgeDuration::value_type duration : 30; std::uint32_t forward : 1; std::uint32_t backward : 1; @@ -47,7 +47,7 @@ struct EdgeBasedEdge const NodeID target, const NodeID edge_id, const EdgeWeight weight, - const EdgeWeight duration, + const EdgeDuration duration, const EdgeDistance distance, const bool forward, const bool backward); @@ -72,7 +72,7 @@ inline EdgeBasedEdge::EdgeBasedEdge(const NodeID source, const NodeID target, const NodeID turn_id, const EdgeWeight weight, - const EdgeWeight duration, + const EdgeDuration duration, const EdgeDistance distance, const bool forward, const bool backward) diff --git a/include/extractor/edge_based_graph_factory.hpp b/include/extractor/edge_based_graph_factory.hpp index 9dc0cadf2..2aee50c1f 100644 --- a/include/extractor/edge_based_graph_factory.hpp +++ b/include/extractor/edge_based_graph_factory.hpp @@ -91,7 +91,7 @@ class EdgeBasedGraphFactory void GetEdgeBasedEdges(util::DeallocatingVector &edges); void GetEdgeBasedNodeSegments(std::vector &nodes); void GetEdgeBasedNodeWeights(std::vector &output_node_weights); - void GetEdgeBasedNodeDurations(std::vector &output_node_durations); + void GetEdgeBasedNodeDurations(std::vector &output_node_durations); void GetEdgeBasedNodeDistances(std::vector &output_node_distances); std::uint32_t GetConnectivityChecksum() const; diff --git a/include/extractor/internal_extractor_edge.hpp b/include/extractor/internal_extractor_edge.hpp index 032786c73..11c52b743 100644 --- a/include/extractor/internal_extractor_edge.hpp +++ b/include/extractor/internal_extractor_edge.hpp @@ -63,7 +63,7 @@ struct InternalExtractorEdge WeightData weight_data, DurationData duration_data, util::Coordinate source_coordinate) - : result(source, target, 0, 0, 0, {}, -1, {}), weight_data(weight_data), + : result(source, target, {0}, {0}, {0}, {}, -1, {}), weight_data(weight_data), duration_data(duration_data), source_coordinate(source_coordinate) { } diff --git a/include/extractor/node_based_edge.hpp b/include/extractor/node_based_edge.hpp index 94fc3728e..5c97b3e67 100644 --- a/include/extractor/node_based_edge.hpp +++ b/include/extractor/node_based_edge.hpp @@ -141,7 +141,7 @@ inline NodeBasedEdgeClassification::NodeBasedEdgeClassification() } inline NodeBasedEdge::NodeBasedEdge() - : source(SPECIAL_NODEID), target(SPECIAL_NODEID), weight(0), duration(0), distance(0), + : source(SPECIAL_NODEID), target(SPECIAL_NODEID), weight{0}, duration{0}, distance{0}, annotation_data(-1) { } diff --git a/include/extractor/profile_properties.hpp b/include/extractor/profile_properties.hpp index ccfd0f348..953c5be1b 100644 --- a/include/extractor/profile_properties.hpp +++ b/include/extractor/profile_properties.hpp @@ -114,7 +114,7 @@ struct ProfileProperties double GetMaxTurnWeight() const { - return std::numeric_limits::max() / GetWeightMultiplier(); + return from_alias(MAXIMAL_TURN_PENALTY) / GetWeightMultiplier(); } //! penalty to cross a traffic light in deci-seconds diff --git a/include/partitioner/edge_based_graph_reader.hpp b/include/partitioner/edge_based_graph_reader.hpp index 3a92dae5e..b2dd7a55c 100644 --- a/include/partitioner/edge_based_graph_reader.hpp +++ b/include/partitioner/edge_based_graph_reader.hpp @@ -41,8 +41,8 @@ splitBidirectionalEdges(const std::vector &edges) directed.emplace_back(edge.source, edge.target, edge.data.turn_id, - std::max(edge.data.weight, 1), - edge.data.duration, + std::max(edge.data.weight, {1}), + to_alias(edge.data.duration), edge.data.distance, edge.data.forward, edge.data.backward); @@ -50,8 +50,8 @@ splitBidirectionalEdges(const std::vector &edges) directed.emplace_back(edge.target, edge.source, edge.data.turn_id, - std::max(edge.data.weight, 1), - edge.data.duration, + std::max(edge.data.weight, {1}), + to_alias(edge.data.duration), edge.data.distance, edge.data.backward, edge.data.forward); diff --git a/include/util/alias.hpp b/include/util/alias.hpp index 23f614298..8dfe34398 100644 --- a/include/util/alias.hpp +++ b/include/util/alias.hpp @@ -28,6 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef OSRM_UTIL_ALIAS_HPP #define OSRM_UTIL_ALIAS_HPP +#include #include #include #include @@ -125,6 +126,40 @@ template struct Alias final } }; +template inline ToAlias alias_cast(const FromAlias &from) +{ + static_assert(std::is_arithmetic::value, + "Alias From needs to be based on an arithmetic type"); + static_assert(std::is_arithmetic::value, + "Alias Other needs to be based on an arithmetic type"); + return {static_cast( + static_cast(from))}; +} + +template inline ToNumeric from_alias(const FromAlias &from) +{ + static_assert(std::is_arithmetic::value, + "Alias From needs to be based on an arithmetic type"); + static_assert(std::is_arithmetic::value, "Numeric needs to be an arithmetic type"); + return {static_cast(static_cast(from))}; +} + +template ::value>> +inline ToAlias to_alias(const FromNumeric &from) +{ + static_assert(std::is_arithmetic::value, "Numeric needs to be an arithmetic type"); + static_assert(std::is_arithmetic::value, + "Alias needs to be based on an arithmetic type"); + return {static_cast(from)}; +} + +// Sometimes metrics are stored either as bitfields or the alias itself. +// So we'll try to convert to alias without knowing which is the case. +// Therefore, we need this no-op overload, otherwise it will fail on the arithmetic requirement. +template inline ToAlias to_alias(const ToAlias &from) { return from; } + template inline std::ostream &operator<<(std::ostream &stream, const Alias &inst) { diff --git a/include/util/dist_table_wrapper.hpp b/include/util/dist_table_wrapper.hpp index 8d67747e8..5ea2de4bb 100644 --- a/include/util/dist_table_wrapper.hpp +++ b/include/util/dist_table_wrapper.hpp @@ -34,7 +34,7 @@ template class DistTableWrapper std::size_t size() const { return table_.size(); } - EdgeWeight operator()(NodeID from, NodeID to) const + T operator()(NodeID from, NodeID to) const { BOOST_ASSERT_MSG(from < number_of_nodes_, "from ID is out of bound"); BOOST_ASSERT_MSG(to < number_of_nodes_, "to ID is out of bound"); @@ -46,7 +46,7 @@ template class DistTableWrapper return table_[index]; } - void SetValue(NodeID from, NodeID to, EdgeWeight value) + void SetValue(NodeID from, NodeID to, T value) { BOOST_ASSERT_MSG(from < number_of_nodes_, "from ID is out of bound"); BOOST_ASSERT_MSG(to < number_of_nodes_, "to ID is out of bound"); diff --git a/include/util/node_based_graph.hpp b/include/util/node_based_graph.hpp index ba3126369..f7fdbc41f 100644 --- a/include/util/node_based_graph.hpp +++ b/include/util/node_based_graph.hpp @@ -21,14 +21,14 @@ namespace util struct NodeBasedEdgeData { NodeBasedEdgeData() - : weight(INVALID_EDGE_WEIGHT), duration(INVALID_EDGE_WEIGHT), + : weight(INVALID_EDGE_WEIGHT), duration(INVALID_EDGE_DURATION), distance(INVALID_EDGE_DISTANCE), geometry_id({0, false}), reversed(false), annotation_data(-1) { } NodeBasedEdgeData(EdgeWeight weight, - EdgeWeight duration, + EdgeDuration duration, EdgeDistance distance, GeometryID geometry_id, bool reversed, @@ -40,7 +40,7 @@ struct NodeBasedEdgeData } EdgeWeight weight; - EdgeWeight duration; + EdgeDuration duration; EdgeDistance distance; GeometryID geometry_id; bool reversed : 1; @@ -88,9 +88,9 @@ NodeBasedDynamicGraphFromEdges(NodeID number_of_nodes, output_edge.data.flags = input_edge.flags; output_edge.data.annotation_data = input_edge.annotation_data; - BOOST_ASSERT(output_edge.data.weight > 0); - BOOST_ASSERT(output_edge.data.duration > 0); - BOOST_ASSERT(output_edge.data.distance >= 0); + BOOST_ASSERT(output_edge.data.weight > EdgeWeight{0}); + BOOST_ASSERT(output_edge.data.duration > EdgeDuration{0}); + BOOST_ASSERT(output_edge.data.distance >= EdgeDistance{0}); }); tbb::parallel_sort(edges_list.begin(), edges_list.end()); diff --git a/include/util/packed_vector.hpp b/include/util/packed_vector.hpp index 2cff90164..a0679b664 100644 --- a/include/util/packed_vector.hpp +++ b/include/util/packed_vector.hpp @@ -83,19 +83,45 @@ inline T get_upper_half_value(WordT word, } template -inline WordT set_lower_value(WordT word, WordT mask, std::uint8_t offset, T value) +inline WordT set_lower_value(WordT word, + WordT mask, + std::uint8_t offset, + T value, + typename std::enable_if_t::value> * = nullptr) { static_assert(std::is_unsigned::value, "Only unsigned word types supported for now."); return (word & ~mask) | ((static_cast(value) << offset) & mask); } template -inline WordT set_upper_value(WordT word, WordT mask, std::uint8_t offset, T value) +inline WordT set_upper_value(WordT word, + WordT mask, + std::uint8_t offset, + T value, + typename std::enable_if_t::value> * = nullptr) { static_assert(std::is_unsigned::value, "Only unsigned word types supported for now."); return (word & ~mask) | ((static_cast(value) >> offset) & mask); } +template +inline WordT set_lower_value( + WordT word, WordT mask, std::uint8_t offset, T value, typename T::value_type * = nullptr) +{ + static_assert(std::is_unsigned::value, "Only unsigned word types supported for now."); + return (word & ~mask) | + ((static_cast(static_cast(value)) << offset) & mask); +} + +template +inline WordT set_upper_value( + WordT word, WordT mask, std::uint8_t offset, T value, typename T::value_type * = nullptr) +{ + static_assert(std::is_unsigned::value, "Only unsigned word types supported for now."); + return (word & ~mask) | + ((static_cast(static_cast(value)) >> offset) & mask); +} + inline bool compare_and_swap(uint64_t *ptr, uint64_t old_value, uint64_t new_value) { #if defined(_MSC_VER) @@ -287,6 +313,12 @@ template class Pack return &container == &other.container && internal_index == other.internal_index; } + // FIXME: This is needed for tests on Boost ranges to correctly compare Alias values. + template bool operator!=(const osrm::Alias value) const + { + return container.get_value(internal_index) != value; + } + friend std::ostream &operator<<(std::ostream &os, const internal_reference &rhs) { return os << static_cast(rhs); diff --git a/include/util/typedefs.hpp b/include/util/typedefs.hpp index c6519609d..46b2807f3 100644 --- a/include/util/typedefs.hpp +++ b/include/util/typedefs.hpp @@ -48,7 +48,26 @@ struct osm_way_id struct duplicated_node { }; +struct edge_weight +{ +}; +struct edge_duration +{ +}; +struct edge_distance +{ +}; +struct segment_weight +{ +}; +struct segment_duration +{ +}; +struct turn_penalty +{ +}; } // namespace tag + using OSMNodeID = osrm::Alias; // clang-tidy fires `bugprone-throw-keyword-missing` here for unknown reason // NOLINTNEXTLINE(bugprone-throw-keyword-missing) @@ -77,12 +96,13 @@ using EdgeID = std::uint32_t; using NameID = std::uint32_t; using AnnotationID = std::uint32_t; using PackedGeometryID = std::uint32_t; -using EdgeWeight = std::int32_t; -using EdgeDuration = std::int32_t; -using EdgeDistance = float; -using SegmentWeight = std::uint32_t; -using SegmentDuration = std::uint32_t; -using TurnPenalty = std::int16_t; // turn penalty in 100ms units + +using EdgeWeight = osrm::Alias; +using EdgeDuration = osrm::Alias; +using EdgeDistance = osrm::Alias; +using SegmentWeight = osrm::Alias; +using SegmentDuration = osrm::Alias; +using TurnPenalty = osrm::Alias; // turn penalty in 100ms units static const std::size_t INVALID_INDEX = std::numeric_limits::max(); @@ -109,16 +129,30 @@ static const NameID EMPTY_NAMEID = 0; static const unsigned INVALID_COMPONENTID = 0; static const std::size_t SEGMENT_WEIGHT_BITS = 22; static const std::size_t SEGMENT_DURATION_BITS = 22; -static const SegmentWeight INVALID_SEGMENT_WEIGHT = (1u << SEGMENT_WEIGHT_BITS) - 1; -static const SegmentDuration INVALID_SEGMENT_DURATION = (1u << SEGMENT_DURATION_BITS) - 1; -static const SegmentWeight MAX_SEGMENT_WEIGHT = INVALID_SEGMENT_WEIGHT - 1; -static const SegmentDuration MAX_SEGMENT_DURATION = INVALID_SEGMENT_DURATION - 1; -static const EdgeWeight INVALID_EDGE_WEIGHT = std::numeric_limits::max(); -static const EdgeDuration MAXIMAL_EDGE_DURATION = std::numeric_limits::max(); -static const EdgeDistance MAXIMAL_EDGE_DISTANCE = std::numeric_limits::max(); -static const TurnPenalty INVALID_TURN_PENALTY = std::numeric_limits::max(); -static const EdgeDistance INVALID_EDGE_DISTANCE = std::numeric_limits::max(); -static const EdgeDistance INVALID_FALLBACK_SPEED = std::numeric_limits::max(); +static const SegmentWeight INVALID_SEGMENT_WEIGHT = SegmentWeight{(1u << SEGMENT_WEIGHT_BITS) - 1}; +static const SegmentDuration INVALID_SEGMENT_DURATION = + SegmentDuration{(1u << SEGMENT_DURATION_BITS) - 1}; +static const SegmentWeight MAX_SEGMENT_WEIGHT = INVALID_SEGMENT_WEIGHT - SegmentWeight{1}; +static const SegmentDuration MAX_SEGMENT_DURATION = INVALID_SEGMENT_DURATION - SegmentDuration{1}; +static const EdgeWeight INVALID_EDGE_WEIGHT = + EdgeWeight{std::numeric_limits::max()}; +static const EdgeDuration INVALID_EDGE_DURATION = + EdgeDuration{std::numeric_limits::max()}; +static const EdgeDistance INVALID_EDGE_DISTANCE = + EdgeDistance{std::numeric_limits::max()}; +static const TurnPenalty INVALID_TURN_PENALTY = + TurnPenalty{std::numeric_limits::max()}; +static const EdgeDistance INVALID_FALLBACK_SPEED = + EdgeDistance{std::numeric_limits::max()}; +// TODO: These are the same as the invalid values. Do we need both? +static const EdgeWeight MAXIMAL_EDGE_WEIGHT = + EdgeWeight{std::numeric_limits::max()}; +static const EdgeDuration MAXIMAL_EDGE_DURATION = + EdgeDuration{std::numeric_limits::max()}; +static const EdgeDistance MAXIMAL_EDGE_DISTANCE = + EdgeDistance{std::numeric_limits::max()}; +static const TurnPenalty MAXIMAL_TURN_PENALTY = + TurnPenalty{std::numeric_limits::max()}; using DatasourceID = std::uint8_t; diff --git a/src/contractor/contractor.cpp b/src/contractor/contractor.cpp index 02703b0b1..5f9d7cbd2 100644 --- a/src/contractor/contractor.cpp +++ b/src/contractor/contractor.cpp @@ -78,7 +78,8 @@ int Contractor::Run() // Convert node weights for oneway streets to INVALID_EDGE_WEIGHT for (auto &weight : node_weights) { - weight = (weight & 0x80000000) ? INVALID_EDGE_WEIGHT : weight; + weight = (from_alias(weight) & 0x80000000) ? INVALID_EDGE_WEIGHT + : weight; } // Contracting the edge-expanded graph diff --git a/src/contractor/graph_contractor.cpp b/src/contractor/graph_contractor.cpp index 0b3e87cc2..9fb4749d3 100644 --- a/src/contractor/graph_contractor.cpp +++ b/src/contractor/graph_contractor.cpp @@ -170,8 +170,8 @@ void ContractNode(ContractorThreadData *data, } heap.Clear(); - heap.Insert(source, 0, ContractorHeapData{}); - EdgeWeight max_weight = 0; + heap.Insert(source, {0}, ContractorHeapData{}); + EdgeWeight max_weight = {0}; unsigned number_of_targets = 0; for (auto out_edge : graph.GetAdjacentEdgeRange(node)) @@ -199,7 +199,7 @@ void ContractNode(ContractorThreadData *data, // CAREFUL: This only works due to the independent node-setting. This // guarantees that source is not connected to another node that is // contracted - node_weights[source] = path_weight + 1; + node_weights[source] = path_weight + EdgeWeight{1}; BOOST_ASSERT(stats != nullptr); stats->edges_added_count += 2; stats->original_edges_added_count += diff --git a/src/customize/customizer.cpp b/src/customize/customizer.cpp index 734bca590..00eb6f827 100644 --- a/src/customize/customizer.cpp +++ b/src/customize/customizer.cpp @@ -133,7 +133,8 @@ int Customizer::Run(const CustomizationConfig &config) auto graph = LoadAndUpdateEdgeExpandedGraph( config, mlp, node_weights, node_durations, node_distances, connectivity_checksum); BOOST_ASSERT(graph.GetNumberOfNodes() == node_weights.size()); - std::for_each(node_weights.begin(), node_weights.end(), [](auto &w) { w &= 0x7fffffff; }); + std::for_each( + node_weights.begin(), node_weights.end(), [](auto &w) { w &= EdgeWeight{0x7fffffff}; }); util::Log() << "Loaded edge based graph: " << graph.GetNumberOfEdges() << " edges, " << graph.GetNumberOfNodes() << " nodes"; diff --git a/src/engine/plugins/table.cpp b/src/engine/plugins/table.cpp index 89239a3ee..0d760ae92 100644 --- a/src/engine/plugins/table.cpp +++ b/src/engine/plugins/table.cpp @@ -90,7 +90,8 @@ Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms, std::vector estimated_pairs; // Scan table for null results - if any exist, replace with distance estimates - if (params.fallback_speed != INVALID_FALLBACK_SPEED || params.scale_factor != 1) + if (params.fallback_speed != from_alias(INVALID_FALLBACK_SPEED) || + params.scale_factor != 1) { for (std::size_t row = 0; row < num_sources; row++) { @@ -98,7 +99,8 @@ Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms, { const auto &table_index = row * num_destinations + column; BOOST_ASSERT(table_index < result_tables_pair.first.size()); - if (params.fallback_speed != INVALID_FALLBACK_SPEED && params.fallback_speed > 0 && + if (params.fallback_speed != from_alias(INVALID_FALLBACK_SPEED) && + params.fallback_speed > 0 && result_tables_pair.first[table_index] == MAXIMAL_EDGE_DURATION) { const auto &source = @@ -118,29 +120,32 @@ Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms, candidatesSnappedLocation(destination)); result_tables_pair.first[table_index] = - distance_estimate / (double)params.fallback_speed; + to_alias(distance_estimate / params.fallback_speed); if (!result_tables_pair.second.empty()) { - result_tables_pair.second[table_index] = distance_estimate; + result_tables_pair.second[table_index] = + to_alias(distance_estimate); } estimated_pairs.emplace_back(row, column); } if (params.scale_factor > 0 && params.scale_factor != 1 && result_tables_pair.first[table_index] != MAXIMAL_EDGE_DURATION && - result_tables_pair.first[table_index] != 0) + result_tables_pair.first[table_index] != EdgeDuration{0}) { EdgeDuration diff = MAXIMAL_EDGE_DURATION / result_tables_pair.first[table_index]; - if (params.scale_factor >= diff) + if (params.scale_factor >= from_alias(diff)) { - result_tables_pair.first[table_index] = MAXIMAL_EDGE_DURATION - 1; + result_tables_pair.first[table_index] = + MAXIMAL_EDGE_DURATION - EdgeDuration{1}; } else { - result_tables_pair.first[table_index] = std::lround( - result_tables_pair.first[table_index] * params.scale_factor); + result_tables_pair.first[table_index] = to_alias( + std::lround(from_alias(result_tables_pair.first[table_index]) * + params.scale_factor)); } } } diff --git a/src/engine/plugins/tile.cpp b/src/engine/plugins/tile.cpp index 65f35af57..f932abe73 100644 --- a/src/engine/plugins/tile.cpp +++ b/src/engine/plugins/tile.cpp @@ -497,17 +497,17 @@ void encodeVectorTile(const DataFacadeBase &facade, auto name = facade.GetNameForID(name_id); // If this is a valid forward edge, go ahead and add it to the tile - if (forward_duration != 0 && edge.forward_segment_id.enabled) + if (forward_duration != SegmentDuration{0} && edge.forward_segment_id.enabled) { // Calculate the speed for this line - std::uint32_t speed_kmh_idx = - static_cast(round(length / forward_duration * 10 * 3.6)); + std::uint32_t speed_kmh_idx = static_cast( + round(length / from_alias(forward_duration) * 10 * 3.6)); // Rate values are in meters per weight-unit - and similar to speeds, we // present 1 decimal place of precision (these values are added as // double/10) lower down - std::uint32_t forward_rate = - static_cast(round(length / forward_weight * 10.)); + std::uint32_t forward_rate = static_cast( + round(length / from_alias(forward_weight) * 10.)); auto tile_line = coordinatesToTileLine(a, b, tile_bbox); if (!tile_line.empty()) @@ -519,8 +519,8 @@ void encodeVectorTile(const DataFacadeBase &facade, fbuilder.set_is_small(component_id.is_tiny); fbuilder.set_datasource( facade.GetDatasourceName(forward_datasource_idx).to_string()); - fbuilder.set_weight(forward_weight / 10.0); - fbuilder.set_duration(forward_duration / 10.0); + fbuilder.set_weight(from_alias(forward_weight) / 10.0); + fbuilder.set_duration(from_alias(forward_duration) / 10.0); fbuilder.set_name(name); fbuilder.set_rate(forward_rate / 10.0); fbuilder.set_is_startpoint(is_startpoint); @@ -531,17 +531,17 @@ void encodeVectorTile(const DataFacadeBase &facade, // Repeat the above for the coordinates reversed and using the `reverse` // properties - if (reverse_duration != 0 && edge.reverse_segment_id.enabled) + if (reverse_duration != SegmentDuration{0} && edge.reverse_segment_id.enabled) { // Calculate the speed for this line - std::uint32_t speed_kmh_idx = - static_cast(round(length / reverse_duration * 10 * 3.6)); + std::uint32_t speed_kmh_idx = static_cast( + round(length / from_alias(reverse_duration) * 10 * 3.6)); // Rate values are in meters per weight-unit - and similar to speeds, we // present 1 decimal place of precision (these values are added as // double/10) lower down - std::uint32_t reverse_rate = - static_cast(round(length / reverse_weight * 10.)); + std::uint32_t reverse_rate = static_cast( + round(length / from_alias(reverse_weight) * 10.)); auto tile_line = coordinatesToTileLine(b, a, tile_bbox); if (!tile_line.empty()) @@ -553,8 +553,8 @@ void encodeVectorTile(const DataFacadeBase &facade, fbuilder.set_is_small(component_id.is_tiny); fbuilder.set_datasource( facade.GetDatasourceName(reverse_datasource_idx).to_string()); - fbuilder.set_weight(reverse_weight / 10.0); - fbuilder.set_duration(reverse_duration / 10.0); + fbuilder.set_weight(from_alias(reverse_weight) / 10.0); + fbuilder.set_duration(from_alias(reverse_duration) / 10.0); fbuilder.set_name(name); fbuilder.set_rate(reverse_rate / 10.0); fbuilder.set_is_startpoint(is_startpoint); @@ -582,8 +582,8 @@ void encodeVectorTile(const DataFacadeBase &facade, fbuilder.set_bearing_in(turn_data.in_angle); fbuilder.set_turn_angle(turn_data.turn_angle); - fbuilder.set_cost(turn_data.duration / 10.0); - fbuilder.set_weight(turn_data.weight / 10.0); + fbuilder.set_cost(from_alias(turn_data.duration) / 10.0); + fbuilder.set_weight(from_alias(turn_data.weight) / 10.0); fbuilder.set_turn(turn_data.turn_instruction); fbuilder.commit(); diff --git a/src/engine/plugins/trip.cpp b/src/engine/plugins/trip.cpp index 63f65e0f0..771529151 100644 --- a/src/engine/plugins/trip.cpp +++ b/src/engine/plugins/trip.cpp @@ -20,9 +20,9 @@ namespace engine namespace plugins { -bool IsStronglyConnectedComponent(const util::DistTableWrapper &result_table) +bool IsStronglyConnectedComponent(const util::DistTableWrapper &result_table) { - return std::find(std::begin(result_table), std::end(result_table), INVALID_EDGE_WEIGHT) == + return std::find(std::begin(result_table), std::end(result_table), INVALID_EDGE_DURATION) == std::end(result_table); } @@ -68,7 +68,7 @@ TripPlugin::ComputeRoute(const RoutingAlgorithmsInterface &algorithms, void ManipulateTableForFSE(const std::size_t source_id, const std::size_t destination_id, - util::DistTableWrapper &result_table) + util::DistTableWrapper &result_table) { // ****************** Change Table ************************* // The following code manipulates the table and produces the new table for @@ -94,7 +94,7 @@ void ManipulateTableForFSE(const std::size_t source_id, { if (i == source_id) continue; - result_table.SetValue(i, source_id, INVALID_EDGE_WEIGHT); + result_table.SetValue(i, source_id, INVALID_EDGE_DURATION); } // change parameters.destination row @@ -104,22 +104,22 @@ void ManipulateTableForFSE(const std::size_t source_id, { if (i == destination_id) continue; - result_table.SetValue(destination_id, i, INVALID_EDGE_WEIGHT); + result_table.SetValue(destination_id, i, INVALID_EDGE_DURATION); } // set destination->source to zero so roundtrip treats source and // destination as one location - result_table.SetValue(destination_id, source_id, 0); + result_table.SetValue(destination_id, source_id, {0}); // set source->destination as very high number so algorithm is forced // to find another path to get to destination - result_table.SetValue(source_id, destination_id, INVALID_EDGE_WEIGHT); + result_table.SetValue(source_id, destination_id, INVALID_EDGE_DURATION); //********* End of changes to table ************************************* } void ManipulateTableForNonRoundtripFS(const std::size_t source_id, - util::DistTableWrapper &result_table) + util::DistTableWrapper &result_table) { // We can use the round-trip calculation to simulate non-round-trip fixed start // by making all paths to the source location zero. Effectively finding an 'optimal' @@ -127,12 +127,12 @@ void ManipulateTableForNonRoundtripFS(const std::size_t source_id, // source. for (const auto i : util::irange(0, result_table.GetNumberOfNodes())) { - result_table.SetValue(i, source_id, 0); + result_table.SetValue(i, source_id, {0}); } } void ManipulateTableForNonRoundtripFE(const std::size_t destination_id, - util::DistTableWrapper &result_table) + util::DistTableWrapper &result_table) { // We can use the round-trip calculation to simulate non-round-trip fixed end // by making all paths from the destination to other locations zero. @@ -140,7 +140,7 @@ void ManipulateTableForNonRoundtripFE(const std::size_t destination_id, // from the destination to any source. for (const auto i : util::irange(0, result_table.GetNumberOfNodes())) { - result_table.SetValue(destination_id, i, 0); + result_table.SetValue(destination_id, i, {0}); } } @@ -218,7 +218,7 @@ Status TripPlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms, BOOST_ASSERT(snapped_phantoms.size() == number_of_locations); // compute the duration table of all phantom nodes - auto result_duration_table = util::DistTableWrapper( + auto result_duration_table = util::DistTableWrapper( algorithms.ManyToManySearch(snapped_phantoms, {}, {}, /*requestDistance*/ false).first, number_of_locations); diff --git a/src/engine/routing_algorithms/alternative_path_ch.cpp b/src/engine/routing_algorithms/alternative_path_ch.cpp index d81ebabcc..eda03e664 100644 --- a/src/engine/routing_algorithms/alternative_path_ch.cpp +++ b/src/engine/routing_algorithms/alternative_path_ch.cpp @@ -44,7 +44,7 @@ struct RankedCandidateNode bool operator<(const RankedCandidateNode &other) const { - return (2 * weight + sharing) < (2 * other.weight + other.sharing); + return (EdgeWeight{2} * weight + sharing) < (EdgeWeight{2} * other.weight + other.sharing); } }; @@ -66,8 +66,8 @@ void alternativeRoutingStep(const DataFacade &facade, // toHeapNode is the same const auto heapNode = forward_heap.DeleteMinGetHeapNode(); - const auto scaled_weight = - static_cast((heapNode.weight + min_edge_offset) / (1. + VIAPATH_EPSILON)); + const auto scaled_weight = to_alias( + from_alias(heapNode.weight + min_edge_offset) / (1. + VIAPATH_EPSILON)); if ((INVALID_EDGE_WEIGHT != *upper_bound_to_shortest_path_weight) && (scaled_weight > *upper_bound_to_shortest_path_weight)) { @@ -84,7 +84,7 @@ void alternativeRoutingStep(const DataFacade &facade, const EdgeWeight new_weight = reverseHeapNode->weight + heapNode.weight; if (new_weight < *upper_bound_to_shortest_path_weight) { - if (new_weight >= 0) + if (new_weight >= EdgeWeight{0}) { *middle_node = heapNode.node; *upper_bound_to_shortest_path_weight = new_weight; @@ -92,7 +92,8 @@ void alternativeRoutingStep(const DataFacade &facade, else { // check whether there is a loop present at the node - const auto loop_weight = std::get<0>(getLoopWeight(facade, heapNode.node)); + const auto loop_weight = + std::get<0>(getLoopMetric(facade, heapNode.node)); const EdgeWeight new_weight_with_loop = new_weight + loop_weight; if (loop_weight != INVALID_EDGE_WEIGHT && new_weight_with_loop <= *upper_bound_to_shortest_path_weight) @@ -112,7 +113,7 @@ void alternativeRoutingStep(const DataFacade &facade, const NodeID to = facade.GetTarget(edge); const EdgeWeight edge_weight = data.weight; - BOOST_ASSERT(edge_weight > 0); + BOOST_ASSERT(edge_weight > EdgeWeight{0}); const EdgeWeight to_weight = heapNode.weight + edge_weight; const auto toHeapNode = forward_heap.GetHeapNodeIfWasInserted(to); @@ -180,7 +181,7 @@ void computeWeightAndSharingOfViaPath(SearchEngineData &engine_workin NodeID s_v_middle = SPECIAL_NODEID; EdgeWeight upper_bound_s_v_path_weight = INVALID_EDGE_WEIGHT; - new_reverse_heap.Insert(via_node, 0, via_node); + new_reverse_heap.Insert(via_node, {0}, via_node); // compute path by reusing forward search from s while (!new_reverse_heap.Empty()) { @@ -196,7 +197,7 @@ void computeWeightAndSharingOfViaPath(SearchEngineData &engine_workin // compute path by reusing backward search from node t NodeID v_t_middle = SPECIAL_NODEID; EdgeWeight upper_bound_of_v_t_path_weight = INVALID_EDGE_WEIGHT; - new_forward_heap.Insert(via_node, 0, via_node); + new_forward_heap.Insert(via_node, {0}, via_node); while (!new_forward_heap.Empty()) { routingStep(facade, @@ -342,7 +343,7 @@ bool viaNodeCandidatePassesTTest(SearchEngineData &engine_working_dat *s_v_middle = SPECIAL_NODEID; EdgeWeight upper_bound_s_v_path_weight = INVALID_EDGE_WEIGHT; // compute path by reusing forward search from s - new_reverse_heap.Insert(candidate.node, 0, candidate.node); + new_reverse_heap.Insert(candidate.node, {0}, candidate.node); while (new_reverse_heap.Size() > 0) { routingStep(facade, @@ -363,7 +364,7 @@ bool viaNodeCandidatePassesTTest(SearchEngineData &engine_working_dat // compute path by reusing backward search from t *v_t_middle = SPECIAL_NODEID; EdgeWeight upper_bound_of_v_t_path_weight = INVALID_EDGE_WEIGHT; - new_forward_heap.Insert(candidate.node, 0, candidate.node); + new_forward_heap.Insert(candidate.node, {0}, candidate.node); while (new_forward_heap.Size() > 0) { routingStep(facade, @@ -400,8 +401,9 @@ bool viaNodeCandidatePassesTTest(SearchEngineData &engine_working_dat { return false; } - const EdgeWeight T_threshold = static_cast(VIAPATH_ALPHA * weight_of_shortest_path); - EdgeWeight unpacked_until_weight = 0; + const EdgeWeight T_threshold = + to_alias(VIAPATH_ALPHA * from_alias(weight_of_shortest_path)); + EdgeWeight unpacked_until_weight = {0}; std::stack unpack_stack; // Traverse path s-->v @@ -463,7 +465,7 @@ bool viaNodeCandidatePassesTTest(SearchEngineData &engine_working_dat } EdgeWeight t_test_path_weight = unpacked_until_weight; - unpacked_until_weight = 0; + unpacked_until_weight = {0}; // Traverse path s-->v BOOST_ASSERT(!packed_v_t_path.empty()); for (unsigned i = 0, packed_path_length = static_cast(packed_v_t_path.size() - 1); @@ -532,8 +534,8 @@ bool viaNodeCandidatePassesTTest(SearchEngineData &engine_working_dat EdgeWeight upper_bound = INVALID_EDGE_WEIGHT; NodeID middle = SPECIAL_NODEID; - forward_heap3.Insert(s_P, 0, s_P); - reverse_heap3.Insert(t_P, 0, t_P); + forward_heap3.Insert(s_P, {0}, s_P); + reverse_heap3.Insert(t_P, {0}, t_P); // exploration from s and t until deletemin/(1+epsilon) > _lengt_oO_sShortest_path while ((forward_heap3.Size() + reverse_heap3.Size()) > 0) { @@ -580,10 +582,11 @@ InternalManyRoutesResult alternativePathSearch(SearchEngineData &engi insertNodesInHeaps(forward_heap1, reverse_heap1, endpoint_candidates); // get offset to account for offsets on phantom nodes on compressed edges - EdgeWeight min_edge_offset = forward_heap1.Empty() ? 0 : std::min(0, forward_heap1.MinKey()); - BOOST_ASSERT(min_edge_offset <= 0); + EdgeWeight min_edge_offset = + forward_heap1.Empty() ? EdgeWeight{0} : std::min({0}, forward_heap1.MinKey()); + BOOST_ASSERT(min_edge_offset <= EdgeWeight{0}); // we only every insert negative offsets for nodes in the forward heap - BOOST_ASSERT(reverse_heap1.Empty() || reverse_heap1.MinKey() >= 0); + BOOST_ASSERT(reverse_heap1.Empty() || reverse_heap1.MinKey() >= EdgeWeight{0}); // search from s and t till new_min/(1+epsilon) > weight_of_shortest_path while (0 < (forward_heap1.Size() + reverse_heap1.Size())) @@ -701,22 +704,27 @@ InternalManyRoutesResult alternativePathSearch(SearchEngineData &engi if (node == middle_node) continue; const auto fwd_iterator = approximated_forward_sharing.find(node); - const EdgeWeight fwd_sharing = - (fwd_iterator != approximated_forward_sharing.end()) ? fwd_iterator->second : 0; + const EdgeWeight fwd_sharing = (fwd_iterator != approximated_forward_sharing.end()) + ? fwd_iterator->second + : EdgeWeight{0}; const auto rev_iterator = approximated_reverse_sharing.find(node); - const EdgeWeight rev_sharing = - (rev_iterator != approximated_reverse_sharing.end()) ? rev_iterator->second : 0; + const EdgeWeight rev_sharing = (rev_iterator != approximated_reverse_sharing.end()) + ? rev_iterator->second + : EdgeWeight{0}; const EdgeWeight approximated_sharing = fwd_sharing + rev_sharing; const EdgeWeight approximated_weight = forward_heap1.GetKey(node) + reverse_heap1.GetKey(node); const bool weight_passes = - (approximated_weight < upper_bound_to_shortest_path_weight * (1 + VIAPATH_EPSILON)); + (from_alias(approximated_weight) < + from_alias(upper_bound_to_shortest_path_weight) * (1 + VIAPATH_EPSILON)); const bool sharing_passes = - (approximated_sharing <= upper_bound_to_shortest_path_weight * VIAPATH_GAMMA); + (from_alias(approximated_sharing) <= + from_alias(upper_bound_to_shortest_path_weight) * VIAPATH_GAMMA); const bool stretch_passes = - (approximated_weight - approximated_sharing) < - ((1. + VIAPATH_EPSILON) * (upper_bound_to_shortest_path_weight - approximated_sharing)); + from_alias(approximated_weight - approximated_sharing) < + ((1. + VIAPATH_EPSILON) * + from_alias(upper_bound_to_shortest_path_weight - approximated_sharing)); if (weight_passes && sharing_passes && stretch_passes) { @@ -737,7 +745,7 @@ InternalManyRoutesResult alternativePathSearch(SearchEngineData &engi // prioritizing via nodes for deep inspection for (const NodeID node : preselected_node_list) { - EdgeWeight weight_of_via_path = 0, sharing_of_via_path = 0; + EdgeWeight weight_of_via_path = {0}, sharing_of_via_path = {0}; computeWeightAndSharingOfViaPath(engine_working_data, facade, node, @@ -745,10 +753,11 @@ InternalManyRoutesResult alternativePathSearch(SearchEngineData &engi &sharing_of_via_path, packed_shortest_path, min_edge_offset); - const EdgeWeight maximum_allowed_sharing = - static_cast(upper_bound_to_shortest_path_weight * VIAPATH_GAMMA); + const EdgeWeight maximum_allowed_sharing = to_alias( + from_alias(upper_bound_to_shortest_path_weight) * VIAPATH_GAMMA); if (sharing_of_via_path <= maximum_allowed_sharing && - weight_of_via_path <= upper_bound_to_shortest_path_weight * (1 + VIAPATH_EPSILON)) + from_alias(weight_of_via_path) <= + from_alias(upper_bound_to_shortest_path_weight) * (1 + VIAPATH_EPSILON)) { ranked_candidates_list.emplace_back(node, weight_of_via_path, sharing_of_via_path); } diff --git a/src/engine/routing_algorithms/alternative_path_mld.cpp b/src/engine/routing_algorithms/alternative_path_mld.cpp index 7020e8a8a..2f063eb72 100644 --- a/src/engine/routing_algorithms/alternative_path_mld.cpp +++ b/src/engine/routing_algorithms/alternative_path_mld.cpp @@ -85,9 +85,9 @@ struct WeightedViaNodeUnpackedPath // Scale the maximum allowed weight increase based on its magnitude: // - Shortest path 10 minutes, alternative 13 minutes => Factor of 0.30 ok // - Shortest path 10 hours, alternative 13 hours => Factor of 0.30 unreasonable -double getLongerByFactorBasedOnDuration(const EdgeWeight duration) +double getLongerByFactorBasedOnDuration(const EdgeDuration duration) { - BOOST_ASSERT(duration != INVALID_EDGE_WEIGHT); + BOOST_ASSERT(duration != INVALID_EDGE_DURATION); // We only have generic weights here and no durations without unpacking. // We also have restricted way penalties which are huge and will screw scaling here. @@ -118,19 +118,20 @@ double getLongerByFactorBasedOnDuration(const EdgeWeight duration) const constexpr auto c = 2.45437877e+09; const constexpr auto d = -2.07944571e+03; - if (duration < EdgeWeight(5 * 60)) + if (duration < EdgeDuration{5 * 60}) { return 1.0; } - else if (duration > EdgeWeight(10 * 60 * 60)) + else if (duration > EdgeDuration{10 * 60 * 60}) { return 0.20; } // Bigger than 10 minutes but smaller than 10 hours - BOOST_ASSERT(duration >= 5 * 60 && duration <= 10 * 60 * 60); + BOOST_ASSERT(duration >= EdgeDuration{5 * 60} && duration <= EdgeDuration{10 * 60 * 60}); - return a + b / (duration - d) + c / std::pow(duration - d, 3); + return a + b / (from_alias(duration) - d) + + c / std::pow(from_alias(duration) - d, 3); } Parameters parametersFromRequest(const PhantomEndpointCandidates &endpoint_candidates) @@ -223,10 +224,11 @@ RandIt filterViaCandidatesByStretch(RandIt first, // Assumes weight roughly corresponds to duration-ish. If this is not the case e.g. // because users are setting weight to be distance in the profiles, then we might // either generate more candidates than we have to or not enough. But is okay. - const auto stretch_weight_limit = (1. + parameters.kAtMostLongerBy) * weight; + const auto stretch_weight_limit = + (1. + parameters.kAtMostLongerBy) * from_alias(weight); const auto over_weight_limit = [=](const auto via) { - return via.weight > stretch_weight_limit; + return from_alias(via.weight) > stretch_weight_limit; }; return std::remove_if(first, last, over_weight_limit); @@ -444,7 +446,8 @@ RandIt filterPackedPathsByLocalOptimality(const WeightedViaNodePackedPath &path, const auto detour_length = forward_heap.GetKey(via) - forward_heap.GetKey(a) + reverse_heap.GetKey(via) - reverse_heap.GetKey(b); - return plateaux_length < parameters.kAtLeastOptimalAroundViaBy * detour_length; + return from_alias(plateaux_length) < + parameters.kAtLeastOptimalAroundViaBy * from_alias(detour_length); }; return std::remove_if(first, last, is_not_locally_optimal); @@ -482,8 +485,8 @@ RandIt filterUnpackedPathsBySharing(RandIt first, return false; } - EdgeWeight total_duration = 0; - const auto add_if_seen = [&](const EdgeWeight duration, const NodeID node) { + EdgeDuration total_duration = {0}; + const auto add_if_seen = [&](const EdgeDuration duration, const NodeID node) { auto node_duration = facade.GetNodeDuration(node); total_duration += node_duration; if (nodes.count(node) > 0) @@ -496,7 +499,7 @@ RandIt filterUnpackedPathsBySharing(RandIt first, const auto shared_duration = std::accumulate( begin(unpacked.nodes), end(unpacked.nodes), EdgeDuration{0}, add_if_seen); - unpacked.sharing = shared_duration / static_cast(total_duration); + unpacked.sharing = from_alias(shared_duration) / from_alias(total_duration); BOOST_ASSERT(unpacked.sharing >= 0.); BOOST_ASSERT(unpacked.sharing <= 1.); @@ -531,10 +534,11 @@ RandIt filterAnnotatedRoutesByStretch(RandIt first, BOOST_ASSERT(shortest_route.is_valid()); const auto shortest_route_duration = shortest_route.duration(); - const auto stretch_duration_limit = (1. + parameters.kAtMostLongerBy) * shortest_route_duration; + const auto stretch_duration_limit = + (1. + parameters.kAtMostLongerBy) * from_alias(shortest_route_duration); const auto over_duration_limit = [=](const auto &route) { - return route.duration() > stretch_duration_limit; + return from_alias(route.duration()) > stretch_duration_limit; }; return std::remove_if(first, last, over_duration_limit); @@ -610,8 +614,8 @@ void unpackPackedPaths(InputIt first, // Here heaps can be reused, let's go deeper! forward_heap.Clear(); reverse_heap.Clear(); - forward_heap.Insert(source, 0, {source}); - reverse_heap.Insert(target, 0, {target}); + forward_heap.Insert(source, {0}, {source}); + reverse_heap.Insert(target, {0}, {target}); BOOST_ASSERT(!facade.ExcludeNode(source)); BOOST_ASSERT(!facade.ExcludeNode(target)); @@ -694,7 +698,8 @@ makeCandidateVias(SearchEngineData &search_engine_data, while (forward_heap.Size() + reverse_heap.Size() > 0) { if (shortest_path_weight != INVALID_EDGE_WEIGHT) - overlap_weight = shortest_path_weight * parameters.kSearchSpaceOverlapFactor; + overlap_weight = to_alias(from_alias(shortest_path_weight) * + parameters.kSearchSpaceOverlapFactor); // Termination criteria - when we have a shortest path this will guarantee for our overlap. const bool keep_going = forward_heap_min + reverse_heap_min < overlap_weight; @@ -820,8 +825,10 @@ InternalManyRoutesResult alternativePathSearch(SearchEngineData &sear NodeID shortest_path_via = shortest_path_via_it->node; EdgeWeight shortest_path_weight = shortest_path_via_it->weight; - const double duration_estimation = shortest_path_weight / facade.GetWeightMultiplier(); - parameters.kAtMostLongerBy = getLongerByFactorBasedOnDuration(duration_estimation); + const double duration_estimation = + from_alias(shortest_path_weight) / facade.GetWeightMultiplier(); + parameters.kAtMostLongerBy = + getLongerByFactorBasedOnDuration(to_alias(duration_estimation)); // Filters via candidate nodes with heuristics diff --git a/src/engine/routing_algorithms/many_to_many_ch.cpp b/src/engine/routing_algorithms/many_to_many_ch.cpp index f203ebc1d..28e15dfd6 100644 --- a/src/engine/routing_algorithms/many_to_many_ch.cpp +++ b/src/engine/routing_algorithms/many_to_many_ch.cpp @@ -24,16 +24,16 @@ inline bool addLoopWeight(const DataFacade &facade, EdgeDuration &duration, EdgeDistance &distance) { // Special case for CH when contractor creates a loop edge node->node - BOOST_ASSERT(weight < 0); + BOOST_ASSERT(weight < EdgeWeight{0}); - const auto loop_weight = ch::getLoopWeight(facade, node); + const auto loop_weight = ch::getLoopMetric(facade, node); if (std::get<0>(loop_weight) != INVALID_EDGE_WEIGHT) { const auto new_weight_with_loop = weight + std::get<0>(loop_weight); - if (new_weight_with_loop >= 0) + if (new_weight_with_loop >= EdgeWeight{0}) { weight = new_weight_with_loop; - auto result = ch::getLoopWeight(facade, node); + auto result = ch::getLoopMetric(facade, node); duration += std::get<0>(result); distance += std::get<1>(result); return true; @@ -67,9 +67,9 @@ void relaxOutgoingEdges( const auto edge_duration = data.duration; const auto edge_distance = data.distance; - BOOST_ASSERT_MSG(edge_weight > 0, "edge_weight invalid"); + BOOST_ASSERT_MSG(edge_weight > EdgeWeight{0}, "edge_weight invalid"); const auto to_weight = heapNode.weight + edge_weight; - const auto to_duration = heapNode.data.duration + edge_duration; + const auto to_duration = heapNode.data.duration + to_alias(edge_duration); const auto to_distance = heapNode.data.distance + edge_distance; const auto toHeapNode = query_heap.GetHeapNodeIfWasInserted(to); @@ -120,7 +120,7 @@ void forwardRoutingStep(const DataFacade &facade, auto ¤t_weight = weights_table[row_index * number_of_targets + column_index]; - EdgeDistance nulldistance = 0; + EdgeDistance nulldistance = {0}; auto ¤t_duration = durations_table[row_index * number_of_targets + column_index]; auto ¤t_distance = @@ -132,7 +132,7 @@ void forwardRoutingStep(const DataFacade &facade, auto new_duration = heapNode.data.duration + target_duration; auto new_distance = heapNode.data.distance + target_distance; - if (new_weight < 0) + if (new_weight < EdgeWeight{0}) { if (addLoopWeight(facade, heapNode.node, new_weight, new_duration, new_distance)) { diff --git a/src/engine/routing_algorithms/many_to_many_mld.cpp b/src/engine/routing_algorithms/many_to_many_mld.cpp index 2404e9ddd..b206e5de7 100644 --- a/src/engine/routing_algorithms/many_to_many_mld.cpp +++ b/src/engine/routing_algorithms/many_to_many_mld.cpp @@ -62,10 +62,13 @@ void relaxBorderEdges(const DataFacade &facade, const auto node_weight = facade.GetNodeWeight(node_id); const auto node_duration = facade.GetNodeDuration(node_id); const auto node_distance = facade.GetNodeDistance(node_id); - const auto turn_weight = node_weight + facade.GetWeightPenaltyForEdgeID(turn_id); - const auto turn_duration = node_duration + facade.GetDurationPenaltyForEdgeID(turn_id); + const auto turn_weight = + node_weight + alias_cast(facade.GetWeightPenaltyForEdgeID(turn_id)); + const auto turn_duration = + node_duration + + alias_cast(facade.GetDurationPenaltyForEdgeID(turn_id)); - BOOST_ASSERT_MSG(node_weight + turn_weight > 0, "edge weight is invalid"); + BOOST_ASSERT_MSG(node_weight + turn_weight > EdgeWeight{0}, "edge weight is invalid"); const auto to_weight = weight + turn_weight; const auto to_duration = duration + turn_duration; const auto to_distance = distance + node_distance; @@ -259,17 +262,17 @@ oneToManySearch(SearchEngineData &engine_working_data, target_nodes_index.insert( {phantom_node.forward_segment_id.id, std::make_tuple(index, - -phantom_node.GetForwardWeightPlusOffset(), - -phantom_node.GetForwardDuration(), - -phantom_node.GetForwardDistance())}); + EdgeWeight{0} - phantom_node.GetForwardWeightPlusOffset(), + EdgeDuration{0} - phantom_node.GetForwardDuration(), + EdgeDistance{0} - phantom_node.GetForwardDistance())}); if (phantom_node.IsValidReverseSource()) target_nodes_index.insert( {phantom_node.reverse_segment_id.id, std::make_tuple(index, - -phantom_node.GetReverseWeightPlusOffset(), - -phantom_node.GetReverseDuration(), - -phantom_node.GetReverseDistance())}); + EdgeWeight{0} - phantom_node.GetReverseWeightPlusOffset(), + EdgeDuration{0} - phantom_node.GetReverseDuration(), + EdgeDistance{0} - phantom_node.GetReverseDistance())}); } } } @@ -292,12 +295,12 @@ oneToManySearch(SearchEngineData &engine_working_data, std::tie(index, target_weight, target_duration, target_distance) = it->second; const auto path_weight = weight + target_weight; - if (path_weight >= 0) + if (path_weight >= EdgeWeight{0}) { const auto path_duration = duration + target_duration; const auto path_distance = distance + target_distance; - EdgeDistance nulldistance = 0; + EdgeDistance nulldistance = {0}; auto ¤t_distance = distances_table.empty() ? nulldistance : distances_table[index]; @@ -350,17 +353,17 @@ oneToManySearch(SearchEngineData &engine_working_data, if (phantom_node.IsValidForwardSource()) { insert_node(phantom_node.forward_segment_id.id, - -phantom_node.GetForwardWeightPlusOffset(), - -phantom_node.GetForwardDuration(), - -phantom_node.GetForwardDistance()); + EdgeWeight{0} - phantom_node.GetForwardWeightPlusOffset(), + EdgeDuration{0} - phantom_node.GetForwardDuration(), + EdgeDistance{0} - phantom_node.GetForwardDistance()); } if (phantom_node.IsValidReverseSource()) { insert_node(phantom_node.reverse_segment_id.id, - -phantom_node.GetReverseWeightPlusOffset(), - -phantom_node.GetReverseDuration(), - -phantom_node.GetReverseDistance()); + EdgeWeight{0} - phantom_node.GetReverseWeightPlusOffset(), + EdgeDuration{0} - phantom_node.GetReverseDuration(), + EdgeDistance{0} - phantom_node.GetReverseDistance()); } } else if (DIRECTION == REVERSE_DIRECTION) @@ -444,7 +447,7 @@ void forwardRoutingStep(const DataFacade &facade, auto ¤t_weight = weights_table[location]; auto ¤t_duration = durations_table[location]; - EdgeDistance nulldistance = 0; + EdgeDistance nulldistance = {0}; auto ¤t_distance = distances_table.empty() ? nulldistance : distances_table[location]; // Check if new weight is better @@ -452,8 +455,9 @@ void forwardRoutingStep(const DataFacade &facade, auto new_duration = heapNode.data.duration + target_duration; auto new_distance = heapNode.data.distance + target_distance; - if (new_weight >= 0 && std::tie(new_weight, new_duration, new_distance) < - std::tie(current_weight, current_duration, current_distance)) + if (new_weight >= EdgeWeight{0} && + std::tie(new_weight, new_duration, new_distance) < + std::tie(current_weight, current_duration, current_distance)) { current_weight = new_weight; current_duration = new_duration; diff --git a/src/engine/routing_algorithms/map_matching.cpp b/src/engine/routing_algorithms/map_matching.cpp index f5fbea093..21519900b 100644 --- a/src/engine/routing_algorithms/map_matching.cpp +++ b/src/engine/routing_algorithms/map_matching.cpp @@ -217,8 +217,8 @@ SubMatchingList mapMatching(SearchEngineData &engine_working_data, const auto haversine_distance = util::coordinate_calculation::greatCircleDistance( prev_coordinate, current_coordinate); // assumes minumum of 4 m/s - const EdgeWeight weight_upper_bound = - ((haversine_distance + max_distance_delta) / 4.) * facade.GetWeightMultiplier(); + const EdgeWeight weight_upper_bound = to_alias( + ((haversine_distance + max_distance_delta) / 4.) * facade.GetWeightMultiplier()); // compute d_t for this timestamp and the next one for (const auto s : util::irange(0UL, prev_viterbi.size())) diff --git a/src/engine/routing_algorithms/routing_base_ch.cpp b/src/engine/routing_algorithms/routing_base_ch.cpp index e64278b72..799661897 100644 --- a/src/engine/routing_algorithms/routing_base_ch.cpp +++ b/src/engine/routing_algorithms/routing_base_ch.cpp @@ -109,10 +109,10 @@ void search(SearchEngineData & /*engine_working_data*/, weight = weight_upper_bound; // get offset to account for offsets on phantom nodes on compressed edges - const auto min_edge_offset = std::min(0, forward_heap.MinKey()); - BOOST_ASSERT(min_edge_offset <= 0); + const auto min_edge_offset = std::min({0}, forward_heap.MinKey()); + BOOST_ASSERT(min_edge_offset <= EdgeWeight{0}); // we only every insert negative offsets for nodes in the forward heap - BOOST_ASSERT(reverse_heap.MinKey() >= 0); + BOOST_ASSERT(reverse_heap.MinKey() >= EdgeWeight{0}); // run two-Target Dijkstra routing step. while (0 < (forward_heap.Size() + reverse_heap.Size())) diff --git a/src/engine/routing_algorithms/tile_turns.cpp b/src/engine/routing_algorithms/tile_turns.cpp index d8d28523d..f7a65d46b 100644 --- a/src/engine/routing_algorithms/tile_turns.cpp +++ b/src/engine/routing_algorithms/tile_turns.cpp @@ -182,8 +182,8 @@ std::vector generateTurns(const datafacade &facade, all_turn_data.push_back(TurnData{coord_via, angle_in, turn_angle, - turn_weight, - turn_duration, + alias_cast(turn_weight), + alias_cast(turn_duration), turn_instruction}); } } diff --git a/src/extractor/compressed_edge_container.cpp b/src/extractor/compressed_edge_container.cpp index 7510f85b0..0ed876f51 100644 --- a/src/extractor/compressed_edge_container.cpp +++ b/src/extractor/compressed_edge_container.cpp @@ -74,24 +74,26 @@ unsigned CompressedEdgeContainer::GetZippedPositionForReverseID(const EdgeID edg return map_iterator->second; } -SegmentWeight CompressedEdgeContainer::ClipWeight(const SegmentWeight weight) +SegmentWeight CompressedEdgeContainer::ClipWeight(const EdgeWeight weight) { - if (weight >= INVALID_SEGMENT_WEIGHT) + SegmentWeight seg_weight = alias_cast(weight); + if (seg_weight >= INVALID_SEGMENT_WEIGHT) { clipped_weights++; return MAX_SEGMENT_WEIGHT; } - return weight; + return seg_weight; } -SegmentDuration CompressedEdgeContainer::ClipDuration(const SegmentDuration duration) +SegmentDuration CompressedEdgeContainer::ClipDuration(const EdgeDuration duration) { - if (duration >= INVALID_SEGMENT_DURATION) + SegmentDuration seg_duration = alias_cast(duration); + if (seg_duration >= INVALID_SEGMENT_DURATION) { clipped_weights++; return MAX_SEGMENT_DURATION; } - return duration; + return seg_duration; } // Adds info for a compressed edge to the container. edge_id_2 @@ -119,8 +121,8 @@ void CompressedEdgeContainer::CompressEdge(const EdgeID edge_id_1, BOOST_ASSERT(SPECIAL_EDGEID != edge_id_2); BOOST_ASSERT(SPECIAL_NODEID != via_node_id); BOOST_ASSERT(SPECIAL_NODEID != target_node_id); - BOOST_ASSERT(INVALID_SEGMENT_WEIGHT != weight1); - BOOST_ASSERT(INVALID_SEGMENT_WEIGHT != weight2); + BOOST_ASSERT(INVALID_EDGE_WEIGHT != weight1); + BOOST_ASSERT(INVALID_EDGE_WEIGHT != weight2); // append list of removed edge_id plus via node to surviving edge id: // 0) { util::Log(logWARNING) << "Clipped " << clipped_weights << " segment weights to " - << (INVALID_SEGMENT_WEIGHT - 1); + << MAX_SEGMENT_WEIGHT; } if (clipped_durations > 0) { util::Log(logWARNING) << "Clipped " << clipped_durations << " segment durations to " - << (INVALID_SEGMENT_DURATION - 1); + << MAX_SEGMENT_DURATION; } util::Log() << "Geometry successfully removed:" diff --git a/src/extractor/edge_based_graph_factory.cpp b/src/extractor/edge_based_graph_factory.cpp index a0a8561b7..30650b4a4 100644 --- a/src/extractor/edge_based_graph_factory.cpp +++ b/src/extractor/edge_based_graph_factory.cpp @@ -94,7 +94,7 @@ void EdgeBasedGraphFactory::GetEdgeBasedNodeWeights(std::vector &out } void EdgeBasedGraphFactory::GetEdgeBasedNodeDurations( - std::vector &output_node_durations) + std::vector &output_node_durations) { using std::swap; // Koenig swap swap(m_edge_based_node_durations, output_node_durations); @@ -147,7 +147,8 @@ NBGToEBG EdgeBasedGraphFactory::InsertEdgeBasedNode(const NodeID node_u, const N // * in other cases node weights must be masked with 0x7fffffff to clear MSB if (nbe_to_ebn_mapping[edge_id_1] != SPECIAL_NODEID && nbe_to_ebn_mapping[edge_id_2] == SPECIAL_NODEID) - m_edge_based_node_weights[nbe_to_ebn_mapping[edge_id_1]] |= 0x80000000; + m_edge_based_node_weights[nbe_to_ebn_mapping[edge_id_1]] |= + EdgeWeight{static_cast(0x80000000)}; BOOST_ASSERT(m_compressed_edge_container.HasEntryForID(edge_id_1) == m_compressed_edge_container.HasEntryForID(edge_id_2)); @@ -400,7 +401,7 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const WayRestrictionMap &way_re segregated_edges.count(eid) > 0; const auto ebn_weight = m_edge_based_node_weights[nbe_to_ebn_mapping[eid]]; - BOOST_ASSERT((ebn_weight & 0x7fffffff) == edge_data.weight); + BOOST_ASSERT((ebn_weight & EdgeWeight{0x7fffffff}) == edge_data.weight); m_edge_based_node_weights.push_back(ebn_weight); m_edge_based_node_durations.push_back( m_edge_based_node_durations[nbe_to_ebn_mapping[eid]]); @@ -663,7 +664,7 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( edge_data1.flags.highway_turn_classification, edge_data1.flags.access_turn_classification, ((double)intersection::findEdgeLength(edge_geometries, node_based_edge_from) / - edge_data1.duration) * + from_alias(edge_data1.duration)) * 36, edge_data1.flags.road_classification.GetPriority(), // target info @@ -675,7 +676,7 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( edge_data2.flags.highway_turn_classification, edge_data2.flags.access_turn_classification, ((double)intersection::findEdgeLength(edge_geometries, node_based_edge_to) / - edge_data2.duration) * + from_alias(edge_data2.duration)) * 36, edge_data2.flags.road_classification.GetPriority(), // connected roads @@ -686,17 +687,18 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( // turn penalties are limited to [-2^15, 2^15) which roughly translates to 54 minutes // and fits signed 16bit deci-seconds - auto weight_penalty = - boost::numeric_cast(extracted_turn.weight * weight_multiplier); - auto duration_penalty = boost::numeric_cast(extracted_turn.duration * 10.); + auto weight_penalty = TurnPenalty{boost::numeric_cast( + extracted_turn.weight * weight_multiplier)}; + auto duration_penalty = TurnPenalty{ + boost::numeric_cast(extracted_turn.duration * 10.)}; BOOST_ASSERT(SPECIAL_NODEID != nbe_to_ebn_mapping[node_based_edge_from]); BOOST_ASSERT(SPECIAL_NODEID != nbe_to_ebn_mapping[node_based_edge_to]); // auto turn_id = m_edge_based_edge_list.size(); - auto weight = boost::numeric_cast(edge_data1.weight + weight_penalty); - auto duration = boost::numeric_cast(edge_data1.duration + duration_penalty); - auto distance = boost::numeric_cast(edge_data1.distance); + auto weight = edge_data1.weight + alias_cast(weight_penalty); + auto duration = edge_data1.duration + alias_cast(duration_penalty); + auto distance = edge_data1.distance; EdgeBasedEdge edge_based_edge = {edge_based_node_from, edge_based_node_to, @@ -860,7 +862,7 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( edge_data.flags.access_turn_classification, ((double)intersection::findEdgeLength(edge_geometries, connected_edge.eid) / - edge_data.duration) * + from_alias(edge_data.duration)) * 36, edge_data.flags.road_classification.GetPriority(), is_incoming, diff --git a/src/extractor/extraction_containers.cpp b/src/extractor/extraction_containers.cpp index 553968d6f..7908cc798 100644 --- a/src/extractor/extraction_containers.cpp +++ b/src/extractor/extraction_containers.cpp @@ -712,9 +712,11 @@ void ExtractionContainers::PrepareEdges(ScriptingEnvironment &scripting_environm scripting_environment.ProcessSegment(segment); auto &edge = edge_iterator->result; - edge.weight = std::max(1, std::round(segment.weight * weight_multiplier)); - edge.duration = std::max(1, std::round(segment.duration * 10.)); - edge.distance = static_cast(accurate_distance); + edge.weight = std::max( + {1}, to_alias(std::round(segment.weight * weight_multiplier))); + edge.duration = std::max( + {1}, to_alias(std::round(segment.duration * 10.))); + edge.distance = to_alias(accurate_distance); // assign new node id const auto node_id = mapExternalToInternalNodeID( @@ -779,10 +781,8 @@ void ExtractionContainers::PrepareEdges(ScriptingEnvironment &scripting_environm NodeID source = all_edges_list[i].result.source; NodeID target = all_edges_list[i].result.target; - auto min_forward = std::make_pair(std::numeric_limits::max(), - std::numeric_limits::max()); - auto min_backward = std::make_pair(std::numeric_limits::max(), - std::numeric_limits::max()); + auto min_forward = std::make_pair(MAXIMAL_EDGE_WEIGHT, MAXIMAL_EDGE_DURATION); + auto min_backward = std::make_pair(MAXIMAL_EDGE_WEIGHT, MAXIMAL_EDGE_DURATION); std::size_t min_forward_idx = std::numeric_limits::max(); std::size_t min_backward_idx = std::numeric_limits::max(); diff --git a/src/extractor/extractor.cpp b/src/extractor/extractor.cpp index 687b35b53..5b444d470 100644 --- a/src/extractor/extractor.cpp +++ b/src/extractor/extractor.cpp @@ -668,7 +668,7 @@ void Extractor::FindComponents(unsigned number_of_edge_based_nodes, for (const auto &edge : input_edge_list) { - BOOST_ASSERT_MSG(static_cast(std::max(edge.data.weight, 1)) > 0, + BOOST_ASSERT_MSG((std::max(edge.data.weight, EdgeWeight{1})) > EdgeWeight{0}, "edge distance < 1"); BOOST_ASSERT(edge.source < number_of_edge_based_nodes); BOOST_ASSERT(edge.target < number_of_edge_based_nodes); diff --git a/src/extractor/extractor_callbacks.cpp b/src/extractor/extractor_callbacks.cpp index 7cecd763e..51051d768 100644 --- a/src/extractor/extractor_callbacks.cpp +++ b/src/extractor/extractor_callbacks.cpp @@ -425,10 +425,10 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti NodeBasedEdgeWithOSM edge = { OSMNodeID{static_cast(first_node.ref())}, OSMNodeID{static_cast(last_node.ref())}, - 0, // weight - 0, // duration - 0, // distance - {}, // geometry id + {0}, // weight + {0}, // duration + {0}, // distance + {}, // geometry id static_cast(annotation_data_id), {true, in_backward_direction && !split_edge, @@ -459,10 +459,10 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti NodeBasedEdgeWithOSM edge = { OSMNodeID{static_cast(first_node.ref())}, OSMNodeID{static_cast(last_node.ref())}, - 0, // weight - 0, // duration - 0, // distance - {}, // geometry id + {0}, // weight + {0}, // duration + {0}, // distance + {}, // geometry id static_cast(annotation_data_id), {false, true, diff --git a/src/extractor/graph_compressor.cpp b/src/extractor/graph_compressor.cpp index 517d3e8d7..ca0bbac11 100644 --- a/src/extractor/graph_compressor.cpp +++ b/src/extractor/graph_compressor.cpp @@ -252,16 +252,18 @@ void GraphCompressor::Compress(const std::unordered_set &barrier_nodes, roads_on_the_left); scripting_environment.ProcessTurn(extraction_turn); - auto update_direction_penalty = - [&extraction_turn, weight_multiplier](bool signal, - EdgeDuration &duration_penalty, - EdgeWeight &weight_penalty) { - if (signal) - { - duration_penalty = extraction_turn.duration * SECOND_TO_DECISECOND; - weight_penalty = extraction_turn.weight * weight_multiplier; - } - }; + auto update_direction_penalty = [&extraction_turn, weight_multiplier]( + bool signal, + EdgeDuration &duration_penalty, + EdgeWeight &weight_penalty) { + if (signal) + { + duration_penalty = to_alias(extraction_turn.duration * + SECOND_TO_DECISECOND); + weight_penalty = + to_alias(extraction_turn.weight * weight_multiplier); + } + }; update_direction_penalty(has_forward_signal, forward_node_duration_penalty, @@ -277,8 +279,8 @@ void GraphCompressor::Compress(const std::unordered_set &barrier_nodes, const auto forward_duration1 = fwd_edge_data1.duration; const auto forward_duration2 = fwd_edge_data2.duration; - BOOST_ASSERT(0 != forward_weight1); - BOOST_ASSERT(0 != forward_weight2); + BOOST_ASSERT(EdgeWeight{0} != forward_weight1); + BOOST_ASSERT(EdgeWeight{0} != forward_weight2); const auto reverse_weight1 = rev_edge_data1.weight; const auto reverse_weight2 = rev_edge_data2.weight; @@ -297,8 +299,8 @@ void GraphCompressor::Compress(const std::unordered_set &barrier_nodes, BOOST_ASSERT(forward_distance2 == reverse_distance1); #endif - BOOST_ASSERT(0 != reverse_weight1); - BOOST_ASSERT(0 != reverse_weight2); + BOOST_ASSERT(EdgeWeight{0} != reverse_weight1); + BOOST_ASSERT(EdgeWeight{0} != reverse_weight2); auto apply_e2_to_e1 = [&graph](EdgeID edge1, EdgeID edge2, @@ -346,8 +348,8 @@ void GraphCompressor::Compress(const std::unordered_set &barrier_nodes, if (weight_penalty == INVALID_EDGE_WEIGHT && other_weight_penalty != INVALID_EDGE_WEIGHT) { - weight_penalty = 0; - duration_penalty = 0; + weight_penalty = {0}; + duration_penalty = {0}; } }; set_dummy_penalty(forward_node_weight_penalty, diff --git a/src/extractor/scripting_environment_lua.cpp b/src/extractor/scripting_environment_lua.cpp index dca80fc44..9f54a91be 100644 --- a/src/extractor/scripting_environment_lua.cpp +++ b/src/extractor/scripting_environment_lua.cpp @@ -549,7 +549,7 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context) "precision", COORDINATE_PRECISION, "max_turn_weight", - std::numeric_limits::max()); + std::numeric_limits::max()); // call initialize function sol::function setup_function = function_table.value()["setup"]; diff --git a/src/updater/updater.cpp b/src/updater/updater.cpp index 9301c804b..2ae0354c3 100644 --- a/src/updater/updater.cpp +++ b/src/updater/updater.cpp @@ -84,7 +84,7 @@ inline SegmentDuration convertToDuration(double speed_in_kmh, double distance_in const auto speed_in_ms = speed_in_kmh / 3.6; const auto duration = distance_in_meters / speed_in_ms; auto segment_duration = std::max( - 1, boost::numeric_cast(std::round(duration * 10.))); + {1}, {boost::numeric_cast(std::round(duration * 10.))}); if (segment_duration >= INVALID_SEGMENT_DURATION) { util::Log(logWARNING) << "Clamping segment duration " << segment_duration << " to " @@ -114,7 +114,8 @@ void checkWeightsConsistency( { auto range = segment_data.GetForwardWeights(geometry_id.id); // NOLINTNEXTLINE(bugprone-fold-init-type) - EdgeWeight weight = std::accumulate(range.begin(), range.end(), EdgeWeight{0}); + EdgeWeight weight = alias_cast( + std::accumulate(range.begin(), range.end(), SegmentWeight{0})); if (weight > edge.data.weight) { util::Log(logWARNING) << geometry_id.id << " vs " << edge.data.turn_id << ":" @@ -125,7 +126,8 @@ void checkWeightsConsistency( { auto range = segment_data.GetReverseWeights(geometry_id.id); // NOLINTNEXTLINE(bugprone-fold-init-type) - EdgeWeight weight = std::accumulate(range.begin(), range.end(), EdgeWeight{0}); + EdgeWeight weight = alias_cast( + std::accumulate(range.begin(), range.end(), SegmentWeight{0})); if (weight > edge.data.weight) { util::Log(logWARNING) << geometry_id.id << " vs " << edge.data.turn_id << ":" @@ -185,8 +187,10 @@ updateSegmentData(const UpdaterConfig &config, const auto weight_multiplier = profile_properties.GetWeightMultiplier(); const auto weight = distance_in_meters / rate; - auto segment_weight = std::max( - 1, boost::numeric_cast(std::round(weight * weight_multiplier))); + auto segment_weight = + std::max({1}, + {boost::numeric_cast( + std::round(weight * weight_multiplier))}); if (segment_weight >= INVALID_SEGMENT_WEIGHT) { util::Log(logWARNING) << "Clamping segment weight " << segment_weight << " to " @@ -356,18 +360,21 @@ updateSegmentData(const UpdaterConfig &config, if (new_fwd_datasources_range[segment_offset] == LUA_SOURCE) continue; - if (old_fwd_durations_range[segment_offset] >= - (new_fwd_durations_range[segment_offset] * config.log_edge_updates_factor)) + SegmentDuration old_fwd_duration = old_fwd_durations_range[segment_offset]; + SegmentDuration new_fwd_duration = new_fwd_durations_range[segment_offset]; + + if (old_fwd_duration >= + to_alias(from_alias(new_fwd_duration) * + config.log_edge_updates_factor)) { auto from = osm_node_ids[nodes_range[segment_offset]]; auto to = osm_node_ids[nodes_range[segment_offset + 1]]; - util::Log(logWARNING) - << "[weight updates] Edge weight update from " - << old_fwd_durations_range[segment_offset] / 10. << "s to " - << new_fwd_durations_range[segment_offset] / 10. << "s Segment: " << from - << "," << to << " based on " - << config.segment_speed_lookup_paths - [new_fwd_datasources_range[segment_offset] - 1]; + util::Log(logWARNING) << "[weight updates] Edge weight update from " + << from_alias(old_fwd_duration) / 10. << "s to " + << from_alias(new_fwd_duration) / 10. + << "s Segment: " << from << "," << to << " based on " + << config.segment_speed_lookup_paths + [new_fwd_datasources_range[segment_offset] - 1]; } } @@ -377,18 +384,21 @@ updateSegmentData(const UpdaterConfig &config, if (new_rev_datasources_range[segment_offset] == LUA_SOURCE) continue; - if (old_rev_durations_range[segment_offset] >= - (new_rev_durations_range[segment_offset] * config.log_edge_updates_factor)) + SegmentDuration old_rev_duration = old_rev_durations_range[segment_offset]; + SegmentDuration new_rev_duration = new_rev_durations_range[segment_offset]; + + if (old_rev_duration >= + to_alias(from_alias(new_rev_duration) * + config.log_edge_updates_factor)) { auto from = osm_node_ids[nodes_range[segment_offset + 1]]; auto to = osm_node_ids[nodes_range[segment_offset]]; - util::Log(logWARNING) - << "[weight updates] Edge weight update from " - << old_rev_durations_range[segment_offset] / 10. << "s to " - << new_rev_durations_range[segment_offset] / 10. << "s Segment: " << from - << "," << to << " based on " - << config.segment_speed_lookup_paths - [new_rev_datasources_range[segment_offset] - 1]; + util::Log(logWARNING) << "[weight updates] Edge weight update from " + << from_alias(old_rev_duration) / 10. << "s to " + << from_alias(new_rev_duration) / 10. + << "s Segment: " << from << "," << to << " based on " + << config.segment_speed_lookup_paths + [new_rev_datasources_range[segment_offset] - 1]; } } } @@ -455,18 +465,20 @@ updateTurnPenalties(const UpdaterConfig &config, if (auto value = turn_penalty_lookup(osm_turn)) { - turn_duration_penalty = - boost::numeric_cast(std::round(value->duration * 10.)); - turn_weight_penalty = boost::numeric_cast(std::round( - std::isfinite(value->weight) ? value->weight * weight_multiplier - : turn_duration_penalty * weight_multiplier / 10.)); + turn_duration_penalty = { + boost::numeric_cast(std::round(value->duration * 10.))}; + turn_weight_penalty = {boost::numeric_cast( + std::round(std::isfinite(value->weight) + ? value->weight * weight_multiplier + : from_alias(turn_duration_penalty) * + weight_multiplier / 10.))}; turn_duration_penalties[edge_index] = turn_duration_penalty; turn_weight_penalties[edge_index] = turn_weight_penalty; updated_turns.push_back(edge_index); } - if (turn_weight_penalty < 0) + if (turn_weight_penalty < TurnPenalty{0}) { util::Log(logWARNING) << "Negative turn penalty at " << osm_turn.from << ", " << osm_turn.via << ", " << osm_turn.to << ": turn penalty " @@ -674,42 +686,44 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e return std::tie(lhs.id, lhs.forward) < std::tie(rhs.id, rhs.forward); }); - using WeightAndDuration = std::tuple; + using WeightAndDuration = std::tuple; const auto compute_new_weight_and_duration = [&](const GeometryID geometry_id) -> WeightAndDuration { - EdgeWeight new_weight = 0; - EdgeWeight new_duration = 0; + EdgeWeight new_weight = {0}; + EdgeDuration new_duration = {0}; if (geometry_id.forward) { const auto weights = segment_data.GetForwardWeights(geometry_id.id); - for (const auto weight : weights) + for (const SegmentWeight weight : weights) { if (weight == INVALID_SEGMENT_WEIGHT) { new_weight = INVALID_EDGE_WEIGHT; break; } - new_weight += weight; + new_weight += alias_cast(weight); } const auto durations = segment_data.GetForwardDurations(geometry_id.id); // NOLINTNEXTLINE(bugprone-fold-init-type) - new_duration = std::accumulate(durations.begin(), durations.end(), EdgeWeight{0}); + new_duration = alias_cast( + std::accumulate(durations.begin(), durations.end(), SegmentDuration{0})); } else { const auto weights = segment_data.GetReverseWeights(geometry_id.id); - for (const auto weight : weights) + for (const SegmentWeight weight : weights) { if (weight == INVALID_SEGMENT_WEIGHT) { new_weight = INVALID_EDGE_WEIGHT; break; } - new_weight += weight; + new_weight += alias_cast(SegmentWeight(weight)); } const auto durations = segment_data.GetReverseDurations(geometry_id.id); // NOLINTNEXTLINE(bugprone-fold-init-type) - new_duration = std::accumulate(durations.begin(), durations.end(), EdgeWeight{0}); + new_duration = alias_cast( + std::accumulate(durations.begin(), durations.end(), SegmentDuration{0})); } return std::make_tuple(new_weight, new_duration); }; @@ -740,7 +754,7 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e // Find a segment with zero speed and simultaneously compute the new edge // weight EdgeWeight new_weight; - EdgeWeight new_duration; + EdgeDuration new_duration; std::tie(new_weight, new_duration) = accumulated_segment_data[updated_iter - updated_segments.begin()]; @@ -749,7 +763,9 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e // but we should always assign the same value here. BOOST_ASSERT(edge.source < node_weights.size()); node_weights[edge.source] = - node_weights[edge.source] & 0x80000000 ? new_weight | 0x80000000 : new_weight; + from_alias(node_weights[edge.source]) & 0x80000000 + ? new_weight | EdgeWeight{static_cast(0x80000000)} + : new_weight; node_durations[edge.source] = new_duration; // We found a zero-speed edge, so we'll skip this whole edge-based-edge @@ -765,15 +781,15 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e auto turn_weight_penalty = turn_weight_penalties[edge.data.turn_id]; auto turn_duration_penalty = turn_duration_penalties[edge.data.turn_id]; const auto num_nodes = segment_data.GetForwardGeometry(geometry_id.id).size(); - const auto weight_min_value = static_cast(num_nodes); - if (turn_weight_penalty + new_weight < weight_min_value) + const auto weight_min_value = to_alias(num_nodes); + if (alias_cast(turn_weight_penalty) + new_weight < weight_min_value) { - if (turn_weight_penalty < 0) + if (turn_weight_penalty < TurnPenalty{0}) { util::Log(logWARNING) << "turn penalty " << turn_weight_penalty << " is too negative: clamping turn weight to " << weight_min_value; - turn_weight_penalty = weight_min_value - new_weight; + turn_weight_penalty = alias_cast(weight_min_value - new_weight); turn_weight_penalties[edge.data.turn_id] = turn_weight_penalty; } else @@ -783,8 +799,9 @@ Updater::LoadAndUpdateEdgeExpandedGraph(std::vector &e } // Update edge weight - edge.data.weight = new_weight + turn_weight_penalty; - edge.data.duration = new_duration + turn_duration_penalty; + edge.data.weight = new_weight + alias_cast(turn_weight_penalty); + edge.data.duration = from_alias( + new_duration + alias_cast(turn_duration_penalty)); } }; diff --git a/unit_tests/contractor/contracted_edge_container.cpp b/unit_tests/contractor/contracted_edge_container.cpp index 50d6480f8..e6c228abe 100644 --- a/unit_tests/contractor/contracted_edge_container.cpp +++ b/unit_tests/contractor/contracted_edge_container.cpp @@ -37,31 +37,31 @@ BOOST_AUTO_TEST_CASE(merge_edge_of_multiple_graph) ContractedEdgeContainer container; std::vector edges; - edges.push_back(QueryEdge{0, 1, {1, false, 3, 3, 6, true, false}}); - edges.push_back(QueryEdge{1, 2, {2, false, 3, 3, 6, true, false}}); - edges.push_back(QueryEdge{2, 0, {3, false, 3, 3, 6, false, true}}); - edges.push_back(QueryEdge{2, 1, {4, false, 3, 3, 6, false, true}}); + edges.push_back(QueryEdge{0, 1, {1, false, {3}, {3}, {6}, true, false}}); + edges.push_back(QueryEdge{1, 2, {2, false, {3}, {3}, {6}, true, false}}); + edges.push_back(QueryEdge{2, 0, {3, false, {3}, {3}, {6}, false, true}}); + edges.push_back(QueryEdge{2, 1, {4, false, {3}, {3}, {6}, false, true}}); container.Insert(edges); edges.clear(); - edges.push_back(QueryEdge{0, 1, {1, false, 3, 3, 6, true, false}}); - edges.push_back(QueryEdge{1, 2, {2, false, 3, 3, 6, true, false}}); - edges.push_back(QueryEdge{2, 0, {3, false, 12, 12, 24, false, true}}); - edges.push_back(QueryEdge{2, 1, {4, false, 12, 12, 24, false, true}}); + edges.push_back(QueryEdge{0, 1, {1, false, {3}, {3}, {6}, true, false}}); + edges.push_back(QueryEdge{1, 2, {2, false, {3}, {3}, {6}, true, false}}); + edges.push_back(QueryEdge{2, 0, {3, false, {12}, {12}, {24}, false, true}}); + edges.push_back(QueryEdge{2, 1, {4, false, {12}, {12}, {24}, false, true}}); container.Merge(edges); edges.clear(); - edges.push_back(QueryEdge{1, 4, {5, false, 3, 3, 6, true, false}}); + edges.push_back(QueryEdge{1, 4, {5, false, {3}, {3}, {6}, true, false}}); container.Merge(edges); std::vector reference_edges; - reference_edges.push_back(QueryEdge{0, 1, {1, false, 3, 3, 6, true, false}}); - reference_edges.push_back(QueryEdge{1, 2, {2, false, 3, 3, 6, true, false}}); - reference_edges.push_back(QueryEdge{1, 4, {5, false, 3, 3, 6, true, false}}); - reference_edges.push_back(QueryEdge{2, 0, {3, false, 3, 3, 6, false, true}}); - reference_edges.push_back(QueryEdge{2, 0, {3, false, 12, 12, 24, false, true}}); - reference_edges.push_back(QueryEdge{2, 1, {4, false, 3, 3, 6, false, true}}); - reference_edges.push_back(QueryEdge{2, 1, {4, false, 12, 12, 24, false, true}}); + reference_edges.push_back(QueryEdge{0, 1, {1, false, {3}, {3}, {6}, true, false}}); + reference_edges.push_back(QueryEdge{1, 2, {2, false, {3}, {3}, {6}, true, false}}); + reference_edges.push_back(QueryEdge{1, 4, {5, false, {3}, {3}, {6}, true, false}}); + reference_edges.push_back(QueryEdge{2, 0, {3, false, {3}, {3}, {6}, false, true}}); + reference_edges.push_back(QueryEdge{2, 0, {3, false, {12}, {12}, {24}, false, true}}); + reference_edges.push_back(QueryEdge{2, 1, {4, false, {3}, {3}, {6}, false, true}}); + reference_edges.push_back(QueryEdge{2, 1, {4, false, {12}, {12}, {24}, false, true}}); CHECK_EQUAL_COLLECTIONS(container.edges, reference_edges); auto filters = container.MakeEdgeFilters(); @@ -79,22 +79,22 @@ BOOST_AUTO_TEST_CASE(merge_edge_of_multiple_disjoint_graph) ContractedEdgeContainer container; std::vector edges; - edges.push_back(QueryEdge{0, 1, {1, false, 3, 3, 6, true, false}}); - edges.push_back(QueryEdge{1, 2, {2, false, 3, 3, 6, true, false}}); - edges.push_back(QueryEdge{2, 0, {3, false, 12, 12, 24, false, true}}); - edges.push_back(QueryEdge{2, 1, {4, false, 12, 12, 24, false, true}}); + edges.push_back(QueryEdge{0, 1, {1, false, {3}, {3}, {6}, true, false}}); + edges.push_back(QueryEdge{1, 2, {2, false, {3}, {3}, {6}, true, false}}); + edges.push_back(QueryEdge{2, 0, {3, false, {12}, {12}, {24}, false, true}}); + edges.push_back(QueryEdge{2, 1, {4, false, {12}, {12}, {24}, false, true}}); container.Merge(edges); edges.clear(); - edges.push_back(QueryEdge{1, 4, {5, false, 3, 3, 6, true, false}}); + edges.push_back(QueryEdge{1, 4, {5, false, {3}, {3}, {6}, true, false}}); container.Merge(edges); std::vector reference_edges; - reference_edges.push_back(QueryEdge{0, 1, {1, false, 3, 3, 6, true, false}}); - reference_edges.push_back(QueryEdge{1, 2, {2, false, 3, 3, 6, true, false}}); - reference_edges.push_back(QueryEdge{1, 4, {5, false, 3, 3, 6, true, false}}); - reference_edges.push_back(QueryEdge{2, 0, {3, false, 12, 12, 24, false, true}}); - reference_edges.push_back(QueryEdge{2, 1, {4, false, 12, 12, 24, false, true}}); + reference_edges.push_back(QueryEdge{0, 1, {1, false, {3}, {3}, {6}, true, false}}); + reference_edges.push_back(QueryEdge{1, 2, {2, false, {3}, {3}, {6}, true, false}}); + reference_edges.push_back(QueryEdge{1, 4, {5, false, {3}, {3}, {6}, true, false}}); + reference_edges.push_back(QueryEdge{2, 0, {3, false, {12}, {12}, {24}, false, true}}); + reference_edges.push_back(QueryEdge{2, 1, {4, false, {12}, {12}, {24}, false, true}}); CHECK_EQUAL_COLLECTIONS(container.edges, reference_edges); auto filters = container.MakeEdgeFilters(); diff --git a/unit_tests/contractor/graph_contractor.cpp b/unit_tests/contractor/graph_contractor.cpp index 81fbd28e0..d9381cf84 100644 --- a/unit_tests/contractor/graph_contractor.cpp +++ b/unit_tests/contractor/graph_contractor.cpp @@ -34,7 +34,7 @@ BOOST_AUTO_TEST_CASE(contract_graph) auto reference_graph = makeGraph(edges); auto contracted_graph = reference_graph; - std::vector core = contractGraph(contracted_graph, {1, 1, 1, 1, 1, 1}); + std::vector core = contractGraph(contracted_graph, {{1}, {1}, {1}, {1}, {1}, {1}}); // This contraction order is dependent on the priority caculation in the contractor // but deterministic for the same graph. @@ -87,7 +87,7 @@ BOOST_AUTO_TEST_CASE(contract_graph) reference_graph.DeleteEdgesTo(1, 3); reference_graph.DeleteEdgesTo(4, 3); // Insert shortcut - reference_graph.InsertEdge(4, 1, {2, 4, 1.0, 3, 0, true, true, false}); + reference_graph.InsertEdge(4, 1, {{2}, {4}, {1.0}, 3, 0, true, true, false}); /* After contracting 4: * diff --git a/unit_tests/contractor/helper.hpp b/unit_tests/contractor/helper.hpp index 85adfa1fb..27a4a8d51 100644 --- a/unit_tests/contractor/helper.hpp +++ b/unit_tests/contractor/helper.hpp @@ -27,12 +27,12 @@ inline contractor::ContractorGraph makeGraph(const std::vector &edges) start, target, contractor::ContractorEdgeData{ - weight, duration, distance, id++, 0, false, true, false}}); + {weight}, {duration}, {distance}, id++, 0, false, true, false}}); input_edges.push_back(contractor::ContractorEdge{ target, start, contractor::ContractorEdgeData{ - weight, duration, distance, id++, 0, false, false, true}}); + {weight}, {duration}, {distance}, id++, 0, false, false, true}}); } std::sort(input_edges.begin(), input_edges.end()); diff --git a/unit_tests/customizer/cell_customization.cpp b/unit_tests/customizer/cell_customization.cpp index 58a468281..a63ba4328 100644 --- a/unit_tests/customizer/cell_customization.cpp +++ b/unit_tests/customizer/cell_customization.cpp @@ -40,15 +40,15 @@ auto makeGraph(const MultiLevelPartition &mlp, const std::vector &mock edges.push_back(Edge{m.start, m.target, m.weight, - 2 * m.weight, - static_cast(1.0), + EdgeDuration{2} * alias_cast(m.weight), + EdgeDistance{1.0}, true, false}); edges.push_back(Edge{m.target, m.start, m.weight, - 2 * m.weight, - static_cast(1.0), + EdgeDuration{2} * alias_cast(m.weight), + EdgeDistance{1.0}, false, true}); } @@ -71,7 +71,7 @@ BOOST_AUTO_TEST_CASE(two_level_test) BOOST_REQUIRE_EQUAL(mlp.GetNumberOfLevels(), 2); - std::vector edges = {{0, 1, 1}, {0, 2, 1}, {2, 3, 1}, {3, 1, 1}, {3, 2, 1}}; + std::vector edges = {{0, 1, {1}}, {0, 2, {1}}, {2, 3, {1}}, {3, 1, {1}}, {3, 2, {1}}}; auto graph = makeGraph(mlp, edges); std::vector node_filter(graph.GetNumberOfNodes(), true); @@ -106,17 +106,17 @@ BOOST_AUTO_TEST_CASE(two_level_test) // cell 0 // check row source -> destination - CHECK_EQUAL_RANGE(cell_1_0.GetOutWeight(0), 1); + CHECK_EQUAL_RANGE(cell_1_0.GetOutWeight(0), EdgeWeight{1}); // check column destination -> source - CHECK_EQUAL_RANGE(cell_1_0.GetInWeight(1), 1); + CHECK_EQUAL_RANGE(cell_1_0.GetInWeight(1), EdgeWeight{1}); // cell 1 // check row source -> destination - CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(2), 0, 1); - CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(3), 1, 0); + CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(2), EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(3), EdgeWeight{1}, EdgeWeight{0}); // check column destination -> source - CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(2), 0, 1); - CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(3), 1, 0); + CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(2), EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(3), EdgeWeight{1}, EdgeWeight{0}); } BOOST_AUTO_TEST_CASE(four_levels_test) @@ -130,27 +130,27 @@ BOOST_AUTO_TEST_CASE(four_levels_test) BOOST_REQUIRE_EQUAL(mlp.GetNumberOfLevels(), 4); std::vector edges = { - {0, 1, 1}, // cell (0, 0, 0) - {0, 2, 1}, {3, 1, 1}, {3, 2, 1}, + {0, 1, {1}}, // cell (0, 0, 0) + {0, 2, {1}}, {3, 1, {1}}, {3, 2, {1}}, - {4, 5, 1}, // cell (1, 0, 0) - {4, 6, 1}, {4, 7, 1}, {5, 4, 1}, {5, 6, 1}, {5, 7, 1}, {6, 4, 1}, - {6, 5, 1}, {6, 7, 1}, {7, 4, 1}, {7, 5, 1}, {7, 6, 1}, + {4, 5, {1}}, // cell (1, 0, 0) + {4, 6, {1}}, {4, 7, {1}}, {5, 4, {1}}, {5, 6, {1}}, {5, 7, {1}}, {6, 4, {1}}, + {6, 5, {1}}, {6, 7, {1}}, {7, 4, {1}}, {7, 5, {1}}, {7, 6, {1}}, - {9, 11, 1}, // cell (2, 1, 0) - {10, 8, 1}, {11, 10, 1}, + {9, 11, {1}}, // cell (2, 1, 0) + {10, 8, {1}}, {11, 10, {1}}, - {13, 12, 10}, // cell (3, 1, 0) - {15, 14, 1}, + {13, 12, {10}}, // cell (3, 1, 0) + {15, 14, {1}}, - {2, 4, 1}, // edge between cells (0, 0, 0) -> (1, 0, 0) - {5, 12, 1}, // edge between cells (1, 0, 0) -> (3, 1, 0) - {8, 3, 1}, // edge between cells (2, 1, 0) -> (0, 0, 0) - {9, 3, 1}, // edge between cells (2, 1, 0) -> (0, 0, 0) - {12, 5, 1}, // edge between cells (3, 1, 0) -> (1, 0, 0) - {13, 7, 1}, // edge between cells (3, 1, 0) -> (1, 0, 0) - {14, 9, 1}, // edge between cells (2, 1, 0) -> (0, 0, 0) - {14, 11, 1} // edge between cells (2, 1, 0) -> (0, 0, 0) + {2, 4, {1}}, // edge between cells (0, 0, 0) -> (1, 0, 0) + {5, 12, {1}}, // edge between cells (1, 0, 0) -> (3, 1, 0) + {8, 3, {1}}, // edge between cells (2, 1, 0) -> (0, 0, 0) + {9, 3, {1}}, // edge between cells (2, 1, 0) -> (0, 0, 0) + {12, 5, {1}}, // edge between cells (3, 1, 0) -> (1, 0, 0) + {13, 7, {1}}, // edge between cells (3, 1, 0) -> (1, 0, 0) + {14, 9, {1}}, // edge between cells (2, 1, 0) -> (0, 0, 0) + {14, 11, {1}} // edge between cells (2, 1, 0) -> (0, 0, 0) }; auto graph = makeGraph(mlp, edges); @@ -238,48 +238,53 @@ BOOST_AUTO_TEST_CASE(four_levels_test) // level 1 // cell 0 - CHECK_EQUAL_RANGE(cell_1_0.GetOutWeight(3), 1); - CHECK_EQUAL_RANGE(cell_1_0.GetInWeight(2), 1); + CHECK_EQUAL_RANGE(cell_1_0.GetOutWeight(3), EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_0.GetInWeight(2), EdgeWeight{1}); // cell 1 - CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(4), 0, 1, 1); - CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(5), 1, 0, 1); - CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(7), 1, 1, 0); - CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(4), 0, 1, 1); - CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(5), 1, 0, 1); - CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(7), 1, 1, 0); + CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(4), EdgeWeight{0}, EdgeWeight{1}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(5), EdgeWeight{1}, EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(7), EdgeWeight{1}, EdgeWeight{1}, EdgeWeight{0}); + CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(4), EdgeWeight{0}, EdgeWeight{1}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(5), EdgeWeight{1}, EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(7), EdgeWeight{1}, EdgeWeight{1}, EdgeWeight{0}); // cell 2 - CHECK_EQUAL_RANGE(cell_1_2.GetOutWeight(9), 3, 1); - CHECK_EQUAL_RANGE(cell_1_2.GetOutWeight(11), 2, 0); - CHECK_EQUAL_RANGE(cell_1_2.GetInWeight(8), 3, 2); - CHECK_EQUAL_RANGE(cell_1_2.GetInWeight(11), 1, 0); + CHECK_EQUAL_RANGE(cell_1_2.GetOutWeight(9), EdgeWeight{3}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_2.GetOutWeight(11), EdgeWeight{2}, EdgeWeight{0}); + CHECK_EQUAL_RANGE(cell_1_2.GetInWeight(8), EdgeWeight{3}, EdgeWeight{2}); + CHECK_EQUAL_RANGE(cell_1_2.GetInWeight(11), EdgeWeight{1}, EdgeWeight{0}); // cell 3 - CHECK_EQUAL_RANGE(cell_1_3.GetOutWeight(13), 10, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_1_3.GetInWeight(12), 10); + CHECK_EQUAL_RANGE(cell_1_3.GetOutWeight(13), EdgeWeight{10}, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_1_3.GetInWeight(12), EdgeWeight{10}); CHECK_EQUAL_RANGE(cell_1_3.GetInWeight(14), INVALID_EDGE_WEIGHT); // level 2 // cell 0 - CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(3), 3, 3); - CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(5), 0, 1); - CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(7), 1, 0); - CHECK_EQUAL_RANGE(cell_2_0.GetInWeight(5), 3, 0, 1); - CHECK_EQUAL_RANGE(cell_2_0.GetInWeight(7), 3, 1, 0); + CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(3), EdgeWeight{3}, EdgeWeight{3}); + CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(5), EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(7), EdgeWeight{1}, EdgeWeight{0}); + CHECK_EQUAL_RANGE(cell_2_0.GetInWeight(5), EdgeWeight{3}, EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_2_0.GetInWeight(7), EdgeWeight{3}, EdgeWeight{1}, EdgeWeight{0}); // cell 1 - CHECK_EQUAL_RANGE(cell_2_1.GetOutWeight(9), 3, 0, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_1.GetOutWeight(13), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT, 10); - CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(8), 3, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(9), 0, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(12), INVALID_EDGE_WEIGHT, 10); + CHECK_EQUAL_RANGE(cell_2_1.GetOutWeight(9), EdgeWeight{3}, EdgeWeight{0}, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE( + cell_2_1.GetOutWeight(13), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT, EdgeWeight{10}); + CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(8), EdgeWeight{3}, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(9), EdgeWeight{0}, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(12), INVALID_EDGE_WEIGHT, EdgeWeight{10}); - CHECK_EQUAL_RANGE(cell_2_1.GetOutDuration(9), 6, 0, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_1.GetOutDuration(13), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT, 20); - CHECK_EQUAL_RANGE(cell_2_1.GetInDuration(8), 6, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_1.GetInDuration(9), 0, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_1.GetInDuration(12), INVALID_EDGE_WEIGHT, 20); + CHECK_EQUAL_RANGE( + cell_2_1.GetOutDuration(9), EdgeDuration{6}, EdgeDuration{0}, INVALID_EDGE_DURATION); + CHECK_EQUAL_RANGE(cell_2_1.GetOutDuration(13), + INVALID_EDGE_DURATION, + INVALID_EDGE_DURATION, + EdgeDuration{20}); + CHECK_EQUAL_RANGE(cell_2_1.GetInDuration(8), EdgeDuration{6}, INVALID_EDGE_DURATION); + CHECK_EQUAL_RANGE(cell_2_1.GetInDuration(9), EdgeDuration{0}, INVALID_EDGE_DURATION); + CHECK_EQUAL_RANGE(cell_2_1.GetInDuration(12), INVALID_EDGE_DURATION, EdgeDuration{20}); CellStorage storage_rec(mlp, graph); auto metric_rec = storage_rec.MakeMetric(); @@ -304,9 +309,10 @@ BOOST_AUTO_TEST_CASE(exclude_test) // 2 ----3 --- 4 --- 7 // \__________/ std::vector edges = { - {0, 1, 1}, {0, 2, 1}, {1, 0, 1}, {1, 2, 10}, {1, 3, 1}, {1, 5, 1}, {2, 0, 1}, {2, 1, 10}, - {2, 3, 1}, {2, 4, 1}, {3, 1, 1}, {3, 2, 1}, {3, 4, 1}, {4, 2, 1}, {4, 3, 1}, {4, 5, 1}, - {4, 7, 1}, {5, 1, 1}, {5, 4, 1}, {5, 6, 1}, {6, 5, 1}, {6, 7, 1}, {7, 4, 1}, {7, 6, 1}, + {0, 1, {1}}, {0, 2, {1}}, {1, 0, {1}}, {1, 2, {10}}, {1, 3, {1}}, {1, 5, {1}}, + {2, 0, {1}}, {2, 1, {10}}, {2, 3, {1}}, {2, 4, {1}}, {3, 1, {1}}, {3, 2, {1}}, + {3, 4, {1}}, {4, 2, {1}}, {4, 3, {1}}, {4, 5, {1}}, {4, 7, {1}}, {5, 1, {1}}, + {5, 4, {1}}, {5, 6, {1}}, {6, 5, {1}}, {6, 7, {1}}, {7, 4, {1}}, {7, 6, {1}}, }; // node: 0 1 2 3 4 5 6 7 @@ -367,20 +373,20 @@ BOOST_AUTO_TEST_CASE(exclude_test) REQUIRE_SIZE_RANGE(cell_1_3.GetInWeight(7), 2); CHECK_EQUAL_RANGE(cell_1_0.GetOutWeight(0), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_1_0.GetOutWeight(1), INVALID_EDGE_WEIGHT, 0); + CHECK_EQUAL_RANGE(cell_1_0.GetOutWeight(1), INVALID_EDGE_WEIGHT, EdgeWeight{0}); CHECK_EQUAL_RANGE(cell_1_0.GetInWeight(0), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_1_0.GetInWeight(1), INVALID_EDGE_WEIGHT, 0); - CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(2), 0, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_1_0.GetInWeight(1), INVALID_EDGE_WEIGHT, EdgeWeight{0}); + CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(2), EdgeWeight{0}, INVALID_EDGE_WEIGHT); CHECK_EQUAL_RANGE(cell_1_1.GetOutWeight(3), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(2), 0, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(2), EdgeWeight{0}, INVALID_EDGE_WEIGHT); CHECK_EQUAL_RANGE(cell_1_1.GetInWeight(3), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_1_2.GetOutWeight(5), 0, 1); - CHECK_EQUAL_RANGE(cell_1_2.GetOutWeight(6), 1, 0); - CHECK_EQUAL_RANGE(cell_1_2.GetInWeight(5), 0, 1); - CHECK_EQUAL_RANGE(cell_1_2.GetInWeight(6), 1, 0); - CHECK_EQUAL_RANGE(cell_1_3.GetOutWeight(4), 0, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_1_2.GetOutWeight(5), EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_2.GetOutWeight(6), EdgeWeight{1}, EdgeWeight{0}); + CHECK_EQUAL_RANGE(cell_1_2.GetInWeight(5), EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_1_2.GetInWeight(6), EdgeWeight{1}, EdgeWeight{0}); + CHECK_EQUAL_RANGE(cell_1_3.GetOutWeight(4), EdgeWeight{0}, INVALID_EDGE_WEIGHT); CHECK_EQUAL_RANGE(cell_1_3.GetOutWeight(7), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_1_3.GetInWeight(4), 0, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_1_3.GetInWeight(4), EdgeWeight{0}, INVALID_EDGE_WEIGHT); CHECK_EQUAL_RANGE(cell_1_3.GetInWeight(7), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT); auto cell_2_0 = storage.GetCell(metric, 2, 0); @@ -407,19 +413,19 @@ BOOST_AUTO_TEST_CASE(exclude_test) REQUIRE_SIZE_RANGE(cell_2_1.GetInWeight(4), 2); REQUIRE_SIZE_RANGE(cell_2_1.GetInWeight(5), 2); - CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(1), 0, 10, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(2), 10, 0, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(1), EdgeWeight{0}, EdgeWeight{10}, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_2_0.GetOutWeight(2), EdgeWeight{10}, EdgeWeight{0}, INVALID_EDGE_WEIGHT); CHECK_EQUAL_RANGE( cell_2_0.GetOutWeight(3), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_0.GetInWeight(1), 0, 10, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_0.GetInWeight(2), 10, 0, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_2_0.GetInWeight(1), EdgeWeight{0}, EdgeWeight{10}, INVALID_EDGE_WEIGHT); + CHECK_EQUAL_RANGE(cell_2_0.GetInWeight(2), EdgeWeight{10}, EdgeWeight{0}, INVALID_EDGE_WEIGHT); CHECK_EQUAL_RANGE( cell_2_0.GetInWeight(3), INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT, INVALID_EDGE_WEIGHT); - CHECK_EQUAL_RANGE(cell_2_1.GetOutWeight(4), 0, 1); - CHECK_EQUAL_RANGE(cell_2_1.GetOutWeight(5), 1, 0); - CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(4), 0, 1); - CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(5), 1, 0); + CHECK_EQUAL_RANGE(cell_2_1.GetOutWeight(4), EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_2_1.GetOutWeight(5), EdgeWeight{1}, EdgeWeight{0}); + CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(4), EdgeWeight{0}, EdgeWeight{1}); + CHECK_EQUAL_RANGE(cell_2_1.GetInWeight(5), EdgeWeight{1}, EdgeWeight{0}); } BOOST_AUTO_TEST_SUITE_END() diff --git a/unit_tests/engine/collapse_internal_route_result.cpp b/unit_tests/engine/collapse_internal_route_result.cpp index 445bb36f6..6d00e12d1 100644 --- a/unit_tests/engine/collapse_internal_route_result.cpp +++ b/unit_tests/engine/collapse_internal_route_result.cpp @@ -19,14 +19,14 @@ BOOST_AUTO_TEST_CASE(unchanged_collapse_route_result) PhantomNode target; source.forward_segment_id = {1, true}; target.forward_segment_id = {6, true}; - PathData pathy{0, 2, 2, 3, 4, 5, 2, boost::none}; - PathData kathy{0, 1, 1, 2, 3, 4, 1, boost::none}; + PathData pathy{0, 2, {2}, {3}, {4}, {5}, 2, boost::none}; + PathData kathy{0, 1, {1}, {2}, {3}, {4}, 1, boost::none}; InternalRouteResult one_leg_result; one_leg_result.unpacked_path_segments = {{pathy, kathy}}; one_leg_result.leg_endpoints = {PhantomEndpoints{source, target}}; one_leg_result.source_traversed_in_reverse = {true}; one_leg_result.target_traversed_in_reverse = {true}; - one_leg_result.shortest_path_weight = 50; + one_leg_result.shortest_path_weight = {50}; auto collapsed = CollapseInternalRouteResult(one_leg_result, {true, true}); BOOST_CHECK_EQUAL(one_leg_result.unpacked_path_segments[0].front().turn_via_node, @@ -39,22 +39,26 @@ BOOST_AUTO_TEST_CASE(two_legs_to_one_leg) { // from_edge_based_node, turn_via_node, weight_until_turn, weight_of_turn, // duration_until_turn, duration_of_turn, datasource_id, turn_edge - PathData pathy{0, 2, 2, 3, 4, 5, 2, boost::none}; - PathData kathy{0, 1, 1, 2, 3, 4, 1, boost::none}; - PathData cathy{0, 3, 1, 2, 3, 4, 1, boost::none}; + PathData pathy{0, 2, {2}, {3}, {4}, {5}, 2, boost::none}; + PathData kathy{0, 1, {1}, {2}, {3}, {4}, 1, boost::none}; + PathData cathy{0, 3, {1}, {2}, {3}, {4}, 1, boost::none}; PhantomNode node_1; PhantomNode node_2; PhantomNode node_3; node_1.forward_segment_id = {1, true}; node_2.forward_segment_id = {6, true}; node_3.forward_segment_id = {12, true}; + node_1.forward_weight = node_2.forward_weight = node_3.forward_weight = {1}; + node_1.forward_duration = node_2.forward_duration = node_3.forward_duration = {1}; + node_1.forward_distance = node_2.forward_distance = node_3.forward_distance = {1}; + InternalRouteResult two_leg_result; two_leg_result.unpacked_path_segments = {{pathy, kathy}, {kathy, cathy}}; two_leg_result.leg_endpoints = {PhantomEndpoints{node_1, node_2}, PhantomEndpoints{node_2, node_3}}; two_leg_result.source_traversed_in_reverse = {true, false}; two_leg_result.target_traversed_in_reverse = {true, false}; - two_leg_result.shortest_path_weight = 80; + two_leg_result.shortest_path_weight = {80}; auto collapsed = CollapseInternalRouteResult(two_leg_result, {true, false, true, true}); BOOST_CHECK_EQUAL(collapsed.unpacked_path_segments.size(), 1); @@ -70,11 +74,11 @@ BOOST_AUTO_TEST_CASE(two_legs_to_one_leg) BOOST_AUTO_TEST_CASE(three_legs_to_two_legs) { - PathData pathy{0, 2, 2, 3, 4, 5, 2, boost::none}; - PathData kathy{0, 1, 1, 2, 3, 4, 1, boost::none}; - PathData qathy{0, 5, 1, 2, 3, 4, 1, boost::none}; - PathData cathy{0, 3, 1, 2, 3, 4, 1, boost::none}; - PathData mathy{0, 4, 8, 9, 13, 4, 2, boost::none}; + PathData pathy{0, 2, {2}, {3}, {4}, {5}, 2, boost::none}; + PathData kathy{0, 1, {1}, {2}, {3}, {4}, 1, boost::none}; + PathData qathy{0, 5, {1}, {2}, {3}, {4}, 1, boost::none}; + PathData cathy{0, 3, {1}, {2}, {3}, {4}, 1, boost::none}; + PathData mathy{0, 4, {8}, {9}, {13}, {4}, 2, boost::none}; PhantomNode node_1; PhantomNode node_2; PhantomNode node_3; @@ -83,6 +87,19 @@ BOOST_AUTO_TEST_CASE(three_legs_to_two_legs) node_2.forward_segment_id = {6, true}; node_3.forward_segment_id = {12, true}; node_4.forward_segment_id = {18, true}; + node_1.forward_weight = node_2.forward_weight = node_3.forward_weight = + node_4.forward_weight = {1}; + node_1.forward_duration = node_2.forward_duration = node_3.forward_duration = + node_4.forward_duration = {1}; + node_1.forward_distance = node_2.forward_distance = node_3.forward_distance = + node_4.forward_distance = {1}; + node_1.reverse_weight = node_2.reverse_weight = node_3.reverse_weight = + node_4.reverse_weight = {1}; + node_1.reverse_duration = node_2.reverse_duration = node_3.reverse_duration = + node_4.reverse_duration = {1}; + node_1.reverse_distance = node_2.reverse_distance = node_3.reverse_distance = + node_4.reverse_distance = {1}; + InternalRouteResult three_leg_result; three_leg_result.unpacked_path_segments = {std::vector{pathy, kathy}, std::vector{kathy, qathy, cathy}, @@ -92,7 +109,7 @@ BOOST_AUTO_TEST_CASE(three_legs_to_two_legs) PhantomEndpoints{node_3, node_4}}; three_leg_result.source_traversed_in_reverse = {true, false, true}, three_leg_result.target_traversed_in_reverse = {true, false, true}, - three_leg_result.shortest_path_weight = 140; + three_leg_result.shortest_path_weight = {140}; auto collapsed = CollapseInternalRouteResult(three_leg_result, {true, true, false, true}); BOOST_CHECK_EQUAL(collapsed.unpacked_path_segments.size(), 2); @@ -114,9 +131,9 @@ BOOST_AUTO_TEST_CASE(three_legs_to_two_legs) BOOST_AUTO_TEST_CASE(two_legs_to_two_legs) { - PathData pathy{0, 2, 2, 3, 4, 5, 2, boost::none}; - PathData kathy{0, 1, 1, 2, 3, 4, 1, boost::none}; - PathData cathy{0, 3, 1, 2, 3, 4, 1, boost::none}; + PathData pathy{0, 2, {2}, {3}, {4}, {5}, 2, boost::none}; + PathData kathy{0, 1, {1}, {2}, {3}, {4}, 1, boost::none}; + PathData cathy{0, 3, {1}, {2}, {3}, {4}, 1, boost::none}; PhantomNode node_1; PhantomNode node_2; PhantomNode node_3; @@ -129,7 +146,7 @@ BOOST_AUTO_TEST_CASE(two_legs_to_two_legs) PhantomEndpoints{node_2, node_3}}; two_leg_result.source_traversed_in_reverse = {true, false}; two_leg_result.target_traversed_in_reverse = {true, false}; - two_leg_result.shortest_path_weight = 80; + two_leg_result.shortest_path_weight = {80}; auto collapsed = CollapseInternalRouteResult(two_leg_result, {true, true, true}); BOOST_CHECK_EQUAL(collapsed.unpacked_path_segments.size(), 2); diff --git a/unit_tests/engine/offline_facade.cpp b/unit_tests/engine/offline_facade.cpp index c0be492ac..e4b0a2be7 100644 --- a/unit_tests/engine/offline_facade.cpp +++ b/unit_tests/engine/offline_facade.cpp @@ -87,14 +87,11 @@ struct ExternalCellStorage return boost::make_iterator_range((EdgeWeight *)0, (EdgeWeight *)0); } - auto GetSourceNodes() const - { - return boost::make_iterator_range((EdgeWeight *)0, (EdgeWeight *)0); - } + auto GetSourceNodes() const { return boost::make_iterator_range((NodeID *)0, (NodeID *)0); } auto GetDestinationNodes() const { - return boost::make_iterator_range((EdgeWeight *)0, (EdgeWeight *)0); + return boost::make_iterator_range((NodeID *)0, (NodeID *)0); } }; @@ -265,7 +262,7 @@ class ContiguousInternalMemoryDataFacade return {}; } - EdgeWeight GetNodeWeight(const NodeID /*node*/) const { return 0; } + EdgeWeight GetNodeWeight(const NodeID /*node*/) const { return {0}; } bool IsForwardEdge(const NodeID /*edge*/) const { return true; } diff --git a/unit_tests/extractor/compressed_edge_container.cpp b/unit_tests/extractor/compressed_edge_container.cpp index 7fa1e1faa..155805998 100644 --- a/unit_tests/extractor/compressed_edge_container.cpp +++ b/unit_tests/extractor/compressed_edge_container.cpp @@ -15,7 +15,7 @@ BOOST_AUTO_TEST_CASE(long_road_test) CompressedEdgeContainer container; // compress 0---1---2 to 0---2 - container.CompressEdge(0, 1, 1, 2, 1, 1, 11, 11); + container.CompressEdge(0, 1, 1, 2, {1}, {1}, {11}, {11}); BOOST_CHECK(container.HasEntryForID(0)); BOOST_CHECK(!container.HasEntryForID(1)); BOOST_CHECK(!container.HasEntryForID(2)); @@ -24,7 +24,7 @@ BOOST_AUTO_TEST_CASE(long_road_test) BOOST_CHECK_EQUAL(container.GetLastEdgeSourceID(0), 1); // compress 2---3---4 to 2---4 - container.CompressEdge(2, 3, 3, 4, 1, 1, 11, 11); + container.CompressEdge(2, 3, 3, 4, {1}, {1}, {11}, {11}); BOOST_CHECK(container.HasEntryForID(0)); BOOST_CHECK(!container.HasEntryForID(1)); BOOST_CHECK(container.HasEntryForID(2)); @@ -33,7 +33,7 @@ BOOST_AUTO_TEST_CASE(long_road_test) BOOST_CHECK_EQUAL(container.GetLastEdgeSourceID(2), 3); // compress 0---2---4 to 0---4 - container.CompressEdge(0, 2, 2, 4, 2, 2, 22, 22); + container.CompressEdge(0, 2, 2, 4, {2}, {2}, {22}, {22}); BOOST_CHECK(container.HasEntryForID(0)); BOOST_CHECK(!container.HasEntryForID(1)); BOOST_CHECK(!container.HasEntryForID(2)); @@ -53,7 +53,7 @@ BOOST_AUTO_TEST_CASE(t_crossing) CompressedEdgeContainer container; // compress 0---1---2 to 0---2 - container.CompressEdge(0, 1, 1, 2, 1, 1, 11, 11); + container.CompressEdge(0, 1, 1, 2, {1}, {1}, {11}, {11}); BOOST_CHECK(container.HasEntryForID(0)); BOOST_CHECK(!container.HasEntryForID(1)); BOOST_CHECK(!container.HasEntryForID(2)); @@ -64,7 +64,7 @@ BOOST_AUTO_TEST_CASE(t_crossing) BOOST_CHECK_EQUAL(container.GetLastEdgeSourceID(0), 1); // compress 2---5---6 to 2---6 - container.CompressEdge(4, 5, 5, 6, 1, 1, 11, 11); + container.CompressEdge(4, 5, 5, 6, {1}, {1}, {11}, {11}); BOOST_CHECK(container.HasEntryForID(0)); BOOST_CHECK(!container.HasEntryForID(1)); BOOST_CHECK(!container.HasEntryForID(2)); @@ -75,7 +75,7 @@ BOOST_AUTO_TEST_CASE(t_crossing) BOOST_CHECK_EQUAL(container.GetLastEdgeSourceID(4), 5); // compress 2---3---4 to 2---4 - container.CompressEdge(2, 3, 3, 4, 1, 1, 11, 11); + container.CompressEdge(2, 3, 3, 4, {1}, {1}, {11}, {11}); BOOST_CHECK(container.HasEntryForID(0)); BOOST_CHECK(!container.HasEntryForID(1)); BOOST_CHECK(container.HasEntryForID(2)); diff --git a/unit_tests/extractor/graph_compressor.cpp b/unit_tests/extractor/graph_compressor.cpp index 559bde7d6..f70d71b4f 100644 --- a/unit_tests/extractor/graph_compressor.cpp +++ b/unit_tests/extractor/graph_compressor.cpp @@ -27,9 +27,9 @@ inline InputEdge MakeUnitEdge(const NodeID from, const NodeID to) { return {from, // source to, // target - 1, // weight - 1, // duration - 1, // distance + EdgeWeight{1}, // weight + EdgeDuration{1}, // duration + EdgeDistance{1}, // distance GeometryID{0, false}, // geometry_id false, // reversed NodeBasedEdgeClassification(), // default flags diff --git a/unit_tests/extractor/intersection_analysis_tests.cpp b/unit_tests/extractor/intersection_analysis_tests.cpp index 40cdece81..9514a958d 100644 --- a/unit_tests/extractor/intersection_analysis_tests.cpp +++ b/unit_tests/extractor/intersection_analysis_tests.cpp @@ -43,9 +43,9 @@ BOOST_AUTO_TEST_CASE(simple_intersection_connectivity) [](const NodeID from, const NodeID to, bool allowed, AnnotationID annotation) { return InputEdge{from, to, - 1, - 1, - 1, + EdgeWeight{1}, + EdgeDuration{1}, + EdgeDistance{1}, GeometryID{0, false}, !allowed, NodeBasedEdgeClassification(), @@ -170,9 +170,9 @@ BOOST_AUTO_TEST_CASE(roundabout_intersection_connectivity) const auto unit_edge = [](const NodeID from, const NodeID to, bool allowed, bool roundabout) { return InputEdge{from, to, - 1, - 1, - 1, + EdgeWeight{1}, + EdgeDuration{1}, + EdgeDistance{1}, GeometryID{0, false}, !allowed, NodeBasedEdgeClassification{ @@ -275,8 +275,15 @@ BOOST_AUTO_TEST_CASE(skip_degree_two_nodes) // 6 8 ↔ 9 // const auto unit_edge = [](const NodeID from, const NodeID to, bool allowed) { - return InputEdge{ - from, to, 1, 1, 1, GeometryID{0, false}, !allowed, NodeBasedEdgeClassification{}, 0}; + return InputEdge{from, + to, + EdgeWeight{1}, + EdgeDuration{1}, + EdgeDistance{1}, + GeometryID{0, false}, + !allowed, + NodeBasedEdgeClassification{}, + 0}; }; std::vector edges = {unit_edge(0, 1, true), // 0 unit_edge(1, 0, true), diff --git a/unit_tests/mocks/mock_datafacade.hpp b/unit_tests/mocks/mock_datafacade.hpp index 6e7022e9a..bfaf41415 100644 --- a/unit_tests/mocks/mock_datafacade.hpp +++ b/unit_tests/mocks/mock_datafacade.hpp @@ -47,11 +47,11 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade } TurnPenalty GetWeightPenaltyForEdgeID(const unsigned /* id */) const override final { - return 0; + return {0}; } TurnPenalty GetDurationPenaltyForEdgeID(const unsigned /* id */) const override final { - return 0; + return {0}; } std::string GetTimestamp() const override { return ""; } NodeForwardRange GetUncompressedForwardGeometry(const EdgeID /* id */) const override diff --git a/unit_tests/partitioner/cell_storage.cpp b/unit_tests/partitioner/cell_storage.cpp index 635583d82..26113a0fe 100644 --- a/unit_tests/partitioner/cell_storage.cpp +++ b/unit_tests/partitioner/cell_storage.cpp @@ -99,14 +99,14 @@ BOOST_AUTO_TEST_CASE(mutable_cell_storage) auto in_range_1_5_11 = cell_1_5.GetInWeight(11); fill_range(out_range_1_0_0, {}); - fill_range(out_range_1_2_4, {1}); - fill_range(out_range_1_3_6, {2}); - fill_range(out_range_1_5_11, {3}); + fill_range(out_range_1_2_4, {EdgeWeight{1}}); + fill_range(out_range_1_3_6, {EdgeWeight{2}}); + fill_range(out_range_1_5_11, {EdgeWeight{3}}); CHECK_EQUAL_COLLECTIONS(in_range_1_1_3, std::vector{}); - CHECK_EQUAL_RANGE(in_range_1_2_5, 1); - CHECK_EQUAL_RANGE(in_range_1_3_7, 2); - CHECK_EQUAL_RANGE(in_range_1_5_11, 3); + CHECK_EQUAL_RANGE(in_range_1_2_5, EdgeWeight{1}); + CHECK_EQUAL_RANGE(in_range_1_3_7, EdgeWeight{2}); + CHECK_EQUAL_RANGE(in_range_1_5_11, EdgeWeight{3}); // Level 2 auto cell_2_0 = storage.GetCell(metric, 2, 0); @@ -125,14 +125,14 @@ BOOST_AUTO_TEST_CASE(mutable_cell_storage) auto in_range_2_1_7 = cell_2_1.GetInWeight(7); auto in_range_2_3_11 = cell_2_3.GetInWeight(11); - fill_range(out_range_2_0_0, {1}); - fill_range(out_range_2_1_4, {2, 3}); - fill_range(out_range_2_3_11, {4}); + fill_range(out_range_2_0_0, {EdgeWeight{1}}); + fill_range(out_range_2_1_4, {EdgeWeight{2}, EdgeWeight{3}}); + fill_range(out_range_2_3_11, {EdgeWeight{4}}); - CHECK_EQUAL_RANGE(in_range_2_0_3, 1); - CHECK_EQUAL_RANGE(in_range_2_1_4, 2); - CHECK_EQUAL_RANGE(in_range_2_1_7, 3); - CHECK_EQUAL_RANGE(in_range_2_3_11, 4); + CHECK_EQUAL_RANGE(in_range_2_0_3, EdgeWeight{1}); + CHECK_EQUAL_RANGE(in_range_2_1_4, EdgeWeight{2}); + CHECK_EQUAL_RANGE(in_range_2_1_7, EdgeWeight{3}); + CHECK_EQUAL_RANGE(in_range_2_3_11, EdgeWeight{4}); // Level 3 auto cell_3_0 = storage.GetCell(metric, 3, 0); @@ -146,13 +146,13 @@ BOOST_AUTO_TEST_CASE(mutable_cell_storage) auto in_range_3_1_4 = cell_3_1.GetInWeight(4); auto in_range_3_1_7 = cell_3_1.GetInWeight(7); - fill_range(out_range_3_0_0, {1}); - fill_range(out_range_3_1_4, {2, 3}); - fill_range(out_range_3_1_7, {4, 5}); + fill_range(out_range_3_0_0, {EdgeWeight{1}}); + fill_range(out_range_3_1_4, {EdgeWeight{2}, EdgeWeight{3}}); + fill_range(out_range_3_1_7, {EdgeWeight{4}, EdgeWeight{5}}); - CHECK_EQUAL_RANGE(in_range_3_0_3, 1); - CHECK_EQUAL_RANGE(in_range_3_1_4, 2, 4); - CHECK_EQUAL_RANGE(in_range_3_1_7, 3, 5); + CHECK_EQUAL_RANGE(in_range_3_0_3, EdgeWeight{1}); + CHECK_EQUAL_RANGE(in_range_3_1_4, EdgeWeight{2}, EdgeWeight{4}); + CHECK_EQUAL_RANGE(in_range_3_1_7, EdgeWeight{3}, EdgeWeight{5}); } BOOST_AUTO_TEST_CASE(immutable_cell_storage) @@ -230,17 +230,17 @@ BOOST_AUTO_TEST_CASE(immutable_cell_storage) auto const_cell_1_5 = const_storage.GetCell(metric, 1, 5); CHECK_EQUAL_RANGE(const_cell_1_0.GetSourceNodes(), 0); - CHECK_EQUAL_COLLECTIONS(const_cell_1_1.GetSourceNodes(), std::vector{}); + CHECK_EQUAL_COLLECTIONS(const_cell_1_1.GetSourceNodes(), std::vector{}); CHECK_EQUAL_RANGE(const_cell_1_2.GetSourceNodes(), 4); CHECK_EQUAL_RANGE(const_cell_1_3.GetSourceNodes(), 6); - CHECK_EQUAL_COLLECTIONS(const_cell_1_4.GetSourceNodes(), std::vector{}); + CHECK_EQUAL_COLLECTIONS(const_cell_1_4.GetSourceNodes(), std::vector{}); CHECK_EQUAL_RANGE(const_cell_1_5.GetSourceNodes(), 11); - CHECK_EQUAL_COLLECTIONS(const_cell_1_0.GetDestinationNodes(), std::vector{}); + CHECK_EQUAL_COLLECTIONS(const_cell_1_0.GetDestinationNodes(), std::vector{}); CHECK_EQUAL_RANGE(const_cell_1_1.GetDestinationNodes(), 3); CHECK_EQUAL_RANGE(const_cell_1_2.GetDestinationNodes(), 5); CHECK_EQUAL_RANGE(const_cell_1_3.GetDestinationNodes(), 7); - CHECK_EQUAL_COLLECTIONS(const_cell_1_4.GetDestinationNodes(), std::vector{}); + CHECK_EQUAL_COLLECTIONS(const_cell_1_4.GetDestinationNodes(), std::vector{}); CHECK_EQUAL_RANGE(const_cell_1_5.GetDestinationNodes(), 11); auto out_const_range_1_0_0 = const_cell_1_0.GetOutWeight(0); @@ -271,12 +271,12 @@ BOOST_AUTO_TEST_CASE(immutable_cell_storage) CHECK_EQUAL_RANGE(const_cell_2_0.GetSourceNodes(), 0); CHECK_EQUAL_RANGE(const_cell_2_1.GetSourceNodes(), 4); - CHECK_EQUAL_COLLECTIONS(const_cell_2_2.GetSourceNodes(), std::vector{}); + CHECK_EQUAL_COLLECTIONS(const_cell_2_2.GetSourceNodes(), std::vector{}); CHECK_EQUAL_RANGE(const_cell_2_3.GetSourceNodes(), 11); CHECK_EQUAL_RANGE(const_cell_2_0.GetDestinationNodes(), 3); CHECK_EQUAL_RANGE(const_cell_2_1.GetDestinationNodes(), 4, 7); - CHECK_EQUAL_COLLECTIONS(const_cell_2_2.GetDestinationNodes(), std::vector{}); + CHECK_EQUAL_COLLECTIONS(const_cell_2_2.GetDestinationNodes(), std::vector{}); CHECK_EQUAL_RANGE(const_cell_2_3.GetDestinationNodes(), 11); auto out_const_range_2_0_0 = const_cell_2_0.GetOutWeight(0); @@ -325,8 +325,8 @@ BOOST_AUTO_TEST_CASE(immutable_cell_storage) // Level 4 auto const_cell_4_0 = const_storage.GetCell(metric, 4, 0); - CHECK_EQUAL_COLLECTIONS(const_cell_4_0.GetSourceNodes(), std::vector{}); - CHECK_EQUAL_COLLECTIONS(const_cell_4_0.GetDestinationNodes(), std::vector{}); + CHECK_EQUAL_COLLECTIONS(const_cell_4_0.GetSourceNodes(), std::vector{}); + CHECK_EQUAL_COLLECTIONS(const_cell_4_0.GetDestinationNodes(), std::vector{}); } BOOST_AUTO_TEST_SUITE_END() diff --git a/unit_tests/partitioner/renumber.cpp b/unit_tests/partitioner/renumber.cpp index 6fa2898b1..4b644d20d 100644 --- a/unit_tests/partitioner/renumber.cpp +++ b/unit_tests/partitioner/renumber.cpp @@ -32,9 +32,9 @@ auto makeGraph(const std::vector &mock_edges) max_id = std::max(max_id, std::max(m.start, m.target)); edges.push_back(InputEdge{ - m.start, m.target, EdgeBasedGraphEdgeData{SPECIAL_NODEID, 1, 1, 1, true, false}}); + m.start, m.target, EdgeBasedGraphEdgeData{SPECIAL_NODEID, {1}, {1}, {1}, true, false}}); edges.push_back(InputEdge{ - m.target, m.start, EdgeBasedGraphEdgeData{SPECIAL_NODEID, 1, 1, 1, false, true}}); + m.target, m.start, EdgeBasedGraphEdgeData{SPECIAL_NODEID, {1}, {1}, {1}, false, true}}); } std::sort(edges.begin(), edges.end()); return DynamicEdgeBasedGraph(max_id + 1, edges); diff --git a/unit_tests/util/packed_vector.cpp b/unit_tests/util/packed_vector.cpp index 5de71755e..cd38252e6 100644 --- a/unit_tests/util/packed_vector.cpp +++ b/unit_tests/util/packed_vector.cpp @@ -76,13 +76,13 @@ BOOST_AUTO_TEST_CASE(packed_vector_iterator_test) BOOST_CHECK(std::is_sorted(packed_vec.begin(), packed_vec.end())); - auto idx = 0; + auto vec_idx = 0; for (auto value : packed_vec) { - BOOST_CHECK_EQUAL(packed_vec[idx], value); - idx++; + BOOST_CHECK_EQUAL(packed_vec[vec_idx], value); + vec_idx++; } - BOOST_CHECK_EQUAL(idx, packed_vec.size()); + BOOST_CHECK_EQUAL(vec_idx, packed_vec.size()); auto range = boost::make_iterator_range(packed_vec.cbegin(), packed_vec.cend()); BOOST_CHECK_EQUAL(range.size(), packed_vec.size()); @@ -215,18 +215,38 @@ BOOST_AUTO_TEST_CASE(packed_weights_container_with_type_erasure) PackedVector vector(7); - std::iota(vector.begin(), vector.end(), 0); + std::iota(vector.begin(), vector.end(), SegmentWeight{0}); auto forward = boost::make_iterator_range(vector.begin() + 1, vector.begin() + 6); auto forward_any = WeightsAnyRange(forward.begin(), forward.end()); - CHECK_EQUAL_RANGE(forward, 1, 2, 3, 4, 5); - CHECK_EQUAL_RANGE(forward_any, 1, 2, 3, 4, 5); + CHECK_EQUAL_RANGE(forward, + SegmentWeight{1}, + SegmentWeight{2}, + SegmentWeight{3}, + SegmentWeight{4}, + SegmentWeight{5}); + CHECK_EQUAL_RANGE(forward_any, + SegmentWeight{1}, + SegmentWeight{2}, + SegmentWeight{3}, + SegmentWeight{4}, + SegmentWeight{5}); auto reverse = boost::adaptors::reverse(forward); auto reverse_any = WeightsAnyRange(reverse); - CHECK_EQUAL_RANGE(reverse, 5, 4, 3, 2, 1); - CHECK_EQUAL_RANGE(reverse_any, 5, 4, 3, 2, 1); + CHECK_EQUAL_RANGE(reverse, + SegmentWeight{5}, + SegmentWeight{4}, + SegmentWeight{3}, + SegmentWeight{2}, + SegmentWeight{1}); + CHECK_EQUAL_RANGE(reverse_any, + SegmentWeight{5}, + SegmentWeight{4}, + SegmentWeight{3}, + SegmentWeight{2}, + SegmentWeight{1}); } BOOST_AUTO_TEST_CASE(packed_weights_view_with_type_erasure) @@ -244,14 +264,14 @@ BOOST_AUTO_TEST_CASE(packed_weights_view_with_type_erasure) auto forward = boost::make_iterator_range(view.begin() + 1, view.begin() + 4); auto forward_any = WeightsAnyRange(forward.begin(), forward.end()); - CHECK_EQUAL_RANGE(forward, 1, 2, 3); - CHECK_EQUAL_RANGE(forward_any, 1, 2, 3); + CHECK_EQUAL_RANGE(forward, SegmentWeight{1}, SegmentWeight{2}, SegmentWeight{3}); + CHECK_EQUAL_RANGE(forward_any, SegmentWeight{1}, SegmentWeight{2}, SegmentWeight{3}); auto reverse = boost::adaptors::reverse(forward); auto reverse_any = WeightsAnyRange(reverse); - CHECK_EQUAL_RANGE(reverse, 3, 2, 1); - CHECK_EQUAL_RANGE(reverse_any, 3, 2, 1); + CHECK_EQUAL_RANGE(reverse, SegmentWeight{3}, SegmentWeight{2}, SegmentWeight{1}); + CHECK_EQUAL_RANGE(reverse_any, SegmentWeight{3}, SegmentWeight{2}, SegmentWeight{1}); } BOOST_AUTO_TEST_SUITE_END() From 7b73b977ffa7b7cd349f2fa2cfd1d06b0523a2cd Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 29 Oct 2022 22:57:14 +0200 Subject: [PATCH 05/75] Replace boost::unordered_{map/set} with std, also remove code duplication --- include/extractor/node_restriction_map.hpp | 2 +- include/extractor/restriction_graph.hpp | 8 +++++--- include/extractor/traffic_signals.hpp | 2 -- include/extractor/turn_path_compressor.hpp | 8 ++++---- include/extractor/way_restriction_map.hpp | 10 +++++----- src/engine/hint.cpp | 6 +++--- src/extractor/edge_based_graph_factory.cpp | 16 +--------------- 7 files changed, 19 insertions(+), 33 deletions(-) diff --git a/include/extractor/node_restriction_map.hpp b/include/extractor/node_restriction_map.hpp index f2c9f049c..fe7e89673 100644 --- a/include/extractor/node_restriction_map.hpp +++ b/include/extractor/node_restriction_map.hpp @@ -6,8 +6,8 @@ #include "util/typedefs.hpp" #include -#include +#include #include #include diff --git a/include/extractor/restriction_graph.hpp b/include/extractor/restriction_graph.hpp index 9b7d4eefe..15932720c 100644 --- a/include/extractor/restriction_graph.hpp +++ b/include/extractor/restriction_graph.hpp @@ -2,11 +2,13 @@ #define OSRM_EXTRACTOR_RESTRICTION_GRAPH_HPP_ #include -#include #include "util/node_based_graph.hpp" +#include "util/std_hash.hpp" #include "util/typedefs.hpp" +#include + namespace osrm { namespace extractor @@ -112,10 +114,10 @@ struct RestrictionGraph RestrictionRange GetRestrictions(RestrictionID id) const; // A compressed node-based edge can only have one start node in the restriction graph. - boost::unordered_map start_edge_to_node{}; + std::unordered_map start_edge_to_node{}; // A compressed node-based edge can have multiple via nodes in the restriction graph // (as the compressed edge can appear in paths with different prefixes). - boost::unordered_multimap via_edge_to_node{}; + std::unordered_multimap via_edge_to_node{}; std::vector nodes; // TODO: Investigate reusing DynamicGraph. Currently it requires specific attributes // (e.g. reversed, weight) that would not make sense for restrictions. diff --git a/include/extractor/traffic_signals.hpp b/include/extractor/traffic_signals.hpp index 36913092c..110346dbf 100644 --- a/include/extractor/traffic_signals.hpp +++ b/include/extractor/traffic_signals.hpp @@ -4,8 +4,6 @@ #include "util/typedefs.hpp" #include -#include - namespace osrm { namespace extractor diff --git a/include/extractor/turn_path_compressor.hpp b/include/extractor/turn_path_compressor.hpp index d99130235..8f19ea6fa 100644 --- a/include/extractor/turn_path_compressor.hpp +++ b/include/extractor/turn_path_compressor.hpp @@ -3,7 +3,7 @@ #include "util/typedefs.hpp" -#include +#include #include namespace osrm @@ -43,9 +43,9 @@ class TurnPathCompressor // via nodes are the same. // Similarly, we do not compress the instruction via node in a maneuver override, as we need // this to identify the location of the maneuver during routing path-processing. - boost::unordered_multimap starts; - boost::unordered_multimap vias; - boost::unordered_multimap ends; + std::unordered_multimap starts; + std::unordered_multimap vias; + std::unordered_multimap ends; }; } // namespace extractor diff --git a/include/extractor/way_restriction_map.hpp b/include/extractor/way_restriction_map.hpp index da29aff67..1e079da4f 100644 --- a/include/extractor/way_restriction_map.hpp +++ b/include/extractor/way_restriction_map.hpp @@ -1,17 +1,17 @@ #ifndef OSRM_EXTRACTOR_WAY_RESTRICTION_MAP_HPP_ #define OSRM_EXTRACTOR_WAY_RESTRICTION_MAP_HPP_ -#include -#include - -// to access the turn restrictions -#include #include "extractor/restriction.hpp" #include "extractor/restriction_graph.hpp" #include "util/integer_range.hpp" #include "util/typedefs.hpp" +// to access the turn restrictions +#include +#include +#include + namespace osrm { namespace extractor diff --git a/src/engine/hint.cpp b/src/engine/hint.cpp index f7cad73a1..64d05783f 100644 --- a/src/engine/hint.cpp +++ b/src/engine/hint.cpp @@ -3,10 +3,10 @@ #include "engine/datafacade/datafacade_base.hpp" #include -#include #include #include +#include #include namespace osrm @@ -106,8 +106,8 @@ bool Hint::IsValid(const util::Coordinate new_input_coordinates, // Check hints do not contain duplicate segment pairs // We can't allow duplicates as search heaps do not support it. - boost::unordered_set forward_segments; - boost::unordered_set reverse_segments; + std::unordered_set forward_segments; + std::unordered_set reverse_segments; for (const auto &seg_hint : segment_hints) { const auto forward_res = forward_segments.insert(seg_hint.phantom.forward_segment_id.id); diff --git a/src/extractor/edge_based_graph_factory.cpp b/src/extractor/edge_based_graph_factory.cpp index 30650b4a4..547fece7c 100644 --- a/src/extractor/edge_based_graph_factory.cpp +++ b/src/extractor/edge_based_graph_factory.cpp @@ -34,20 +34,6 @@ #include #include -namespace std -{ -template <> struct hash> -{ - std::size_t operator()(const std::pair &mk) const noexcept - { - std::size_t seed = 0; - boost::hash_combine(seed, mk.first); - boost::hash_combine(seed, mk.second); - return seed; - } -}; -} // namespace std - namespace osrm { namespace extractor @@ -1283,7 +1269,7 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges( std::vector EdgeBasedGraphFactory::IndexConditionals(std::vector &&conditionals) const { - boost::unordered_multimap, ConditionalTurnPenalty *> index; + std::unordered_multimap, ConditionalTurnPenalty *> index; // build and index of all conditional restrictions for (auto &conditional : conditionals) From f97e18d285216baad13a632c0b7cc2161225538b Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 29 Oct 2022 23:01:38 +0200 Subject: [PATCH 06/75] Fix formatting --- include/extractor/way_restriction_map.hpp | 1 - src/engine/hint.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/include/extractor/way_restriction_map.hpp b/include/extractor/way_restriction_map.hpp index 1e079da4f..eb0feaadb 100644 --- a/include/extractor/way_restriction_map.hpp +++ b/include/extractor/way_restriction_map.hpp @@ -1,7 +1,6 @@ #ifndef OSRM_EXTRACTOR_WAY_RESTRICTION_MAP_HPP_ #define OSRM_EXTRACTOR_WAY_RESTRICTION_MAP_HPP_ - #include "extractor/restriction.hpp" #include "extractor/restriction_graph.hpp" #include "util/integer_range.hpp" diff --git a/src/engine/hint.cpp b/src/engine/hint.cpp index 64d05783f..d2bfcd330 100644 --- a/src/engine/hint.cpp +++ b/src/engine/hint.cpp @@ -6,8 +6,8 @@ #include #include -#include #include +#include namespace osrm { From 60e283312cecc4dbba03f24013f2223a739cfa1a Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 08:34:00 +0100 Subject: [PATCH 07/75] Fix typo historgram -> histogram (#6427) --- CHANGELOG.md | 1 + src/util/{timed_historgram.cpp => timed_histogram.cpp} | 0 2 files changed, 1 insertion(+) rename src/util/{timed_historgram.cpp => timed_histogram.cpp} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84a9ab3a1..cf1c10381 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/) - FIXED: Fix bindings compilation issue on the latest Node. Update NAN to 2.17.0. [#6416](https://github.com/Project-OSRM/osrm-backend/pull/6416) - CHANGED: Make edge metrics strongly typed [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) + - FIXED: Typo in file name src/util/timed_historgram.cpp -> src/util/timed_histogram.cpp [#6428](https://github.com/Project-OSRM/osrm-backend/issues/6428) - Routing: - FIXED: Fix adding traffic signal penalties during compression [#6419](https://github.com/Project-OSRM/osrm-backend/pull/6419) # 5.27.1 diff --git a/src/util/timed_historgram.cpp b/src/util/timed_histogram.cpp similarity index 100% rename from src/util/timed_historgram.cpp rename to src/util/timed_histogram.cpp From 061f0a1f14c98f392c450caafc1463d8b585e1ff Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 11:43:28 +0100 Subject: [PATCH 08/75] Fix includes --- include/extractor/traffic_signals.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/extractor/traffic_signals.hpp b/include/extractor/traffic_signals.hpp index 110346dbf..8d594c6d9 100644 --- a/include/extractor/traffic_signals.hpp +++ b/include/extractor/traffic_signals.hpp @@ -2,6 +2,8 @@ #define OSRM_EXTRACTOR_TRAFFIC_SIGNALS_HPP #include "util/typedefs.hpp" + +#include #include namespace osrm From 0021ccef59c633481bb2e81d9d12d3b5ee440c41 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 13:59:59 +0100 Subject: [PATCH 09/75] Replace boost::string_ref with std::string_view --- include/engine/api/base_api.hpp | 6 +-- include/engine/guidance/assemble_leg.hpp | 4 +- include/engine/guidance/assemble_steps.hpp | 40 ++++++++++---------- include/util/guidance/name_announcements.hpp | 5 ++- include/util/string_view.hpp | 4 +- src/engine/plugins/tile.cpp | 6 +-- 6 files changed, 33 insertions(+), 32 deletions(-) diff --git a/include/engine/api/base_api.hpp b/include/engine/api/base_api.hpp index 086c787de..9e43d311c 100644 --- a/include/engine/api/base_api.hpp +++ b/include/engine/api/base_api.hpp @@ -57,8 +57,7 @@ class BaseAPI { // TODO: check forward/reverse const auto toName = [this](const auto &phantom) { - return facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id)) - .to_string(); + return std::string(facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))); }; const auto noEmpty = [](const auto &name) { return !name.empty(); }; @@ -128,8 +127,7 @@ class BaseAPI static_cast(static_cast(util::toFloating(snapped_location.lat)))); const auto toName = [this](const auto &phantom) { - return facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id)) - .to_string(); + return std::string(facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))); }; const auto noEmpty = [](const auto &name) { return !name.empty(); }; diff --git a/include/engine/guidance/assemble_leg.hpp b/include/engine/guidance/assemble_leg.hpp index 19e7ebffe..595f09b99 100644 --- a/include/engine/guidance/assemble_leg.hpp +++ b/include/engine/guidance/assemble_leg.hpp @@ -145,11 +145,11 @@ inline std::string assembleSummary(const datafacade::BaseDataFacade &facade, const auto name_id_to_string = [&](const NameID name_id) { const auto name = facade.GetNameForID(name_id); if (!name.empty()) - return name.to_string(); + return std::string(name); else { const auto ref = facade.GetRefForID(name_id); - return ref.to_string(); + return std::string(ref); } }; diff --git a/include/engine/guidance/assemble_steps.hpp b/include/engine/guidance/assemble_steps.hpp index 18e09d972..2f1b06924 100644 --- a/include/engine/guidance/assemble_steps.hpp +++ b/include/engine/guidance/assemble_steps.hpp @@ -140,11 +140,11 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa steps.push_back(RouteStep{path_point.from_edge_based_node, step_name_id, is_segregated, - name.to_string(), - ref.to_string(), - pronunciation.to_string(), - destinations.to_string(), - exits.to_string(), + std::string(name), + std::string(ref), + std::string(pronunciation), + std::string(destinations), + std::string(exits), NO_ROTARY_NAME, NO_ROTARY_NAME, from_alias(segment_duration) / 10., @@ -241,11 +241,11 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa steps.push_back(RouteStep{leg_data[leg_data.size() - 1].from_edge_based_node, step_name_id, is_segregated, - facade.GetNameForID(step_name_id).to_string(), - facade.GetRefForID(step_name_id).to_string(), - facade.GetPronunciationForID(step_name_id).to_string(), - facade.GetDestinationsForID(step_name_id).to_string(), - facade.GetExitsForID(step_name_id).to_string(), + std::string(facade.GetNameForID(step_name_id)), + std::string(facade.GetRefForID(step_name_id)), + std::string(facade.GetPronunciationForID(step_name_id)), + std::string(facade.GetDestinationsForID(step_name_id)), + std::string(facade.GetExitsForID(step_name_id)), NO_ROTARY_NAME, NO_ROTARY_NAME, from_alias(duration) / 10., @@ -287,11 +287,11 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa steps.push_back(RouteStep{source_node_id, source_name_id, is_segregated, - facade.GetNameForID(source_name_id).to_string(), - facade.GetRefForID(source_name_id).to_string(), - facade.GetPronunciationForID(source_name_id).to_string(), - facade.GetDestinationsForID(source_name_id).to_string(), - facade.GetExitsForID(source_name_id).to_string(), + std::string(facade.GetNameForID(source_name_id)), + std::string(facade.GetRefForID(source_name_id)), + std::string(facade.GetPronunciationForID(source_name_id)), + std::string(facade.GetDestinationsForID(source_name_id)), + std::string(facade.GetExitsForID(source_name_id)), NO_ROTARY_NAME, NO_ROTARY_NAME, from_alias(duration) / 10., @@ -330,11 +330,11 @@ inline std::vector assembleSteps(const datafacade::BaseDataFacade &fa steps.push_back(RouteStep{target_node_id, target_name_id, facade.IsSegregated(target_node_id), - facade.GetNameForID(target_name_id).to_string(), - facade.GetRefForID(target_name_id).to_string(), - facade.GetPronunciationForID(target_name_id).to_string(), - facade.GetDestinationsForID(target_name_id).to_string(), - facade.GetExitsForID(target_name_id).to_string(), + std::string(facade.GetNameForID(target_name_id)), + std::string(facade.GetRefForID(target_name_id)), + std::string(facade.GetPronunciationForID(target_name_id)), + std::string(facade.GetDestinationsForID(target_name_id)), + std::string(facade.GetExitsForID(target_name_id)), NO_ROTARY_NAME, NO_ROTARY_NAME, ZERO_DURATION, diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index fa8f9db43..2b2b3794b 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -70,7 +70,10 @@ template inline auto decompose(const StringView &lhs, cons const auto trim = [](StringView view) { // we compare suffixes based on this value, it might break UTF chars, but as long as we are // consistent in handling, we do not create bad results - std::string str = boost::to_lower_copy(view.to_string()); + std::string str(view); + std::transform(str.begin(), str.end(), str.begin(), + [](unsigned char c){ return std::tolower(c); } // correct + ); auto front = str.find_first_not_of(' '); if (front == std::string::npos) diff --git a/include/util/string_view.hpp b/include/util/string_view.hpp index c7ab0df3d..d1cf4cb96 100644 --- a/include/util/string_view.hpp +++ b/include/util/string_view.hpp @@ -2,14 +2,14 @@ #define OSRM_STRING_VIEW_HPP #include -#include +#include namespace osrm { namespace util { // Convenience typedef: boost::string_ref, boost::string_view or C++17's string_view -using StringView = boost::string_ref; +using StringView = std::string_view; } // namespace util } // namespace osrm diff --git a/src/engine/plugins/tile.cpp b/src/engine/plugins/tile.cpp index f932abe73..d69dacec5 100644 --- a/src/engine/plugins/tile.cpp +++ b/src/engine/plugins/tile.cpp @@ -340,7 +340,7 @@ class SpeedLayerFeatureBuilder : public vtzero::linestring_feature_builder add_property(m_layer.key_duration, m_layer.double_index(value)); } - void set_name(const boost::string_ref &value) + void set_name(const std::string_view value) { add_property( m_layer.key_name, @@ -518,7 +518,7 @@ void encodeVectorTile(const DataFacadeBase &facade, fbuilder.set_speed(speed_kmh_idx); fbuilder.set_is_small(component_id.is_tiny); fbuilder.set_datasource( - facade.GetDatasourceName(forward_datasource_idx).to_string()); + std::string(facade.GetDatasourceName(forward_datasource_idx))); fbuilder.set_weight(from_alias(forward_weight) / 10.0); fbuilder.set_duration(from_alias(forward_duration) / 10.0); fbuilder.set_name(name); @@ -552,7 +552,7 @@ void encodeVectorTile(const DataFacadeBase &facade, fbuilder.set_speed(speed_kmh_idx); fbuilder.set_is_small(component_id.is_tiny); fbuilder.set_datasource( - facade.GetDatasourceName(reverse_datasource_idx).to_string()); + std::string(facade.GetDatasourceName(reverse_datasource_idx))); fbuilder.set_weight(from_alias(reverse_weight) / 10.0); fbuilder.set_duration(from_alias(reverse_duration) / 10.0); fbuilder.set_name(name); From 91e9623b31a61ca5f3188ee60dfb50737d6036ac Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 14:06:19 +0100 Subject: [PATCH 10/75] Fix formatting --- include/engine/api/base_api.hpp | 8 +++++--- include/util/guidance/name_announcements.hpp | 6 ++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/engine/api/base_api.hpp b/include/engine/api/base_api.hpp index 9e43d311c..556b3e41c 100644 --- a/include/engine/api/base_api.hpp +++ b/include/engine/api/base_api.hpp @@ -57,7 +57,8 @@ class BaseAPI { // TODO: check forward/reverse const auto toName = [this](const auto &phantom) { - return std::string(facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))); + return std::string( + facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))); }; const auto noEmpty = [](const auto &name) { return !name.empty(); }; @@ -127,8 +128,9 @@ class BaseAPI static_cast(static_cast(util::toFloating(snapped_location.lat)))); const auto toName = [this](const auto &phantom) { - return std::string(facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))); - }; + return std::string( + facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))); + }; const auto noEmpty = [](const auto &name) { return !name.empty(); }; // At an intersection we may have multiple phantom node candidates. diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index 2b2b3794b..3fee48512 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -71,8 +71,10 @@ template inline auto decompose(const StringView &lhs, cons // we compare suffixes based on this value, it might break UTF chars, but as long as we are // consistent in handling, we do not create bad results std::string str(view); - std::transform(str.begin(), str.end(), str.begin(), - [](unsigned char c){ return std::tolower(c); } // correct + std::transform(str.begin(), + str.end(), + str.begin(), + [](unsigned char c) { return std::tolower(c); } ); auto front = str.find_first_not_of(' '); From d06b23d819ff2aea50a38abd189e8aaadce8a97c Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 14:08:17 +0100 Subject: [PATCH 11/75] More fixes --- include/engine/api/base_api.hpp | 2 +- include/util/guidance/name_announcements.hpp | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/include/engine/api/base_api.hpp b/include/engine/api/base_api.hpp index 556b3e41c..0cd066d0f 100644 --- a/include/engine/api/base_api.hpp +++ b/include/engine/api/base_api.hpp @@ -130,7 +130,7 @@ class BaseAPI const auto toName = [this](const auto &phantom) { return std::string( facade.GetNameForID(facade.GetNameIndex(phantom.forward_segment_id.id))); - }; + }; const auto noEmpty = [](const auto &name) { return !name.empty(); }; // At an intersection we may have multiple phantom node candidates. diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index 3fee48512..112da7f8c 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -71,10 +71,8 @@ template inline auto decompose(const StringView &lhs, cons // we compare suffixes based on this value, it might break UTF chars, but as long as we are // consistent in handling, we do not create bad results std::string str(view); - std::transform(str.begin(), - str.end(), - str.begin(), - [](unsigned char c) { return std::tolower(c); } + std::transform( + str.begin(), str.end(), str.begin(), [](unsigned char c) { return std::tolower(c); }); ); auto front = str.find_first_not_of(' '); From 274dcc58a5fc6db5931cb990608a246d1e2deaf6 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 19:21:06 +0100 Subject: [PATCH 12/75] Remove superflous std::hash specialization --- include/util/guidance/name_announcements.hpp | 1 - include/util/string_view.hpp | 17 ----------------- 2 files changed, 18 deletions(-) diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index 112da7f8c..fceff6b03 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -73,7 +73,6 @@ template inline auto decompose(const StringView &lhs, cons std::string str(view); std::transform( str.begin(), str.end(), str.begin(), [](unsigned char c) { return std::tolower(c); }); - ); auto front = str.find_first_not_of(' '); if (front == std::string::npos) diff --git a/include/util/string_view.hpp b/include/util/string_view.hpp index d1cf4cb96..21f34ca5c 100644 --- a/include/util/string_view.hpp +++ b/include/util/string_view.hpp @@ -14,21 +14,4 @@ using StringView = std::string_view; } // namespace util } // namespace osrm -// Specializing hash<> for user-defined type in std namespace, this is standard conforming. -namespace std -{ -template <> struct hash<::osrm::util::StringView> final -{ - std::size_t operator()(::osrm::util::StringView v) const noexcept - { - // Bring into scope and call un-qualified for ADL: - // remember we want to be able to switch impl. above. - using std::begin; - using std::end; - - return boost::hash_range(begin(v), end(v)); - } -}; -} // namespace std - #endif /* OSRM_STRING_VIEW_HPP */ From 5c9d0d152c1f26f2d328363345ba8538b1b84ee7 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 19:52:57 +0100 Subject: [PATCH 13/75] Remove usage of StringView typedef --- .../contiguous_internalmem_datafacade.hpp | 14 +++++------ include/engine/datafacade/datafacade_base.hpp | 14 +++++------ include/extractor/datasources.hpp | 4 ++-- include/extractor/name_table.hpp | 12 +++++----- include/extractor/suffix_table.hpp | 4 ++-- include/storage/view_factory.hpp | 2 +- include/util/guidance/name_announcements.hpp | 24 +++++++++---------- include/util/indexed_data.hpp | 4 ++-- include/util/string_view.hpp | 2 +- src/extractor/suffix_table.cpp | 6 ++--- ...segregated_intersection_classification.cpp | 2 +- unit_tests/engine/offline_facade.cpp | 12 +++++----- unit_tests/mocks/mock_datafacade.hpp | 14 +++++------ unit_tests/util/indexed_data.cpp | 2 +- 14 files changed, 56 insertions(+), 60 deletions(-) diff --git a/include/engine/datafacade/contiguous_internalmem_datafacade.hpp b/include/engine/datafacade/contiguous_internalmem_datafacade.hpp index 0548e0569..48d00e0c1 100644 --- a/include/engine/datafacade/contiguous_internalmem_datafacade.hpp +++ b/include/engine/datafacade/contiguous_internalmem_datafacade.hpp @@ -142,7 +142,7 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade extractor::Datasources *m_datasources; std::uint32_t m_check_sum; - StringView m_data_timestamp; + std::string_view m_data_timestamp; util::vector_view m_coordinate_list; extractor::PackedOSMIDsView m_osmnodeid_list; util::vector_view m_lane_description_offsets; @@ -408,32 +408,32 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade return edge_based_node_data.GetNameID(edge_based_node_id); } - StringView GetNameForID(const NameID id) const override final + std::string_view GetNameForID(const NameID id) const override final { return m_name_table.GetNameForID(id); } - StringView GetRefForID(const NameID id) const override final + std::string_view GetRefForID(const NameID id) const override final { return m_name_table.GetRefForID(id); } - StringView GetPronunciationForID(const NameID id) const override final + std::string_view GetPronunciationForID(const NameID id) const override final { return m_name_table.GetPronunciationForID(id); } - StringView GetDestinationsForID(const NameID id) const override final + std::string_view GetDestinationsForID(const NameID id) const override final { return m_name_table.GetDestinationsForID(id); } - StringView GetExitsForID(const NameID id) const override final + std::string_view GetExitsForID(const NameID id) const override final { return m_name_table.GetExitsForID(id); } - StringView GetDatasourceName(const DatasourceID id) const override final + std::string_view GetDatasourceName(const DatasourceID id) const override final { return m_datasources->GetSourceName(id); } diff --git a/include/engine/datafacade/datafacade_base.hpp b/include/engine/datafacade/datafacade_base.hpp index 936ccf0c2..7e9e69c88 100644 --- a/include/engine/datafacade/datafacade_base.hpp +++ b/include/engine/datafacade/datafacade_base.hpp @@ -47,8 +47,6 @@ namespace engine namespace datafacade { -using StringView = util::StringView; - class BaseDataFacade { public: @@ -113,7 +111,7 @@ class BaseDataFacade GetUncompressedReverseDatasources(const PackedGeometryID id) const = 0; // Gets the name of a datasource - virtual StringView GetDatasourceName(const DatasourceID id) const = 0; + virtual std::string_view GetDatasourceName(const DatasourceID id) const = 0; virtual osrm::guidance::TurnInstruction GetTurnInstructionForEdgeID(const EdgeID edge_based_edge_id) const = 0; @@ -157,15 +155,15 @@ class BaseDataFacade virtual NameID GetNameIndex(const NodeID edge_based_node_id) const = 0; - virtual StringView GetNameForID(const NameID id) const = 0; + virtual std::string_view GetNameForID(const NameID id) const = 0; - virtual StringView GetRefForID(const NameID id) const = 0; + virtual std::string_view GetRefForID(const NameID id) const = 0; - virtual StringView GetPronunciationForID(const NameID id) const = 0; + virtual std::string_view GetPronunciationForID(const NameID id) const = 0; - virtual StringView GetDestinationsForID(const NameID id) const = 0; + virtual std::string_view GetDestinationsForID(const NameID id) const = 0; - virtual StringView GetExitsForID(const NameID id) const = 0; + virtual std::string_view GetExitsForID(const NameID id) const = 0; virtual bool GetContinueStraightDefault() const = 0; diff --git a/include/extractor/datasources.hpp b/include/extractor/datasources.hpp index a4f872656..844ceae0f 100644 --- a/include/extractor/datasources.hpp +++ b/include/extractor/datasources.hpp @@ -22,11 +22,11 @@ class Datasources std::fill(sources.begin(), sources.end(), '\0'); } - util::StringView GetSourceName(DatasourceID id) const + std::string_view GetSourceName(DatasourceID id) const { auto begin = sources.data() + (MAX_LENGTH_NAME * id); - return util::StringView{begin, lengths[id]}; + return std::string_view{begin, lengths[id]}; } void SetSourceName(DatasourceID id, const std::string &name) diff --git a/include/extractor/name_table.hpp b/include/extractor/name_table.hpp index ff0d27ae1..35e966ee1 100644 --- a/include/extractor/name_table.hpp +++ b/include/extractor/name_table.hpp @@ -50,7 +50,7 @@ template class NameTableImpl { public: using IndexedData = - util::detail::IndexedDataImpl, Ownership>; + util::detail::IndexedDataImpl, Ownership>; using ResultType = typename IndexedData::ResultType; using ValueType = typename IndexedData::ValueType; @@ -58,7 +58,7 @@ template class NameTableImpl NameTableImpl(IndexedData indexed_data_) : indexed_data{std::move(indexed_data_)} {} - util::StringView GetNameForID(const NameID id) const + std::string_view GetNameForID(const NameID id) const { if (id == INVALID_NAMEID) return {}; @@ -66,7 +66,7 @@ template class NameTableImpl return indexed_data.at(id + 0); } - util::StringView GetDestinationsForID(const NameID id) const + std::string_view GetDestinationsForID(const NameID id) const { if (id == INVALID_NAMEID) return {}; @@ -74,7 +74,7 @@ template class NameTableImpl return indexed_data.at(id + 1); } - util::StringView GetExitsForID(const NameID id) const + std::string_view GetExitsForID(const NameID id) const { if (id == INVALID_NAMEID) return {}; @@ -82,7 +82,7 @@ template class NameTableImpl return indexed_data.at(id + 4); } - util::StringView GetRefForID(const NameID id) const + std::string_view GetRefForID(const NameID id) const { if (id == INVALID_NAMEID) return {}; @@ -91,7 +91,7 @@ template class NameTableImpl return indexed_data.at(id + OFFSET_REF); } - util::StringView GetPronunciationForID(const NameID id) const + std::string_view GetPronunciationForID(const NameID id) const { if (id == INVALID_NAMEID) return {}; diff --git a/include/extractor/suffix_table.hpp b/include/extractor/suffix_table.hpp index 5d16fe6b7..52dc4eec4 100644 --- a/include/extractor/suffix_table.hpp +++ b/include/extractor/suffix_table.hpp @@ -23,7 +23,7 @@ class SuffixTable final // check whether a string is part of the know suffix list bool isSuffix(const std::string &possible_suffix) const; - bool isSuffix(util::StringView possible_suffix) const; + bool isSuffix(std::string_view possible_suffix) const; private: // Store lower-cased strings in SuffixTable and a set of StringViews for quick membership @@ -36,7 +36,7 @@ class SuffixTable final // require us to first convert StringViews into strings (allocation), do the membership, // and destroy the StringView again. std::vector suffixes; - std::unordered_set suffix_set; + std::unordered_set suffix_set; }; } /* namespace extractor */ diff --git a/include/storage/view_factory.hpp b/include/storage/view_factory.hpp index bbc490ce3..80db376bf 100644 --- a/include/storage/view_factory.hpp +++ b/include/storage/view_factory.hpp @@ -263,7 +263,7 @@ inline auto make_partition_view(const SharedDataIndex &index, const std::string inline auto make_timestamp_view(const SharedDataIndex &index, const std::string &name) { - return util::StringView(index.GetBlockPtr(name), index.GetBlockEntries(name)); + return std::string_view(index.GetBlockPtr(name), index.GetBlockEntries(name)); } inline auto make_cell_storage_view(const SharedDataIndex &index, const std::string &name) diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index fceff6b03..06639310d 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -27,8 +27,8 @@ namespace guidance // Name Change Logic // Used both during Extraction as well as during Post-Processing -inline util::StringView longest_common_substring(const util::StringView &lhs, - const util::StringView &rhs) +inline std::string_view longest_common_substring(const std::string_view &lhs, + const std::string_view &rhs) { if (lhs.empty() || rhs.empty()) return ""; @@ -132,7 +132,7 @@ inline bool requiresNameAnnounced(const StringView &from_name, boost::starts_with(from_name, to_name) || boost::starts_with(to_name, from_name); const auto checkForPrefixOrSuffixChange = - [](const StringView &first, const StringView &second, const SuffixTable &suffix_table) { + [](const std::string_view &first, const std::string_view &second, const SuffixTable &suffix_table) { std::string first_prefix, first_suffix, second_prefix, second_suffix; std::tie(first_prefix, first_suffix, second_prefix, second_suffix) = decompose(first, second); @@ -203,17 +203,17 @@ inline bool requiresNameAnnounced(const std::string &from_name, struct NopSuffixTable final { NopSuffixTable() {} - bool isSuffix(const StringView &) const { return false; } + bool isSuffix(const std::string_view &) const { return false; } } static const table; - return requiresNameAnnounced(util::StringView(from_name), - util::StringView(from_ref), - util::StringView(from_pronunciation), - util::StringView(from_exits), - util::StringView(to_name), - util::StringView(to_ref), - util::StringView(to_pronunciation), - util::StringView(to_exits), + return requiresNameAnnounced(std::string_view(from_name), + std::string_view(from_ref), + std::string_view(from_pronunciation), + std::string_view(from_exits), + std::string_view(to_name), + std::string_view(to_ref), + std::string_view(to_pronunciation), + std::string_view(to_exits), table); } diff --git a/include/util/indexed_data.hpp b/include/util/indexed_data.hpp index 5ce5bd4b3..d62105d42 100644 --- a/include/util/indexed_data.hpp +++ b/include/util/indexed_data.hpp @@ -365,14 +365,14 @@ template struct Indexe std::enable_if_t::value_type>::value>; template > - typename std::enable_if::value, T>::type + typename std::enable_if::value, T>::type adapt(const Iter first, const Iter last) const { return ResultType(first, last); } template > - typename std::enable_if::value, T>::type + typename std::enable_if::value, T>::type adapt(const Iter first, const Iter last) const { auto diff = std::distance(first, last); diff --git a/include/util/string_view.hpp b/include/util/string_view.hpp index 21f34ca5c..77cbdb200 100644 --- a/include/util/string_view.hpp +++ b/include/util/string_view.hpp @@ -9,7 +9,7 @@ namespace osrm namespace util { // Convenience typedef: boost::string_ref, boost::string_view or C++17's string_view -using StringView = std::string_view; +// using StringView = std::string_view; } // namespace util } // namespace osrm diff --git a/src/extractor/suffix_table.cpp b/src/extractor/suffix_table.cpp index 26f9afd91..a835562f9 100644 --- a/src/extractor/suffix_table.cpp +++ b/src/extractor/suffix_table.cpp @@ -19,16 +19,16 @@ SuffixTable::SuffixTable(ScriptingEnvironment &scripting_environment) boost::algorithm::to_lower(suffix); auto into = std::inserter(suffix_set, end(suffix_set)); - auto to_view = [](const auto &s) { return util::StringView{s}; }; + auto to_view = [](const auto &s) { return std::string_view{s}; }; std::transform(begin(suffixes), end(suffixes), into, to_view); } bool SuffixTable::isSuffix(const std::string &possible_suffix) const { - return isSuffix(util::StringView{possible_suffix}); + return isSuffix(std::string_view{possible_suffix}); } -bool SuffixTable::isSuffix(util::StringView possible_suffix) const +bool SuffixTable::isSuffix(std::string_view possible_suffix) const { return suffix_set.count(possible_suffix) > 0; } diff --git a/src/guidance/segregated_intersection_classification.cpp b/src/guidance/segregated_intersection_classification.cpp index b87d19a35..f9411a912 100644 --- a/src/guidance/segregated_intersection_classification.cpp +++ b/src/guidance/segregated_intersection_classification.cpp @@ -24,7 +24,7 @@ struct EdgeInfo NodeID node; - util::StringView name; + std::string_view name; bool reversed; diff --git a/unit_tests/engine/offline_facade.cpp b/unit_tests/engine/offline_facade.cpp index e4b0a2be7..df30dc9a4 100644 --- a/unit_tests/engine/offline_facade.cpp +++ b/unit_tests/engine/offline_facade.cpp @@ -203,7 +203,7 @@ class ContiguousInternalMemoryDataFacade return DatasourceReverseRange(DatasourceForwardRange()); } - StringView GetDatasourceName(const DatasourceID /*id*/) const override { return StringView{}; } + std::string_view GetDatasourceName(const DatasourceID /*id*/) const override { return std::string_view{}; } guidance::TurnInstruction GetTurnInstructionForEdgeID(const EdgeID /*id*/) const override { @@ -270,11 +270,11 @@ class ContiguousInternalMemoryDataFacade bool HasLaneData(const EdgeID /*id*/) const override { return false; } NameID GetNameIndex(const NodeID /*nodeID*/) const override { return EMPTY_NAMEID; } - StringView GetNameForID(const NameID /*id*/) const override { return StringView{}; } - StringView GetRefForID(const NameID /*id*/) const override { return StringView{}; } - StringView GetPronunciationForID(const NameID /*id*/) const override { return StringView{}; } - StringView GetDestinationsForID(const NameID /*id*/) const override { return StringView{}; } - StringView GetExitsForID(const NameID /*id*/) const override { return StringView{}; } + std::string_view GetNameForID(const NameID /*id*/) const override { return std::string_view{}; } + std::string_view GetRefForID(const NameID /*id*/) const override { return std::string_view{}; } + std::string_view GetPronunciationForID(const NameID /*id*/) const override { return std::string_view{}; } + std::string_view GetDestinationsForID(const NameID /*id*/) const override { return std::string_view{}; } + std::string_view GetExitsForID(const NameID /*id*/) const override { return std::string_view{}; } bool GetContinueStraightDefault() const override { return false; } std::string GetTimestamp() const override { return ""; } double GetMapMatchingMaxSpeed() const override { return 0; } diff --git a/unit_tests/mocks/mock_datafacade.hpp b/unit_tests/mocks/mock_datafacade.hpp index bfaf41415..81471835b 100644 --- a/unit_tests/mocks/mock_datafacade.hpp +++ b/unit_tests/mocks/mock_datafacade.hpp @@ -26,8 +26,6 @@ namespace test class MockBaseDataFacade : public engine::datafacade::BaseDataFacade { - using StringView = util::StringView; - public: bool ExcludeNode(const NodeID) const override { return false; }; @@ -95,7 +93,7 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade return DatasourceReverseRange(DatasourceForwardRange()); } - StringView GetDatasourceName(const DatasourceID) const override final { return {}; } + std::string_view GetDatasourceName(const DatasourceID) const override final { return {}; } osrm::guidance::TurnInstruction GetTurnInstructionForEdgeID(const EdgeID /* id */) const override @@ -154,11 +152,11 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade NameID GetNameIndex(const NodeID /* id */) const override { return 0; } - StringView GetNameForID(const NameID) const override final { return {}; } - StringView GetRefForID(const NameID) const override final { return {}; } - StringView GetPronunciationForID(const NameID) const override final { return {}; } - StringView GetDestinationsForID(const NameID) const override final { return {}; } - StringView GetExitsForID(const NameID) const override final { return {}; } + std::string_view GetNameForID(const NameID) const override final { return {}; } + std::string_view GetRefForID(const NameID) const override final { return {}; } + std::string_view GetPronunciationForID(const NameID) const override final { return {}; } + std::string_view GetDestinationsForID(const NameID) const override final { return {}; } + std::string_view GetExitsForID(const NameID) const override final { return {}; } bool GetContinueStraightDefault() const override { return true; } double GetMapMatchingMaxSpeed() const override { return 180 / 3.6; } diff --git a/unit_tests/util/indexed_data.cpp b/unit_tests/util/indexed_data.cpp index 6d9eecbe9..40b79f9be 100644 --- a/unit_tests/util/indexed_data.cpp +++ b/unit_tests/util/indexed_data.cpp @@ -136,7 +136,7 @@ BOOST_AUTO_TEST_CASE(check_string_view) std::string name_data = "hellostringview"; std::vector name_offsets = {0, 5, 11, 15}; - IndexedData> indexed_data( + IndexedData> indexed_data( name_offsets.begin(), name_offsets.end(), name_data.begin()); BOOST_CHECK_EQUAL(indexed_data.at(0), "hello"); From 565959b3896945a0eb437cc799b697be023121ef Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 20:01:46 +0100 Subject: [PATCH 14/75] Remove util/string_view header --- include/engine/datafacade/datafacade_base.hpp | 2 +- include/extractor/datasources.hpp | 5 +++-- include/extractor/name_table.hpp | 2 +- include/extractor/suffix_table.hpp | 4 ++-- include/util/indexed_data.hpp | 2 +- include/util/string_view.hpp | 17 ----------------- src/engine/plugins/tile.cpp | 2 +- 7 files changed, 9 insertions(+), 25 deletions(-) delete mode 100644 include/util/string_view.hpp diff --git a/include/engine/datafacade/datafacade_base.hpp b/include/engine/datafacade/datafacade_base.hpp index 7e9e69c88..8ecd5946e 100644 --- a/include/engine/datafacade/datafacade_base.hpp +++ b/include/engine/datafacade/datafacade_base.hpp @@ -26,7 +26,6 @@ #include "util/integer_range.hpp" #include "util/packed_vector.hpp" #include "util/string_util.hpp" -#include "util/string_view.hpp" #include "util/typedefs.hpp" #include "osrm/coordinate.hpp" @@ -37,6 +36,7 @@ #include #include +#include #include #include diff --git a/include/extractor/datasources.hpp b/include/extractor/datasources.hpp index 844ceae0f..ea53fc3e4 100644 --- a/include/extractor/datasources.hpp +++ b/include/extractor/datasources.hpp @@ -1,9 +1,10 @@ #ifndef OSRM_EXTRACT_DATASOURCES_HPP #define OSRM_EXTRACT_DATASOURCES_HPP +#include "util/typedefs.hpp" + #include -#include -#include +#include namespace osrm { diff --git a/include/extractor/name_table.hpp b/include/extractor/name_table.hpp index 35e966ee1..44cc06f89 100644 --- a/include/extractor/name_table.hpp +++ b/include/extractor/name_table.hpp @@ -2,10 +2,10 @@ #define OSRM_EXTRACTOR_NAME_TABLE_HPP #include "util/indexed_data.hpp" -#include "util/string_view.hpp" #include "util/typedefs.hpp" #include +#include namespace osrm { diff --git a/include/extractor/suffix_table.hpp b/include/extractor/suffix_table.hpp index 52dc4eec4..cadfb5e2e 100644 --- a/include/extractor/suffix_table.hpp +++ b/include/extractor/suffix_table.hpp @@ -2,9 +2,9 @@ #define OSRM_EXTRACTOR_SUFFIX_LIST_HPP_ #include +#include #include - -#include "util/string_view.hpp" +#include namespace osrm { diff --git a/include/util/indexed_data.hpp b/include/util/indexed_data.hpp index d62105d42..a09425b33 100644 --- a/include/util/indexed_data.hpp +++ b/include/util/indexed_data.hpp @@ -4,7 +4,6 @@ #include "storage/tar_fwd.hpp" #include "util/exception.hpp" -#include "util/string_view.hpp" #include "util/vector_view.hpp" #include @@ -14,6 +13,7 @@ #include #include #include +#include #include namespace osrm diff --git a/include/util/string_view.hpp b/include/util/string_view.hpp deleted file mode 100644 index 77cbdb200..000000000 --- a/include/util/string_view.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef OSRM_STRING_VIEW_HPP -#define OSRM_STRING_VIEW_HPP - -#include -#include - -namespace osrm -{ -namespace util -{ -// Convenience typedef: boost::string_ref, boost::string_view or C++17's string_view -// using StringView = std::string_view; - -} // namespace util -} // namespace osrm - -#endif /* OSRM_STRING_VIEW_HPP */ diff --git a/src/engine/plugins/tile.cpp b/src/engine/plugins/tile.cpp index d69dacec5..94490662a 100644 --- a/src/engine/plugins/tile.cpp +++ b/src/engine/plugins/tile.cpp @@ -4,7 +4,6 @@ #include "engine/plugins/tile.hpp" #include "util/coordinate_calculation.hpp" -#include "util/string_view.hpp" #include "util/vector_tile.hpp" #include "util/web_mercator.hpp" @@ -20,6 +19,7 @@ #include #include #include +#include #include #include From 7149547645317341b642a08be12372ce667953cf Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 20:10:09 +0100 Subject: [PATCH 15/75] Fix formatting --- include/util/guidance/name_announcements.hpp | 24 ++++++++++---------- unit_tests/engine/offline_facade.cpp | 20 ++++++++++++---- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index 06639310d..83f604144 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -131,19 +131,19 @@ inline bool requiresNameAnnounced(const StringView &from_name, const auto name_is_contained = boost::starts_with(from_name, to_name) || boost::starts_with(to_name, from_name); - const auto checkForPrefixOrSuffixChange = - [](const std::string_view &first, const std::string_view &second, const SuffixTable &suffix_table) { - std::string first_prefix, first_suffix, second_prefix, second_suffix; - std::tie(first_prefix, first_suffix, second_prefix, second_suffix) = - decompose(first, second); - - const auto checkTable = [&](const std::string &str) { - return str.empty() || suffix_table.isSuffix(str); - }; - - return checkTable(first_prefix) && checkTable(first_suffix) && - checkTable(second_prefix) && checkTable(second_suffix); + const auto checkForPrefixOrSuffixChange = [](const std::string_view &first, + const std::string_view &second, + const SuffixTable &suffix_table) { + std::string first_prefix, first_suffix, second_prefix, second_suffix; + std::tie(first_prefix, first_suffix, second_prefix, second_suffix) = + decompose(first, second); + const auto checkTable = [&](const std::string &str) { + return str.empty() || suffix_table.isSuffix(str); }; + + return checkTable(first_prefix) && checkTable(first_suffix) && checkTable(second_prefix) && + checkTable(second_suffix); + }; const auto is_suffix_change = checkForPrefixOrSuffixChange(from_name, to_name, suffix_table); const auto names_are_equal = from_name == to_name || name_is_contained || is_suffix_change; diff --git a/unit_tests/engine/offline_facade.cpp b/unit_tests/engine/offline_facade.cpp index df30dc9a4..afe1c7253 100644 --- a/unit_tests/engine/offline_facade.cpp +++ b/unit_tests/engine/offline_facade.cpp @@ -203,7 +203,10 @@ class ContiguousInternalMemoryDataFacade return DatasourceReverseRange(DatasourceForwardRange()); } - std::string_view GetDatasourceName(const DatasourceID /*id*/) const override { return std::string_view{}; } + std::string_view GetDatasourceName(const DatasourceID /*id*/) const override + { + return std::string_view{}; + } guidance::TurnInstruction GetTurnInstructionForEdgeID(const EdgeID /*id*/) const override { @@ -272,9 +275,18 @@ class ContiguousInternalMemoryDataFacade NameID GetNameIndex(const NodeID /*nodeID*/) const override { return EMPTY_NAMEID; } std::string_view GetNameForID(const NameID /*id*/) const override { return std::string_view{}; } std::string_view GetRefForID(const NameID /*id*/) const override { return std::string_view{}; } - std::string_view GetPronunciationForID(const NameID /*id*/) const override { return std::string_view{}; } - std::string_view GetDestinationsForID(const NameID /*id*/) const override { return std::string_view{}; } - std::string_view GetExitsForID(const NameID /*id*/) const override { return std::string_view{}; } + std::string_view GetPronunciationForID(const NameID /*id*/) const override + { + return std::string_view{}; + } + std::string_view GetDestinationsForID(const NameID /*id*/) const override + { + return std::string_view{}; + } + std::string_view GetExitsForID(const NameID /*id*/) const override + { + return std::string_view{}; + } bool GetContinueStraightDefault() const override { return false; } std::string GetTimestamp() const override { return ""; } double GetMapMatchingMaxSpeed() const override { return 0; } From 12f49d6f24e20d397af2849e4adaa221f9faeb1c Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 20:11:36 +0100 Subject: [PATCH 16/75] Stray whitespace --- include/util/guidance/name_announcements.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index 83f604144..1ebf8a64a 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -140,7 +140,7 @@ inline bool requiresNameAnnounced(const StringView &from_name, const auto checkTable = [&](const std::string &str) { return str.empty() || suffix_table.isSuffix(str); }; - + return checkTable(first_prefix) && checkTable(first_suffix) && checkTable(second_prefix) && checkTable(second_suffix); }; From 85e6a854aa2e3c97d200748b02798bb115673478 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 30 Oct 2022 22:08:29 +0100 Subject: [PATCH 17/75] Fix missing includes (on Windows) --- include/extractor/datasources.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/extractor/datasources.hpp b/include/extractor/datasources.hpp index ea53fc3e4..ded71b611 100644 --- a/include/extractor/datasources.hpp +++ b/include/extractor/datasources.hpp @@ -3,6 +3,8 @@ #include "util/typedefs.hpp" +#include +#include #include #include From afe34456b9993d465d37ea3898fee1db6a2b5561 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Mon, 31 Oct 2022 13:22:13 +0100 Subject: [PATCH 18/75] Delete CloudFormation templates (#6435) There is no need in them - it seems they were needed to manage some Mapbox S3 bucket which we have no access to anyway. --- cloudformation/ci.template | 75 ----------------------------------- cloudformation/ci.template.js | 59 --------------------------- 2 files changed, 134 deletions(-) delete mode 100644 cloudformation/ci.template delete mode 100644 cloudformation/ci.template.js diff --git a/cloudformation/ci.template b/cloudformation/ci.template deleted file mode 100644 index bb9d52829..000000000 --- a/cloudformation/ci.template +++ /dev/null @@ -1,75 +0,0 @@ -{ - "AWSTemplateFormatVersion": "2010-09-09", - "Description": "user for publishing to s3://mapbox-node-binary/osrm", - "Resources": { - "User": { - "Type": "AWS::IAM::User", - "Properties": { - "Policies": [ - { - "PolicyName": "list", - "PolicyDocument": { - "Statement": [ - { - "Action": [ - "s3:ListBucket" - ], - "Effect": "Allow", - "Resource": "arn:aws:s3:::mapbox-node-binary", - "Condition": { - "StringLike": { - "s3:prefix": [ - "osrm/*" - ] - } - } - } - ] - } - }, - { - "PolicyName": "publish", - "PolicyDocument": { - "Statement": [ - { - "Action": [ - "s3:DeleteObject", - "s3:GetObject", - "s3:GetObjectAcl", - "s3:PutObject", - "s3:PutObjectAcl" - ], - "Effect": "Allow", - "Resource": "arn:aws:s3:::mapbox-node-binary/osrm/*" - } - ] - } - } - ] - } - }, - "AccessKey": { - "Type": "AWS::IAM::AccessKey", - "Properties": { - "UserName": { - "Ref": "User" - } - } - } - }, - "Outputs": { - "AccessKeyId": { - "Value": { - "Ref": "AccessKey" - } - }, - "SecretAccessKey": { - "Value": { - "Fn::GetAtt": [ - "AccessKey", - "SecretAccessKey" - ] - } - } - } -} diff --git a/cloudformation/ci.template.js b/cloudformation/ci.template.js deleted file mode 100644 index 719e80071..000000000 --- a/cloudformation/ci.template.js +++ /dev/null @@ -1,59 +0,0 @@ -var cf = require('@mapbox/cloudfriend'); -var package_json = require('../package.json') - -module.exports = { - AWSTemplateFormatVersion: '2010-09-09', - Description: 'user for publishing to s3://mapbox-node-binary/' + package_json.name, - Resources: { - User: { - Type: 'AWS::IAM::User', - Properties: { - Policies: [ - { - PolicyName: 'list', - PolicyDocument: { - Statement: [ - { - Action: ['s3:ListBucket'], - Effect: 'Allow', - Resource: 'arn:aws:s3:::mapbox-node-binary', - Condition : { - StringLike : { - "s3:prefix": [ package_json.name + "/*"] - } - } - } - ] - } - }, - { - PolicyName: 'publish', - PolicyDocument: { - Statement: [ - { - Action: ['s3:DeleteObject', 's3:GetObject', 's3:GetObjectAcl', 's3:PutObject', 's3:PutObjectAcl'], - Effect: 'Allow', - Resource: 'arn:aws:s3:::mapbox-node-binary/' + package_json.name + '/*' - } - ] - } - } - ] - } - }, - AccessKey: { - Type: 'AWS::IAM::AccessKey', - Properties: { - UserName: cf.ref('User') - } - } - }, - Outputs: { - AccessKeyId: { - Value: cf.ref('AccessKey') - }, - SecretAccessKey: { - Value: cf.getAtt('AccessKey', 'SecretAccessKey') - } - } -}; From 54d486ae125b434c817cd2851d9615d66fa0f2ac Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Tue, 1 Nov 2022 08:23:08 +0100 Subject: [PATCH 19/75] Drop support of Node 12 & 14 (#6431) --- .github/workflows/osrm-backend.yml | 199 +- CHANGELOG.md | 1 + package-lock.json | 19067 ++++++++++++++++++++++++++- 3 files changed, 19055 insertions(+), 212 deletions(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 057edd241..04fd49686 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -73,11 +73,11 @@ jobs: format-taginfo-docs: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v3 with: - node-version: 12 + node-version: 16 - name: Enable Node.js cache uses: actions/cache@v3 with: @@ -146,7 +146,7 @@ jobs: include: - name: gcc-9-debug-cov continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Debug @@ -157,7 +157,7 @@ jobs: - name: gcc-9-debug-asan-ubsan continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Debug @@ -171,7 +171,7 @@ jobs: - name: clang-6.0-debug continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Debug @@ -181,7 +181,7 @@ jobs: - name: clang-11.0-debug-clang-tidy continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-22.04 BUILD_TOOLS: ON BUILD_TYPE: Debug @@ -192,7 +192,7 @@ jobs: - name: conan-linux-debug-asan-ubsan continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release @@ -203,7 +203,7 @@ jobs: - name: conan-linux-release continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release @@ -213,7 +213,7 @@ jobs: - name: gcc-11-release continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release @@ -223,7 +223,7 @@ jobs: - name: gcc-10-release continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release @@ -232,7 +232,7 @@ jobs: - name: gcc-9-release continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release @@ -242,7 +242,7 @@ jobs: - name: gcc-9-conan-release-i686 continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release @@ -255,7 +255,7 @@ jobs: - name: gcc-8-release continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release @@ -265,39 +265,13 @@ jobs: - name: gcc-7-release continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release CCOMPILER: gcc-7 CXXCOMPILER: g++-7 - - name: conan-macos-x64-release-node-12 - build_node_package: true - continue-on-error: false - node: 12 - runs-on: macos-11 - BUILD_TOOLS: ON - BUILD_TYPE: Release - CCOMPILER: clang - CXXCOMPILER: clang++ - CUCUMBER_TIMEOUT: 60000 - ENABLE_ASSERTIONS: ON - ENABLE_CONAN: ON - - - name: conan-macos-x64-release-node-14 - build_node_package: true - continue-on-error: false - node: 14 - runs-on: macos-11 - BUILD_TOOLS: ON - BUILD_TYPE: Release - CCOMPILER: clang - CXXCOMPILER: clang++ - CUCUMBER_TIMEOUT: 60000 - ENABLE_ASSERTIONS: ON - ENABLE_CONAN: ON - - name: conan-macos-x64-release-node-16 build_node_package: true continue-on-error: false @@ -325,9 +299,36 @@ jobs: ENABLE_CONAN: ON ENABLE_APPLE_SILICON: ON + - name: conan-macos-x64-release-node-18 + build_node_package: true + continue-on-error: false + node: 18 + runs-on: macos-11 + BUILD_TOOLS: ON + BUILD_TYPE: Release + CCOMPILER: clang + CXXCOMPILER: clang++ + CUCUMBER_TIMEOUT: 60000 + ENABLE_ASSERTIONS: ON + ENABLE_CONAN: ON + + - name: conan-macos-arm64-release-node-18 + build_node_package: true + continue-on-error: false + node: 18 + runs-on: macos-11 + BUILD_TOOLS: ON + BUILD_TYPE: Release + CCOMPILER: clang + CXXCOMPILER: clang++ + CUCUMBER_TIMEOUT: 60000 + ENABLE_ASSERTIONS: ON + ENABLE_CONAN: ON + ENABLE_APPLE_SILICON: ON + - name: gcc-7-release-shared continue-on-error: false - node: 12 + node: 16 runs-on: ubuntu-20.04 BUILD_TOOLS: ON BUILD_TYPE: Release @@ -335,51 +336,6 @@ jobs: CCOMPILER: gcc-7 CXXCOMPILER: g++-7 - - name: node-12-conan-linux-release - build_node_package: true - continue-on-error: false - node: 12 - runs-on: ubuntu-20.04 - BUILD_TYPE: Release - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - - - name: node-12-conan-linux-debug - build_node_package: true - continue-on-error: false - node: 12 - runs-on: ubuntu-20.04 - BUILD_TYPE: Debug - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - - - name: node-14-conan-linux-release - build_node_package: true - continue-on-error: false - node: 14 - runs-on: ubuntu-20.04 - BUILD_TYPE: Release - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - - - name: node-14-conan-linux-debug - build_node_package: true - continue-on-error: false - node: 14 - runs-on: ubuntu-20.04 - BUILD_TYPE: Debug - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - - - name: node-16-conan-linux-release build_node_package: true continue-on-error: false @@ -402,6 +358,28 @@ jobs: ENABLE_CONAN: ON NODE_PACKAGE_TESTS_ONLY: ON + - name: node-18-conan-linux-release + build_node_package: true + continue-on-error: false + node: 18 + runs-on: ubuntu-20.04 + BUILD_TYPE: Release + CCOMPILER: clang-6.0 + CXXCOMPILER: clang++-6.0 + ENABLE_CONAN: ON + NODE_PACKAGE_TESTS_ONLY: ON + + - name: node-18-conan-linux-debug + build_node_package: true + continue-on-error: false + node: 18 + runs-on: ubuntu-20.04 + BUILD_TYPE: Debug + CCOMPILER: clang-6.0 + CXXCOMPILER: clang++-6.0 + ENABLE_CONAN: ON + NODE_PACKAGE_TESTS_ONLY: ON + - name: conan-macos-x64-release-node-latest build_node_package: true continue-on-error: true @@ -449,53 +427,6 @@ jobs: ENABLE_CONAN: ON NODE_PACKAGE_TESTS_ONLY: ON - - name: conan-macos-x64-release-node-lts - build_node_package: true - continue-on-error: true - node: "lts/*" - runs-on: macos-11 - BUILD_TYPE: Release - CCOMPILER: clang - CXXCOMPILER: clang++ - CUCUMBER_TIMEOUT: 60000 - ENABLE_ASSERTIONS: ON - ENABLE_CONAN: ON - - - name: conan-macos-arm64-release-node-lts - build_node_package: true - continue-on-error: true - node: "lts/*" - runs-on: macos-11 - BUILD_TYPE: Release - CCOMPILER: clang - CXXCOMPILER: clang++ - CUCUMBER_TIMEOUT: 60000 - ENABLE_ASSERTIONS: ON - ENABLE_CONAN: ON - ENABLE_APPLE_SILICON: ON - - - name: node-lts-conan-linux-release - build_node_package: true - continue-on-error: true - node: "lts/*" - runs-on: ubuntu-20.04 - BUILD_TYPE: Release - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - - - name: node-lts-conan-linux-debug - build_node_package: true - continue-on-error: true - node: "lts/*" - runs-on: ubuntu-20.04 - BUILD_TYPE: Debug - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - name: ${{ matrix.name}} continue-on-error: ${{ matrix.continue-on-error }} runs-on: ${{ matrix.runs-on }} @@ -519,7 +450,7 @@ jobs: OSRM_CONNECTION_RETRIES: ${{ matrix.OSRM_CONNECTION_RETRIES }} OSRM_CONNECTION_EXP_BACKOFF_COEF: ${{ matrix.OSRM_CONNECTION_EXP_BACKOFF_COEF }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v3 diff --git a/CHANGELOG.md b/CHANGELOG.md index cf1c10381..15c67d720 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Changes from 5.27.1 - Build: - CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) + - REMOVED: Drop support of Node 12 & 14. [#6431](https://github.com/Project-OSRM/osrm-backend/pull/6431) - Misc: - FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417) - FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/) diff --git a/package-lock.json b/package-lock.json index 5aad0b4fd..57328a9a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,18903 @@ { "name": "@project-osrm/osrm", "version": "5.28.0-unreleased", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "@project-osrm/osrm", + "version": "5.28.0-unreleased", + "bundleDependencies": [ + "mkdirp", + "nan", + "node-cmake", + "rimraf" + ], + "hasInstallScript": true, + "license": "BSD-2-Clause", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.9", + "cheap-ruler": "^3.0.2", + "mkdirp": "^0.5.6", + "nan": "^2.17.0", + "node-cmake": "^2.5.1", + "rimraf": "^2.7.1" + }, + "devDependencies": { + "@babel/cli": "^7.18.10", + "@babel/core": "^7.18.13", + "@babel/preset-env": "^7.18.10", + "@babel/preset-react": "^7.18.6", + "acorn": "^8.8.0", + "ansi-escape-sequences": "^5.1.2", + "aws-sdk": "~2.0.31", + "babel-plugin-transform-class-properties": "^6.24.1", + "babelify": "^10.0.0", + "browserify": "^17.0.0", + "chalk": "^1.1.3", + "command-line-args": "^5.2.1", + "command-line-usage": "^5.0.4", + "csv-stringify": "^3.0.0", + "cucumber": "^1.2.1", + "d3-queue": "^2.0.3", + "docbox": "^1.0.11", + "documentation": "^4.0.0", + "eslint": "^5.16.0", + "faucet": "^0.0.1", + "jsonpath": "^1.1.1", + "node-timeout": "0.0.4", + "polyline": "^0.2.0", + "request": "^2.88.2", + "tape": "^4.16.0", + "turf": "^3.0.14", + "uglify-js": "^3.17.0", + "xmlbuilder": "^4.2.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/cli": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.18.10.tgz", + "integrity": "sha512-dLvWH+ZDFAkd2jPBSghrsFBuXrREvFwjpDycXbmUoeochqKYe4zNSLEJYErpLg8dvxvZYe79/MkN461XCwpnGw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.8", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.2.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "engines": { + "node": ">=6.9.0" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/cli/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@babel/cli/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@babel/cli/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz", + "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz", + "integrity": "sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.13", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.13", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.13", + "@babel/types": "^7.18.13", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/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==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz", + "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.13", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/generator/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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz", + "integrity": "sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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/@babel/helper-create-regexp-features-plugin/node_modules/regexpu-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "dev": true, + "dependencies": { + "@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" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/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==", + "dev": true + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", + "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", + "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz", + "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", + "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", + "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", + "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", + "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", + "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-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, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", + "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz", + "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator/node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", + "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", + "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@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.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@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.18.6", + "@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.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@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.18.8", + "@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.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@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.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@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, + "dependencies": { + "@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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@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, + "dependencies": { + "@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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz", + "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.13", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.13", + "@babel/types": "^7.18.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true + }, + "node_modules/@babel/types": { + "version": "7.18.13", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz", + "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types/node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/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": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@mapbox/node-pre-gyp/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": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@mapbox/node-pre-gyp/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@mapbox/node-pre-gyp/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" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "dev": true, + "optional": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "dependencies": { + "acorn": "^3.0.4" + } + }, + "node_modules/acorn-jsx/node_modules/acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/affine-hull": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/affine-hull/-/affine-hull-1.0.0.tgz", + "integrity": "sha1-dj/x040GPOt+Jy8X7k17vK+QXF0=", + "dev": true, + "dependencies": { + "robust-orientation": "^1.1.3" + } + }, + "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==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/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/ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "dev": true, + "dependencies": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "node_modules/ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true, + "peerDependencies": { + "ajv": "^5.0.0" + } + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "node_modules/ansi-escape-sequences": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-5.1.2.tgz", + "integrity": "sha512-JcpoVp1W1bl1Qn4cVuiXEhD6+dyXKSOgCn2zlzE8inYgCJCBy1aPnUhlz6I4DFum8D4ovb9Qi/iAjUcGvG2lqw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ansi-escape-sequences/node_modules/array-back": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", + "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "optional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/are-we-there-yet/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/are-we-there-yet/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==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "dependencies": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + } + }, + "node_modules/autoprefixer/node_modules/browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.", + "dev": true, + "dependencies": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", + "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.0.31", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.0.31.tgz", + "integrity": "sha1-5yzx/caQFb2f0r3z07iMFlB9Jo4=", + "dev": true, + "dependencies": { + "xml2js": "0.2.6", + "xmlbuilder": "0.4.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/aws-sdk/node_modules/xmlbuilder": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.2.tgz", + "integrity": "sha1-F3bWXz/brUcKCNhgTN6xxOVA/4M=", + "dev": true, + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "node_modules/babel-core/node_modules/babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "dependencies": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "node_modules/babel-core/node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/babel-core/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-eslint": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", + "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-eslint/node_modules/@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "dev": true, + "dependencies": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "node_modules/babel-eslint/node_modules/@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "dependencies": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "node_modules/babel-eslint/node_modules/@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "node_modules/babel-eslint/node_modules/@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "dependencies": { + "@babel/types": "7.0.0-beta.44" + } + }, + "node_modules/babel-eslint/node_modules/@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "dependencies": { + "@babel/types": "7.0.0-beta.44" + } + }, + "node_modules/babel-eslint/node_modules/@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "dependencies": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } + }, + "node_modules/babel-eslint/node_modules/@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "^4.2.0" + } + }, + "node_modules/babel-eslint/node_modules/@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" + } + }, + "node_modules/babel-eslint/node_modules/@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/babel-eslint/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-eslint/node_modules/babylon": { + "version": "7.0.0-beta.44", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/babel-eslint/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-eslint/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/babel-eslint/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-eslint/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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-eslint/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/babel-eslint/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-eslint/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": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-generator": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", + "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", + "dev": true, + "dependencies": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-types": "^6.25.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "node_modules/babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "dependencies": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" + } + }, + "node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "dependencies": { + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", + "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", + "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "node_modules/babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "node_modules/babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=", + "dev": true + }, + "node_modules/babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "node_modules/babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "node_modules/babel-plugin-syntax-do-expressions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=", + "dev": true + }, + "node_modules/babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "node_modules/babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "node_modules/babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=", + "dev": true + }, + "node_modules/babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", + "dev": true + }, + "node_modules/babel-plugin-syntax-function-bind": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=", + "dev": true + }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true + }, + "node_modules/babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "node_modules/babel-plugin-system-import-transformer": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-system-import-transformer/-/babel-plugin-system-import-transformer-3.1.0.tgz", + "integrity": "sha1-038Mro5h7zkGAggzHZMbXmMNfF8=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-dynamic-import": "^6.18.0" + } + }, + "node_modules/babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "dependencies": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "dependencies": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-class-constructor-call": "^6.18.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "dependencies": { + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-decorators-legacy": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz", + "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==", + "dev": true, + "dependencies": { + "babel-plugin-syntax-decorators": "^6.1.18", + "babel-runtime": "^6.2.0", + "babel-template": "^6.3.0" + } + }, + "node_modules/babel-plugin-transform-do-expressions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", + "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-do-expressions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "dependencies": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-export-extensions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-function-bind": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", + "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-function-bind": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" + } + }, + "node_modules/babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "dev": true, + "dependencies": { + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + } + }, + "node_modules/babel-polyfill/node_modules/regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "node_modules/babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "deprecated": "🙌 Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update!", + "dev": true, + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" + } + }, + "node_modules/babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "dev": true, + "dependencies": { + "babel-plugin-transform-flow-strip-types": "^6.22.0" + } + }, + "node_modules/babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" + } + }, + "node_modules/babel-preset-stage-0": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", + "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", + "dev": true, + "dependencies": { + "babel-plugin-transform-do-expressions": "^6.22.0", + "babel-plugin-transform-function-bind": "^6.22.0", + "babel-preset-stage-1": "^6.24.1" + } + }, + "node_modules/babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "dev": true, + "dependencies": { + "babel-plugin-transform-class-constructor-call": "^6.24.1", + "babel-plugin-transform-export-extensions": "^6.22.0", + "babel-preset-stage-2": "^6.24.1" + } + }, + "node_modules/babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" + } + }, + "node_modules/babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "dependencies": { + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" + } + }, + "node_modules/babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "dependencies": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babelify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", + "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true, + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "inBundle": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/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/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bit-twiddle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", + "integrity": "sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4=", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "dependencies": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "inBundle": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brfs": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", + "dev": true, + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^2.2.0", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "dependencies": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" + } + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "node_modules/browserify": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", + "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "dev": true, + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-des/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-sign/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/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserify/node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browserify/node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/browserify/node_modules/module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dev": true, + "dependencies": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/browserify/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify/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/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/browserslist/node_modules/electron-to-chromium": { + "version": "1.4.230", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.230.tgz", + "integrity": "sha512-3pwjAK0qHSDN9+YAF4fJknsSruP7mpjdWzUSruIJD/JCH77pEh0SorEyb3xVaKkfwk2tzjOt2D8scJ0KAdfXLA==", + "dev": true + }, + "node_modules/buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "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==", + "inBundle": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "dependencies": { + "callsites": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "dependencies": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-api/node_modules/browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.", + "dev": true, + "dependencies": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/caniuse-api/node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/caniuse-db": { + "version": "1.0.30001237", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001237.tgz", + "integrity": "sha512-tUooT0g3ft2icsFd4tOt6VDgc2ff/YmIuECVKSvAW+fPBLqMjU0KK2xDC1qgQ7B0zzqFXVGR96VaBDcAnceG6g==", + "dev": true + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001383", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz", + "integrity": "sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "dependencies": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "node_modules/cheap-ruler": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cheap-ruler/-/cheap-ruler-3.0.2.tgz", + "integrity": "sha512-02T332h1/HTN6cDSufLP8x4JzDs2+VC+8qZ/N0kWIVPyc2xUkWwWh3B2fJxR7raXkL4Mq7k554mfuM9ofv/vGg==" + }, + "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/" + } + ], + "optional": true, + "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" + } + }, + "node_modules/chokidar/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, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/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==", + "dev": true, + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/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, + "optional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "optional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", + "dev": true + }, + "node_modules/clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", + "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", + "dev": true, + "dependencies": { + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/cli-table/node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "inBundle": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/cloneable-readable/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/cloneable-readable/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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/cloneable-readable/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/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "dependencies": { + "q": "^1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "dependencies": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "dependencies": { + "color-name": "^1.1.1" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/color/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "dependencies": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } + }, + "node_modules/colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "dependencies": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "node_modules/combine-source-map/node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "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==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-args/node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/command-line-args/node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", + "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", + "dev": true, + "dependencies": { + "array-back": "^2.0.0", + "chalk": "^2.4.1", + "table-layout": "^0.4.3", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "inBundle": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "node_modules/convex-hull": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/convex-hull/-/convex-hull-1.0.3.tgz", + "integrity": "sha1-IKOqbOh/St6i/30XlxyfwcZ+H/8=", + "dev": true, + "dependencies": { + "affine-hull": "^1.0.0", + "incremental-convex-hull": "^1.0.1", + "monotone-convex-hull-2d": "^1.0.1" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true + }, + "node_modules/core-js-compat": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.0.tgz", + "integrity": "sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "dev": true, + "dependencies": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/cross-spawn/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/css-selector-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", + "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", + "dev": true + }, + "node_modules/cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "dependencies": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + } + }, + "node_modules/csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "dependencies": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + }, + "bin": { + "csso": "bin/csso" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/csv-stringify": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-3.1.1.tgz", + "integrity": "sha512-Ni9r/BdQM2cGnWzwAP09zp12LVOAMHLJ86azNHGC7s4OUo2WidGfcM3QwYEjD8c4ELCL/a4AzfIsVCzroeys+g==", + "dev": true, + "dependencies": { + "lodash.get": "~4.4.2" + } + }, + "node_modules/cucumber": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-1.3.3.tgz", + "integrity": "sha1-Za+2Xy+T9y2teN8qterPFGCf7C8=", + "deprecated": "Cucumber is publishing new releases under @cucumber/cucumber", + "dev": true, + "dependencies": { + "camel-case": "^3.0.0", + "cli-table": "^0.3.1", + "co": "^4.6.0", + "colors": "^1.1.2", + "commander": "^2.9.0", + "duration": "^0.2.0", + "figures": "1.7.0", + "gherkin": "^4.1.0", + "glob": "^7.0.0", + "is-generator": "^1.0.2", + "lodash": "^4.0.0", + "stack-chain": "^1.3.5", + "stacktrace-js": "^1.3.0" + }, + "bin": { + "cucumber-js": "bin/cucumber.js", + "cucumber.js": "bin/cucumber.js", + "cucumberjs": "bin/cucumber.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/d": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", + "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/d3-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-2.0.3.tgz", + "integrity": "sha1-B/vaOsrlNYqcUpmq+ICt8JU+0sI=", + "dev": true + }, + "node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "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/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz", + "integrity": "sha1-skbCuApXCkfBG+HZvRBw7IeLh84=", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/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/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dev": true, + "dependencies": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "dependencies": { + "acorn": "^5.2.1", + "defined": "^1.0.0" + } + }, + "node_modules/detective/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/disparity": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz", + "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.0.1", + "diff": "^1.3.2" + }, + "bin": { + "disparity": "bin/disparity" + } + }, + "node_modules/docbox": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/docbox/-/docbox-1.0.11.tgz", + "integrity": "sha512-Sz/s66lb3vfXIzNeGoXuVnrCHlxJRpogmDP8K09A3DthnDG3RtUiUzKZnPUkIGDR6qm2kG9jNVdOXcZ5LGuNIA==", + "dev": true, + "dependencies": { + "babel-cli": "^6.4.0", + "babel-eslint": "^8.0.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-polyfill": "^6.3.14", + "babel-preset-es2015": "^6.3.13", + "babel-preset-react": "^6.3.13", + "babel-preset-stage-0": "^6.3.13", + "babelify": "^8.0.0", + "brfs": "^1.4.2", + "browserify": "^16.0.0", + "cssnano": "^3.4.0", + "es6-promise": "^4.1.0", + "eslint": "^4.1.0", + "eslint-plugin-babel": "^5.0.0", + "eslint-plugin-react": "^7.0.0", + "github-slugger": "^1.0.1", + "highlight.js": "^9.2.0", + "isomorphic-fetch": "^2.2.0", + "lodash.debounce": "^4.0.3", + "minifyify": "^7.1.0", + "prop-types": "^15.5.9", + "react": "^15.6.2", + "react-dom": "^15.6.2", + "remark": "^8.0.0", + "remark-html": "^7.0.0", + "remark-slug": "^5.0.0", + "unist-util-select": "^1.3.0", + "unist-util-visit": "^1.0.0" + } + }, + "node_modules/docbox/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/docbox/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/docbox/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docbox/node_modules/anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "node_modules/docbox/node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "optional": true, + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/babel-cli": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", + "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", + "dev": true, + "dependencies": { + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" + }, + "bin": { + "babel": "bin/babel.js", + "babel-doctor": "bin/babel-doctor.js", + "babel-external-helpers": "bin/babel-external-helpers.js", + "babel-node": "bin/babel-node.js" + }, + "optionalDependencies": { + "chokidar": "^1.6.1" + } + }, + "node_modules/docbox/node_modules/babelify": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz", + "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==", + "dev": true, + "peerDependencies": { + "babel-core": "6 || 7 || ^7.0.0-alpha || ^7.0.0-beta || ^7.0.0-rc" + } + }, + "node_modules/docbox/node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "optional": true, + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/docbox/node_modules/browserify": { + "version": "16.5.2", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz", + "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", + "dev": true, + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/docbox/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docbox/node_modules/chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "optionalDependencies": { + "fsevents": "^1.0.0" + } + }, + "node_modules/docbox/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/docbox/node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/docbox/node_modules/eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "dependencies": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docbox/node_modules/espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "dependencies": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/docbox/node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "optional": true, + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/docbox/node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/docbox/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/docbox/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/mdast-util-to-hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz", + "integrity": "sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA==", + "dev": true, + "dependencies": { + "collapse-white-space": "^1.0.0", + "detab": "^2.0.0", + "mdast-util-definitions": "^1.2.0", + "mdurl": "^1.0.1", + "trim": "0.0.1", + "trim-lines": "^1.0.0", + "unist-builder": "^1.0.1", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.0", + "xtend": "^4.0.1" + } + }, + "node_modules/docbox/node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "optional": true, + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dev": true, + "dependencies": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/docbox/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/docbox/node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/docbox/node_modules/remark-html": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-7.0.0.tgz", + "integrity": "sha512-jqRzkZXCkM12gIY2ibMLTW41m7rfanliMTVQCFTezHJFsbH00YaTox/BX4gU+f/zCdzfhFJONtebFByvpMv37w==", + "dev": true, + "dependencies": { + "hast-util-sanitize": "^1.0.0", + "hast-util-to-html": "^3.0.0", + "mdast-util-to-hast": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/docbox/node_modules/remark-slug": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-5.1.2.tgz", + "integrity": "sha512-DWX+Kd9iKycqyD+/B+gEFO3jjnt7Yg1O05lygYSNTe5i5PIxxxPjp5qPBDxPIzp5wreF7+1ROCwRgjEcqmzr3A==", + "dev": true, + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^1.0.0" + } + }, + "node_modules/docbox/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/docbox/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/docbox/node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/docbox/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/docbox/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docbox/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/docbox/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "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.0" + } + }, + "node_modules/doctrine-temporary-fork": { + "version": "2.0.0-alpha-allowarrayindex", + "resolved": "https://registry.npmjs.org/doctrine-temporary-fork/-/doctrine-temporary-fork-2.0.0-alpha-allowarrayindex.tgz", + "integrity": "sha1-QAFahn6yfnWybIKLcVJPE3+J+fA=", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/documentation/-/documentation-4.0.0.tgz", + "integrity": "sha1-moqajjiWm/1J008137J/HHW2R8A=", + "dev": true, + "dependencies": { + "ansi-html": "^0.0.7", + "babel-core": "^6.17.0", + "babel-generator": "6.25.0", + "babel-plugin-system-import-transformer": "3.1.0", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-preset-es2015": "^6.16.0", + "babel-preset-react": "^6.16.0", + "babel-preset-stage-0": "^6.16.0", + "babel-traverse": "^6.16.0", + "babel-types": "^6.16.0", + "babelify": "^7.3.0", + "babylon": "^6.17.2", + "chalk": "^2.0.0", + "chokidar": "^1.2.0", + "concat-stream": "^1.5.0", + "disparity": "^2.0.0", + "doctrine-temporary-fork": "2.0.0-alpha-allowarrayindex", + "get-comments": "^1.0.1", + "get-port": "^3.1.0", + "git-url-parse": "^6.0.1", + "github-slugger": "1.1.3", + "glob": "^7.0.0", + "globals-docs": "^2.3.0", + "highlight.js": "^9.1.0", + "js-yaml": "^3.8.4", + "lodash": "^4.11.1", + "mdast-util-inject": "^1.1.0", + "micromatch": "^3.0.0", + "mime": "^1.3.4", + "module-deps-sortable": "4.0.6", + "parse-filepath": "^1.0.1", + "pify": "^3.0.0", + "read-pkg-up": "^2.0.0", + "remark": "^8.0.0", + "remark-html": "6.0.1", + "remark-toc": "^4.0.0", + "remote-origin-url": "0.4.0", + "shelljs": "^0.7.5", + "stream-array": "^1.1.0", + "strip-json-comments": "^2.0.0", + "tiny-lr": "^1.0.3", + "unist-builder": "^1.0.0", + "unist-util-visit": "^1.0.1", + "vfile": "^2.0.0", + "vfile-reporter": "^4.0.0", + "vfile-sort": "^2.0.0", + "vinyl": "^2.0.0", + "vinyl-fs": "^2.3.1", + "yargs": "^6.0.1" + }, + "bin": { + "documentation": "bin/documentation.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "dependencies": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "node_modules/documentation/node_modules/anymatch/node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "dev": true, + "dependencies": { + "babel-core": "^6.0.14", + "object-assign": "^4.0.0" + } + }, + "node_modules/documentation/node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "optionalDependencies": { + "fsevents": "^1.0.0" + } + }, + "node_modules/documentation/node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/documentation/node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/documentation/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "dependencies": { + "pify": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/path-type/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "dependencies": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/documentation/node_modules/yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "node_modules/documentation/node_modules/yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0" + } + }, + "node_modules/documentation/node_modules/yargs/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/yargs/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/yargs/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/yargs/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/yargs/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/yargs/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/documentation/node_modules/yargs/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/dotignore": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", + "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + }, + "bin": { + "ignored": "bin/ignored" + } + }, + "node_modules/duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duration": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.0.tgz", + "integrity": "sha1-X5xN+q//ZV3phhEu/iXFl43YUUY=", + "dev": true, + "dependencies": { + "d": "~0.1.1", + "es5-ext": "~0.10.2" + } + }, + "node_modules/earcut": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.1.4.tgz", + "integrity": "sha512-ttRjmPD5oaTtXOoxhFp9aZvMB14kBjapYaiBuzBB1elOgSLU9P2Ev86G2OClBg+uspUXERsIzXKpUWweH2K4Xg==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", + "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/elliptic/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", + "dev": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "devOptional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/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==", + "devOptional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", + "dev": true, + "dependencies": { + "string-template": "~0.2.1" + } + }, + "node_modules/error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "inBundle": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.6.tgz", + "integrity": "sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI=", + "dev": true, + "dependencies": { + "stackframe": "^0.3.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive/node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.30", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", + "dev": true, + "dependencies": { + "es6-iterator": "2", + "es6-symbol": "~3.1" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-symbol": "^3.1" + } + }, + "node_modules/es6-iterator/node_modules/d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.9" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/es6-symbol/node_modules/d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.9" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dev": true, + "dependencies": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^6.14.0 || ^8.10.0 || >=9.10.0" + } + }, + "node_modules/eslint-plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", + "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==", + "dev": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": ">=4.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint/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==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/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==", + "dev": true + }, + "node_modules/eslint/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/inquirer/node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/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==", + "dev": true + }, + "node_modules/eslint/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==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/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==", + "dev": true + }, + "node_modules/eslint/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==", + "dev": true + }, + "node_modules/eslint/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/eslint/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/eslint/node_modules/rimraf/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/eslint/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/table/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/table/node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "node_modules/eslint/node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "dependencies": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "dependencies": { + "estraverse": "^4.0.0" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "dependencies": { + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "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" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/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/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/falafel": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.4.tgz", + "integrity": "sha512-0HXjo8XASWRmsS0X1EkhwEMZaD3Qvp7FfURwjLKjG1ghfRm/MGZl2r4cWUTv41KdNghTw4OUMmVtdGQp3+H+uQ==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "foreach": "^2.0.5", + "isarray": "^2.0.1", + "object-keys": "^1.0.6" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/falafel/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, + "node_modules/faucet": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/faucet/-/faucet-0.0.1.tgz", + "integrity": "sha1-WX3PHSGJosBiMhtZHo8VHtIDnZw=", + "dev": true, + "dependencies": { + "defined": "0.0.0", + "duplexer": "~0.1.1", + "minimist": "0.0.5", + "sprintf": "~0.1.3", + "tap-parser": "~0.4.0", + "tape": "~2.3.2", + "through2": "~0.2.3" + }, + "bin": { + "faucet": "bin/cmd.js" + } + }, + "node_modules/faucet/node_modules/defined": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", + "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=", + "dev": true + }, + "node_modules/faucet/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/faucet/node_modules/minimist": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", + "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=", + "dev": true + }, + "node_modules/faucet/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "node_modules/faucet/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/faucet/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/faucet/node_modules/tape": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz", + "integrity": "sha1-Lnzgox3wn41oUWZKcYQuDKUFevc=", + "dev": true, + "dependencies": { + "deep-equal": "~0.1.0", + "defined": "~0.0.0", + "inherits": "~2.0.1", + "jsonify": "~0.0.0", + "resumer": "~0.0.0", + "through": "~2.3.4" + }, + "bin": { + "tape": "bin/tape" + } + }, + "node_modules/faucet/node_modules/through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dev": true, + "dependencies": { + "readable-stream": "~1.1.9", + "xtend": "~2.1.1" + } + }, + "node_modules/faucet/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "dev": true, + "dependencies": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/fbjs/node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true + }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "dependencies": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-replace/node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "inBundle": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "dependencies": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "inBundle": 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==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.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==", + "inBundle": true + }, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "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/function.prototype.name/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/function.prototype.name/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/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": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/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, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/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, + "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" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/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/gauge/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/gauge/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/gauge/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" + } + }, + "node_modules/gauge/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" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/geojson-area": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/geojson-area/-/geojson-area-0.2.1.tgz", + "integrity": "sha1-JTewmC24YwnyHSxCikJXx6YoLMY=", + "deprecated": "This module is now under the @mapbox namespace: install @mapbox/geojson-area instead", + "dev": true, + "dependencies": { + "wgs84": "0.0.0" + } + }, + "node_modules/geojson-normalize": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/geojson-normalize/-/geojson-normalize-0.0.0.tgz", + "integrity": "sha1-Lbw2eM0bMbgXnodr2nDNEg3eNcA=", + "deprecated": "This module is now under the @mapbox namespace: install @mapbox/geojson-normalize instead", + "dev": true + }, + "node_modules/geojson-random": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/geojson-random/-/geojson-random-0.2.2.tgz", + "integrity": "sha1-q0g48SatxeFvj5TmVd74IPkRnbw=", + "dev": true, + "bin": { + "geojson-random": "geojson-random" + } + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "inBundle": true + }, + "node_modules/get-comments": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-comments/-/get-comments-1.0.1.tgz", + "integrity": "sha1-GWdZEBu7xPrPEwYMqu3Uhw3uVb4=", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", + "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", + "inBundle": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic/node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "inBundle": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "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-symbol-description/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gherkin": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-4.1.3.tgz", + "integrity": "sha1-EWh9uTl235djMSWmsiKKGkv9+iQ=", + "deprecated": "This package is now published under @cucumber/gherkin", + "dev": true, + "bin": { + "gherkin-javascript": "bin/gherkin" + } + }, + "node_modules/git-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-2.1.0.tgz", + "integrity": "sha512-MJgwfcSd9qxgDyEYpRU/CDxNpUadrK80JHuEQDG4Urn0m7tpSOgCBrtiSIa9S9KH8Tbuo/TN8SSQmJBvsw1HkA==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "parse-url": "^3.0.2" + } + }, + "node_modules/git-url-parse": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-6.2.2.tgz", + "integrity": "sha1-vkkCThS4SHVTQ2tFcri0OVMvqHE=", + "dev": true, + "dependencies": { + "git-up": "^2.0.0" + } + }, + "node_modules/github-slugger": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.1.3.tgz", + "integrity": "sha1-MUpudZoYwrDMV2DVEsy6tUnFSac=", + "dev": true, + "dependencies": { + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/glob-base/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/extglob/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/glob-stream/node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/micromatch/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/micromatch/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/glob-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/glob-stream/node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals-docs": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/globals-docs/-/globals-docs-2.4.1.tgz", + "integrity": "sha512-qpPnUKkWnz8NESjrCvnlGklsgiQzlq+rcCxoG5uNQ+dNA7cFMCmn231slLAwS2N/PlkzZ3COL8CcS10jXmLHqg==", + "dev": true + }, + "node_modules/graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "inBundle": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "dev": true, + "dependencies": { + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" + } + }, + "node_modules/gulp-sourcemaps/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/gulp-sourcemaps/node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "node_modules/gulp-sourcemaps/node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gulp-sourcemaps/node_modules/vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "engines": { + "node": ">= 0.9" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/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==", + "dev": true + }, + "node_modules/har-validator/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==", + "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==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "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": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "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/has-property-descriptors/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "inBundle": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash-base/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/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-sanitize": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-1.3.1.tgz", + "integrity": "sha512-AIeKHuHx0Wk45nSkGVa2/ujQYTksnDl8gmmKo/mwQi7ag7IBZ8cM3nJ2G86SajbjGP/HRpud6kMkPtcM2i0Tlw==", + "dev": true, + "dependencies": { + "xtend": "^4.0.1" + } + }, + "node_modules/hast-util-to-html": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-3.1.0.tgz", + "integrity": "sha1-iCyZhJ5AEw6ZHAQuRW1FPZXDbP8=", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.1", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "kebab-case": "^1.0.0", + "property-information": "^3.1.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^1.0.1", + "unist-util-is": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/hast-util-to-html/node_modules/unist-util-is": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.3.tgz", + "integrity": "sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==", + "dev": true + }, + "node_modules/hast-util-whitespace": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", + "deprecated": "Support has ended for 9.x series. Upgrade to @latest", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": "*" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "inBundle": true + }, + "node_modules/html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "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==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/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/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": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/incremental-convex-hull": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/incremental-convex-hull/-/incremental-convex-hull-1.0.1.tgz", + "integrity": "sha1-UUKMFMudmmFEv+abKFH7N3M0vh4=", + "dev": true, + "dependencies": { + "robust-orientation": "^1.1.2", + "simplicial-complex": "^1.0.0" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "inBundle": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "inBundle": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "dependencies": { + "source-map": "~0.5.3" + } + }, + "node_modules/inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "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": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "inBundle": true + }, + "node_modules/is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "deprecated": "This version of 'is-buffer' is out-of-date. You must update to v1.1.6 or newer", + "dev": true + }, + "node_modules/is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "inBundle": true, + "dependencies": { + "builtin-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "dependencies": { + "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "inBundle": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=", + "dev": true + }, + "node_modules/is-generator-function": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "engines": { + "node": ">=0.10.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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ssh": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", + "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", + "dev": true, + "dependencies": { + "protocols": "^1.1.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "dependencies": { + "html-comment-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "inBundle": true + }, + "node_modules/is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true, + "engines": { + "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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "inBundle": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/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==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "node_modules/json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dev": true, + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpath/node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dev": true, + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "node_modules/jsts": { + "version": "1.1.2", + "resolved": "http://registry.npmjs.org/jsts/-/jsts-1.1.2.tgz", + "integrity": "sha1-0gXSzIOTCB2eSErjYoIRBpXtwjA=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kebab-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.1.tgz", + "integrity": "sha512-txPHx6nVLhv8PHGXIlAk0nYoh894SpAqGPXNvbg2hh8spvHXIah3+vT87DLoa59nKgC6scD3u3xAuRIgiMqbfQ==", + "dev": true + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "inBundle": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "inBundle": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "node_modules/lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "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": ">=10" + } + }, + "node_modules/lru-cache/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/magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "dependencies": { + "vlq": "^0.2.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "node_modules/math-expression-evaluator": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.7.tgz", + "integrity": "sha512-nrbaifCl42w37hYd6oRLvoymFK42tWB+WQTMFtksDGQMi5GvlJwnz/CsS30FFAISFLtX+A0csJ0xLiuuyyec7w==", + "dev": true + }, + "node_modules/math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/md5.js/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/mdast-util-compact": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "dev": true, + "dependencies": { + "unist-util-visit": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz", + "integrity": "sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==", + "dev": true, + "dependencies": { + "unist-util-visit": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-inject": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz", + "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", + "dev": true, + "dependencies": { + "mdast-util-to-string": "^1.0.0" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-2.5.0.tgz", + "integrity": "sha1-8IeETSVcdUDzaQbaMLoQbA7l7i8=", + "dev": true, + "dependencies": { + "collapse-white-space": "^1.0.0", + "detab": "^2.0.0", + "mdast-util-definitions": "^1.2.0", + "mdurl": "^1.0.1", + "trim": "0.0.1", + "trim-lines": "^1.0.0", + "unist-builder": "^1.0.1", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.0", + "xtend": "^4.0.1" + } + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-toc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-2.1.0.tgz", + "integrity": "sha512-ove/QQWSrYOrf9G3xn2MTAjy7PKCtCmm261wpQwecoPAsUtkihkMVczxFqil7VihxgSz4ID9c8bBTsyXR30gQg==", + "dev": true, + "dependencies": { + "github-slugger": "^1.1.1", + "mdast-util-to-string": "^1.0.2", + "unist-util-visit": "^1.1.0" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/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/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "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.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "dev": true, + "dependencies": { + "mime-db": "1.45.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minifyify": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/minifyify/-/minifyify-7.3.5.tgz", + "integrity": "sha1-n0uwyGklAkeNjuhbEL1ySFcGKa4=", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.7", + "convert-source-map": "^1.0.0", + "lodash.assign": "^4.0.0", + "lodash.bind": "^4.0.0", + "lodash.defaults": "^4.0.0", + "lodash.foreach": "^4.0.0", + "mkdirp": "^0.5.0", + "source-map": "^0.5.3", + "through": "^2.3.6", + "tmp": "0.0.28", + "transform-filter": "^0.1.1", + "uglify-js": "^2.6.1" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "browserify": ">= 5" + } + }, + "node_modules/minifyify/node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minifyify/node_modules/cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "dependencies": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "node_modules/minifyify/node_modules/tmp": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/minifyify/node_modules/uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "dependencies": { + "source-map": "~0.5.1", + "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + }, + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + } + }, + "node_modules/minifyify/node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/minifyify/node_modules/yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "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/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "inBundle": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/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/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/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/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "inBundle": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "inBundle": true + }, + "node_modules/module-deps-sortable": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/module-deps-sortable/-/module-deps-sortable-4.0.6.tgz", + "integrity": "sha1-ElGkuixEqS32mJvQKdoSGk8hCbA=", + "dev": true, + "dependencies": { + "browser-resolve": "^1.7.0", + "concat-stream": "~1.5.0", + "defined": "^1.0.0", + "detective": "^4.0.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.3", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/module-deps-sortable/node_modules/concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" + } + }, + "node_modules/module-deps-sortable/node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/module-deps-sortable/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/monotone-convex-hull-2d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/monotone-convex-hull-2d/-/monotone-convex-hull-2d-1.0.1.tgz", + "integrity": "sha1-R/Xa6t88Sv03dkuqGqh4ekDu4Iw=", + "dev": true, + "dependencies": { + "robust-orientation": "^1.1.3" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "dependencies": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "inBundle": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-cmake": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/node-cmake/-/node-cmake-2.5.1.tgz", + "integrity": "sha512-gKnzheTyu9TJvFiqVwg1BGWyqxMwfNPWoR0Ab0kDqmoA+U/XSCxIo4s/fNbEubohhmIAFEo1i+CAJ4jZDnMTVw==", + "inBundle": true, + "dependencies": { + "debug": "^3.1.0", + "nan": "^2.8.0", + "which": "^1.3.0", + "yargs": "^7.1.0" + }, + "bin": { + "ncmake": "lib/ncmake.js" + } + }, + "node_modules/node-cmake/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "inBundle": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/node-cmake/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==", + "inBundle": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "node_modules/node-timeout": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/node-timeout/-/node-timeout-0.0.4.tgz", + "integrity": "sha1-ASw2SKvjCOB2aPB4B/h5loL9PJc=", + "dev": true, + "dependencies": { + "options": "0.0.6" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "inBundle": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "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": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "inBundle": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.assign/node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "inBundle": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign/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==", + "inBundle": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "dependencies": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "inBundle": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "dependencies": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "inBundle": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "dependencies": { + "path-platform": "~0.11.15" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "dev": true, + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-git-config": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-0.2.0.tgz", + "integrity": "sha1-Jygz/dFf6hRvt10zbSNrljtv9wY=", + "dev": true, + "dependencies": { + "ini": "^1.3.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "inBundle": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-path": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-3.0.4.tgz", + "integrity": "sha512-wP70vtwv2DyrM2YoA7ZHVv4zIXa4P7dGgHlj+VwyXNDduLLVJ7NMY1zsFxjUUJ3DAwJLupGb1H5gMDDiNlJaxw==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0" + } + }, + "node_modules/parse-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-3.0.2.tgz", + "integrity": "sha1-YCeHpwY6eV1yuGcxl1BecvYGEL4=", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "normalize-url": "^1.9.1", + "parse-path": "^3.0.1", + "protocols": "^1.4.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "inBundle": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true + }, + "node_modules/path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "inBundle": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "inBundle": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/polyline": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/polyline/-/polyline-0.2.0.tgz", + "integrity": "sha1-TytxbKgRNKbLqkiJddI27LHMKEA=", + "deprecated": "This module is now under the @mapbox namespace: install @mapbox/polyline instead", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "dependencies": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + } + }, + "node_modules/postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "dependencies": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + } + }, + "node_modules/postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "dependencies": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "dependencies": { + "postcss": "^5.0.14" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "dependencies": { + "postcss": "^5.0.4" + } + }, + "node_modules/postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "dependencies": { + "postcss": "^5.0.14" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "dependencies": { + "postcss": "^5.0.16" + } + }, + "node_modules/postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "dependencies": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + } + }, + "node_modules/postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "dev": true, + "dependencies": { + "postcss": "^5.0.4" + } + }, + "node_modules/postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "dependencies": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "dependencies": { + "postcss": "^5.0.4" + } + }, + "node_modules/postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "dependencies": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.", + "dev": true, + "dependencies": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "node_modules/postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "dependencies": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "dependencies": { + "postcss": "^5.0.5" + } + }, + "node_modules/postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" + } + }, + "node_modules/postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "dependencies": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "dependencies": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "dependencies": { + "postcss": "^5.0.4" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "dependencies": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + } + }, + "node_modules/postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "dependencies": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "node_modules/postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "dependencies": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "dependencies": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + } + }, + "node_modules/postcss/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/prop-types/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==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/property-information": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-3.2.0.tgz", + "integrity": "sha1-/RSDyPusYYCPX+NZ52k6H0ilgzE=", + "dev": true + }, + "node_modules/protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/public-encrypt/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=", + "dev": true, + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic/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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "dependencies": { + "bytes": "1", + "string_decoder": "0.10" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/raw-body/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/react": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/react/-/react-15.7.0.tgz", + "integrity": "sha512-5/MMRYmpmM0sMTHGLossnJCrmXQIiJilD6y3YN3TzAwGFj6zdnMtFv6xmi65PHKRV+pehIHpT7oy67Sr6s9AHA==", + "dev": true, + "dependencies": { + "create-react-class": "^15.6.0", + "fbjs": "^0.8.9", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0", + "prop-types": "^15.5.10" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.7.0.tgz", + "integrity": "sha512-mpjXqC2t1FuYsILOLCj0kg6pbg460byZkVA/80VtDmKU/pYmoTdHOtaMcTRIDiyXLz4sIur0cQ04nOC6iGndJg==", + "dev": true, + "dependencies": { + "fbjs": "^0.8.9", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.0", + "prop-types": "^15.5.10" + }, + "peerDependencies": { + "react": "^15.7.0" + } + }, + "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==", + "dev": true + }, + "node_modules/read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "inBundle": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "inBundle": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "dependencies": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + } + }, + "node_modules/reduce-css-calc/node_modules/balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "node_modules/reduce-flatten": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", + "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reduce-function-call": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "dependencies": { + "is-equal-shallow": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags/node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexp.prototype.flags/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "dependencies": { + "jsesc": "~0.5.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": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remark": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-8.0.0.tgz", + "integrity": "sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw==", + "dev": true, + "dependencies": { + "remark-parse": "^4.0.0", + "remark-stringify": "^4.0.0", + "unified": "^6.0.0" + } + }, + "node_modules/remark-html": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-6.0.1.tgz", + "integrity": "sha1-UJTSxx95Qf2yroZbrHZid1fOCcE=", + "dev": true, + "dependencies": { + "hast-util-sanitize": "^1.0.0", + "hast-util-to-html": "^3.0.0", + "mdast-util-to-hast": "^2.1.1", + "xtend": "^4.0.1" + } + }, + "node_modules/remark-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz", + "integrity": "sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw==", + "dev": true, + "dependencies": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/remark-slug": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-4.2.3.tgz", + "integrity": "sha1-jZh9Dl5j1KSeo3uQ/pmaPc/IG3I=", + "dev": true, + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^1.0.0" + } + }, + "node_modules/remark-stringify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-4.0.0.tgz", + "integrity": "sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "node_modules/remark-toc": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-4.0.1.tgz", + "integrity": "sha1-/zb/beVOoH3Vnj9TNKSjqsHpMYU=", + "dev": true, + "dependencies": { + "mdast-util-toc": "^2.0.0", + "remark-slug": "^4.0.0" + } + }, + "node_modules/remote-origin-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/remote-origin-url/-/remote-origin-url-0.4.0.tgz", + "integrity": "sha1-TT4pAvNOLTfRwmPYdxC3frQIajA=", + "dev": true, + "dependencies": { + "parse-git-config": "^0.2.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "inBundle": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "inBundle": true + }, + "node_modules/require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "dependencies": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "dependencies": { + "through": "~2.3.4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "inBundle": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "inBundle": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/robust-orientation": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/robust-orientation/-/robust-orientation-1.1.3.tgz", + "integrity": "sha1-2v9bANO+TmByLw6cAVbvln8cIEk=", + "dev": true, + "dependencies": { + "robust-scale": "^1.0.2", + "robust-subtract": "^1.0.0", + "robust-sum": "^1.0.0", + "two-product": "^1.0.2" + } + }, + "node_modules/robust-scale": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/robust-scale/-/robust-scale-1.0.2.tgz", + "integrity": "sha1-d1Ey7QlULQKOWLLMecBikLz3jDI=", + "dev": true, + "dependencies": { + "two-product": "^1.0.2", + "two-sum": "^1.0.0" + } + }, + "node_modules/robust-subtract": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/robust-subtract/-/robust-subtract-1.0.0.tgz", + "integrity": "sha1-4LFk4e2LpOOl3aRaEgODSNvtPpo=", + "dev": true + }, + "node_modules/robust-sum": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/robust-sum/-/robust-sum-1.0.0.tgz", + "integrity": "sha1-FmRuUlKStNJdgnV6KGlV4Lv6U9k=", + "dev": true + }, + "node_modules/run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "dependencies": { + "is-promise": "^2.1.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "dependencies": { + "rx-lite": "*" + } + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "node_modules/safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true + }, + "node_modules/sax": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.4.2.tgz", + "integrity": "sha1-OfO2AXM9a+yXEFskKipA/Wl4rDw=", + "dev": true + }, + "node_modules/semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "inBundle": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "inBundle": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=", + "dev": true + }, + "node_modules/shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "dependencies": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "node_modules/shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dev": true, + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "node_modules/shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "iojs": "*", + "node": ">=0.11.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, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simplicial-complex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simplicial-complex/-/simplicial-complex-1.0.0.tgz", + "integrity": "sha1-bDOk7Wn81Nkbe8rdOzC2NoPq4kE=", + "dev": true, + "dependencies": { + "bit-twiddle": "^1.0.0", + "union-find": "^1.0.0" + } + }, + "node_modules/simplify-js": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/simplify-js/-/simplify-js-1.2.3.tgz", + "integrity": "sha512-0IkEqs+5c5vROkHaifGfbqHf5tYDcsTBy6oJPRbFCSwp2uzEr+PpH3dNP7wD8O3d7zdUCjLVq1/xHkwA/JjlFA==", + "dev": true + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/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/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "inBundle": true, + "dependencies": { + "spdx-license-ids": "^1.0.2" + } + }, + "node_modules/spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "inBundle": true + }, + "node_modules/spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "inBundle": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/sprintf/-/sprintf-0.1.5.tgz", + "integrity": "sha1-j4PjmpMXwaUCy324BQ5Rxnn27c8=", + "deprecated": "The sprintf package is deprecated in favor of sprintf-js.", + "dev": true, + "engines": { + "node": ">=0.2.4" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=", + "dev": true + }, + "node_modules/stack-generator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-1.1.0.tgz", + "integrity": "sha1-NvapIHUabBD0maE8Msu19RoLiyU=", + "dev": true, + "dependencies": { + "stackframe": "^1.0.2" + } + }, + "node_modules/stack-generator/node_modules/stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "dev": true + }, + "node_modules/stackframe": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz", + "integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ=", + "dev": true + }, + "node_modules/stacktrace-gps": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-2.4.4.tgz", + "integrity": "sha1-acgn6dbW9Bz0ONfxleLjy/zyjEQ=", + "dev": true, + "dependencies": { + "source-map": "0.5.6", + "stackframe": "~0.3" + } + }, + "node_modules/stacktrace-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-1.3.1.tgz", + "integrity": "sha1-Z8qyWJr1xBe5Yvc2mUAne7O2oYs=", + "dev": true, + "dependencies": { + "error-stack-parser": "^1.3.6", + "stack-generator": "^1.0.7", + "stacktrace-gps": "^2.4.3" + } + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dev": true, + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/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==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/static-eval/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, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-module": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", + "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", + "dev": true, + "dependencies": { + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "~1.9.0", + "falafel": "^2.1.0", + "has": "^1.0.1", + "magic-string": "^0.22.4", + "merge-source-map": "1.0.4", + "object-inspect": "~1.4.0", + "quote-stream": "~1.0.2", + "readable-stream": "~2.3.3", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.0", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/static-module/node_modules/object-inspect": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", + "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==", + "dev": true + }, + "node_modules/stream-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/stream-array/-/stream-array-1.1.2.tgz", + "integrity": "sha1-nl9zRfITfDDuO0mLkRToC1K7frU=", + "dev": true, + "dependencies": { + "readable-stream": "~2.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stream-array/node_modules/readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "dev": true, + "dependencies": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-array/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-browserify/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/stream-browserify/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/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/stream-http/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-http/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/stream-http/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/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "inBundle": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.6.tgz", + "integrity": "sha512-8lMR2m+U0VJTPp6JjvJTtGyc4FIGq9CdRt7O9p6T0e6K4vjU+OP+SQJpbe/SBmRcCUIvNUnjsbmY6lnMp8MhsQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "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/string.prototype.trim/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/string.prototype.trim/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/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": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/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, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/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, + "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" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", + "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "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/string.prototype.trimend/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/string.prototype.trimend/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/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": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/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, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend/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, + "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" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", + "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/node_modules/es-abstract": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", + "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "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/string.prototype.trimstart/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/string.prototype.trimstart/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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/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": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/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, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart/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, + "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" + } + }, + "node_modules/stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "dev": true, + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "inBundle": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "inBundle": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "dev": true, + "dependencies": { + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "dependencies": { + "minimist": "^1.1.0" + } + }, + "node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "dependencies": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svgo/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svgo/node_modules/js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/svgo/node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "dependencies": { + "acorn-node": "^1.2.0" + } + }, + "node_modules/table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "dependencies": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + }, + "node_modules/table-layout": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.4.tgz", + "integrity": "sha512-uNaR3SRMJwfdp9OUr36eyEi6LLsbcTqTO/hfTsNviKsNeyMBPICJCC7QXRF3+07bAP6FRwA8rczJPBqXDc0CkQ==", + "dev": true, + "dependencies": { + "array-back": "^2.0.0", + "deep-extend": "~0.6.0", + "lodash.padend": "^4.6.1", + "typical": "^2.6.1", + "wordwrapjs": "^3.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/table-layout/node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table/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==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tap-parser": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-0.4.3.tgz", + "integrity": "sha1-pOrhkMENdsehEZIf84u+TVjwnuo=", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.11" + } + }, + "node_modules/tap-parser/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/tap-parser/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/tap-parser/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/tape": { + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.16.0.tgz", + "integrity": "sha512-mBlqYFr2mHysgCFXAuSarIQ+ffhielpb7a5/IbeOhMaLnQYhkJLUm6CwO1RszWeHRxnIpMessZ3xL2Cfo94BWw==", + "dev": true, + "dependencies": { + "call-bind": "~1.0.2", + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "glob": "~7.2.3", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.1.4", + "minimist": "~1.2.6", + "object-inspect": "~1.12.2", + "resolve": "~1.22.1", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.6", + "through": "~2.3.8" + }, + "bin": { + "tape": "bin/tape" + } + }, + "node_modules/tape/node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tape/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tape/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/tape/node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tape/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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tape/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tape/node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/tape/node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tape/node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/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/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "dev": true, + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/through2/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/through2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "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/through2/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/timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "dependencies": { + "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dev": true, + "dependencies": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + } + }, + "node_modules/tiny-lr/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/tiny-lr/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/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-absolute-glob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.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==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex-range/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==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/transform-filter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/transform-filter/-/transform-filter-0.1.1.tgz", + "integrity": "sha1-gG+FG25ECyN4j9OMoEMbUCAlulk=", + "dev": true, + "dependencies": { + "multimatch": "^2.0.0", + "through": "^2.3.6" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "node_modules/trim-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.3.tgz", + "integrity": "sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/turf": { + "version": "3.0.14", + "resolved": "http://registry.npmjs.org/turf/-/turf-3.0.14.tgz", + "integrity": "sha1-6y9KgKLVg7jGSGvHtccZBGaGbCc=", + "deprecated": "This package has moved: use @turf/turf instead", + "dev": true, + "dependencies": { + "turf-along": "^3.0.12", + "turf-area": "^3.0.12", + "turf-bbox": "^3.0.12", + "turf-bbox-polygon": "^3.0.12", + "turf-bearing": "^3.0.12", + "turf-bezier": "^3.0.12", + "turf-buffer": "^3.0.12", + "turf-center": "^3.0.12", + "turf-centroid": "^3.0.12", + "turf-circle": "^3.0.12", + "turf-collect": "^3.0.12", + "turf-combine": "^3.0.12", + "turf-concave": "^3.0.12", + "turf-convex": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-difference": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-envelope": "^3.0.12", + "turf-explode": "^3.0.12", + "turf-flip": "^3.0.12", + "turf-helpers": "^3.0.12", + "turf-hex-grid": "^3.0.12", + "turf-inside": "^3.0.12", + "turf-intersect": "^3.0.12", + "turf-isolines": "^3.0.12", + "turf-kinks": "^3.0.12", + "turf-line-distance": "^3.0.12", + "turf-line-slice": "^3.0.12", + "turf-meta": "^3.0.12", + "turf-midpoint": "^3.0.12", + "turf-nearest": "^3.0.12", + "turf-planepoint": "^3.0.12", + "turf-point-grid": "^3.0.12", + "turf-point-on-line": "^3.0.12", + "turf-point-on-surface": "^3.0.12", + "turf-random": "^3.0.12", + "turf-sample": "^3.0.12", + "turf-simplify": "^3.0.12", + "turf-square": "^3.0.12", + "turf-square-grid": "^3.0.12", + "turf-tag": "^3.0.12", + "turf-tesselate": "^3.0.12", + "turf-tin": "^3.0.12", + "turf-triangle-grid": "^3.0.12", + "turf-union": "^3.0.12", + "turf-within": "^3.0.12" + } + }, + "node_modules/turf-along": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-along/-/turf-along-3.0.12.tgz", + "integrity": "sha1-5iK956S9E4wJZH1LFKoOpwBIXeY=", + "deprecated": "Turf packages are now namespaced: please use @turf/along instead", + "dev": true, + "dependencies": { + "turf-bearing": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-area": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-area/-/turf-area-3.0.12.tgz", + "integrity": "sha1-m35Gnvn7VY/RR7sMIUgjJjvb8Tw=", + "deprecated": "Turf packages are now namespaced: please use @turf/area instead", + "dev": true, + "dependencies": { + "geojson-area": "^0.2.1" + } + }, + "node_modules/turf-bbox": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-bbox/-/turf-bbox-3.0.12.tgz", + "integrity": "sha1-P6BhF8hEOGDsgKxg/V0vEyC/sb4=", + "deprecated": "Turf packages are now namespaced: please use @turf/bbox instead", + "dev": true, + "dependencies": { + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-bbox-polygon": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-bbox-polygon/-/turf-bbox-polygon-3.0.12.tgz", + "integrity": "sha1-Mw3AuzgyLWFUXflmzmyA9oWs9PI=", + "deprecated": "Turf packages are now namespaced: please use @turf/bbox-polygon instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-bearing": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-bearing/-/turf-bearing-3.0.12.tgz", + "integrity": "sha1-ZfYJ3YUOc2THdxqm3th7DhkX/SA=", + "deprecated": "Turf packages are now namespaced: please use @turf/bearing instead", + "dev": true, + "dependencies": { + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-bezier": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-bezier/-/turf-bezier-3.0.12.tgz", + "integrity": "sha1-EC791KY7Jl7pyMFydjGSCzb03QI=", + "deprecated": "Turf packages are now namespaced: please use @turf/bezier instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-buffer": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-buffer/-/turf-buffer-3.0.12.tgz", + "integrity": "sha1-IIQP58aqZ7JL4cq3/8xagv1r2XE=", + "deprecated": "Turf packages are now namespaced: please use @turf/buffer instead", + "dev": true, + "dependencies": { + "geojson-normalize": "0.0.0", + "jsts": "1.1.2", + "turf-combine": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-center": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-center/-/turf-center-3.0.12.tgz", + "integrity": "sha1-Rd1sFym7hnKR4+AC6cdQb4xEAZY=", + "deprecated": "Turf packages are now namespaced: please use @turf/center instead", + "dev": true, + "dependencies": { + "turf-bbox": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-centroid": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-centroid/-/turf-centroid-3.0.12.tgz", + "integrity": "sha1-6u4NaYIEtX/DOZS7G8hnuNopP48=", + "deprecated": "Turf packages are now namespaced: please use @turf/centroid instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-circle": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-circle/-/turf-circle-3.0.12.tgz", + "integrity": "sha1-FAshy0lQ8tPLxw0t8BKTaGf1iTA=", + "deprecated": "Turf packages are now namespaced: please use @turf/circle instead", + "dev": true, + "dependencies": { + "turf-destination": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-collect": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-collect/-/turf-collect-3.0.12.tgz", + "integrity": "sha1-bphtGnB9oxnMg+cjjQvN8Zqjx/I=", + "deprecated": "Turf packages are now namespaced: please use @turf/collect instead", + "dev": true, + "dependencies": { + "turf-inside": "^3.0.12" + } + }, + "node_modules/turf-combine": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-combine/-/turf-combine-3.0.12.tgz", + "integrity": "sha1-FnB0bw/c4NHqiqain/5UONRGz3M=", + "deprecated": "Turf packages are now namespaced: please use @turf/combine instead", + "dev": true, + "dependencies": { + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-concave": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-concave/-/turf-concave-3.0.12.tgz", + "integrity": "sha1-/KtgVpZbCoMZ9s2AJgEJXy/TqOs=", + "deprecated": "Turf packages are now namespaced: please use @turf/concave instead", + "dev": true, + "dependencies": { + "turf-distance": "^3.0.12", + "turf-meta": "^3.0.12", + "turf-tin": "^3.0.12", + "turf-union": "^3.0.12" + } + }, + "node_modules/turf-convex": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-convex/-/turf-convex-3.0.12.tgz", + "integrity": "sha1-qI3cPiLRy2WHlqnIXTraO9Pso1c=", + "deprecated": "Turf packages are now namespaced: please use @turf/convex instead", + "dev": true, + "dependencies": { + "convex-hull": "^1.0.3", + "turf-helpers": "^3.0.12", + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-destination": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-destination/-/turf-destination-3.0.12.tgz", + "integrity": "sha1-fdb7+X6G+DGibIPvLVovjR2KbeI=", + "deprecated": "Turf packages are now namespaced: please use @turf/destination instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-difference": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-difference/-/turf-difference-3.0.12.tgz", + "integrity": "sha1-nD0NdjBCEAW4slt/Bo7Z77S8bqc=", + "deprecated": "Turf packages are now namespaced: please use @turf/difference instead", + "dev": true, + "dependencies": { + "jsts": "1.1.2", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-distance": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-distance/-/turf-distance-3.0.12.tgz", + "integrity": "sha1-+5e4cF+s2ZOxReAUtBhiYQ7spEk=", + "deprecated": "Turf packages are now namespaced: please use @turf/distance instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-envelope": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-envelope/-/turf-envelope-3.0.12.tgz", + "integrity": "sha1-lpIdJ4zIxmRpLjIOJUO5FAgNeGs=", + "deprecated": "Turf packages are now namespaced: please use @turf/envelope instead", + "dev": true, + "dependencies": { + "turf-bbox": "^3.0.12", + "turf-bbox-polygon": "^3.0.12" + } + }, + "node_modules/turf-explode": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-explode/-/turf-explode-3.0.12.tgz", + "integrity": "sha1-xa4owoTNAGxWUR7H1AjEilQU7P4=", + "deprecated": "Turf packages are now namespaced: please use @turf/explode instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-flip": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-flip/-/turf-flip-3.0.12.tgz", + "integrity": "sha1-3rhoF3uf87sxDF1BqqxhqRVqPLs=", + "deprecated": "Turf packages are now namespaced: please use @turf/flip instead", + "dev": true, + "dependencies": { + "turf-meta": "^3.0.12" + } + }, + "node_modules/turf-grid": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/turf-grid/-/turf-grid-1.0.1.tgz", + "integrity": "sha1-uQSrxWS5ObYnpmrBXrFuBTgpuA8=", + "dev": true, + "dependencies": { + "turf-point": "^2.0.0" + } + }, + "node_modules/turf-helpers": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-helpers/-/turf-helpers-3.0.12.tgz", + "integrity": "sha1-3UJy50s618lu7LeuXFf+jspUS3s=", + "deprecated": "Turf packages are now namespaced: please use @turf/helpers instead", + "dev": true + }, + "node_modules/turf-hex-grid": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-hex-grid/-/turf-hex-grid-3.0.12.tgz", + "integrity": "sha1-BpjvZpAguzHY6cwgVtCr/K/ITo8=", + "deprecated": "Turf packages are now namespaced: please use @turf/hex-grid instead", + "dev": true, + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-inside": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-inside/-/turf-inside-3.0.12.tgz", + "integrity": "sha1-m6QPpu7WO+x+fYiqZCdiLE3wcGY=", + "deprecated": "Turf packages are now namespaced: please use @turf/inside instead", + "dev": true, + "dependencies": { + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-intersect": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-intersect/-/turf-intersect-3.0.12.tgz", + "integrity": "sha1-wNf7MFhDoZJ1ZwBXo50mixeDDYM=", + "deprecated": "Turf packages are now namespaced: please use @turf/intersect instead", + "dev": true, + "dependencies": { + "jsts": "1.1.2" + } + }, + "node_modules/turf-invariant": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-invariant/-/turf-invariant-3.0.12.tgz", + "integrity": "sha1-O5UlOVOZHr2WLdNdT2cEwofejr4=", + "deprecated": "Turf packages are now namespaced: please use @turf/invariant instead", + "dev": true + }, + "node_modules/turf-isolines": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-isolines/-/turf-isolines-3.0.12.tgz", + "integrity": "sha1-ALIz3+LuvU7LR6lPySPG7OyJx6s=", + "deprecated": "Turf packages are now namespaced: please use @turf/isolines instead", + "dev": true, + "dependencies": { + "turf-bbox": "^3.0.12", + "turf-grid": "1.0.1", + "turf-helpers": "^3.0.12", + "turf-inside": "^3.0.12", + "turf-planepoint": "^3.0.12", + "turf-square": "^3.0.12", + "turf-tin": "^3.0.12" + } + }, + "node_modules/turf-kinks": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-kinks/-/turf-kinks-3.0.12.tgz", + "integrity": "sha1-6cmo26VyTZjyNQ/FveugaewzN1U=", + "deprecated": "Turf packages are now namespaced: please use @turf/kinks instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-line-distance": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-line-distance/-/turf-line-distance-3.0.12.tgz", + "integrity": "sha1-cQj1smkH97jC3Rs5l4Zt06YOj18=", + "deprecated": "Turf packages are now namespaced: please use @turf/line-distance instead", + "dev": true, + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-line-slice": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-line-slice/-/turf-line-slice-3.0.12.tgz", + "integrity": "sha1-9fGszJKtrmnqGsCynwdSmijd6RY=", + "deprecated": "Turf packages are now namespaced: please use @turf/line-slice instead", + "dev": true, + "dependencies": { + "turf-bearing": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12", + "turf-point-on-line": "^3.0.12" + } + }, + "node_modules/turf-meta": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-meta/-/turf-meta-3.0.12.tgz", + "integrity": "sha1-CqmhyvgrKloI1U4IMLW1o/oOijg=", + "deprecated": "Turf packages are now namespaced: please use @turf/meta instead", + "dev": true + }, + "node_modules/turf-midpoint": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-midpoint/-/turf-midpoint-3.0.12.tgz", + "integrity": "sha1-sSdlroms3uhVb9XibJxfoEGgLL4=", + "deprecated": "Turf packages are now namespaced: please use @turf/midpoint instead", + "dev": true, + "dependencies": { + "turf-bearing": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-invariant": "^3.0.12" + } + }, + "node_modules/turf-nearest": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-nearest/-/turf-nearest-3.0.12.tgz", + "integrity": "sha1-cAIH9EQ/BQlvhs0kb5KfFw369G0=", + "deprecated": "Turf packages are now namespaced: please use @turf/nearest instead", + "dev": true, + "dependencies": { + "turf-distance": "^3.0.12" + } + }, + "node_modules/turf-planepoint": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-planepoint/-/turf-planepoint-3.0.12.tgz", + "integrity": "sha1-LDeuDxf8sw22448NWe5sDdbKqa8=", + "deprecated": "Turf packages are now namespaced: please use @turf/planepoint instead", + "dev": true + }, + "node_modules/turf-point": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/turf-point/-/turf-point-2.0.1.tgz", + "integrity": "sha1-otzDCi0g9Ez1xicd97riwOIUYGk=", + "dev": true, + "dependencies": { + "minimist": "^1.1.0" + }, + "bin": { + "turf-point": "bin/point.js" + } + }, + "node_modules/turf-point-grid": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-point-grid/-/turf-point-grid-3.0.12.tgz", + "integrity": "sha1-1gSXi+ELyeUzBq4CzvcJhDHbSXE=", + "deprecated": "Turf packages are now namespaced: please use @turf/point-grid instead", + "dev": true, + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-point-on-line": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-point-on-line/-/turf-point-on-line-3.0.12.tgz", + "integrity": "sha1-HYZjNU5wNy2xhj5iU+kEDEcSew8=", + "deprecated": "Turf packages are now namespaced: please use @turf/point-on-line instead", + "dev": true, + "dependencies": { + "turf-bearing": "^3.0.12", + "turf-destination": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-point-on-surface": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-point-on-surface/-/turf-point-on-surface-3.0.12.tgz", + "integrity": "sha1-m+UFtrC6eOmFZQAd47OkJnEVJAo=", + "deprecated": "Turf packages are now namespaced: please use @turf/point-on-surface instead", + "dev": true, + "dependencies": { + "turf-center": "^3.0.12", + "turf-distance": "^3.0.12", + "turf-explode": "^3.0.12", + "turf-helpers": "^3.0.12", + "turf-inside": "^3.0.12" + } + }, + "node_modules/turf-point/node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/turf-random": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-random/-/turf-random-3.0.12.tgz", + "integrity": "sha1-NNuxQcPx6urhQk/Wxeq6H2+5seg=", + "deprecated": "Turf packages are now namespaced: please use @turf/random instead", + "dev": true, + "dependencies": { + "geojson-random": "^0.2.2" + } + }, + "node_modules/turf-sample": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-sample/-/turf-sample-3.0.12.tgz", + "integrity": "sha1-eUn4YgYSBH4TFMHO2H6ZwUJGPNI=", + "deprecated": "Turf packages are now namespaced: please use @turf/sample instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-simplify": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-simplify/-/turf-simplify-3.0.12.tgz", + "integrity": "sha1-heRDyLRqordSY4lETHOB2qKtGec=", + "deprecated": "Turf packages are now namespaced: please use @turf/simplify instead", + "dev": true, + "dependencies": { + "simplify-js": "^1.2.1" + } + }, + "node_modules/turf-square": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-square/-/turf-square-3.0.12.tgz", + "integrity": "sha1-Gjix4PsF/+D8qkMYji83lCpRW2Q=", + "deprecated": "Turf packages are now namespaced: please use @turf/square instead", + "dev": true, + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-square-grid": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-square-grid/-/turf-square-grid-3.0.12.tgz", + "integrity": "sha1-PB2ArBRVbGgTtHi9oBJRLtS5Psg=", + "deprecated": "Turf packages are now namespaced: please use @turf/square-grid instead", + "dev": true, + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-tag": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-tag/-/turf-tag-3.0.12.tgz", + "integrity": "sha1-IoT/8Oih6Son1Kx/10cbPEjd0ag=", + "deprecated": "Turf packages are now namespaced: please use @turf/tag instead", + "dev": true, + "dependencies": { + "turf-inside": "^3.0.12" + } + }, + "node_modules/turf-tesselate": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-tesselate/-/turf-tesselate-3.0.12.tgz", + "integrity": "sha1-QUdLe1s4ILzyc/tx4YlNjDzUDTU=", + "deprecated": "Turf packages are now namespaced: please use @turf/tesselate instead", + "dev": true, + "dependencies": { + "earcut": "^2.0.0", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-tin": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-tin/-/turf-tin-3.0.12.tgz", + "integrity": "sha1-tlNGRHY6zhyd8kHJWNI4SFUlc4U=", + "deprecated": "Turf packages are now namespaced: please use @turf/tin instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-triangle-grid": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-triangle-grid/-/turf-triangle-grid-3.0.12.tgz", + "integrity": "sha1-gGR+V9r+CTRoeaKaGKDmKUrPEVk=", + "deprecated": "Turf packages are now namespaced: please use @turf/triangle-grid instead", + "dev": true, + "dependencies": { + "turf-distance": "^3.0.12", + "turf-helpers": "^3.0.12" + } + }, + "node_modules/turf-union": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-union/-/turf-union-3.0.12.tgz", + "integrity": "sha1-3+0OVUC4woVeSZTBRiHjpgyCnI4=", + "deprecated": "Turf packages are now namespaced: please use @turf/union instead", + "dev": true, + "dependencies": { + "jsts": "1.1.2" + } + }, + "node_modules/turf-within": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/turf-within/-/turf-within-3.0.12.tgz", + "integrity": "sha1-937q83cjhWG3+xM4526dEph0H5Q=", + "deprecated": "Turf packages are now namespaced: please use @turf/within instead", + "dev": true, + "dependencies": { + "turf-helpers": "^3.0.12", + "turf-inside": "^3.0.12" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "node_modules/two-product": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/two-product/-/two-product-1.0.2.tgz", + "integrity": "sha1-Z9ldSyV6kh4stL16+VEfkIhSLqo=", + "dev": true + }, + "node_modules/two-sum": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/two-sum/-/two-sum-1.0.0.tgz", + "integrity": "sha1-MdPzIjnk9zHsqd+RVeKyl/AIq2Q=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", + "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "node_modules/umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true, + "bin": { + "umd": "bin/cli.js" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive/node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "dev": true + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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, + "engines": { + "node": ">=4" + } + }, + "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, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + } + }, + "node_modules/union-find": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/union-find/-/union-find-1.0.2.tgz", + "integrity": "sha1-KSusQV5q06iVNdI3AQ20pTYoTlg=", + "dev": true + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/unique-stream/node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/unist-builder": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.4.tgz", + "integrity": "sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "dev": true, + "dependencies": { + "unist-util-visit": "^1.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unist-util-select/-/unist-util-select-1.5.0.tgz", + "integrity": "sha1-qTwr6MD2U4J4A7gTMa3sKqJM2TM=", + "dev": true, + "dependencies": { + "css-selector-parser": "^1.1.0", + "debug": "^2.2.0", + "nth-check": "^1.0.1" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true, + "bin": { + "user-home": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "dependencies": { + "user-home": "^1.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "inBundle": true, + "dependencies": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "node_modules/vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "dependencies": { + "unist-util-stringify-position": "^1.1.1" + } + }, + "node_modules/vfile-reporter": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-4.0.0.tgz", + "integrity": "sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do=", + "dev": true, + "dependencies": { + "repeat-string": "^1.5.0", + "string-width": "^1.0.0", + "supports-color": "^4.1.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-statistics": "^1.1.0" + } + }, + "node_modules/vfile-reporter/node_modules/has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vfile-reporter/node_modules/supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "dependencies": { + "has-flag": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/vfile-sort": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", + "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz", + "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "dev": true, + "dependencies": { + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/vinyl-fs/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/vinyl-fs/node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "node_modules/vinyl-fs/node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/vinyl-fs/node_modules/vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "engines": { + "node": ">= 0.9" + } + }, + "node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/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, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/wgs84": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz", + "integrity": "sha1-NP3FVZF7blfPKigu0ENxDASc3HY=", + "dev": true + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "inBundle": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "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==", + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "inBundle": true + }, + "node_modules/which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", + "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", + "dev": true, + "dependencies": { + "reduce-flatten": "^1.0.1", + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "inBundle": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "inBundle": true + }, + "node_modules/write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.6.tgz", + "integrity": "sha1-0gnE5N2h/JxFIUHvQcB39a399sQ=", + "dev": true, + "dependencies": { + "sax": "0.4.2" + } + }, + "node_modules/xmlbuilder": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.2.1.tgz", + "integrity": "sha1-qlijBBoGb5DqoWwvU4n/GfP0YaU=", + "dev": true, + "dependencies": { + "lodash": "^4.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "inBundle": true + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/yargs": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", + "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "inBundle": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "5.0.0-security.0" + } + }, + "node_modules/yargs-parser": { + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "inBundle": true, + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + } + }, "dependencies": { "@ampproject/remapping": { "version": "2.2.0", @@ -1584,16 +20479,6 @@ "dev": true, "optional": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1680,36 +20565,23 @@ } }, "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "dependencies": { - "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==", - "dev": true - }, - "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==", - "dev": true - } + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true + "dev": true, + "requires": {} }, "align-text": { "version": "0.1.4", @@ -3318,7 +22190,8 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", - "dev": true + "dev": true, + "requires": {} }, "babylon": { "version": "6.18.0", @@ -3527,9 +22400,9 @@ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" @@ -3558,7 +22431,6 @@ "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", @@ -3580,6 +22452,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", @@ -3634,7 +22507,6 @@ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -3642,6 +22514,7 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -5057,18 +23930,6 @@ "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -5139,7 +24000,8 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz", "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==", - "dev": true + "dev": true, + "requires": {} }, "braces": { "version": "1.8.5", @@ -5168,7 +24030,6 @@ "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", @@ -5190,6 +24051,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", @@ -5440,7 +24302,6 @@ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -5448,6 +24309,7 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -6092,7 +24954,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, + "devOptional": true, "requires": { "iconv-lite": "^0.6.2" }, @@ -6101,7 +24963,7 @@ "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, + "devOptional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -6388,6 +25250,18 @@ "js-tokens": "^4.0.0" } }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", @@ -6490,6 +25364,12 @@ "tmp": "^0.0.33" } }, + "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==", + "dev": true + }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", @@ -6603,6 +25483,12 @@ "esprima": "^4.0.0" } }, + "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==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6843,7 +25729,8 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -8150,6 +27037,32 @@ "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true + } } }, "has": { @@ -8686,11 +27599,11 @@ "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", @@ -9335,6 +28248,16 @@ } } }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -10005,13 +28928,13 @@ "integrity": "sha1-ElGkuixEqS32mJvQKdoSGk8hCbA=", "dev": true, "requires": { - "JSONStream": "^1.0.3", "browser-resolve": "^1.7.0", "concat-stream": "~1.5.0", "defined": "^1.0.0", "detective": "^4.0.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.1.3", @@ -12024,7 +30947,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "devOptional": true }, "sax": { "version": "0.4.2", @@ -12719,6 +31642,15 @@ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "dev": true }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", @@ -13163,15 +32095,6 @@ } } }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "stringify-entities": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", @@ -13299,18 +32222,6 @@ "string-width": "^2.1.1" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", From 2c02d4e5abde1d67abe7320b9815588041b1365b Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Tue, 1 Nov 2022 12:10:48 +0100 Subject: [PATCH 20/75] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf1c10381..56e2d3261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - FIXED: Fix bindings compilation issue on the latest Node. Update NAN to 2.17.0. [#6416](https://github.com/Project-OSRM/osrm-backend/pull/6416) - CHANGED: Make edge metrics strongly typed [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - FIXED: Typo in file name src/util/timed_historgram.cpp -> src/util/timed_histogram.cpp [#6428](https://github.com/Project-OSRM/osrm-backend/issues/6428) + - CHANGED: Replace boost::string_ref with std::string_view [#6433](https://github.com/Project-OSRM/osrm-backend/pull/6433) - Routing: - FIXED: Fix adding traffic signal penalties during compression [#6419](https://github.com/Project-OSRM/osrm-backend/pull/6419) # 5.27.1 From 5280ca4e1642085e1520ffff8a842c3cb0124fe7 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Fri, 4 Nov 2022 11:41:02 +0100 Subject: [PATCH 21/75] Pass string_view by value --- include/extractor/suffix_table.hpp | 2 +- include/util/guidance/name_announcements.hpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/extractor/suffix_table.hpp b/include/extractor/suffix_table.hpp index cadfb5e2e..53eb1062b 100644 --- a/include/extractor/suffix_table.hpp +++ b/include/extractor/suffix_table.hpp @@ -23,7 +23,7 @@ class SuffixTable final // check whether a string is part of the know suffix list bool isSuffix(const std::string &possible_suffix) const; - bool isSuffix(std::string_view possible_suffix) const; + bool isSuffix(std::string_view& possible_suffix) const; private: // Store lower-cased strings in SuffixTable and a set of StringViews for quick membership diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index 1ebf8a64a..a3dd72a06 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -27,8 +27,8 @@ namespace guidance // Name Change Logic // Used both during Extraction as well as during Post-Processing -inline std::string_view longest_common_substring(const std::string_view &lhs, - const std::string_view &rhs) +inline std::string_view longest_common_substring(const std::string_view lhs, + const std::string_view rhs) { if (lhs.empty() || rhs.empty()) return ""; @@ -131,8 +131,8 @@ inline bool requiresNameAnnounced(const StringView &from_name, const auto name_is_contained = boost::starts_with(from_name, to_name) || boost::starts_with(to_name, from_name); - const auto checkForPrefixOrSuffixChange = [](const std::string_view &first, - const std::string_view &second, + const auto checkForPrefixOrSuffixChange = [](const std::string_view first, + const std::string_view second, const SuffixTable &suffix_table) { std::string first_prefix, first_suffix, second_prefix, second_suffix; std::tie(first_prefix, first_suffix, second_prefix, second_suffix) = @@ -203,7 +203,7 @@ inline bool requiresNameAnnounced(const std::string &from_name, struct NopSuffixTable final { NopSuffixTable() {} - bool isSuffix(const std::string_view &) const { return false; } + bool isSuffix(const std::string_view) const { return false; } } static const table; return requiresNameAnnounced(std::string_view(from_name), From 5dda33fa8884345b37f37ed77499e2d492993e4e Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Fri, 4 Nov 2022 11:42:37 +0100 Subject: [PATCH 22/75] More efficient toLower implementation --- include/util/guidance/name_announcements.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index a3dd72a06..02a62b119 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -70,7 +70,8 @@ template inline auto decompose(const StringView &lhs, cons const auto trim = [](StringView view) { // we compare suffixes based on this value, it might break UTF chars, but as long as we are // consistent in handling, we do not create bad results - std::string str(view); + std::string str; + str.reserve(view.size()); std::transform( str.begin(), str.end(), str.begin(), [](unsigned char c) { return std::tolower(c); }); auto front = str.find_first_not_of(' '); From 6fa7bd8abd3b239850cc0288c0f6abf14676dacc Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Fri, 4 Nov 2022 11:47:40 +0100 Subject: [PATCH 23/75] Upgrade check_tackinfo.py to Python3 --- scripts/check_taginfo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/check_taginfo.py b/scripts/check_taginfo.py index 329335563..c71b46882 100755 --- a/scripts/check_taginfo.py +++ b/scripts/check_taginfo.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 import json import sys @@ -7,7 +7,7 @@ import re WHITELIST = set(["mph"]) if len(sys.argv) < 3: - print "Not enough arguments.\nUsage: " + sys.argv[0] + " taginfo.json profile.lua" + print("Not enough arguments.\nUsage: " + sys.argv[0] + " taginfo.json profile.lua") sys.exit(1) taginfo_path = sys.argv[1] From a1c1fefd6e10af3b7223ad669c6b3bc452f4ca3d Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Fri, 4 Nov 2022 11:49:54 +0100 Subject: [PATCH 24/75] Fix formatting, pass by value --- include/extractor/suffix_table.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/extractor/suffix_table.hpp b/include/extractor/suffix_table.hpp index 53eb1062b..cadfb5e2e 100644 --- a/include/extractor/suffix_table.hpp +++ b/include/extractor/suffix_table.hpp @@ -23,7 +23,7 @@ class SuffixTable final // check whether a string is part of the know suffix list bool isSuffix(const std::string &possible_suffix) const; - bool isSuffix(std::string_view& possible_suffix) const; + bool isSuffix(std::string_view possible_suffix) const; private: // Store lower-cased strings in SuffixTable and a set of StringViews for quick membership From 0ae519093702ba0f0f11eeb1fcfcd6432562e88c Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Fri, 4 Nov 2022 12:19:39 +0100 Subject: [PATCH 25/75] Fix `npm audit` warnings in NPM package (#6437) --- .github/workflows/osrm-backend.yml | 1 + CHANGELOG.md | 1 + package-lock.json | 285 ++++++++++++++++------------- package.json | 20 +- 4 files changed, 170 insertions(+), 137 deletions(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 04fd49686..7d362ed26 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -95,6 +95,7 @@ jobs: ./scripts/format.sh && ./scripts/error_on_dirty.sh node ./scripts/validate_changelog.js npm run docs && ./scripts/error_on_dirty.sh + npm audit --production docker-image: needs: format-taginfo-docs diff --git a/CHANGELOG.md b/CHANGELOG.md index 15c67d720..ce03e744a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - REMOVED: Drop support of Node 12 & 14. [#6431](https://github.com/Project-OSRM/osrm-backend/pull/6431) - Misc: + - FIXED: Fix `npm audit` warnings in NPM package. [#6437](https://github.com/Project-OSRM/osrm-backend/pull/6437) - FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417) - FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/) - FIXED: Fix bindings compilation issue on the latest Node. Update NAN to 2.17.0. [#6416](https://github.com/Project-OSRM/osrm-backend/pull/6416) diff --git a/package-lock.json b/package-lock.json index 57328a9a0..2136845ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,21 +7,10 @@ "": { "name": "@project-osrm/osrm", "version": "5.28.0-unreleased", - "bundleDependencies": [ - "mkdirp", - "nan", - "node-cmake", - "rimraf" - ], "hasInstallScript": true, "license": "BSD-2-Clause", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.9", - "cheap-ruler": "^3.0.2", - "mkdirp": "^0.5.6", - "nan": "^2.17.0", - "node-cmake": "^2.5.1", - "rimraf": "^2.7.1" + "@mapbox/node-pre-gyp": "^1.0.10" }, "devDependencies": { "@babel/cli": "^7.18.10", @@ -35,6 +24,7 @@ "babelify": "^10.0.0", "browserify": "^17.0.0", "chalk": "^1.1.3", + "cheap-ruler": "^3.0.2", "command-line-args": "^5.2.1", "command-line-usage": "^5.0.4", "csv-stringify": "^3.0.0", @@ -45,9 +35,13 @@ "eslint": "^5.16.0", "faucet": "^0.0.1", "jsonpath": "^1.1.1", + "mkdirp": "^0.5.6", + "nan": "^2.17.0", + "node-cmake": "^2.5.1", "node-timeout": "0.0.4", "polyline": "^0.2.0", "request": "^2.88.2", + "rimraf": "^2.7.1", "tape": "^4.16.0", "turf": "^3.0.14", "uglify-js": "^3.17.0", @@ -2174,9 +2168,9 @@ } }, "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", - "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -2477,7 +2471,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "inBundle": true, "engines": { "node": ">=0.10.0" } @@ -4201,8 +4194,7 @@ "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "inBundle": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "node_modules/base": { "version": "0.11.2", @@ -4372,7 +4364,6 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "inBundle": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4827,7 +4818,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4883,7 +4874,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "inBundle": true, + "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -4927,7 +4918,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5080,7 +5071,8 @@ "node_modules/cheap-ruler": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/cheap-ruler/-/cheap-ruler-3.0.2.tgz", - "integrity": "sha512-02T332h1/HTN6cDSufLP8x4JzDs2+VC+8qZ/N0kWIVPyc2xUkWwWh3B2fJxR7raXkL4Mq7k554mfuM9ofv/vGg==" + "integrity": "sha512-02T332h1/HTN6cDSufLP8x4JzDs2+VC+8qZ/N0kWIVPyc2xUkWwWh3B2fJxR7raXkL4Mq7k554mfuM9ofv/vGg==", + "dev": true }, "node_modules/chokidar": { "version": "3.5.3", @@ -5298,7 +5290,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "inBundle": true, + "dev": true, "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -5396,7 +5388,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "inBundle": true, "engines": { "node": ">=0.10.0" } @@ -5646,8 +5637,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "inBundle": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -6001,7 +5991,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7565,7 +7555,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "inBundle": true, + "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -9125,7 +9115,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "inBundle": true, + "dev": true, "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -9294,8 +9284,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "inBundle": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { "version": "2.3.2", @@ -9315,7 +9304,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "inBundle": true + "dev": true }, "node_modules/function.prototype.name": { "version": "1.1.5", @@ -9615,7 +9604,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "inBundle": true + "dev": true }, "node_modules/get-comments": { "version": "1.0.1", @@ -9627,7 +9616,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", - "inBundle": true, + "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -9641,7 +9630,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "inBundle": true, + "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -10052,7 +10041,7 @@ "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.4.0" } @@ -10243,7 +10232,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "inBundle": true, + "dev": true, "engines": { "node": ">= 0.4" }, @@ -10521,7 +10510,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "inBundle": true + "dev": true }, "node_modules/html-comment-regex": { "version": "1.1.2", @@ -10700,7 +10689,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "inBundle": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -10709,8 +10697,7 @@ "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "inBundle": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "node_modules/ini": { "version": "1.3.8", @@ -10899,7 +10886,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -10990,7 +10977,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "inBundle": true + "dev": true }, "node_modules/is-bigint": { "version": "1.0.2", @@ -11039,7 +11026,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "inBundle": true, + "dev": true, "dependencies": { "builtin-modules": "^1.0.0" }, @@ -11180,7 +11167,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "inBundle": true, "dependencies": { "number-is-nan": "^1.0.0" }, @@ -11487,7 +11473,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "inBundle": true + "dev": true }, "node_modules/is-valid-glob": { "version": "0.3.0", @@ -11549,7 +11535,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "inBundle": true + "dev": true }, "node_modules/isobject": { "version": "3.0.1", @@ -11838,7 +11824,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "inBundle": true, + "dev": true, "dependencies": { "invert-kv": "^1.0.0" }, @@ -11869,7 +11855,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "inBundle": true, + "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -12455,7 +12441,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "inBundle": true, + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12531,7 +12517,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "inBundle": true, + "dev": true, "dependencies": { "minimist": "^1.2.6" }, @@ -12549,7 +12535,7 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "inBundle": true + "dev": true }, "node_modules/module-deps-sortable": { "version": "4.0.6", @@ -12653,7 +12639,7 @@ "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "inBundle": true + "dev": true }, "node_modules/nanomatch": { "version": "1.2.13", @@ -12729,7 +12715,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/node-cmake/-/node-cmake-2.5.1.tgz", "integrity": "sha512-gKnzheTyu9TJvFiqVwg1BGWyqxMwfNPWoR0Ab0kDqmoA+U/XSCxIo4s/fNbEubohhmIAFEo1i+CAJ4jZDnMTVw==", - "inBundle": true, + "dev": true, "dependencies": { "debug": "^3.1.0", "nan": "^2.8.0", @@ -12744,7 +12730,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "inBundle": true, + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -12753,7 +12739,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "inBundle": true + "dev": true }, "node_modules/node-fetch": { "version": "2.6.7", @@ -12807,7 +12793,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "inBundle": true, + "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -12881,7 +12867,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "inBundle": true, "engines": { "node": ">=0.10.0" } @@ -12988,7 +12973,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "inBundle": true, + "dev": true, "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -13006,7 +12991,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "inBundle": true, + "dev": true, "dependencies": { "object-keys": "^1.0.12" }, @@ -13018,7 +13003,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "inBundle": true, + "dev": true, "engines": { "node": ">= 0.4" } @@ -13110,7 +13095,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "inBundle": true, "dependencies": { "wrappy": "1" } @@ -13182,7 +13166,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "inBundle": true, + "dev": true, "dependencies": { "lcid": "^1.0.0" }, @@ -13372,7 +13356,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "inBundle": true, + "dev": true, "dependencies": { "error-ex": "^1.2.0" }, @@ -13427,7 +13411,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "inBundle": true, + "dev": true, "dependencies": { "pinkie-promise": "^2.0.0" }, @@ -13439,7 +13423,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "inBundle": true, "engines": { "node": ">=0.10.0" } @@ -13499,7 +13482,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "inBundle": true, + "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -13554,7 +13537,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -13563,7 +13546,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -13572,7 +13555,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "inBundle": true, + "dev": true, "dependencies": { "pinkie": "^2.0.0" }, @@ -14294,7 +14277,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "inBundle": true, + "dev": true, "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -14308,7 +14291,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "inBundle": true, + "dev": true, "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -14754,7 +14737,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "inBundle": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -14763,7 +14746,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "inBundle": true + "dev": true }, "node_modules/require-uncached": { "version": "1.0.3", @@ -14854,7 +14837,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "inBundle": true, + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -14866,7 +14849,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "inBundle": true, + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15002,7 +14985,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "inBundle": true, + "dev": true, "bin": { "semver": "bin/semver" } @@ -15010,8 +14993,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "inBundle": true + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "node_modules/set-value": { "version": "2.0.1", @@ -15416,7 +15398,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "inBundle": true, + "dev": true, "dependencies": { "spdx-license-ids": "^1.0.2" } @@ -15425,13 +15407,13 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "inBundle": true + "dev": true }, "node_modules/spdx-license-ids": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "inBundle": true + "dev": true }, "node_modules/split-string": { "version": "3.1.0", @@ -15867,7 +15849,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "inBundle": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -16499,7 +16480,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "inBundle": true, "dependencies": { "ansi-regex": "^2.0.0" }, @@ -16511,7 +16491,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "inBundle": true, + "dev": true, "dependencies": { "is-utf8": "^0.2.0" }, @@ -18428,7 +18408,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "inBundle": true, + "dev": true, "dependencies": { "spdx-correct": "~1.0.0", "spdx-expression-parse": "~1.0.0" @@ -18700,7 +18680,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "inBundle": true, + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -18728,7 +18708,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "inBundle": true + "dev": true }, "node_modules/which-typed-array": { "version": "1.1.4", @@ -18791,7 +18771,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "inBundle": true, + "dev": true, "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -18803,8 +18783,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "inBundle": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write": { "version": "0.2.1", @@ -18858,7 +18837,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "inBundle": true + "dev": true }, "node_modules/yallist": { "version": "2.1.2", @@ -18870,7 +18849,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", - "inBundle": true, + "dev": true, "dependencies": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -18891,7 +18870,7 @@ "version": "5.0.0-security.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", - "inBundle": true, + "dev": true, "dependencies": { "camelcase": "^3.0.0", "object.assign": "^4.1.0" @@ -20403,9 +20382,9 @@ } }, "@mapbox/node-pre-gyp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", - "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", "requires": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -22713,7 +22692,8 @@ "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true }, "builtin-status-codes": { "version": "3.0.0", @@ -22762,6 +22742,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" @@ -22795,7 +22776,8 @@ "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true }, "caniuse-api": { "version": "1.6.1", @@ -22907,7 +22889,8 @@ "cheap-ruler": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/cheap-ruler/-/cheap-ruler-3.0.2.tgz", - "integrity": "sha512-02T332h1/HTN6cDSufLP8x4JzDs2+VC+8qZ/N0kWIVPyc2xUkWwWh3B2fJxR7raXkL4Mq7k554mfuM9ofv/vGg==" + "integrity": "sha512-02T332h1/HTN6cDSufLP8x4JzDs2+VC+8qZ/N0kWIVPyc2xUkWwWh3B2fJxR7raXkL4Mq7k554mfuM9ofv/vGg==", + "dev": true }, "chokidar": { "version": "3.5.3", @@ -23077,6 +23060,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -23691,7 +23675,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -24992,6 +24977,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -26248,6 +26234,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -26393,7 +26380,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "function.prototype.name": { "version": "1.1.5", @@ -26616,7 +26604,8 @@ "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true }, "get-comments": { "version": "1.0.1", @@ -26628,6 +26617,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.0.tgz", "integrity": "sha512-M11rgtQp5GZMZzDL7jLTNxbDfurpzuau5uqRWDPvlHjfvg3TdScAZo96GLvhMjImrmR8uAt0FS2RLoMrfWGKlg==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -26638,6 +26628,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -26977,7 +26968,8 @@ "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true }, "gulp-sourcemaps": { "version": "1.6.0", @@ -27126,7 +27118,8 @@ "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true }, "has-tostringtag": { "version": "1.0.0", @@ -27343,7 +27336,8 @@ "hosted-git-info": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==" + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true }, "html-comment-regex": { "version": "1.1.2", @@ -27640,7 +27634,8 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true }, "is-absolute": { "version": "1.0.0", @@ -27701,7 +27696,8 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true }, "is-bigint": { "version": "1.0.2", @@ -27737,6 +27733,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, "requires": { "builtin-modules": "^1.0.0" } @@ -28047,7 +28044,8 @@ "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true }, "is-valid-glob": { "version": "0.3.0", @@ -28091,7 +28089,8 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", @@ -28330,6 +28329,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -28354,6 +28354,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -28839,6 +28840,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -28905,6 +28907,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "requires": { "minimist": "^1.2.6" }, @@ -28912,7 +28915,8 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true } } }, @@ -29015,7 +29019,8 @@ "nan": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true }, "nanomatch": { "version": "1.2.13", @@ -29081,6 +29086,7 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/node-cmake/-/node-cmake-2.5.1.tgz", "integrity": "sha512-gKnzheTyu9TJvFiqVwg1BGWyqxMwfNPWoR0Ab0kDqmoA+U/XSCxIo4s/fNbEubohhmIAFEo1i+CAJ4jZDnMTVw==", + "dev": true, "requires": { "debug": "^3.1.0", "nan": "^2.8.0", @@ -29092,6 +29098,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -29099,7 +29106,8 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, @@ -29138,6 +29146,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -29279,6 +29288,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -29290,6 +29300,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -29297,7 +29308,8 @@ "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 } } }, @@ -29425,6 +29437,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, "requires": { "lcid": "^1.0.0" } @@ -29582,6 +29595,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, "requires": { "error-ex": "^1.2.0" } @@ -29630,6 +29644,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, "requires": { "pinkie-promise": "^2.0.0" } @@ -29682,6 +29697,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -29723,17 +29739,20 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -30365,6 +30384,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -30375,6 +30395,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -30749,12 +30770,14 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "require-uncached": { "version": "1.0.3", @@ -30826,6 +30849,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { "glob": "^7.1.3" }, @@ -30834,6 +30858,7 @@ "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -30958,7 +30983,8 @@ "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true }, "set-blocking": { "version": "2.0.0", @@ -31283,6 +31309,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, "requires": { "spdx-license-ids": "^1.0.2" } @@ -31290,12 +31317,14 @@ "spdx-expression-parse": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=" + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true }, "spdx-license-ids": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=" + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true }, "split-string": { "version": "3.1.0", @@ -32119,6 +32148,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, "requires": { "is-utf8": "^0.2.0" } @@ -33728,6 +33758,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, "requires": { "spdx-correct": "~1.0.0", "spdx-expression-parse": "~1.0.0" @@ -33954,6 +33985,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -33974,7 +34006,8 @@ "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true }, "which-typed-array": { "version": "1.1.4", @@ -34025,6 +34058,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -34077,7 +34111,8 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true }, "yallist": { "version": "2.1.2", @@ -34089,6 +34124,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "dev": true, "requires": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -34109,6 +34145,7 @@ "version": "5.0.0-security.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "dev": true, "requires": { "camelcase": "^3.0.0", "object.assign": "^4.1.0" diff --git a/package.json b/package.json index e58493252..54b69e8c1 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,7 @@ "private": false, "description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.9", - "cheap-ruler": "^3.0.2", - "mkdirp": "^0.5.6", - "nan": "^2.17.0", - "node-cmake": "^2.5.1", - "rimraf": "^2.7.1" + "@mapbox/node-pre-gyp": "^1.0.10" }, "browserify": { "transform": [ @@ -66,14 +61,13 @@ "tape": "^4.16.0", "turf": "^3.0.14", "uglify-js": "^3.17.0", - "xmlbuilder": "^4.2.1" + "xmlbuilder": "^4.2.1", + "cheap-ruler": "^3.0.2", + "mkdirp": "^0.5.6", + "nan": "^2.17.0", + "node-cmake": "^2.5.1", + "rimraf": "^2.7.1" }, - "bundleDependencies": [ - "mkdirp", - "nan", - "node-cmake", - "rimraf" - ], "main": "lib/index.js", "binary": { "module_name": "node_osrm", From 6ab8728807650d3c6900c2c9d23f70bf90a2aeda Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Sat, 5 Nov 2022 16:56:16 +0100 Subject: [PATCH 26/75] Apply workaround for Conan installation issue on CI (#6442) --- .github/workflows/osrm-backend.yml | 5 +++++ CHANGELOG.md | 1 + 2 files changed, 6 insertions(+) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 7d362ed26..442b64549 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -507,6 +507,11 @@ jobs: - name: Install dev dependencies run: | python3 -m pip install conan==1.53.0 + # workaround for issue that GitHub Actions seems to not adding it to PATH after https://github.com/actions/runner-images/pull/6499 + # and that's why CI cannot find conan executable installed above + if [[ "${RUNNER_OS}" == "macOS" ]]; then + echo "/Library/Frameworks/Python.framework/Versions/3.11/bin" >> $GITHUB_PATH + fi # ccache if [[ "${RUNNER_OS}" == "Linux" ]]; then diff --git a/CHANGELOG.md b/CHANGELOG.md index ce03e744a..028cb8c23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - REMOVED: Drop support of Node 12 & 14. [#6431](https://github.com/Project-OSRM/osrm-backend/pull/6431) - Misc: + - FIXED: Apply workaround for Conan installation issue on CI. [#6442](https://github.com/Project-OSRM/osrm-backend/pull/6442) - FIXED: Fix `npm audit` warnings in NPM package. [#6437](https://github.com/Project-OSRM/osrm-backend/pull/6437) - FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417) - FIXED: Fix annotations=true handling in NodeJS bindings & libosrm. [#6415](https://github.com/Project-OSRM/osrm-backend/pull/6415/) From b13820f5203f01526e3d0460091170565f5dc60b Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 6 Nov 2022 12:19:32 +0100 Subject: [PATCH 27/75] Use std::back_inserter --- include/util/guidance/name_announcements.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index 02a62b119..db92f7fd9 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -73,7 +73,7 @@ template inline auto decompose(const StringView &lhs, cons std::string str; str.reserve(view.size()); std::transform( - str.begin(), str.end(), str.begin(), [](unsigned char c) { return std::tolower(c); }); + view.begin(), view.end(), std::back_inserter(str), [](unsigned char c) { return std::tolower(c); }); auto front = str.find_first_not_of(' '); if (front == std::string::npos) From bb4fd93fabf371db19c343824f72b5c5e3c0e205 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 6 Nov 2022 12:26:37 +0100 Subject: [PATCH 28/75] Fix formatting --- include/util/guidance/name_announcements.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/util/guidance/name_announcements.hpp b/include/util/guidance/name_announcements.hpp index db92f7fd9..32202974d 100644 --- a/include/util/guidance/name_announcements.hpp +++ b/include/util/guidance/name_announcements.hpp @@ -72,8 +72,9 @@ template inline auto decompose(const StringView &lhs, cons // consistent in handling, we do not create bad results std::string str; str.reserve(view.size()); - std::transform( - view.begin(), view.end(), std::back_inserter(str), [](unsigned char c) { return std::tolower(c); }); + std::transform(view.begin(), view.end(), std::back_inserter(str), [](unsigned char c) { + return std::tolower(c); + }); auto front = str.find_first_not_of(' '); if (front == std::string::npos) From 8bff55cd85ec0fe16666b54a7c57455b0e72eb79 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 6 Nov 2022 13:21:45 +0100 Subject: [PATCH 29/75] [CPP17] Modernize: Replace typedef with using statements --- .../api/flatbuffers/fbresult_generated.h | 48 +++++++++---------- include/extractor/extraction_turn.hpp | 1 + include/extractor/maneuver_override.hpp | 4 +- include/extractor/road_classification.hpp | 2 +- include/extractor/turn_lane_types.hpp | 4 +- include/guidance/turn_instruction.hpp | 4 +- include/guidance/turn_lane_data.hpp | 2 +- include/guidance/turn_lane_handler.hpp | 6 +-- include/partitioner/cell_storage.hpp | 12 ++--- include/util/alias.hpp | 4 +- include/util/bit_range.hpp | 14 ++---- include/util/filtered_integer_range.hpp | 18 +++---- include/util/integer_range.hpp | 18 +++---- include/util/log.hpp | 2 +- include/util/packed_vector.hpp | 14 ++---- include/util/static_assert.hpp | 4 +- include/util/vector_view.hpp | 14 ++---- src/engine/plugins/tile.cpp | 8 ++-- unit_tests/util/dynamic_graph.cpp | 4 +- unit_tests/util/query_heap.cpp | 11 ++--- unit_tests/util/range_table.cpp | 2 +- unit_tests/util/static_graph.cpp | 10 ++-- unit_tests/util/static_rtree.cpp | 23 ++++----- 23 files changed, 99 insertions(+), 130 deletions(-) diff --git a/include/engine/api/flatbuffers/fbresult_generated.h b/include/engine/api/flatbuffers/fbresult_generated.h index f3f05de4a..05211bec6 100644 --- a/include/engine/api/flatbuffers/fbresult_generated.h +++ b/include/engine/api/flatbuffers/fbresult_generated.h @@ -219,7 +219,7 @@ FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) Uint64Pair FLATBUFFERS_FINAL_CLASS { FLATBUFFERS_STRUCT_END(Uint64Pair, 16); struct WaypointT : public flatbuffers::NativeTable { - typedef Waypoint TableType; + using TableType = Waypoint; std::string hint; float distance; std::string name; @@ -239,7 +239,7 @@ struct WaypointT : public flatbuffers::NativeTable { }; struct Waypoint FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef WaypointT NativeTableType; + using NativeTableType = WaypointT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_HINT = 4, VT_DISTANCE = 6, @@ -393,14 +393,14 @@ inline flatbuffers::Offset CreateWaypointDirect( flatbuffers::Offset CreateWaypoint(flatbuffers::FlatBufferBuilder &_fbb, const WaypointT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct MetadataT : public flatbuffers::NativeTable { - typedef Metadata TableType; + using TableType = Metadata; std::vector datasource_names; MetadataT() { } }; struct Metadata FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef MetadataT NativeTableType; + using NativeTableType = MetadataT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_DATASOURCE_NAMES = 4 }; @@ -457,7 +457,7 @@ inline flatbuffers::Offset CreateMetadataDirect( flatbuffers::Offset CreateMetadata(flatbuffers::FlatBufferBuilder &_fbb, const MetadataT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct AnnotationT : public flatbuffers::NativeTable { - typedef Annotation TableType; + using TableType = Annotation; std::vector distance; std::vector duration; std::vector datasources; @@ -470,7 +470,7 @@ struct AnnotationT : public flatbuffers::NativeTable { }; struct Annotation FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef AnnotationT NativeTableType; + using NativeTableType = AnnotationT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_DISTANCE = 4, VT_DURATION = 6, @@ -609,7 +609,7 @@ inline flatbuffers::Offset CreateAnnotationDirect( flatbuffers::Offset CreateAnnotation(flatbuffers::FlatBufferBuilder &_fbb, const AnnotationT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct StepManeuverT : public flatbuffers::NativeTable { - typedef StepManeuver TableType; + using TableType = StepManeuver; std::unique_ptr location; uint16_t bearing_before; uint16_t bearing_after; @@ -626,7 +626,7 @@ struct StepManeuverT : public flatbuffers::NativeTable { }; struct StepManeuver FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef StepManeuverT NativeTableType; + using NativeTableType = StepManeuverT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_LOCATION = 4, VT_BEARING_BEFORE = 6, @@ -722,7 +722,7 @@ inline flatbuffers::Offset CreateStepManeuver( flatbuffers::Offset CreateStepManeuver(flatbuffers::FlatBufferBuilder &_fbb, const StepManeuverT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct LaneT : public flatbuffers::NativeTable { - typedef Lane TableType; + using TableType = Lane; std::vector indications; bool valid; LaneT() @@ -731,7 +731,7 @@ struct LaneT : public flatbuffers::NativeTable { }; struct Lane FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef LaneT NativeTableType; + using NativeTableType = LaneT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_INDICATIONS = 4, VT_VALID = 6 @@ -799,7 +799,7 @@ inline flatbuffers::Offset CreateLaneDirect( flatbuffers::Offset CreateLane(flatbuffers::FlatBufferBuilder &_fbb, const LaneT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct IntersectionT : public flatbuffers::NativeTable { - typedef Intersection TableType; + using TableType = Intersection; std::unique_ptr location; std::vector bearings; std::vector classes; @@ -814,7 +814,7 @@ struct IntersectionT : public flatbuffers::NativeTable { }; struct Intersection FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef IntersectionT NativeTableType; + using NativeTableType = IntersectionT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_LOCATION = 4, VT_BEARINGS = 6, @@ -950,7 +950,7 @@ inline flatbuffers::Offset CreateIntersectionDirect( flatbuffers::Offset CreateIntersection(flatbuffers::FlatBufferBuilder &_fbb, const IntersectionT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct StepT : public flatbuffers::NativeTable { - typedef Step TableType; + using TableType = Step; float distance; float duration; std::string polyline; @@ -976,7 +976,7 @@ struct StepT : public flatbuffers::NativeTable { }; struct Step FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef StepT NativeTableType; + using NativeTableType = StepT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_DISTANCE = 4, VT_DURATION = 6, @@ -1234,7 +1234,7 @@ inline flatbuffers::Offset CreateStepDirect( flatbuffers::Offset CreateStep(flatbuffers::FlatBufferBuilder &_fbb, const StepT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct LegT : public flatbuffers::NativeTable { - typedef Leg TableType; + using TableType = Leg; double distance; double duration; double weight; @@ -1249,7 +1249,7 @@ struct LegT : public flatbuffers::NativeTable { }; struct Leg FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef LegT NativeTableType; + using NativeTableType = LegT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_DISTANCE = 4, VT_DURATION = 6, @@ -1369,7 +1369,7 @@ inline flatbuffers::Offset CreateLegDirect( flatbuffers::Offset CreateLeg(flatbuffers::FlatBufferBuilder &_fbb, const LegT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct RouteObjectT : public flatbuffers::NativeTable { - typedef RouteObject TableType; + using TableType = RouteObject; float distance; float duration; float weight; @@ -1387,7 +1387,7 @@ struct RouteObjectT : public flatbuffers::NativeTable { }; struct RouteObject FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef RouteObjectT NativeTableType; + using NativeTableType = RouteObjectT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_DISTANCE = 4, VT_DURATION = 6, @@ -1534,7 +1534,7 @@ inline flatbuffers::Offset CreateRouteObjectDirect( flatbuffers::Offset CreateRouteObject(flatbuffers::FlatBufferBuilder &_fbb, const RouteObjectT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct TableT : public flatbuffers::NativeTable { - typedef Table TableType; + using TableType = Table; std::vector durations; uint16_t rows; uint16_t cols; @@ -1548,7 +1548,7 @@ struct TableT : public flatbuffers::NativeTable { }; struct Table FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef TableT NativeTableType; + using NativeTableType = TableT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_DURATIONS = 4, VT_ROWS = 6, @@ -1671,7 +1671,7 @@ inline flatbuffers::Offset CreateTableDirect( flatbuffers::Offset
CreateTable(flatbuffers::FlatBufferBuilder &_fbb, const TableT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct ErrorT : public flatbuffers::NativeTable { - typedef Error TableType; + using TableType = Error; std::string code; std::string message; ErrorT() { @@ -1679,7 +1679,7 @@ struct ErrorT : public flatbuffers::NativeTable { }; struct Error FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef ErrorT NativeTableType; + using NativeTableType = ErrorT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_CODE = 4, VT_MESSAGE = 6 @@ -1749,7 +1749,7 @@ inline flatbuffers::Offset CreateErrorDirect( flatbuffers::Offset CreateError(flatbuffers::FlatBufferBuilder &_fbb, const ErrorT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); struct FBResultT : public flatbuffers::NativeTable { - typedef FBResult TableType; + using TableType = FBResult; bool error; std::unique_ptr code; std::string data_version; @@ -1762,7 +1762,7 @@ struct FBResultT : public flatbuffers::NativeTable { }; struct FBResult FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { - typedef FBResultT NativeTableType; + using NativeTableType = FBResultT; enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { VT_ERROR = 4, VT_CODE = 6, diff --git a/include/extractor/extraction_turn.hpp b/include/extractor/extraction_turn.hpp index 9e32712d3..a3026bd5c 100644 --- a/include/extractor/extraction_turn.hpp +++ b/include/extractor/extraction_turn.hpp @@ -7,6 +7,7 @@ #include #include +#include namespace osrm { diff --git a/include/extractor/maneuver_override.hpp b/include/extractor/maneuver_override.hpp index 79b23d301..f23c3e928 100644 --- a/include/extractor/maneuver_override.hpp +++ b/include/extractor/maneuver_override.hpp @@ -152,8 +152,8 @@ namespace std template <> struct hash { - typedef osrm::extractor::NodeBasedTurn argument_type; - typedef std::size_t result_type; + using argument_type = osrm::extractor::NodeBasedTurn; + using result_type = std::size_t; result_type operator()(argument_type const &s) const noexcept { diff --git a/include/extractor/road_classification.hpp b/include/extractor/road_classification.hpp index f5d1b9343..850c6363c 100644 --- a/include/extractor/road_classification.hpp +++ b/include/extractor/road_classification.hpp @@ -20,7 +20,7 @@ namespace extractor // guidance constants. namespace RoadPriorityClass { -typedef std::uint8_t Enum; +using Enum = std::uint8_t; // Top priority Road const constexpr Enum MOTORWAY = 0; const constexpr Enum MOTORWAY_LINK = 1; diff --git a/include/extractor/turn_lane_types.hpp b/include/extractor/turn_lane_types.hpp index 80b413ad7..73263a79c 100644 --- a/include/extractor/turn_lane_types.hpp +++ b/include/extractor/turn_lane_types.hpp @@ -38,7 +38,7 @@ inline auto laneTypeToName(const std::size_t type_id) return name[type_id]; } -typedef std::uint16_t Mask; +using Mask = std::uint16_t; const constexpr Mask empty = 0u; const constexpr Mask none = 1u << 0u; const constexpr Mask straight = 1u << 1u; @@ -54,7 +54,7 @@ const constexpr Mask merge_to_right = 1u << 10u; } // namespace TurnLaneType -typedef std::vector TurnLaneDescription; +using TurnLaneDescription = std::vector; // hash function for TurnLaneDescription struct TurnLaneDescription_hash diff --git a/include/guidance/turn_instruction.hpp b/include/guidance/turn_instruction.hpp index 685c633e7..ffd4e952d 100644 --- a/include/guidance/turn_instruction.hpp +++ b/include/guidance/turn_instruction.hpp @@ -16,7 +16,7 @@ namespace guidance // direction modifiers based on angle namespace DirectionModifier { -typedef std::uint8_t Enum; +using Enum = std::uint8_t; const constexpr Enum UTurn = 0; const constexpr Enum SharpRight = 1; const constexpr Enum Right = 2; @@ -30,7 +30,7 @@ const constexpr Enum MaxDirectionModifier = 8; namespace TurnType { -typedef std::uint8_t Enum; +using Enum = std::uint8_t; const constexpr Enum Invalid = 0; // no valid turn instruction const constexpr Enum NewName = 1; // no turn, but name changes const constexpr Enum Continue = 2; // remain on a street diff --git a/include/guidance/turn_lane_data.hpp b/include/guidance/turn_lane_data.hpp index 49431d25e..8e7bc7351 100644 --- a/include/guidance/turn_lane_data.hpp +++ b/include/guidance/turn_lane_data.hpp @@ -24,7 +24,7 @@ struct TurnLaneData // one-to-one mapping. bool operator<(const TurnLaneData &other) const; }; -typedef std::vector LaneDataVector; +using LaneDataVector = std::vector; // convertes a string given in the OSM format into a TurnLaneData vector OSRM_ATTR_WARN_UNUSED diff --git a/include/guidance/turn_lane_handler.hpp b/include/guidance/turn_lane_handler.hpp index d0344ad5c..b0491d7c4 100644 --- a/include/guidance/turn_lane_handler.hpp +++ b/include/guidance/turn_lane_handler.hpp @@ -34,7 +34,7 @@ namespace lanes namespace { -typedef enum TurnLaneScenario +using TurnLaneScenario = enum TurnLaneScenario { SIMPLE, // a straightforward assignment PARTITION_LOCAL, // an assignment that requires partitioning, using local turns @@ -50,7 +50,7 @@ typedef enum TurnLaneScenario INVALID, // some error might have occurred UNKNOWN, // UNKNOWN describes all cases that we are currently not able to handle NUM_SCENARIOS -} TurnLaneScenario; +}; } // namespace @@ -61,7 +61,7 @@ class TurnLaneHandler using ScopedWriterLock = boost::interprocess::scoped_lock; public: - typedef std::vector LaneDataVector; + using LaneDataVector = std::vector; TurnLaneHandler(const util::NodeBasedDynamicGraph &node_based_graph, const extractor::EdgeBasedNodeDataContainer &node_data_container, diff --git a/include/partitioner/cell_storage.hpp b/include/partitioner/cell_storage.hpp index c2331f316..264d43786 100644 --- a/include/partitioner/cell_storage.hpp +++ b/include/partitioner/cell_storage.hpp @@ -100,15 +100,13 @@ template class CellStorageImpl { using ValueT = decltype(*std::declval()); - typedef boost:: - iterator_facade, ValueT, boost::random_access_traversal_tag> - base_t; + using base_t = boost::iterator_facade, ValueT, boost::random_access_traversal_tag>; public: - typedef typename base_t::value_type value_type; - typedef typename base_t::difference_type difference_type; - typedef typename base_t::reference reference; - typedef std::random_access_iterator_tag iterator_category; + using value_type = typename base_t::value_type; + using difference_type = typename base_t::difference_type; + using reference = typename base_t::reference; + using iterator_category = std::random_access_iterator_tag; explicit ColumnIterator() : current(nullptr), stride(1) {} diff --git a/include/util/alias.hpp b/include/util/alias.hpp index 8dfe34398..6a109ffdd 100644 --- a/include/util/alias.hpp +++ b/include/util/alias.hpp @@ -171,8 +171,8 @@ namespace std { template struct hash> { - typedef osrm::Alias argument_type; - typedef std::size_t result_type; + using argument_type = osrm::Alias; + using result_type = std::size_t; result_type operator()(argument_type const &s) const { return std::hash()(static_cast(s)); diff --git a/include/util/bit_range.hpp b/include/util/bit_range.hpp index 6d7ffcae4..08100d6b4 100644 --- a/include/util/bit_range.hpp +++ b/include/util/bit_range.hpp @@ -49,17 +49,13 @@ class BitIterator : public boost::iterator_facade, boost::forward_traversal_tag, const std::size_t> { - typedef boost::iterator_facade, - const std::size_t, - boost::forward_traversal_tag, - const std::size_t> - base_t; + using base_t = boost::iterator_facade, const std::size_t, boost::forward_traversal_tag, const std::size_t>; public: - typedef typename base_t::value_type value_type; - typedef typename base_t::difference_type difference_type; - typedef typename base_t::reference reference; - typedef std::random_access_iterator_tag iterator_category; + using value_type = typename base_t::value_type; + using difference_type = typename base_t::difference_type; + using reference = typename base_t::reference; + using iterator_category = std::random_access_iterator_tag; explicit BitIterator() : m_value(0) {} explicit BitIterator(const DataT x) : m_value(std::move(x)) {} diff --git a/include/util/filtered_integer_range.hpp b/include/util/filtered_integer_range.hpp index 4960c9560..fcce50ac8 100644 --- a/include/util/filtered_integer_range.hpp +++ b/include/util/filtered_integer_range.hpp @@ -26,17 +26,13 @@ class filtered_integer_iterator boost::single_pass_traversal_tag, Integer> { - typedef boost::iterator_facade, - Integer, - boost::single_pass_traversal_tag, - Integer> - base_t; + using base_t = boost::iterator_facade, Integer, boost::single_pass_traversal_tag, Integer>; public: - typedef typename base_t::value_type value_type; - typedef typename base_t::difference_type difference_type; - typedef typename base_t::reference reference; - typedef std::random_access_iterator_tag iterator_category; + using value_type = typename base_t::value_type; + using difference_type = typename base_t::difference_type; + using reference = typename base_t::reference; + using iterator_category = std::random_access_iterator_tag; filtered_integer_iterator() : value(), filter(nullptr) {} explicit filtered_integer_iterator(value_type x, value_type end_value, const Filter *filter) @@ -64,8 +60,8 @@ class filtered_integer_iterator template class filtered_range { public: - typedef filtered_integer_iterator const_iterator; - typedef filtered_integer_iterator iterator; + using const_iterator = filtered_integer_iterator; + using iterator = filtered_integer_iterator; filtered_range(Integer begin, Integer end, const Filter &filter) : last(end, end, &filter) { diff --git a/include/util/integer_range.hpp b/include/util/integer_range.hpp index 2b16cc8b4..39bf94fd9 100644 --- a/include/util/integer_range.hpp +++ b/include/util/integer_range.hpp @@ -22,17 +22,13 @@ class integer_iterator : public boost::iterator_facade boost::random_access_traversal_tag, Integer> { - typedef boost::iterator_facade, - Integer, - boost::random_access_traversal_tag, - Integer> - base_t; + using base_t = boost::iterator_facade, Integer, boost::random_access_traversal_tag, Integer>; public: - typedef typename base_t::value_type value_type; - typedef typename base_t::difference_type difference_type; - typedef typename base_t::reference reference; - typedef std::random_access_iterator_tag iterator_category; + using value_type = typename base_t::value_type; + using difference_type = typename base_t::difference_type; + using reference = typename base_t::reference; + using iterator_category = std::random_access_iterator_tag; integer_iterator() : m_value() {} explicit integer_iterator(value_type x) : m_value(x) {} @@ -65,8 +61,8 @@ class integer_iterator : public boost::iterator_facade template class range { public: - typedef integer_iterator const_iterator; - typedef integer_iterator iterator; + using const_iterator = integer_iterator; + using iterator = integer_iterator; range(Integer begin, Integer end) : iter(begin), last(end) {} diff --git a/include/util/log.hpp b/include/util/log.hpp index 48bb0305f..ad963a454 100644 --- a/include/util/log.hpp +++ b/include/util/log.hpp @@ -73,7 +73,7 @@ class Log return *this; } - typedef std::ostream &(manip)(std::ostream &); + using manip = std::ostream &(std::ostream &); inline Log &operator<<(manip &m) { diff --git a/include/util/packed_vector.hpp b/include/util/packed_vector.hpp index a0679b664..fc3ec830b 100644 --- a/include/util/packed_vector.hpp +++ b/include/util/packed_vector.hpp @@ -336,17 +336,13 @@ template class Pack boost::random_access_traversal_tag, ReferenceT> { - typedef boost::iterator_facade, - DataT, - boost::random_access_traversal_tag, - ReferenceT> - base_t; + using base_t = boost::iterator_facade, DataT, boost::random_access_traversal_tag, ReferenceT>; public: - typedef typename base_t::value_type value_type; - typedef typename base_t::difference_type difference_type; - typedef typename base_t::reference reference; - typedef std::random_access_iterator_tag iterator_category; + using value_type = typename base_t::value_type; + using difference_type = typename base_t::difference_type; + using reference = typename base_t::reference; + using iterator_category = std::random_access_iterator_tag; explicit iterator_impl() : container(nullptr), index(std::numeric_limits::max()) diff --git a/include/util/static_assert.hpp b/include/util/static_assert.hpp index 985324c96..d7400e92a 100644 --- a/include/util/static_assert.hpp +++ b/include/util/static_assert.hpp @@ -10,13 +10,13 @@ namespace util template inline void static_assert_iter_value() { - using IterValueType = typename std::iterator_traits::value_type; + using IterValueType = typename std::iterator_traits;::value_type; static_assert(std::is_same::value, ""); } template inline void static_assert_iter_category() { - using IterCategoryType = typename std::iterator_traits::iterator_category; + using IterCategoryType = typename std::iterator_traits;::iterator_category; static_assert(std::is_base_of::value, ""); } diff --git a/include/util/vector_view.hpp b/include/util/vector_view.hpp index 3d9a2e2c1..0258ef8a4 100644 --- a/include/util/vector_view.hpp +++ b/include/util/vector_view.hpp @@ -30,17 +30,13 @@ class VectorViewIterator : public boost::iterator_facade { - typedef boost::iterator_facade, - DataT, - boost::random_access_traversal_tag, - DataT &> - base_t; + using base_t = boost::iterator_facade, DataT, boost::random_access_traversal_tag, DataT &>; public: - typedef typename base_t::value_type value_type; - typedef typename base_t::difference_type difference_type; - typedef typename base_t::reference reference; - typedef std::random_access_iterator_tag iterator_category; + using value_type = typename base_t::value_type; + using difference_type = typename base_t::difference_type; + using reference = typename base_t::reference; + using iterator_category = std::random_access_iterator_tag; explicit VectorViewIterator() : m_value(nullptr) {} explicit VectorViewIterator(DataT *x) : m_value(x) {} diff --git a/src/engine/plugins/tile.cpp b/src/engine/plugins/tile.cpp index f932abe73..cbe8c2657 100644 --- a/src/engine/plugins/tile.cpp +++ b/src/engine/plugins/tile.cpp @@ -83,10 +83,10 @@ using FloatLine = std::vector; // We use boost::geometry to clip lines/points that are outside or cross the boundary // of the tile we're rendering. We need these types defined to use boosts clipping // logic -typedef boost::geometry::model::point point_t; -typedef boost::geometry::model::linestring linestring_t; -typedef boost::geometry::model::box box_t; -typedef boost::geometry::model::multi_linestring multi_linestring_t; +using point_t = boost::geometry::model::point; +using linestring_t = boost::geometry::model::linestring; +using box_t = boost::geometry::model::box; +using multi_linestring_t = boost::geometry::model::multi_linestring; const static box_t clip_box(point_t(-util::vector_tile::BUFFER, -util::vector_tile::BUFFER), point_t(util::vector_tile::EXTENT + util::vector_tile::BUFFER, util::vector_tile::EXTENT + util::vector_tile::BUFFER)); diff --git a/unit_tests/util/dynamic_graph.cpp b/unit_tests/util/dynamic_graph.cpp index 862271e7f..eb55e8461 100644 --- a/unit_tests/util/dynamic_graph.cpp +++ b/unit_tests/util/dynamic_graph.cpp @@ -17,8 +17,8 @@ struct TestData EdgeID id; }; -typedef DynamicGraph TestDynamicGraph; -typedef TestDynamicGraph::InputEdge TestInputEdge; +using TestDynamicGraph = DynamicGraph; +using TestInputEdge = TestDynamicGraph::InputEdge; BOOST_AUTO_TEST_CASE(find_test) { diff --git a/unit_tests/util/query_heap.cpp b/unit_tests/util/query_heap.cpp index 1f19b3a21..aa9033331 100644 --- a/unit_tests/util/query_heap.cpp +++ b/unit_tests/util/query_heap.cpp @@ -19,13 +19,10 @@ struct TestData unsigned value; }; -typedef NodeID TestNodeID; -typedef int TestKey; -typedef int TestWeight; -typedef boost::mpl::list, - MapStorage, - UnorderedMapStorage> - storage_types; +using TestNodeID = NodeID; +using TestKey = int; +using TestWeight = int; +using storage_types = boost::mpl::list, MapStorage, UnorderedMapStorage>; template struct RandomDataFixture { diff --git a/unit_tests/util/range_table.cpp b/unit_tests/util/range_table.cpp index d9eacc910..cf8cbbac7 100644 --- a/unit_tests/util/range_table.cpp +++ b/unit_tests/util/range_table.cpp @@ -12,7 +12,7 @@ using namespace osrm; using namespace osrm::util; constexpr unsigned BLOCK_SIZE = 16; -typedef RangeTable TestRangeTable; +using TestRangeTable = RangeTable; void ConstructionTest(const std::vector &lengths, const std::vector &offsets) { diff --git a/unit_tests/util/static_graph.cpp b/unit_tests/util/static_graph.cpp index e11a6da83..c4212cafd 100644 --- a/unit_tests/util/static_graph.cpp +++ b/unit_tests/util/static_graph.cpp @@ -17,10 +17,10 @@ struct TestData EdgeID id; }; -typedef StaticGraph TestStaticGraph; -typedef TestStaticGraph::NodeArrayEntry TestNodeArrayEntry; -typedef TestStaticGraph::EdgeArrayEntry TestEdgeArrayEntry; -typedef static_graph_details::SortableEdgeWithData TestInputEdge; +using TestStaticGraph = StaticGraph; +using TestNodeArrayEntry = TestStaticGraph::NodeArrayEntry; +using TestEdgeArrayEntry = TestStaticGraph::EdgeArrayEntry; +using TestInputEdge = static_graph_details::SortableEdgeWithData; static_assert(traits::HasDataMember::value, "TestInputEdge needs to have data"); @@ -76,7 +76,7 @@ template struct RandomArrayEntryFixture std::vector order; }; -typedef RandomArrayEntryFixture TestRandomArrayEntryFixture; +using TestRandomArrayEntryFixture = RandomArrayEntryFixture; BOOST_FIXTURE_TEST_CASE(array_test, TestRandomArrayEntryFixture) { diff --git a/unit_tests/util/static_rtree.cpp b/unit_tests/util/static_rtree.cpp index ddb376eb5..1351d6020 100644 --- a/unit_tests/util/static_rtree.cpp +++ b/unit_tests/util/static_rtree.cpp @@ -93,8 +93,8 @@ template struct RandomGraphFixture { struct TupleHash { - typedef std::pair argument_type; - typedef std::size_t result_type; + using argument_type = std::pair; + using result_type = std::size_t; result_type operator()(const argument_type &t) const { @@ -174,19 +174,12 @@ struct GraphFixture std::vector edges; }; -typedef RandomGraphFixture - TestRandomGraphFixture_LeafHalfFull; -typedef RandomGraphFixture - TestRandomGraphFixture_LeafFull; -typedef RandomGraphFixture - TestRandomGraphFixture_TwoLeaves; -typedef RandomGraphFixture - TestRandomGraphFixture_Branch; -typedef RandomGraphFixture - TestRandomGraphFixture_MultipleLevels; -typedef RandomGraphFixture<10, 30> TestRandomGraphFixture_10_30; +using TestRandomGraphFixture_LeafHalfFull = RandomGraphFixture; +using TestRandomGraphFixture_LeafFull = RandomGraphFixture; +using TestRandomGraphFixture_TwoLeaves = RandomGraphFixture; +using TestRandomGraphFixture_Branch = RandomGraphFixture; +using TestRandomGraphFixture_MultipleLevels = RandomGraphFixture; +using TestRandomGraphFixture_10_30 = RandomGraphFixture<10, 30>; template void simple_verify_rtree(RTreeT &rtree, From a12625afac3e3fb361ba49420a9e9f14dda1cd0e Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 6 Nov 2022 13:33:10 +0100 Subject: [PATCH 30/75] Drop GCC7 support --- .github/workflows/osrm-backend.yml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 442b64549..e4d233a22 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -264,15 +264,6 @@ jobs: CXXCOMPILER: g++-8 CXXFLAGS: -Wno-cast-function-type - - name: gcc-7-release - continue-on-error: false - node: 16 - runs-on: ubuntu-20.04 - BUILD_TOOLS: ON - BUILD_TYPE: Release - CCOMPILER: gcc-7 - CXXCOMPILER: g++-7 - - name: conan-macos-x64-release-node-16 build_node_package: true continue-on-error: false @@ -327,16 +318,6 @@ jobs: ENABLE_CONAN: ON ENABLE_APPLE_SILICON: ON - - name: gcc-7-release-shared - continue-on-error: false - node: 16 - runs-on: ubuntu-20.04 - BUILD_TOOLS: ON - BUILD_TYPE: Release - BUILD_SHARED_LIBS: ON - CCOMPILER: gcc-7 - CXXCOMPILER: g++-7 - - name: node-16-conan-linux-release build_node_package: true continue-on-error: false From 8a186e6f498b13d53d0764cbfb7ae7edc888d993 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Sun, 6 Nov 2022 15:20:47 +0100 Subject: [PATCH 31/75] Remove C++14 references from README and package.json (#6438) --- README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d7bce257d..f4feae811 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![osrm-backend CI](https://github.com/Project-OSRM/osrm-backend/actions/workflows/osrm-backend.yml/badge.svg)](https://github.com/Project-OSRM/osrm-backend/actions/workflows/osrm-backend.yml) [![Codecov](https://codecov.io/gh/Project-OSRM/osrm-backend/branch/master/graph/badge.svg)](https://codecov.io/gh/Project-OSRM/osrm-backend) [![Discord](https://img.shields.io/discord/1034487840219860992)](https://discord.gg/es9CdcCXcb) -High performance routing engine written in C++14 designed to run on OpenStreetMap data. +High performance routing engine written in C++ designed to run on OpenStreetMap data. The following services are available via HTTP API, C++ library interface and NodeJs wrapper: - Nearest - Snaps coordinates to the street network and returns the nearest matches diff --git a/package.json b/package.json index 54b69e8c1..9124e8989 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@project-osrm/osrm", "version": "5.28.0-unreleased", "private": false, - "description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.", + "description": "The Open Source Routing Machine is a high performance routing engine written in C++ designed to run on OpenStreetMap data.", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.10" }, From 5f82d0c9badfb63f9e920351193985d645b3af7a Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Sun, 6 Nov 2022 21:13:04 +0100 Subject: [PATCH 32/75] Get rid of unused functions in util/json_util.hpp (#6446) --- CHANGELOG.md | 1 + include/util/container.hpp | 22 ---------------------- include/util/json_util.hpp | 25 ------------------------- 3 files changed, 1 insertion(+), 47 deletions(-) delete mode 100644 include/util/container.hpp diff --git a/CHANGELOG.md b/CHANGELOG.md index d7b462d2e..104145e68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - REMOVED: Drop support of Node 12 & 14. [#6431](https://github.com/Project-OSRM/osrm-backend/pull/6431) - Misc: + - REMOVED: Get rid of unused functions in util/json_util.hpp. [#6446](https://github.com/Project-OSRM/osrm-backend/pull/6446) - FIXED: Apply workaround for Conan installation issue on CI. [#6442](https://github.com/Project-OSRM/osrm-backend/pull/6442) - FIXED: Fix `npm audit` warnings in NPM package. [#6437](https://github.com/Project-OSRM/osrm-backend/pull/6437) - FIXED: Handle snapping parameter for all plugins in NodeJs bindings, but not for Route only. [#6417](https://github.com/Project-OSRM/osrm-backend/pull/6417) diff --git a/include/util/container.hpp b/include/util/container.hpp deleted file mode 100644 index 68ab7e526..000000000 --- a/include/util/container.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef CONTAINER_HPP -#define CONTAINER_HPP - -#include - -namespace osrm -{ -namespace util -{ - -template void append_to_container(Container &&) {} - -template -void append_to_container(Container &&container, T value, Args &&... args) -{ - container.emplace_back(value); - append_to_container(std::forward(container), std::forward(args)...); -} -} // namespace util -} // namespace osrm - -#endif diff --git a/include/util/json_util.hpp b/include/util/json_util.hpp index 32a1bd7e4..311263d4e 100644 --- a/include/util/json_util.hpp +++ b/include/util/json_util.hpp @@ -2,7 +2,6 @@ #define JSON_UTIL_HPP #include "osrm/json_container.hpp" -#include "util/container.hpp" #include #include @@ -27,30 +26,6 @@ template T clamp_float(T d) return d; } - -template Array make_array(Args... args) -{ - Array a; - // TODO: check why a.values.emplace_back(args...); is not an option here - append_to_container(a.values, args...); - return a; -} - -// Easy acces to object hierachies -inline Value &get(Value &value) { return value; } - -template Value &get(Value &value, const char *key, Keys... keys) -{ - using recursive_object_t = mapbox::util::recursive_wrapper; - return get(value.get().get().values[key], keys...); -} - -template Value &get(Value &value, unsigned key, Keys... keys) -{ - using recursive_array_t = mapbox::util::recursive_wrapper; - return get(value.get().get().values[key], keys...); -} - } // namespace json } // namespace util } // namespace osrm From 2bbb347f572ba2778d5ed87d628e20936b6aa44e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Rodrigo?= Date: Sun, 6 Nov 2022 21:27:03 +0100 Subject: [PATCH 33/75] Car profile, add new specific country speed limit at:urban, ca-on:rural and es:trunk (#6443) --- profiles/car.lua | 3 +++ taginfo.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/profiles/car.lua b/profiles/car.lua index 770805962..c832ffdb2 100644 --- a/profiles/car.lua +++ b/profiles/car.lua @@ -268,6 +268,7 @@ function setup() -- List only exceptions maxspeed_table = { + ["at:urban"] = 40, ["at:rural"] = 100, ["at:trunk"] = 100, ["be:motorway"] = 120, @@ -276,6 +277,7 @@ function setup() ["be-vlg:rural"] = 70, ["by:urban"] = 60, ["by:motorway"] = 110, + ["ca-on:rural"] = 80, ["ch:rural"] = 80, ["ch:trunk"] = 100, ["ch:motorway"] = 120, @@ -285,6 +287,7 @@ function setup() ["de:rural"] = 100, ["de:motorway"] = 0, ["dk:rural"] = 80, + ["es:trunk"] = 90, ["fr:rural"] = 80, ["gb:nsl_single"] = (60*1609)/1000, ["gb:nsl_dual"] = (70*1609)/1000, diff --git a/taginfo.json b/taginfo.json index 358845d80..27e911dbd 100644 --- a/taginfo.json +++ b/taginfo.json @@ -146,12 +146,14 @@ {"key": "maxspeed", "value": "rural"}, {"key": "maxspeed", "value": "trunk"}, {"key": "maxspeed", "value": "motorway"}, + {"key": "maxspeed", "value": "AT:urban"}, {"key": "maxspeed", "value": "AT:rural"}, {"key": "maxspeed", "value": "AT:trunk"}, {"key": "maxspeed", "value": "BE:motorway"}, {"key": "maxspeed", "value": "BE-VLG:rural"}, {"key": "maxspeed", "value": "BY:urban"}, {"key": "maxspeed", "value": "BY:motorway"}, + {"key": "maxspeed", "value": "CA-ON:rural"}, {"key": "maxspeed", "value": "CH:rural"}, {"key": "maxspeed", "value": "CH:trunk"}, {"key": "maxspeed", "value": "CH:motorway"}, @@ -161,6 +163,7 @@ {"key": "maxspeed", "value": "DE:rural"}, {"key": "maxspeed", "value": "DE:motorway"}, {"key": "maxspeed", "value": "DK:rural"}, + {"key": "maxspeed", "value": "ES:trunk"}, {"key": "maxspeed", "value": "FR:rural"}, {"key": "maxspeed", "value": "GB:nsl_single"}, {"key": "maxspeed", "value": "GB:nsl_dual"}, From 6d105234404bfdfa028a342d45f5bdb3f03c1934 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Sun, 6 Nov 2022 22:45:35 +0100 Subject: [PATCH 34/75] Upgrade to clang-tidy 15 (#6439) --- .clang-tidy | 1 + .github/workflows/osrm-backend.yml | 16 +++++++++++----- CHANGELOG.md | 1 + src/contractor/graph_contractor.cpp | 2 -- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 1c87f8702..03f7f39d2 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -42,6 +42,7 @@ Checks: > -llvm-twine-local, misc-*, -misc-argument-comment, + -misc-const-correctness, -misc-non-private-member-variables-in-classes, -misc-unconventional-assign-operator, -misc-no-recursion, diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index e4d233a22..4edcaf771 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -180,14 +180,14 @@ jobs: CXXCOMPILER: clang++-6.0 CUCUMBER_TIMEOUT: 60000 - - name: clang-11.0-debug-clang-tidy + - name: clang-15.0-debug-clang-tidy continue-on-error: false node: 16 runs-on: ubuntu-22.04 BUILD_TOOLS: ON BUILD_TYPE: Debug - CCOMPILER: clang-14 - CXXCOMPILER: clang++-14 + CCOMPILER: clang-15 + CXXCOMPILER: clang++-15 CUCUMBER_TIMEOUT: 60000 ENABLE_CLANG_TIDY: ON @@ -488,10 +488,11 @@ jobs: - name: Install dev dependencies run: | python3 -m pip install conan==1.53.0 + # workaround for issue that GitHub Actions seems to not adding it to PATH after https://github.com/actions/runner-images/pull/6499 # and that's why CI cannot find conan executable installed above if [[ "${RUNNER_OS}" == "macOS" ]]; then - echo "/Library/Frameworks/Python.framework/Versions/3.11/bin" >> $GITHUB_PATH + echo "/Library/Frameworks/Python.framework/Versions/Current/bin" >> $GITHUB_PATH fi # ccache @@ -504,6 +505,12 @@ jobs: # clang if [[ "${CCOMPILER}" == "clang-6.0" ]]; then sudo apt-get update -y && sudo apt-get install clang++-6 + elif [[ "${CCOMPILER}" == "clang-15" ]]; then + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + sudo apt-get update -y && sudo apt-get install software-properties-common + sudo add-apt-repository 'deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-15 main' + sudo apt-get update -y && sudo apt-get install clang++-15 clang-tidy-15 + sudo update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-15 100000 fi # Linux dev packages @@ -532,7 +539,6 @@ jobs: tar zxvf onetbb.tgz sudo cp -a oneapi-tbb-${TBB_VERSION}/lib/. /usr/local/lib/ sudo cp -a oneapi-tbb-${TBB_VERSION}/include/. /usr/local/include/ - - name: Prepare build run: | mkdir ${OSRM_BUILD_DIR} diff --git a/CHANGELOG.md b/CHANGELOG.md index 104145e68..253cad5c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Unreleased - Changes from 5.27.1 - Build: + - CHANGED: Upgrade to clang-tidy 15. [#6439](https://github.com/Project-OSRM/osrm-backend/pull/6439) - CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - REMOVED: Drop support of Node 12 & 14. [#6431](https://github.com/Project-OSRM/osrm-backend/pull/6431) - Misc: diff --git a/src/contractor/graph_contractor.cpp b/src/contractor/graph_contractor.cpp index 9fb4749d3..07628523d 100644 --- a/src/contractor/graph_contractor.cpp +++ b/src/contractor/graph_contractor.cpp @@ -645,7 +645,6 @@ std::vector contractGraph(ContractorGraph &graph, const util::XORFastHash<> hash; - unsigned current_level = 0; std::size_t next_renumbering = number_of_nodes * 0.35; while (remaining_nodes.size() > number_of_core_nodes) { @@ -761,7 +760,6 @@ std::vector contractGraph(ContractorGraph &graph, remaining_nodes.resize(begin_independent_nodes_idx); p.PrintStatus(number_of_contracted_nodes); - ++current_level; } node_data.Renumber(new_to_old_node_id); From a1b3efe2603d5c2c65fe2af56a87a7621dc02479 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Rodrigo?= Date: Fri, 11 Nov 2022 21:52:54 +0100 Subject: [PATCH 35/75] Remove at:urban maxspeed, partial revert of 2bbb347f572ba2778d5ed87d628e20936b6aa44e (#6450) --- profiles/car.lua | 1 - taginfo.json | 1 - 2 files changed, 2 deletions(-) diff --git a/profiles/car.lua b/profiles/car.lua index c832ffdb2..95052d0ec 100644 --- a/profiles/car.lua +++ b/profiles/car.lua @@ -268,7 +268,6 @@ function setup() -- List only exceptions maxspeed_table = { - ["at:urban"] = 40, ["at:rural"] = 100, ["at:trunk"] = 100, ["be:motorway"] = 120, diff --git a/taginfo.json b/taginfo.json index 27e911dbd..85c57071a 100644 --- a/taginfo.json +++ b/taginfo.json @@ -146,7 +146,6 @@ {"key": "maxspeed", "value": "rural"}, {"key": "maxspeed", "value": "trunk"}, {"key": "maxspeed", "value": "motorway"}, - {"key": "maxspeed", "value": "AT:urban"}, {"key": "maxspeed", "value": "AT:rural"}, {"key": "maxspeed", "value": "AT:trunk"}, {"key": "maxspeed", "value": "BE:motorway"}, From 18dcd27a9be154a82e06832c48951b5463a497a6 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Wed, 16 Nov 2022 15:44:36 +0100 Subject: [PATCH 36/75] Use node-api instead of NAN (#6452) --- .github/workflows/osrm-backend.yml | 144 +--- .gitignore | 1 + CHANGELOG.md | 2 + include/nodejs/json_v8_renderer.hpp | 44 +- include/nodejs/node_osrm.hpp | 41 +- include/nodejs/node_osrm_support.hpp | 996 +++++++++++++-------------- lib/binding_napi_v8 | 1 + package-lock.json | 139 ++-- package.json | 15 +- src/nodejs/CMakeLists.txt | 12 + src/nodejs/node_osrm.cpp | 170 +++-- test/nodejs/benchmark.js | 51 ++ test/nodejs/index.js | 2 +- 13 files changed, 785 insertions(+), 833 deletions(-) create mode 120000 lib/binding_napi_v8 create mode 100644 test/nodejs/benchmark.js diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 4edcaf771..53a27b864 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -20,7 +20,7 @@ env: ENABLE_NODE_BINDINGS: "ON" jobs: - windows: + windows-release-node: needs: format-taginfo-docs runs-on: windows-2022 continue-on-error: false @@ -264,83 +264,7 @@ jobs: CXXCOMPILER: g++-8 CXXFLAGS: -Wno-cast-function-type - - name: conan-macos-x64-release-node-16 - build_node_package: true - continue-on-error: false - node: 16 - runs-on: macos-11 - BUILD_TOOLS: ON - BUILD_TYPE: Release - CCOMPILER: clang - CXXCOMPILER: clang++ - CUCUMBER_TIMEOUT: 60000 - ENABLE_ASSERTIONS: ON - ENABLE_CONAN: ON - - - name: conan-macos-arm64-release-node-16 - build_node_package: true - continue-on-error: false - node: 16 - runs-on: macos-11 - BUILD_TOOLS: ON - BUILD_TYPE: Release - CCOMPILER: clang - CXXCOMPILER: clang++ - CUCUMBER_TIMEOUT: 60000 - ENABLE_ASSERTIONS: ON - ENABLE_CONAN: ON - ENABLE_APPLE_SILICON: ON - - - name: conan-macos-x64-release-node-18 - build_node_package: true - continue-on-error: false - node: 18 - runs-on: macos-11 - BUILD_TOOLS: ON - BUILD_TYPE: Release - CCOMPILER: clang - CXXCOMPILER: clang++ - CUCUMBER_TIMEOUT: 60000 - ENABLE_ASSERTIONS: ON - ENABLE_CONAN: ON - - - name: conan-macos-arm64-release-node-18 - build_node_package: true - continue-on-error: false - node: 18 - runs-on: macos-11 - BUILD_TOOLS: ON - BUILD_TYPE: Release - CCOMPILER: clang - CXXCOMPILER: clang++ - CUCUMBER_TIMEOUT: 60000 - ENABLE_ASSERTIONS: ON - ENABLE_CONAN: ON - ENABLE_APPLE_SILICON: ON - - - name: node-16-conan-linux-release - build_node_package: true - continue-on-error: false - node: 16 - runs-on: ubuntu-20.04 - BUILD_TYPE: Release - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - - - name: node-16-conan-linux-debug - build_node_package: true - continue-on-error: false - node: 16 - runs-on: ubuntu-20.04 - BUILD_TYPE: Debug - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - - - name: node-18-conan-linux-release + - name: conan-linux-release-node build_node_package: true continue-on-error: false node: 18 @@ -351,7 +275,7 @@ jobs: ENABLE_CONAN: ON NODE_PACKAGE_TESTS_ONLY: ON - - name: node-18-conan-linux-debug + - name: conan-linux-debug-node build_node_package: true continue-on-error: false node: 18 @@ -362,10 +286,10 @@ jobs: ENABLE_CONAN: ON NODE_PACKAGE_TESTS_ONLY: ON - - name: conan-macos-x64-release-node-latest + - name: conan-macos-x64-release-node build_node_package: true continue-on-error: true - node: latest + node: 18 runs-on: macos-11 BUILD_TYPE: Release CCOMPILER: clang @@ -374,10 +298,10 @@ jobs: ENABLE_ASSERTIONS: ON ENABLE_CONAN: ON - - name: conan-macos-arm64-release-node-latest + - name: conan-macos-arm64-release-node build_node_package: true continue-on-error: true - node: latest + node: 18 runs-on: macos-11 BUILD_TYPE: Release CCOMPILER: clang @@ -387,28 +311,6 @@ jobs: ENABLE_CONAN: ON ENABLE_APPLE_SILICON: ON - - name: node-latest-conan-linux-release - build_node_package: true - continue-on-error: true - node: latest - runs-on: ubuntu-20.04 - BUILD_TYPE: Release - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - - - name: node-latest-conan-linux-debug - build_node_package: true - continue-on-error: true - node: latest - runs-on: ubuntu-20.04 - BUILD_TYPE: Debug - CCOMPILER: clang-6.0 - CXXCOMPILER: clang++-6.0 - ENABLE_CONAN: ON - NODE_PACKAGE_TESTS_ONLY: ON - name: ${{ matrix.name}} continue-on-error: ${{ matrix.continue-on-error }} runs-on: ${{ matrix.runs-on }} @@ -627,10 +529,38 @@ jobs: ./src/benchmarks/packedvector-bench ./src/benchmarks/rtree-bench ../test/data/monaco.osrm.ramIndex ../test/data/monaco.osrm.fileIndex ../test/data/monaco.osrm.nbg_nodes popd - - name: Run Node package tests only + + - name: Use Node 16 + if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }} + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Run Node package tests on Node 16 if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }} run: | + node --version npm run nodejs-tests + - name: Use Node 18 + if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }} + uses: actions/setup-node@v3 + with: + node-version: 18 + - name: Run Node package tests on Node 18 + if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }} + run: | + node --version + npm run nodejs-tests + - name: Use Node latest + if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }} + uses: actions/setup-node@v3 + with: + node-version: latest + - name: Run Node package tests on Node-latest + if: ${{ matrix.NODE_PACKAGE_TESTS_ONLY == 'ON' && matrix.ENABLE_APPLE_SILICON != 'ON' }} + run: | + node --version + npm run nodejs-tests + - name: Upload test logs uses: actions/upload-artifact@v3 if: failure() @@ -681,6 +611,6 @@ jobs: ci-complete: runs-on: ubuntu-22.04 - needs: [build-test-publish, docker-image, windows] + needs: [build-test-publish, docker-image, windows-release-node] steps: - run: echo "CI complete" diff --git a/.gitignore b/.gitignore index 3b443d06d..9180d6fb5 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,4 @@ debug.lua # node-osrm artifacts lib/binding + diff --git a/CHANGELOG.md b/CHANGELOG.md index 253cad5c2..9f39ab328 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ - CHANGED: Upgrade to clang-tidy 15. [#6439](https://github.com/Project-OSRM/osrm-backend/pull/6439) - CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - REMOVED: Drop support of Node 12 & 14. [#6431](https://github.com/Project-OSRM/osrm-backend/pull/6431) + - NodeJS: + - CHANGED: Use node-api instead of NAN. [#6452](https://github.com/Project-OSRM/osrm-backend/pull/6452) - Misc: - REMOVED: Get rid of unused functions in util/json_util.hpp. [#6446](https://github.com/Project-OSRM/osrm-backend/pull/6446) - FIXED: Apply workaround for Conan installation issue on CI. [#6442](https://github.com/Project-OSRM/osrm-backend/pull/6442) diff --git a/include/nodejs/json_v8_renderer.hpp b/include/nodejs/json_v8_renderer.hpp index 7ff7e9382..4b8bbd193 100644 --- a/include/nodejs/json_v8_renderer.hpp +++ b/include/nodejs/json_v8_renderer.hpp @@ -2,11 +2,7 @@ #define OSRM_BINDINGS_NODE_JSON_V8_RENDERER_HPP #include "osrm/json_container.hpp" - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-parameter" -#include -#pragma GCC diagnostic pop +#include #include @@ -15,52 +11,56 @@ namespace node_osrm struct V8Renderer { - explicit V8Renderer(v8::Local &_out) : out(_out) {} + explicit V8Renderer(const Napi::Env &env, Napi::Value &out) : env(env), out(out) {} void operator()(const osrm::json::String &string) const { - out = Nan::New(std::cref(string.value)).ToLocalChecked(); + out = Napi::String::New(env, string.value); } - void operator()(const osrm::json::Number &number) const { out = Nan::New(number.value); } + void operator()(const osrm::json::Number &number) const + { + out = Napi::Number::New(env, number.value); + } void operator()(const osrm::json::Object &object) const { - v8::Local obj = Nan::New(); + Napi::Object obj = Napi::Object::New(env); for (const auto &keyValue : object.values) { - v8::Local child; - mapbox::util::apply_visitor(V8Renderer(child), keyValue.second); - Nan::Set(obj, Nan::New(keyValue.first).ToLocalChecked(), child); + Napi::Value child; + mapbox::util::apply_visitor(V8Renderer(env, child), keyValue.second); + obj.Set(keyValue.first, child); } out = obj; } void operator()(const osrm::json::Array &array) const { - v8::Local a = Nan::New(array.values.size()); + Napi::Array a = Napi::Array::New(env, array.values.size()); for (auto i = 0u; i < array.values.size(); ++i) { - v8::Local child; - mapbox::util::apply_visitor(V8Renderer(child), array.values[i]); - Nan::Set(a, i, child); + Napi::Value child; + mapbox::util::apply_visitor(V8Renderer(env, child), array.values[i]); + a.Set(i, child); } out = a; } - void operator()(const osrm::json::True &) const { out = Nan::New(true); } + void operator()(const osrm::json::True &) const { out = Napi::Boolean::New(env, true); } - void operator()(const osrm::json::False &) const { out = Nan::New(false); } + void operator()(const osrm::json::False &) const { out = Napi::Boolean::New(env, false); } - void operator()(const osrm::json::Null &) const { out = Nan::Null(); } + void operator()(const osrm::json::Null &) const { out = env.Null(); } private: - v8::Local &out; + const Napi::Env &env; + Napi::Value &out; }; -inline void renderToV8(v8::Local &out, const osrm::json::Object &object) +inline void renderToV8(const Napi::Env &env, Napi::Value &out, const osrm::json::Object &object) { - V8Renderer renderer(out); + V8Renderer renderer(env, out); renderer(object); } } // namespace node_osrm diff --git a/include/nodejs/node_osrm.hpp b/include/nodejs/node_osrm.hpp index c9f09e75b..f85fb5362 100644 --- a/include/nodejs/node_osrm.hpp +++ b/include/nodejs/node_osrm.hpp @@ -3,45 +3,30 @@ #include "osrm/osrm_fwd.hpp" -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-parameter" -#include -#pragma GCC diagnostic pop +#include #include namespace node_osrm { -struct Engine final : public Nan::ObjectWrap +class Engine final : public Napi::ObjectWrap { - using Base = Nan::ObjectWrap; + public: + static Napi::Object Init(Napi::Env env, Napi::Object exports); + Engine(const Napi::CallbackInfo &info); - static NAN_MODULE_INIT(Init); - - static NAN_METHOD(New); - - static NAN_METHOD(route); - static NAN_METHOD(nearest); - static NAN_METHOD(table); - static NAN_METHOD(tile); - static NAN_METHOD(match); - static NAN_METHOD(trip); - - Engine(osrm::EngineConfig &config); - - // Thread-safe singleton accessor - static Nan::Persistent &constructor(); - - // Ref-counted OSRM alive even after shutdown until last callback is done std::shared_ptr this_; + + private: + Napi::Value route(const Napi::CallbackInfo &info); + Napi::Value nearest(const Napi::CallbackInfo &info); + Napi::Value table(const Napi::CallbackInfo &info); + Napi::Value tile(const Napi::CallbackInfo &info); + Napi::Value match(const Napi::CallbackInfo &info); + Napi::Value trip(const Napi::CallbackInfo &info); }; } // namespace node_osrm -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-parameter" -NAN_MODULE_WORKER_ENABLED(osrm, node_osrm::Engine::Init) -#pragma GCC diagnostic pop - #endif diff --git a/include/nodejs/node_osrm_support.hpp b/include/nodejs/node_osrm_support.hpp index 2faaa32f6..a1d7b4473 100644 --- a/include/nodejs/node_osrm_support.hpp +++ b/include/nodejs/node_osrm_support.hpp @@ -18,6 +18,7 @@ #include "osrm/tile_parameters.hpp" #include "osrm/trip_parameters.hpp" #include "util/json_renderer.hpp" +#include #include #include @@ -52,30 +53,40 @@ struct PluginParameters using ObjectOrString = typename mapbox::util::variant; -template inline v8::Local render(const ResultT &result); +template inline Napi::Value render(const Napi::Env &env, const ResultT &result); -template <> v8::Local inline render(const std::string &result) +template <> Napi::Value inline render(const Napi::Env &env, const std::string &result) { - return Nan::CopyBuffer(result.data(), result.size()).ToLocalChecked(); + return Napi::Buffer::Copy(env, result.data(), result.size()); } -template <> v8::Local inline render(const ObjectOrString &result) +template <> Napi::Value inline render(const Napi::Env &env, const ObjectOrString &result) { if (result.is()) { // Convert osrm::json object tree into matching v8 object tree - v8::Local value; - renderToV8(value, result.get()); + Napi::Value value; + renderToV8(env, value, result.get()); return value; } else { // Return the string object as a node Buffer - return Nan::CopyBuffer(result.get().data(), result.get().size()) - .ToLocalChecked(); + return Napi::Buffer::Copy( + env, result.get().data(), result.get().size()); } } +inline bool IsUnsignedInteger(const Napi::Value &value) +{ + if (!value.IsNumber()) + { + return false; + } + const auto doubleValue = value.ToNumber().DoubleValue(); + return doubleValue >= 0.0 && std::floor(doubleValue) == doubleValue; +} + inline void ParseResult(const osrm::Status &result_status, osrm::json::Object &result) { const auto code_iter = result.values.find("code"); @@ -109,9 +120,19 @@ inline void ParseResult(const osrm::Status &result_status, } } -inline engine_config_ptr argumentsToEngineConfig(const Nan::FunctionCallbackInfo &args) +inline void ThrowError(const Napi::Env &env, const char *message) { - Nan::HandleScope scope; + Napi::Error::New(env, message).ThrowAsJavaScriptException(); +} + +inline void ThrowTypeError(const Napi::Env &env, const char *message) +{ + Napi::TypeError::New(env, message).ThrowAsJavaScriptException(); +} + +inline engine_config_ptr argumentsToEngineConfig(const Napi::CallbackInfo &args) +{ + Napi::HandleScope scope(args.Env()); auto engine_config = std::make_unique(); if (args.Length() == 0) @@ -120,261 +141,250 @@ inline engine_config_ptr argumentsToEngineConfig(const Nan::FunctionCallbackInfo } else if (args.Length() > 1) { - Nan::ThrowError("Only accepts one parameter"); + ThrowError(args.Env(), "Only accepts one parameter"); return engine_config_ptr(); } BOOST_ASSERT(args.Length() == 1); - if (args[0]->IsString()) + if (args[0].IsString()) { - engine_config->storage_config = - osrm::StorageConfig(*Nan::Utf8String(Nan::To(args[0]).ToLocalChecked())); + engine_config->storage_config = osrm::StorageConfig(args[0].ToString().Utf8Value()); engine_config->use_shared_memory = false; return engine_config; } - else if (!args[0]->IsObject()) + else if (!args[0].IsObject()) { - Nan::ThrowError("Parameter must be a path or options object"); + ThrowError(args.Env(), "Parameter must be a path or options object"); return engine_config_ptr(); } - BOOST_ASSERT(args[0]->IsObject()); - auto params = Nan::To(args[0]).ToLocalChecked(); + BOOST_ASSERT(args[0].IsObject()); + auto params = args[0].As(); - auto path = Nan::Get(params, Nan::New("path").ToLocalChecked()).ToLocalChecked(); + auto path = params.Get("path"); if (path.IsEmpty()) return engine_config_ptr(); - auto memory_file = Nan::Get(params, Nan::New("memory_file").ToLocalChecked()).ToLocalChecked(); + auto memory_file = params.Get("memory_file"); if (memory_file.IsEmpty()) return engine_config_ptr(); - auto shared_memory = - Nan::Get(params, Nan::New("shared_memory").ToLocalChecked()).ToLocalChecked(); + auto shared_memory = params.Get("shared_memory"); if (shared_memory.IsEmpty()) return engine_config_ptr(); - auto mmap_memory = Nan::Get(params, Nan::New("mmap_memory").ToLocalChecked()).ToLocalChecked(); + auto mmap_memory = params.Get("mmap_memory"); if (mmap_memory.IsEmpty()) return engine_config_ptr(); - if (!memory_file->IsUndefined()) + if (!memory_file.IsUndefined()) { - if (path->IsUndefined()) + if (path.IsUndefined()) { - Nan::ThrowError("memory_file option requires a path to a file."); + ThrowError(args.Env(), "memory_file option requires a path to a file."); return engine_config_ptr(); } - engine_config->memory_file = - *Nan::Utf8String(Nan::To(memory_file).ToLocalChecked()); + engine_config->memory_file = memory_file.ToString().Utf8Value(); } - auto dataset_name = - Nan::Get(params, Nan::New("dataset_name").ToLocalChecked()).ToLocalChecked(); + auto dataset_name = params.Get("dataset_name"); if (dataset_name.IsEmpty()) return engine_config_ptr(); - if (!dataset_name->IsUndefined()) + if (!dataset_name.IsUndefined()) { - if (dataset_name->IsString()) + if (dataset_name.IsString()) { - engine_config->dataset_name = - *Nan::Utf8String(Nan::To(dataset_name).ToLocalChecked()); + engine_config->dataset_name = dataset_name.ToString().Utf8Value(); } else { - Nan::ThrowError("dataset_name needs to be a string"); + ThrowError(args.Env(), "dataset_name needs to be a string"); return engine_config_ptr(); } } - if (!path->IsUndefined()) + if (!path.IsUndefined()) { - engine_config->storage_config = - osrm::StorageConfig(*Nan::Utf8String(Nan::To(path).ToLocalChecked())); + engine_config->storage_config = osrm::StorageConfig(path.ToString().Utf8Value()); engine_config->use_shared_memory = false; } - if (!shared_memory->IsUndefined()) + if (!shared_memory.IsUndefined()) { - if (shared_memory->IsBoolean()) + if (shared_memory.IsBoolean()) { - engine_config->use_shared_memory = Nan::To(shared_memory).FromJust(); + engine_config->use_shared_memory = shared_memory.ToBoolean().Value(); } else { - Nan::ThrowError("Shared_memory option must be a boolean"); + ThrowError(args.Env(), "Shared_memory option must be a boolean"); return engine_config_ptr(); } } - if (!mmap_memory->IsUndefined()) + if (!mmap_memory.IsUndefined()) { - if (mmap_memory->IsBoolean()) + if (mmap_memory.IsBoolean()) { - engine_config->use_mmap = Nan::To(mmap_memory).FromJust(); + engine_config->use_mmap = mmap_memory.ToBoolean().Value(); } else { - Nan::ThrowError("mmap_memory option must be a boolean"); + ThrowError(args.Env(), "mmap_memory option must be a boolean"); return engine_config_ptr(); } } - if (path->IsUndefined() && !engine_config->use_shared_memory) + if (path.IsUndefined() && !engine_config->use_shared_memory) { - Nan::ThrowError("Shared_memory must be enabled if no path is " - "specified"); + ThrowError(args.Env(), + "Shared_memory must be enabled if no path is " + "specified"); return engine_config_ptr(); } - auto algorithm = Nan::Get(params, Nan::New("algorithm").ToLocalChecked()).ToLocalChecked(); + auto algorithm = params.Get("algorithm"); if (algorithm.IsEmpty()) return engine_config_ptr(); - if (algorithm->IsString()) + if (algorithm.IsString()) { - auto algorithm_str = Nan::To(algorithm).ToLocalChecked(); - if (*Nan::Utf8String(algorithm_str) == std::string("CH")) + auto algorithm_str = algorithm.ToString().Utf8Value(); + if (algorithm_str == "CH") { engine_config->algorithm = osrm::EngineConfig::Algorithm::CH; } - else if (*Nan::Utf8String(algorithm_str) == std::string("CoreCH")) + else if (algorithm_str == "CoreCH") { engine_config->algorithm = osrm::EngineConfig::Algorithm::CH; } - else if (*Nan::Utf8String(algorithm_str) == std::string("MLD")) + else if (algorithm_str == "MLD") { engine_config->algorithm = osrm::EngineConfig::Algorithm::MLD; } else { - Nan::ThrowError("algorithm option must be one of 'CH', 'CoreCH', or 'MLD'."); + ThrowError(args.Env(), "algorithm option must be one of 'CH', 'CoreCH', or 'MLD'."); return engine_config_ptr(); } } - else if (!algorithm->IsUndefined()) + else if (!algorithm.IsUndefined()) { - Nan::ThrowError("algorithm option must be a string and one of 'CH', 'CoreCH', or 'MLD'."); + ThrowError(args.Env(), + "algorithm option must be a string and one of 'CH', 'CoreCH', or 'MLD'."); return engine_config_ptr(); } // Set EngineConfig system-wide limits on construction, if requested - auto max_locations_trip = - Nan::Get(params, Nan::New("max_locations_trip").ToLocalChecked()).ToLocalChecked(); - auto max_locations_viaroute = - Nan::Get(params, Nan::New("max_locations_viaroute").ToLocalChecked()).ToLocalChecked(); - auto max_locations_distance_table = - Nan::Get(params, Nan::New("max_locations_distance_table").ToLocalChecked()) - .ToLocalChecked(); - auto max_locations_map_matching = - Nan::Get(params, Nan::New("max_locations_map_matching").ToLocalChecked()).ToLocalChecked(); - auto max_results_nearest = - Nan::Get(params, Nan::New("max_results_nearest").ToLocalChecked()).ToLocalChecked(); - auto max_alternatives = - Nan::Get(params, Nan::New("max_alternatives").ToLocalChecked()).ToLocalChecked(); - auto max_radius_map_matching = - Nan::Get(params, Nan::New("max_radius_map_matching").ToLocalChecked()).ToLocalChecked(); + auto max_locations_trip = params.Get("max_locations_trip"); + auto max_locations_viaroute = params.Get("max_locations_viaroute"); + auto max_locations_distance_table = params.Get("max_locations_distance_table"); + auto max_locations_map_matching = params.Get("max_locations_map_matching"); + auto max_results_nearest = params.Get("max_results_nearest"); + auto max_alternatives = params.Get("max_alternatives"); + auto max_radius_map_matching = params.Get("max_radius_map_matching"); - if (!max_locations_trip->IsUndefined() && !max_locations_trip->IsNumber()) + if (!max_locations_trip.IsUndefined() && !max_locations_trip.IsNumber()) { - Nan::ThrowError("max_locations_trip must be an integral number"); + ThrowError(args.Env(), "max_locations_trip must be an integral number"); return engine_config_ptr(); } - if (!max_locations_viaroute->IsUndefined() && !max_locations_viaroute->IsNumber()) + if (!max_locations_viaroute.IsUndefined() && !max_locations_viaroute.IsNumber()) { - Nan::ThrowError("max_locations_viaroute must be an integral number"); + ThrowError(args.Env(), "max_locations_viaroute must be an integral number"); return engine_config_ptr(); } - if (!max_locations_distance_table->IsUndefined() && !max_locations_distance_table->IsNumber()) + if (!max_locations_distance_table.IsUndefined() && !max_locations_distance_table.IsNumber()) { - Nan::ThrowError("max_locations_distance_table must be an integral number"); + ThrowError(args.Env(), "max_locations_distance_table must be an integral number"); return engine_config_ptr(); } - if (!max_locations_map_matching->IsUndefined() && !max_locations_map_matching->IsNumber()) + if (!max_locations_map_matching.IsUndefined() && !max_locations_map_matching.IsNumber()) { - Nan::ThrowError("max_locations_map_matching must be an integral number"); + ThrowError(args.Env(), "max_locations_map_matching must be an integral number"); return engine_config_ptr(); } - if (!max_results_nearest->IsUndefined() && !max_results_nearest->IsNumber()) + if (!max_results_nearest.IsUndefined() && !max_results_nearest.IsNumber()) { - Nan::ThrowError("max_results_nearest must be an integral number"); + ThrowError(args.Env(), "max_results_nearest must be an integral number"); return engine_config_ptr(); } - if (!max_alternatives->IsUndefined() && !max_alternatives->IsNumber()) + if (!max_alternatives.IsUndefined() && !max_alternatives.IsNumber()) { - Nan::ThrowError("max_alternatives must be an integral number"); + ThrowError(args.Env(), "max_alternatives must be an integral number"); return engine_config_ptr(); } - if (max_locations_trip->IsNumber()) - engine_config->max_locations_trip = Nan::To(max_locations_trip).FromJust(); - if (max_locations_viaroute->IsNumber()) - engine_config->max_locations_viaroute = Nan::To(max_locations_viaroute).FromJust(); - if (max_locations_distance_table->IsNumber()) + if (max_locations_trip.IsNumber()) + engine_config->max_locations_trip = max_locations_trip.ToNumber().Int32Value(); + if (max_locations_viaroute.IsNumber()) + engine_config->max_locations_viaroute = max_locations_viaroute.ToNumber().Int32Value(); + if (max_locations_distance_table.IsNumber()) engine_config->max_locations_distance_table = - Nan::To(max_locations_distance_table).FromJust(); - if (max_locations_map_matching->IsNumber()) + max_locations_distance_table.ToNumber().Int32Value(); + if (max_locations_map_matching.IsNumber()) engine_config->max_locations_map_matching = - Nan::To(max_locations_map_matching).FromJust(); - if (max_results_nearest->IsNumber()) - engine_config->max_results_nearest = Nan::To(max_results_nearest).FromJust(); - if (max_alternatives->IsNumber()) - engine_config->max_alternatives = Nan::To(max_alternatives).FromJust(); - if (max_radius_map_matching->IsNumber()) - engine_config->max_radius_map_matching = - Nan::To(max_radius_map_matching).FromJust(); + max_locations_map_matching.ToNumber().Int32Value(); + if (max_results_nearest.IsNumber()) + engine_config->max_results_nearest = max_results_nearest.ToNumber().Int32Value(); + if (max_alternatives.IsNumber()) + engine_config->max_alternatives = max_alternatives.ToNumber().Int32Value(); + if (max_radius_map_matching.IsNumber()) + engine_config->max_radius_map_matching = max_radius_map_matching.ToNumber().DoubleValue(); return engine_config; } inline boost::optional> -parseCoordinateArray(const v8::Local &coordinates_array) +parseCoordinateArray(const Napi::Array &coordinates_array) { - Nan::HandleScope scope; + Napi::HandleScope scope(coordinates_array.Env()); boost::optional> resulting_coordinates; std::vector temp_coordinates; - for (uint32_t i = 0; i < coordinates_array->Length(); ++i) + for (uint32_t i = 0; i < coordinates_array.Length(); ++i) { - v8::Local coordinate = Nan::Get(coordinates_array, i).ToLocalChecked(); + Napi::Value coordinate = coordinates_array.Get(i); if (coordinate.IsEmpty()) return resulting_coordinates; - if (!coordinate->IsArray()) + if (!coordinate.IsArray()) { - Nan::ThrowError("Coordinates must be an array of (lon/lat) pairs"); + ThrowError(coordinates_array.Env(), "Coordinates must be an array of (lon/lat) pairs"); return resulting_coordinates; } - v8::Local coordinate_pair = v8::Local::Cast(coordinate); - if (coordinate_pair->Length() != 2) + Napi::Array coordinate_pair = coordinate.As(); + if (coordinate_pair.Length() != 2) { - Nan::ThrowError("Coordinates must be an array of (lon/lat) pairs"); + ThrowError(coordinates_array.Env(), "Coordinates must be an array of (lon/lat) pairs"); return resulting_coordinates; } - if (!Nan::Get(coordinate_pair, 0).ToLocalChecked()->IsNumber() || - !Nan::Get(coordinate_pair, 1).ToLocalChecked()->IsNumber()) + if (!coordinate_pair.Get(static_cast(0)).IsNumber() || + !coordinate_pair.Get(static_cast(1)).IsNumber()) { - Nan::ThrowError("Each member of a coordinate pair must be a number"); + ThrowError(coordinates_array.Env(), + "Each member of a coordinate pair must be a number"); return resulting_coordinates; } - double lon = Nan::To(Nan::Get(coordinate_pair, 0).ToLocalChecked()).FromJust(); - double lat = Nan::To(Nan::Get(coordinate_pair, 1).ToLocalChecked()).FromJust(); + double lon = coordinate_pair.Get(static_cast(0)).As().DoubleValue(); + double lat = coordinate_pair.Get(static_cast(1)).As().DoubleValue(); if (std::isnan(lon) || std::isnan(lat) || std::isinf(lon) || std::isinf(lat)) { - Nan::ThrowError("Lng/Lat coordinates must be valid numbers"); + ThrowError(coordinates_array.Env(), "Lng/Lat coordinates must be valid numbers"); return resulting_coordinates; } if (lon > 180 || lon < -180 || lat > 90 || lat < -90) { - Nan::ThrowError("Lng/Lat coordinates must be within world bounds " - "(-180 < lng < 180, -90 < lat < 90)"); + ThrowError(coordinates_array.Env(), + "Lng/Lat coordinates must be within world bounds " + "(-180 < lng < 180, -90 < lat < 90)"); return resulting_coordinates; } @@ -388,47 +398,46 @@ parseCoordinateArray(const v8::Local &coordinates_array) // Parses all the non-service specific parameters template -inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &args, +inline bool argumentsToParameter(const Napi::CallbackInfo &args, ParamType ¶ms, bool requires_multiple_coordinates) { - Nan::HandleScope scope; + Napi::HandleScope scope(args.Env()); if (args.Length() < 2) { - Nan::ThrowTypeError("Two arguments required"); + ThrowTypeError(args.Env(), "Two arguments required"); return false; } - if (!args[0]->IsObject()) + if (!args[0].IsObject()) { - Nan::ThrowTypeError("First arg must be an object"); + ThrowTypeError(args.Env(), "First arg must be an object"); return false; } - v8::Local obj = Nan::To(args[0]).ToLocalChecked(); + Napi::Object obj = args[0].As(); - v8::Local coordinates = - Nan::Get(obj, Nan::New("coordinates").ToLocalChecked()).ToLocalChecked(); + Napi::Value coordinates = obj.Get("coordinates"); if (coordinates.IsEmpty()) return false; - if (coordinates->IsUndefined()) + if (coordinates.IsUndefined()) { - Nan::ThrowError("Must provide a coordinates property"); + ThrowError(args.Env(), "Must provide a coordinates property"); return false; } - else if (coordinates->IsArray()) + else if (coordinates.IsArray()) { - auto coordinates_array = v8::Local::Cast(coordinates); - if (coordinates_array->Length() < 2 && requires_multiple_coordinates) + auto coordinates_array = coordinates.As(); + if (coordinates_array.Length() < 2 && requires_multiple_coordinates) { - Nan::ThrowError("At least two coordinates must be provided"); + ThrowError(args.Env(), "At least two coordinates must be provided"); return false; } - else if (!requires_multiple_coordinates && coordinates_array->Length() != 1) + else if (!requires_multiple_coordinates && coordinates_array.Length() != 1) { - Nan::ThrowError("Exactly one coordinate pair must be provided"); + ThrowError(args.Env(), "Exactly one coordinate pair must be provided"); return false; } auto maybe_coordinates = parseCoordinateArray(coordinates_array); @@ -443,49 +452,47 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &arg return false; } } - else if (!coordinates->IsUndefined()) + else if (!coordinates.IsUndefined()) { - BOOST_ASSERT(!coordinates->IsArray()); - Nan::ThrowError("Coordinates must be an array of (lon/lat) pairs"); + BOOST_ASSERT(!coordinates.IsArray()); + ThrowError(args.Env(), "Coordinates must be an array of (lon/lat) pairs"); return false; } - if (Nan::Has(obj, Nan::New("approaches").ToLocalChecked()).FromJust()) + if (obj.Has("approaches")) { - v8::Local approaches = - Nan::Get(obj, Nan::New("approaches").ToLocalChecked()).ToLocalChecked(); + Napi::Value approaches = obj.Get("approaches"); if (approaches.IsEmpty()) return false; - if (!approaches->IsArray()) + if (!approaches.IsArray()) { - Nan::ThrowError("Approaches must be an arrays of strings"); + ThrowError(args.Env(), "Approaches must be an arrays of strings"); return false; } - auto approaches_array = v8::Local::Cast(approaches); + auto approaches_array = approaches.As(); - if (approaches_array->Length() != params->coordinates.size()) + if (approaches_array.Length() != params->coordinates.size()) { - Nan::ThrowError("Approaches array must have the same length as coordinates array"); + ThrowError(args.Env(), + "Approaches array must have the same length as coordinates array"); return false; } - for (uint32_t i = 0; i < approaches_array->Length(); ++i) + for (uint32_t i = 0; i < approaches_array.Length(); ++i) { - v8::Local approach_raw = Nan::Get(approaches_array, i).ToLocalChecked(); + Napi::Value approach_raw = approaches_array.Get(i); if (approach_raw.IsEmpty()) return false; - if (approach_raw->IsNull()) + if (approach_raw.IsNull()) { params->approaches.emplace_back(); } - else if (approach_raw->IsString()) + else if (approach_raw.IsString()) { - const Nan::Utf8String approach_utf8str(approach_raw); - std::string approach_str{*approach_utf8str, - *approach_utf8str + approach_utf8str.length()}; + std::string approach_str = approach_raw.ToString().Utf8Value(); if (approach_str == "curb") { params->approaches.push_back(osrm::Approach::CURB); @@ -496,69 +503,69 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &arg } else { - Nan::ThrowError("'approaches' param must be one of [curb, unrestricted]"); + ThrowError(args.Env(), + "'approaches' param must be one of [curb, unrestricted]"); return false; } } else { - Nan::ThrowError("Approach must be a string: [curb, unrestricted] or null"); + ThrowError(args.Env(), "Approach must be a string: [curb, unrestricted] or null"); return false; } } } - if (Nan::Has(obj, Nan::New("bearings").ToLocalChecked()).FromJust()) + if (obj.Has("bearings")) { - v8::Local bearings = - Nan::Get(obj, Nan::New("bearings").ToLocalChecked()).ToLocalChecked(); + Napi::Value bearings = obj.Get("bearings"); if (bearings.IsEmpty()) return false; - if (!bearings->IsArray()) + if (!bearings.IsArray()) { - Nan::ThrowError("Bearings must be an array of arrays of numbers"); + ThrowError(args.Env(), "Bearings must be an array of arrays of numbers"); return false; } - auto bearings_array = v8::Local::Cast(bearings); + auto bearings_array = bearings.As(); - if (bearings_array->Length() != params->coordinates.size()) + if (bearings_array.Length() != params->coordinates.size()) { - Nan::ThrowError("Bearings array must have the same length as coordinates array"); + ThrowError(args.Env(), "Bearings array must have the same length as coordinates array"); return false; } - for (uint32_t i = 0; i < bearings_array->Length(); ++i) + for (uint32_t i = 0; i < bearings_array.Length(); ++i) { - v8::Local bearing_raw = Nan::Get(bearings_array, i).ToLocalChecked(); + Napi::Value bearing_raw = bearings_array.Get(i); if (bearing_raw.IsEmpty()) return false; - if (bearing_raw->IsNull()) + if (bearing_raw.IsNull()) { params->bearings.emplace_back(); } - else if (bearing_raw->IsArray()) + else if (bearing_raw.IsArray()) { - auto bearing_pair = v8::Local::Cast(bearing_raw); - if (bearing_pair->Length() == 2) + auto bearing_pair = bearing_raw.As(); + if (bearing_pair.Length() == 2) { - if (!Nan::Get(bearing_pair, 0).ToLocalChecked()->IsNumber() || - !Nan::Get(bearing_pair, 1).ToLocalChecked()->IsNumber()) + if (!bearing_pair.Get(static_cast(0)).IsNumber() || + !bearing_pair.Get(static_cast(1)).IsNumber()) { - Nan::ThrowError("Bearing values need to be numbers in range 0..360"); + ThrowError(args.Env(), "Bearing values need to be numbers in range 0..360"); return false; } const auto bearing = - Nan::To(Nan::Get(bearing_pair, 0).ToLocalChecked()).FromJust(); + bearing_pair.Get(static_cast(0)).ToNumber().Int32Value(); const auto range = - Nan::To(Nan::Get(bearing_pair, 1).ToLocalChecked()).FromJust(); + bearing_pair.Get(static_cast(1)).ToNumber().Int32Value(); if (bearing < 0 || bearing > 360 || range < 0 || range > 180) { - Nan::ThrowError("Bearing values need to be in range 0..360, 0..180"); + ThrowError(args.Env(), "Bearing values need to be in range 0..360, 0..180"); return false; } @@ -567,192 +574,187 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &arg } else { - Nan::ThrowError("Bearing must be an array of [bearing, range] or null"); + ThrowError(args.Env(), "Bearing must be an array of [bearing, range] or null"); return false; } } else { - Nan::ThrowError("Bearing must be an array of [bearing, range] or null"); + ThrowError(args.Env(), "Bearing must be an array of [bearing, range] or null"); return false; } } } - if (Nan::Has(obj, Nan::New("hints").ToLocalChecked()).FromJust()) + if (obj.Has("hints")) { - v8::Local hints = - Nan::Get(obj, Nan::New("hints").ToLocalChecked()).ToLocalChecked(); + Napi::Value hints = obj.Get("hints"); if (hints.IsEmpty()) return false; - if (!hints->IsArray()) + if (!hints.IsArray()) { - Nan::ThrowError("Hints must be an array of strings/null"); + ThrowError(args.Env(), "Hints must be an array of strings/null"); return false; } - v8::Local hints_array = v8::Local::Cast(hints); + Napi::Array hints_array = hints.As(); - if (hints_array->Length() != params->coordinates.size()) + if (hints_array.Length() != params->coordinates.size()) { - Nan::ThrowError("Hints array must have the same length as coordinates array"); + ThrowError(args.Env(), "Hints array must have the same length as coordinates array"); return false; } - for (uint32_t i = 0; i < hints_array->Length(); ++i) + for (uint32_t i = 0; i < hints_array.Length(); ++i) { - v8::Local hint = Nan::Get(hints_array, i).ToLocalChecked(); + Napi::Value hint = hints_array.Get(i); if (hint.IsEmpty()) return false; - if (hint->IsString()) + if (hint.IsString()) { - if (Nan::To(hint).ToLocalChecked()->Length() == 0) + if (hint.ToString().Utf8Value().length() == 0) { - Nan::ThrowError("Hint cannot be an empty string"); + ThrowError(args.Env(), "Hint cannot be an empty string"); return false; } - params->hints.push_back(osrm::engine::Hint::FromBase64(*Nan::Utf8String(hint))); + params->hints.emplace_back( + osrm::engine::Hint::FromBase64(hint.ToString().Utf8Value())); } - else if (hint->IsNull()) + else if (hint.IsNull()) { params->hints.emplace_back(); } else { - Nan::ThrowError("Hint must be null or string"); + ThrowError(args.Env(), "Hint must be null or string"); return false; } } } - if (Nan::Has(obj, Nan::New("radiuses").ToLocalChecked()).FromJust()) + if (obj.Has("radiuses")) { - v8::Local radiuses = - Nan::Get(obj, Nan::New("radiuses").ToLocalChecked()).ToLocalChecked(); + Napi::Value radiuses = obj.Get("radiuses"); if (radiuses.IsEmpty()) return false; - if (!radiuses->IsArray()) + if (!radiuses.IsArray()) { - Nan::ThrowError("Radiuses must be an array of non-negative doubles or null"); + ThrowError(args.Env(), "Radiuses must be an array of non-negative doubles or null"); return false; } - v8::Local radiuses_array = v8::Local::Cast(radiuses); + Napi::Array radiuses_array = radiuses.As(); - if (radiuses_array->Length() != params->coordinates.size()) + if (radiuses_array.Length() != params->coordinates.size()) { - Nan::ThrowError("Radiuses array must have the same length as coordinates array"); + ThrowError(args.Env(), "Radiuses array must have the same length as coordinates array"); return false; } - for (uint32_t i = 0; i < radiuses_array->Length(); ++i) + for (uint32_t i = 0; i < radiuses_array.Length(); ++i) { - v8::Local radius = Nan::Get(radiuses_array, i).ToLocalChecked(); + Napi::Value radius = radiuses_array.Get(i); if (radius.IsEmpty()) return false; - if (radius->IsNull()) + if (radius.IsNull()) { params->radiuses.emplace_back(); } - else if (radius->IsNumber() && Nan::To(radius).FromJust() >= 0) + else if (radius.IsNumber() && radius.ToNumber().DoubleValue() >= 0) { - params->radiuses.push_back(Nan::To(radius).FromJust()); + params->radiuses.push_back(radius.ToNumber().DoubleValue()); } else { - Nan::ThrowError("Radius must be non-negative double or null"); + ThrowError(args.Env(), "Radius must be non-negative double or null"); return false; } } } - if (Nan::Has(obj, Nan::New("generate_hints").ToLocalChecked()).FromJust()) + if (obj.Has("generate_hints")) { - v8::Local generate_hints = - Nan::Get(obj, Nan::New("generate_hints").ToLocalChecked()).ToLocalChecked(); + Napi::Value generate_hints = obj.Get("generate_hints"); if (generate_hints.IsEmpty()) return false; - if (!generate_hints->IsBoolean()) + if (!generate_hints.IsBoolean()) { - Nan::ThrowError("generate_hints must be of type Boolean"); + ThrowError(args.Env(), "generate_hints must be of type Boolean"); return false; } - params->generate_hints = Nan::To(generate_hints).FromJust(); + params->generate_hints = generate_hints.ToBoolean().Value(); } - if (Nan::Has(obj, Nan::New("skip_waypoints").ToLocalChecked()).FromJust()) + if (obj.Has("skip_waypoints")) { - v8::Local skip_waypoints = - Nan::Get(obj, Nan::New("skip_waypoints").ToLocalChecked()).ToLocalChecked(); + Napi::Value skip_waypoints = obj.Get("skip_waypoints"); if (skip_waypoints.IsEmpty()) return false; - if (!skip_waypoints->IsBoolean()) + if (!skip_waypoints.IsBoolean()) { - Nan::ThrowError("skip_waypoints must be of type Boolean"); + ThrowError(args.Env(), "skip_waypoints must be of type Boolean"); return false; } - params->skip_waypoints = Nan::To(skip_waypoints).FromJust(); + params->skip_waypoints = skip_waypoints.ToBoolean().Value(); } - if (Nan::Has(obj, Nan::New("exclude").ToLocalChecked()).FromJust()) + if (obj.Has("exclude")) { - v8::Local exclude = - Nan::Get(obj, Nan::New("exclude").ToLocalChecked()).ToLocalChecked(); + Napi::Value exclude = obj.Get("exclude"); if (exclude.IsEmpty()) return false; - if (!exclude->IsArray()) + if (!exclude.IsArray()) { - Nan::ThrowError("Exclude must be an array of strings or empty"); + ThrowError(args.Env(), "Exclude must be an array of strings or empty"); return false; } - v8::Local exclude_array = v8::Local::Cast(exclude); + Napi::Array exclude_array = exclude.As(); - for (uint32_t i = 0; i < exclude_array->Length(); ++i) + for (uint32_t i = 0; i < exclude_array.Length(); ++i) { - v8::Local class_name = Nan::Get(exclude_array, i).ToLocalChecked(); + Napi::Value class_name = exclude_array.Get(i); if (class_name.IsEmpty()) return false; - if (class_name->IsString()) + if (class_name.IsString()) { - std::string class_name_str = *Nan::Utf8String(class_name); - params->exclude.emplace_back(class_name_str); + std::string class_name_str = class_name.ToString().Utf8Value(); + params->exclude.emplace_back(std::move(class_name_str)); } else { - Nan::ThrowError("Exclude must be an array of strings or empty"); + ThrowError(args.Env(), "Exclude must be an array of strings or empty"); return false; } } } - if (Nan::Has(obj, Nan::New("format").ToLocalChecked()).FromJust()) + if (obj.Has("format")) { - v8::Local format = - Nan::Get(obj, Nan::New("format").ToLocalChecked()).ToLocalChecked(); + Napi::Value format = obj.Get("format"); if (format.IsEmpty()) { return false; } - if (!format->IsString()) + if (!format.IsString()) { - Nan::ThrowError("format must be a string: \"json\" or \"flatbuffers\""); + ThrowError(args.Env(), "format must be a string: \"json\" or \"flatbuffers\""); return false; } - std::string format_str = *Nan::Utf8String(format); + std::string format_str = format.ToString().Utf8Value(); if (format_str == "json") { params->format = osrm::engine::api::BaseParameters::OutputFormatType::JSON; @@ -763,25 +765,24 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &arg } else { - Nan::ThrowError("format must be a string: \"json\" or \"flatbuffers\""); + ThrowError(args.Env(), "format must be a string: \"json\" or \"flatbuffers\""); return false; } } - if (Nan::Has(obj, Nan::New("snapping").ToLocalChecked()).FromJust()) + if (obj.Has("snapping")) { - v8::Local snapping = - Nan::Get(obj, Nan::New("snapping").ToLocalChecked()).ToLocalChecked(); + Napi::Value snapping = obj.Get("snapping"); if (snapping.IsEmpty()) return false; - if (!snapping->IsString()) + if (!snapping.IsString()) { - Nan::ThrowError("Snapping must be a string: [default, any]"); + ThrowError(args.Env(), "Snapping must be a string: [default, any]"); return false; } - const Nan::Utf8String snapping_utf8str(snapping); - std::string snapping_str{*snapping_utf8str, *snapping_utf8str + snapping_utf8str.length()}; + + std::string snapping_str = snapping.ToString().Utf8Value(); if (snapping_str == "default") { @@ -793,7 +794,7 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &arg } else { - Nan::ThrowError("'snapping' param must be one of [default, any]"); + ThrowError(args.Env(), "'snapping' param must be one of [default, any]"); return false; } } @@ -802,47 +803,44 @@ inline bool argumentsToParameter(const Nan::FunctionCallbackInfo &arg } template -inline bool parseCommonParameters(const v8::Local &obj, ParamType ¶ms) +inline bool parseCommonParameters(const Napi::Object &obj, ParamType ¶ms) { - if (Nan::Has(obj, Nan::New("steps").ToLocalChecked()).FromJust()) + if (obj.Has("steps")) { - auto steps = Nan::Get(obj, Nan::New("steps").ToLocalChecked()).ToLocalChecked(); + auto steps = obj.Get("steps"); if (steps.IsEmpty()) return false; - if (steps->IsBoolean()) + if (steps.IsBoolean()) { - params->steps = Nan::To(steps).FromJust(); + params->steps = steps.ToBoolean().Value(); } else { - Nan::ThrowError("'steps' param must be a boolean"); + ThrowError(obj.Env(), "'steps' param must be a boolean"); return false; } } - if (Nan::Has(obj, Nan::New("annotations").ToLocalChecked()).FromJust()) + if (obj.Has("annotations")) { - auto annotations = Nan::Get(obj, Nan::New("annotations").ToLocalChecked()).ToLocalChecked(); + auto annotations = obj.Get("annotations"); if (annotations.IsEmpty()) return false; - if (annotations->IsBoolean()) + if (annotations.IsBoolean()) { - params->annotations = Nan::To(annotations).FromJust(); + params->annotations = annotations.ToBoolean().Value(); params->annotations_type = params->annotations ? osrm::RouteParameters::AnnotationsType::All : osrm::RouteParameters::AnnotationsType::None; } - else if (annotations->IsArray()) + else if (annotations.IsArray()) { - v8::Local annotations_array = v8::Local::Cast(annotations); - for (std::size_t i = 0; i < annotations_array->Length(); i++) + Napi::Array annotations_array = annotations.As(); + for (std::size_t i = 0; i < annotations_array.Length(); i++) { - const Nan::Utf8String annotations_utf8str( - Nan::Get(annotations_array, i).ToLocalChecked()); - std::string annotations_str{*annotations_utf8str, - *annotations_utf8str + annotations_utf8str.length()}; + std::string annotations_str = annotations_array.Get(i).ToString().Utf8Value(); if (annotations_str == "duration") { @@ -876,7 +874,7 @@ inline bool parseCommonParameters(const v8::Local &obj, ParamType &p } else { - Nan::ThrowError("this 'annotations' param is not supported"); + ThrowError(obj.Env(), "this 'annotations' param is not supported"); return false; } @@ -886,26 +884,23 @@ inline bool parseCommonParameters(const v8::Local &obj, ParamType &p } else { - Nan::ThrowError("this 'annotations' param is not supported"); + ThrowError(obj.Env(), "this 'annotations' param is not supported"); return false; } } - if (Nan::Has(obj, Nan::New("geometries").ToLocalChecked()).FromJust()) + if (obj.Has("geometries")) { - v8::Local geometries = - Nan::Get(obj, Nan::New("geometries").ToLocalChecked()).ToLocalChecked(); + Napi::Value geometries = obj.Get("geometries"); if (geometries.IsEmpty()) return false; - if (!geometries->IsString()) + if (!geometries.IsString()) { - Nan::ThrowError("Geometries must be a string: [polyline, polyline6, geojson]"); + ThrowError(obj.Env(), "Geometries must be a string: [polyline, polyline6, geojson]"); return false; } - const Nan::Utf8String geometries_utf8str(geometries); - std::string geometries_str{*geometries_utf8str, - *geometries_utf8str + geometries_utf8str.length()}; + std::string geometries_str = geometries.ToString().Utf8Value(); if (geometries_str == "polyline") { @@ -921,26 +916,25 @@ inline bool parseCommonParameters(const v8::Local &obj, ParamType &p } else { - Nan::ThrowError("'geometries' param must be one of [polyline, polyline6, geojson]"); + ThrowError(obj.Env(), + "'geometries' param must be one of [polyline, polyline6, geojson]"); return false; } } - if (Nan::Has(obj, Nan::New("overview").ToLocalChecked()).FromJust()) + if (obj.Has("overview")) { - v8::Local overview = - Nan::Get(obj, Nan::New("overview").ToLocalChecked()).ToLocalChecked(); + Napi::Value overview = obj.Get("overview"); if (overview.IsEmpty()) return false; - if (!overview->IsString()) + if (!overview.IsString()) { - Nan::ThrowError("Overview must be a string: [simplified, full, false]"); + ThrowError(obj.Env(), "Overview must be a string: [simplified, full, false]"); return false; } - const Nan::Utf8String overview_utf8str(overview); - std::string overview_str{*overview_utf8str, *overview_utf8str + overview_utf8str.length()}; + std::string overview_str = overview.ToString().Utf8Value(); if (overview_str == "simplified") { @@ -956,7 +950,7 @@ inline bool parseCommonParameters(const v8::Local &obj, ParamType &p } else { - Nan::ThrowError("'overview' param must be one of [simplified, full, false]"); + ThrowError(obj.Env(), "'overview' param must be one of [simplified, full, false]"); return false; } } @@ -965,38 +959,36 @@ inline bool parseCommonParameters(const v8::Local &obj, ParamType &p } inline PluginParameters argumentsToPluginParameters( - const Nan::FunctionCallbackInfo &args, + const Napi::CallbackInfo &args, const boost::optional &output_format = {}) { - if (args.Length() < 3 || !args[1]->IsObject()) + if (args.Length() < 3 || !args[1].IsObject()) { // output to buffer by default for Flatbuffers return {output_format == osrm::engine::api::BaseParameters::OutputFormatType::FLATBUFFERS}; } - v8::Local obj = Nan::To(args[1]).ToLocalChecked(); - if (Nan::Has(obj, Nan::New("format").ToLocalChecked()).FromJust()) + Napi::Object obj = args[1].As(); + if (obj.Has("format")) { - v8::Local format = - Nan::Get(obj, Nan::New("format").ToLocalChecked()).ToLocalChecked(); + Napi::Value format = obj.Get("format"); if (format.IsEmpty()) { return {}; } - if (!format->IsString()) + if (!format.IsString()) { - Nan::ThrowError("format must be a string: \"object\" or \"buffer\""); + ThrowError(args.Env(), "format must be a string: \"object\" or \"buffer\""); return {}; } - const Nan::Utf8String format_utf8str(format); - std::string format_str{*format_utf8str, *format_utf8str + format_utf8str.length()}; + std::string format_str = format.ToString().Utf8Value(); if (format_str == "object") { if (output_format == osrm::engine::api::BaseParameters::OutputFormatType::FLATBUFFERS) { - Nan::ThrowError("Flatbuffers result can only output to buffer."); + ThrowError(args.Env(), "Flatbuffers result can only output to buffer."); return {true}; } return {false}; @@ -1010,13 +1002,14 @@ inline PluginParameters argumentsToPluginParameters( if (output_format && output_format != osrm::engine::api::BaseParameters::OutputFormatType::JSON) { - Nan::ThrowError("Deprecated `json_buffer` can only be used with JSON format"); + ThrowError(args.Env(), + "Deprecated `json_buffer` can only be used with JSON format"); } return {true}; } else { - Nan::ThrowError("format must be a string: \"object\" or \"buffer\""); + ThrowError(args.Env(), "format must be a string: \"object\" or \"buffer\""); return {}; } } @@ -1025,112 +1018,111 @@ inline PluginParameters argumentsToPluginParameters( return {output_format == osrm::engine::api::BaseParameters::OutputFormatType::FLATBUFFERS}; } -inline route_parameters_ptr -argumentsToRouteParameter(const Nan::FunctionCallbackInfo &args, - bool requires_multiple_coordinates) +inline route_parameters_ptr argumentsToRouteParameter(const Napi::CallbackInfo &args, + bool requires_multiple_coordinates) { route_parameters_ptr params = std::make_unique(); bool has_base_params = argumentsToParameter(args, params, requires_multiple_coordinates); if (!has_base_params) return route_parameters_ptr(); - v8::Local obj = Nan::To(args[0]).ToLocalChecked(); + Napi::Object obj = args[0].As(); - if (Nan::Has(obj, Nan::New("continue_straight").ToLocalChecked()).FromJust()) + if (obj.Has("continue_straight")) { - auto value = Nan::Get(obj, Nan::New("continue_straight").ToLocalChecked()).ToLocalChecked(); + auto value = obj.Get("continue_straight"); if (value.IsEmpty()) return route_parameters_ptr(); - if (!value->IsBoolean() && !value->IsNull()) + if (!value.IsBoolean() && !value.IsNull()) { - Nan::ThrowError("'continue_straight' param must be boolean or null"); + ThrowError(args.Env(), "'continue_straight' param must be boolean or null"); return route_parameters_ptr(); } - if (value->IsBoolean()) + if (value.IsBoolean()) { - params->continue_straight = Nan::To(value).FromJust(); + params->continue_straight = value.ToBoolean().Value(); } } - if (Nan::Has(obj, Nan::New("alternatives").ToLocalChecked()).FromJust()) + if (obj.Has("alternatives")) { - auto value = Nan::Get(obj, Nan::New("alternatives").ToLocalChecked()).ToLocalChecked(); + auto value = obj.Get("alternatives"); if (value.IsEmpty()) return route_parameters_ptr(); - if (value->IsBoolean()) + if (value.IsBoolean()) { - params->alternatives = Nan::To(value).FromJust(); - params->number_of_alternatives = Nan::To(value).FromJust() ? 1u : 0u; + params->alternatives = value.ToBoolean().Value(); + params->number_of_alternatives = value.ToBoolean().Value() ? 1u : 0u; } - else if (value->IsNumber()) + else if (value.IsNumber()) { - params->alternatives = Nan::To(value).FromJust(); - params->number_of_alternatives = Nan::To(value).FromJust(); + params->alternatives = value.ToBoolean().Value(); + params->number_of_alternatives = value.ToNumber().Int32Value(); } else { - Nan::ThrowError("'alternatives' param must be boolean or number"); + ThrowError(args.Env(), "'alternatives' param must be boolean or number"); return route_parameters_ptr(); } } - if (Nan::Has(obj, Nan::New("waypoints").ToLocalChecked()).FromJust()) + if (obj.Has("waypoints")) { - v8::Local waypoints = - Nan::Get(obj, Nan::New("waypoints").ToLocalChecked()).ToLocalChecked(); + Napi::Value waypoints = obj.Get("waypoints"); if (waypoints.IsEmpty()) return route_parameters_ptr(); // must be array - if (!waypoints->IsArray()) + if (!waypoints.IsArray()) { - Nan::ThrowError( + ThrowError( + args.Env(), "Waypoints must be an array of integers corresponding to the input coordinates."); return route_parameters_ptr(); } - auto waypoints_array = v8::Local::Cast(waypoints); + auto waypoints_array = waypoints.As(); // must have at least two elements - if (waypoints_array->Length() < 2) + if (waypoints_array.Length() < 2) { - Nan::ThrowError("At least two waypoints must be provided"); + ThrowError(args.Env(), "At least two waypoints must be provided"); return route_parameters_ptr(); } auto coords_size = params->coordinates.size(); - auto waypoints_array_size = waypoints_array->Length(); + auto waypoints_array_size = waypoints_array.Length(); const auto first_index = - Nan::To(Nan::Get(waypoints_array, 0).ToLocalChecked()).FromJust(); + waypoints_array.Get(static_cast(0)).ToNumber().Uint32Value(); const auto last_index = - Nan::To( - Nan::Get(waypoints_array, waypoints_array_size - 1).ToLocalChecked()) - .FromJust(); + waypoints_array.Get(waypoints_array_size - 1).ToNumber().Uint32Value(); if (first_index != 0 || last_index != coords_size - 1) { - Nan::ThrowError("First and last waypoints values must correspond to first and last " - "coordinate indices"); + ThrowError(args.Env(), + "First and last waypoints values must correspond to first and last " + "coordinate indices"); return route_parameters_ptr(); } for (uint32_t i = 0; i < waypoints_array_size; ++i) { - v8::Local waypoint_value = Nan::Get(waypoints_array, i).ToLocalChecked(); + Napi::Value waypoint_value = waypoints_array.Get(i); // all elements must be numbers - if (!waypoint_value->IsNumber()) + if (!waypoint_value.IsNumber()) { - Nan::ThrowError("Waypoint values must be an array of integers"); + ThrowError(args.Env(), "Waypoint values must be an array of integers"); return route_parameters_ptr(); } // check that the waypoint index corresponds with an inpute coordinate - const auto index = Nan::To(waypoint_value).FromJust(); + const auto index = waypoint_value.ToNumber().Uint32Value(); if (index >= coords_size) { - Nan::ThrowError("Waypoints must correspond with the index of an input coordinate"); + ThrowError(args.Env(), + "Waypoints must correspond with the index of an input coordinate"); return route_parameters_ptr(); } - params->waypoints.emplace_back(Nan::To(waypoint_value).FromJust()); + params->waypoints.emplace_back(index); } if (!params->waypoints.empty()) @@ -1139,7 +1131,7 @@ argumentsToRouteParameter(const Nan::FunctionCallbackInfo &args, { if (params->waypoints[i] >= params->waypoints[i + 1]) { - Nan::ThrowError("Waypoints must be supplied in increasing order"); + ThrowError(args.Env(), "Waypoints must be supplied in increasing order"); return route_parameters_ptr(); } } @@ -1155,221 +1147,214 @@ argumentsToRouteParameter(const Nan::FunctionCallbackInfo &args, return params; } -inline tile_parameters_ptr -argumentsToTileParameters(const Nan::FunctionCallbackInfo &args, bool /*unused*/) +inline tile_parameters_ptr argumentsToTileParameters(const Napi::CallbackInfo &args, + bool /*unused*/) { tile_parameters_ptr params = std::make_unique(); if (args.Length() < 2) { - Nan::ThrowTypeError("Coordinate object and callback required"); + ThrowTypeError(args.Env(), "Coordinate object and callback required"); return tile_parameters_ptr(); } - if (!args[0]->IsArray()) + if (!args[0].IsArray()) { - Nan::ThrowTypeError("Parameter must be an array [x, y, z]"); + ThrowTypeError(args.Env(), "Parameter must be an array [x, y, z]"); return tile_parameters_ptr(); } - v8::Local array = v8::Local::Cast(args[0]); + Napi::Array array = args[0].As(); - if (array->Length() != 3) + if (array.Length() != 3) { - Nan::ThrowTypeError("Parameter must be an array [x, y, z]"); + ThrowTypeError(args.Env(), "Parameter must be an array [x, y, z]"); return tile_parameters_ptr(); } - v8::Local x = Nan::Get(array, 0).ToLocalChecked(); - v8::Local y = Nan::Get(array, 1).ToLocalChecked(); - v8::Local z = Nan::Get(array, 2).ToLocalChecked(); + Napi::Value x = array.Get(static_cast(0)); + Napi::Value y = array.Get(static_cast(1)); + Napi::Value z = array.Get(static_cast(2)); if (x.IsEmpty() || y.IsEmpty() || z.IsEmpty()) return tile_parameters_ptr(); - if (!x->IsUint32() && !x->IsUndefined()) + if (!IsUnsignedInteger(x) && !x.IsUndefined()) { - Nan::ThrowError("Tile x coordinate must be unsigned interger"); + ThrowError(args.Env(), "Tile x coordinate must be unsigned interger"); return tile_parameters_ptr(); } - if (!y->IsUint32() && !y->IsUndefined()) + if (!IsUnsignedInteger(y) && !y.IsUndefined()) { - Nan::ThrowError("Tile y coordinate must be unsigned interger"); + ThrowError(args.Env(), "Tile y coordinate must be unsigned interger"); return tile_parameters_ptr(); } - if (!z->IsUint32() && !z->IsUndefined()) + if (!IsUnsignedInteger(z) && !z.IsUndefined()) { - Nan::ThrowError("Tile z coordinate must be unsigned interger"); + ThrowError(args.Env(), "Tile z coordinate must be unsigned interger"); return tile_parameters_ptr(); } - params->x = Nan::To(x).FromJust(); - params->y = Nan::To(y).FromJust(); - params->z = Nan::To(z).FromJust(); + params->x = x.ToNumber().Uint32Value(); + params->y = y.ToNumber().Uint32Value(); + params->z = z.ToNumber().Uint32Value(); if (!params->IsValid()) { - Nan::ThrowError("Invalid tile coordinates"); + ThrowError(args.Env(), "Invalid tile coordinates"); return tile_parameters_ptr(); } return params; } -inline nearest_parameters_ptr -argumentsToNearestParameter(const Nan::FunctionCallbackInfo &args, - bool requires_multiple_coordinates) +inline nearest_parameters_ptr argumentsToNearestParameter(const Napi::CallbackInfo &args, + bool requires_multiple_coordinates) { nearest_parameters_ptr params = std::make_unique(); bool has_base_params = argumentsToParameter(args, params, requires_multiple_coordinates); if (!has_base_params) return nearest_parameters_ptr(); - v8::Local obj = Nan::To(args[0]).ToLocalChecked(); + Napi::Object obj = args[0].As(); if (obj.IsEmpty()) return nearest_parameters_ptr(); - if (Nan::Has(obj, Nan::New("number").ToLocalChecked()).FromJust()) + if (obj.Has("number")) { - v8::Local number = - Nan::Get(obj, Nan::New("number").ToLocalChecked()).ToLocalChecked(); + Napi::Value number = obj.Get("number"); - if (!number->IsUint32()) + if (!IsUnsignedInteger(number)) { - Nan::ThrowError("Number must be an integer greater than or equal to 1"); + ThrowError(args.Env(), "Number must be an integer greater than or equal to 1"); return nearest_parameters_ptr(); } else { - unsigned number_value = Nan::To(number).FromJust(); + unsigned number_value = number.ToNumber().Uint32Value(); if (number_value < 1) { - Nan::ThrowError("Number must be an integer greater than or equal to 1"); + ThrowError(args.Env(), "Number must be an integer greater than or equal to 1"); return nearest_parameters_ptr(); } - params->number_of_results = Nan::To(number).FromJust(); + params->number_of_results = number_value; } } return params; } -inline table_parameters_ptr -argumentsToTableParameter(const Nan::FunctionCallbackInfo &args, - bool requires_multiple_coordinates) +inline table_parameters_ptr argumentsToTableParameter(const Napi::CallbackInfo &args, + bool requires_multiple_coordinates) { table_parameters_ptr params = std::make_unique(); bool has_base_params = argumentsToParameter(args, params, requires_multiple_coordinates); if (!has_base_params) return table_parameters_ptr(); - v8::Local obj = Nan::To(args[0]).ToLocalChecked(); + Napi::Object obj = args[0].As(); if (obj.IsEmpty()) return table_parameters_ptr(); - if (Nan::Has(obj, Nan::New("sources").ToLocalChecked()).FromJust()) + if (obj.Has("sources")) { - v8::Local sources = - Nan::Get(obj, Nan::New("sources").ToLocalChecked()).ToLocalChecked(); + Napi::Value sources = obj.Get("sources"); if (sources.IsEmpty()) return table_parameters_ptr(); - if (!sources->IsArray()) + if (!sources.IsArray()) { - Nan::ThrowError("Sources must be an array of indices (or undefined)"); + ThrowError(args.Env(), "Sources must be an array of indices (or undefined)"); return table_parameters_ptr(); } - v8::Local sources_array = v8::Local::Cast(sources); - for (uint32_t i = 0; i < sources_array->Length(); ++i) + Napi::Array sources_array = sources.As(); + for (uint32_t i = 0; i < sources_array.Length(); ++i) { - v8::Local source = Nan::Get(sources_array, i).ToLocalChecked(); + Napi::Value source = sources_array.Get(i); if (source.IsEmpty()) return table_parameters_ptr(); - if (source->IsUint32()) + if (IsUnsignedInteger(source)) { - size_t source_value = Nan::To(source).FromJust(); + size_t source_value = source.ToNumber().Uint32Value(); if (source_value >= params->coordinates.size()) { - Nan::ThrowError("Source indices must be less than the number of coordinates"); + ThrowError(args.Env(), + "Source indices must be less than the number of coordinates"); return table_parameters_ptr(); } - params->sources.push_back(Nan::To(source).FromJust()); + params->sources.push_back(source.ToNumber().Uint32Value()); } else { - Nan::ThrowError("Source must be an integer"); + ThrowError(args.Env(), "Source must be an integer"); return table_parameters_ptr(); } } } - if (Nan::Has(obj, Nan::New("destinations").ToLocalChecked()).FromJust()) + if (obj.Has("destinations")) { - v8::Local destinations = - Nan::Get(obj, Nan::New("destinations").ToLocalChecked()).ToLocalChecked(); + Napi::Value destinations = obj.Get("destinations"); if (destinations.IsEmpty()) return table_parameters_ptr(); - if (!destinations->IsArray()) + if (!destinations.IsArray()) { - Nan::ThrowError("Destinations must be an array of indices (or undefined)"); + ThrowError(args.Env(), "Destinations must be an array of indices (or undefined)"); return table_parameters_ptr(); } - v8::Local destinations_array = v8::Local::Cast(destinations); - for (uint32_t i = 0; i < destinations_array->Length(); ++i) + Napi::Array destinations_array = destinations.As(); + for (uint32_t i = 0; i < destinations_array.Length(); ++i) { - v8::Local destination = Nan::Get(destinations_array, i).ToLocalChecked(); + Napi::Value destination = destinations_array.Get(i); if (destination.IsEmpty()) return table_parameters_ptr(); - if (destination->IsUint32()) + if (IsUnsignedInteger(destination)) { - size_t destination_value = Nan::To(destination).FromJust(); + size_t destination_value = destination.ToNumber().Uint32Value(); if (destination_value >= params->coordinates.size()) { - Nan::ThrowError("Destination indices must be less than the number " - "of coordinates"); + ThrowError(args.Env(), + "Destination indices must be less than the number " + "of coordinates"); return table_parameters_ptr(); } - params->destinations.push_back(Nan::To(destination).FromJust()); + params->destinations.push_back(destination_value); } else { - Nan::ThrowError("Destination must be an integer"); + ThrowError(args.Env(), "Destination must be an integer"); return table_parameters_ptr(); } } } - if (Nan::Has(obj, Nan::New("annotations").ToLocalChecked()).FromJust()) + if (obj.Has("annotations")) { - v8::Local annotations = - Nan::Get(obj, Nan::New("annotations").ToLocalChecked()).ToLocalChecked(); + Napi::Value annotations = obj.Get("annotations"); if (annotations.IsEmpty()) return table_parameters_ptr(); - if (!annotations->IsArray()) + if (!annotations.IsArray()) { - Nan::ThrowError( - "Annotations must an array containing 'duration' or 'distance', or both"); + ThrowError(args.Env(), + "Annotations must an array containing 'duration' or 'distance', or both"); return table_parameters_ptr(); } params->annotations = osrm::TableParameters::AnnotationsType::None; - v8::Local annotations_array = v8::Local::Cast(annotations); - for (std::size_t i = 0; i < annotations_array->Length(); ++i) + Napi::Array annotations_array = annotations.As(); + for (std::size_t i = 0; i < annotations_array.Length(); ++i) { - const Nan::Utf8String annotations_utf8str( - Nan::Get(annotations_array, i).ToLocalChecked()); - std::string annotations_str{*annotations_utf8str, - *annotations_utf8str + annotations_utf8str.length()}; + std::string annotations_str = annotations_array.Get(i).ToString().Utf8Value(); if (annotations_str == "duration") { @@ -1383,43 +1368,41 @@ argumentsToTableParameter(const Nan::FunctionCallbackInfo &args, } else { - Nan::ThrowError("this 'annotations' param is not supported"); + ThrowError(args.Env(), "this 'annotations' param is not supported"); return table_parameters_ptr(); } } } - if (Nan::Has(obj, Nan::New("fallback_speed").ToLocalChecked()).FromJust()) + if (obj.Has("fallback_speed")) { - auto fallback_speed = - Nan::Get(obj, Nan::New("fallback_speed").ToLocalChecked()).ToLocalChecked(); + auto fallback_speed = obj.Get("fallback_speed"); - if (!fallback_speed->IsNumber()) + if (!fallback_speed.IsNumber()) { - Nan::ThrowError("fallback_speed must be a number"); + ThrowError(args.Env(), "fallback_speed must be a number"); return table_parameters_ptr(); } - else if (Nan::To(fallback_speed).FromJust() <= 0) + else if (fallback_speed.ToNumber().DoubleValue() <= 0) { - Nan::ThrowError("fallback_speed must be > 0"); + ThrowError(args.Env(), "fallback_speed must be > 0"); return table_parameters_ptr(); } - params->fallback_speed = Nan::To(fallback_speed).FromJust(); + params->fallback_speed = fallback_speed.ToNumber().DoubleValue(); } - if (Nan::Has(obj, Nan::New("fallback_coordinate").ToLocalChecked()).FromJust()) + if (obj.Has("fallback_coordinate")) { - auto fallback_coordinate = - Nan::Get(obj, Nan::New("fallback_coordinate").ToLocalChecked()).ToLocalChecked(); + auto fallback_coordinate = obj.Get("fallback_coordinate"); - if (!fallback_coordinate->IsString()) + if (!fallback_coordinate.IsString()) { - Nan::ThrowError("fallback_coordinate must be a string: [input, snapped]"); + ThrowError(args.Env(), "fallback_coordinate must be a string: [input, snapped]"); return table_parameters_ptr(); } - std::string fallback_coordinate_str = *Nan::Utf8String(fallback_coordinate); + std::string fallback_coordinate_str = fallback_coordinate.ToString().Utf8Value(); if (fallback_coordinate_str == "snapped") { @@ -1432,43 +1415,41 @@ argumentsToTableParameter(const Nan::FunctionCallbackInfo &args, } else { - Nan::ThrowError("'fallback_coordinate' param must be one of [input, snapped]"); + ThrowError(args.Env(), "'fallback_coordinate' param must be one of [input, snapped]"); return table_parameters_ptr(); } } - if (Nan::Has(obj, Nan::New("scale_factor").ToLocalChecked()).FromJust()) + if (obj.Has("scale_factor")) { - auto scale_factor = - Nan::Get(obj, Nan::New("scale_factor").ToLocalChecked()).ToLocalChecked(); + auto scale_factor = obj.Get("scale_factor"); - if (!scale_factor->IsNumber()) + if (!scale_factor.IsNumber()) { - Nan::ThrowError("scale_factor must be a number"); + ThrowError(args.Env(), "scale_factor must be a number"); return table_parameters_ptr(); } - else if (Nan::To(scale_factor).FromJust() <= 0) + else if (scale_factor.ToNumber().DoubleValue() <= 0) { - Nan::ThrowError("scale_factor must be > 0"); + ThrowError(args.Env(), "scale_factor must be > 0"); return table_parameters_ptr(); } - params->scale_factor = Nan::To(scale_factor).FromJust(); + params->scale_factor = scale_factor.ToNumber().DoubleValue(); } return params; } -inline trip_parameters_ptr -argumentsToTripParameter(const Nan::FunctionCallbackInfo &args, - bool requires_multiple_coordinates) +inline trip_parameters_ptr argumentsToTripParameter(const Napi::CallbackInfo &args, + bool requires_multiple_coordinates) { trip_parameters_ptr params = std::make_unique(); bool has_base_params = argumentsToParameter(args, params, requires_multiple_coordinates); if (!has_base_params) return trip_parameters_ptr(); - v8::Local obj = Nan::To(args[0]).ToLocalChecked(); + Napi::Object obj = args[0].As(); bool parsedSuccessfully = parseCommonParameters(obj, params); if (!parsedSuccessfully) @@ -1476,37 +1457,36 @@ argumentsToTripParameter(const Nan::FunctionCallbackInfo &args, return trip_parameters_ptr(); } - if (Nan::Has(obj, Nan::New("roundtrip").ToLocalChecked()).FromJust()) + if (obj.Has("roundtrip")) { - auto roundtrip = Nan::Get(obj, Nan::New("roundtrip").ToLocalChecked()).ToLocalChecked(); + auto roundtrip = obj.Get("roundtrip"); if (roundtrip.IsEmpty()) return trip_parameters_ptr(); - if (roundtrip->IsBoolean()) + if (roundtrip.IsBoolean()) { - params->roundtrip = Nan::To(roundtrip).FromJust(); + params->roundtrip = roundtrip.ToBoolean().Value(); } else { - Nan::ThrowError("'roundtrip' param must be a boolean"); + ThrowError(args.Env(), "'roundtrip' param must be a boolean"); return trip_parameters_ptr(); } } - if (Nan::Has(obj, Nan::New("source").ToLocalChecked()).FromJust()) + if (obj.Has("source")) { - v8::Local source = - Nan::Get(obj, Nan::New("source").ToLocalChecked()).ToLocalChecked(); + Napi::Value source = obj.Get("source"); if (source.IsEmpty()) return trip_parameters_ptr(); - if (!source->IsString()) + if (!source.IsString()) { - Nan::ThrowError("Source must be a string: [any, first]"); + ThrowError(args.Env(), "Source must be a string: [any, first]"); return trip_parameters_ptr(); } - std::string source_str = *Nan::Utf8String(source); + std::string source_str = source.ToString().Utf8Value(); if (source_str == "first") { @@ -1518,25 +1498,24 @@ argumentsToTripParameter(const Nan::FunctionCallbackInfo &args, } else { - Nan::ThrowError("'source' param must be one of [any, first]"); + ThrowError(args.Env(), "'source' param must be one of [any, first]"); return trip_parameters_ptr(); } } - if (Nan::Has(obj, Nan::New("destination").ToLocalChecked()).FromJust()) + if (obj.Has("destination")) { - v8::Local destination = - Nan::Get(obj, Nan::New("destination").ToLocalChecked()).ToLocalChecked(); + Napi::Value destination = obj.Get("destination"); if (destination.IsEmpty()) return trip_parameters_ptr(); - if (!destination->IsString()) + if (!destination.IsString()) { - Nan::ThrowError("Destination must be a string: [any, last]"); + ThrowError(args.Env(), "Destination must be a string: [any, last]"); return trip_parameters_ptr(); } - std::string destination_str = *Nan::Utf8String(destination); + std::string destination_str = destination.ToString().Utf8Value(); if (destination_str == "last") { @@ -1548,7 +1527,7 @@ argumentsToTripParameter(const Nan::FunctionCallbackInfo &args, } else { - Nan::ThrowError("'destination' param must be one of [any, last]"); + ThrowError(args.Env(), "'destination' param must be one of [any, last]"); return trip_parameters_ptr(); } } @@ -1556,69 +1535,66 @@ argumentsToTripParameter(const Nan::FunctionCallbackInfo &args, return params; } -inline match_parameters_ptr -argumentsToMatchParameter(const Nan::FunctionCallbackInfo &args, - bool requires_multiple_coordinates) +inline match_parameters_ptr argumentsToMatchParameter(const Napi::CallbackInfo &args, + bool requires_multiple_coordinates) { match_parameters_ptr params = std::make_unique(); bool has_base_params = argumentsToParameter(args, params, requires_multiple_coordinates); if (!has_base_params) return match_parameters_ptr(); - v8::Local obj = Nan::To(args[0]).ToLocalChecked(); + Napi::Object obj = args[0].As(); - if (Nan::Has(obj, Nan::New("timestamps").ToLocalChecked()).FromJust()) + if (obj.Has("timestamps")) { - v8::Local timestamps = - Nan::Get(obj, Nan::New("timestamps").ToLocalChecked()).ToLocalChecked(); + Napi::Value timestamps = obj.Get("timestamps"); if (timestamps.IsEmpty()) return match_parameters_ptr(); - if (!timestamps->IsArray()) + if (!timestamps.IsArray()) { - Nan::ThrowError("Timestamps must be an array of integers (or undefined)"); + ThrowError(args.Env(), "Timestamps must be an array of integers (or undefined)"); return match_parameters_ptr(); } - v8::Local timestamps_array = v8::Local::Cast(timestamps); + Napi::Array timestamps_array = timestamps.As(); - if (params->coordinates.size() != timestamps_array->Length()) + if (params->coordinates.size() != timestamps_array.Length()) { - Nan::ThrowError("Timestamp array must have the same size as the coordinates " - "array"); + ThrowError(args.Env(), + "Timestamp array must have the same size as the coordinates " + "array"); return match_parameters_ptr(); } - for (uint32_t i = 0; i < timestamps_array->Length(); ++i) + for (uint32_t i = 0; i < timestamps_array.Length(); ++i) { - v8::Local timestamp = Nan::Get(timestamps_array, i).ToLocalChecked(); + Napi::Value timestamp = timestamps_array.Get(i); if (timestamp.IsEmpty()) return match_parameters_ptr(); - if (!timestamp->IsNumber()) + if (!timestamp.IsNumber()) { - Nan::ThrowError("Timestamps array items must be numbers"); + ThrowError(args.Env(), "Timestamps array items must be numbers"); return match_parameters_ptr(); } - params->timestamps.emplace_back(Nan::To(timestamp).FromJust()); + params->timestamps.emplace_back(timestamp.ToNumber().Int64Value()); } } - if (Nan::Has(obj, Nan::New("gaps").ToLocalChecked()).FromJust()) + if (obj.Has("gaps")) { - v8::Local gaps = - Nan::Get(obj, Nan::New("gaps").ToLocalChecked()).ToLocalChecked(); + Napi::Value gaps = obj.Get("gaps"); if (gaps.IsEmpty()) return match_parameters_ptr(); - if (!gaps->IsString()) + if (!gaps.IsString()) { - Nan::ThrowError("Gaps must be a string: [split, ignore]"); + ThrowError(args.Env(), "Gaps must be a string: [split, ignore]"); return match_parameters_ptr(); } - const Nan::Utf8String gaps_utf8str(gaps); - std::string gaps_str{*gaps_utf8str, *gaps_utf8str + gaps_utf8str.length()}; + std::string gaps_str = gaps.ToString().Utf8Value(); if (gaps_str == "split") { @@ -1630,83 +1606,81 @@ argumentsToMatchParameter(const Nan::FunctionCallbackInfo &args, } else { - Nan::ThrowError("'gaps' param must be one of [split, ignore]"); + ThrowError(args.Env(), "'gaps' param must be one of [split, ignore]"); return match_parameters_ptr(); } } - if (Nan::Has(obj, Nan::New("tidy").ToLocalChecked()).FromJust()) + if (obj.Has("tidy")) { - v8::Local tidy = - Nan::Get(obj, Nan::New("tidy").ToLocalChecked()).ToLocalChecked(); + Napi::Value tidy = obj.Get("tidy"); if (tidy.IsEmpty()) return match_parameters_ptr(); - if (!tidy->IsBoolean()) + if (!tidy.IsBoolean()) { - Nan::ThrowError("tidy must be of type Boolean"); + ThrowError(args.Env(), "tidy must be of type Boolean"); return match_parameters_ptr(); } - params->tidy = Nan::To(tidy).FromJust(); + params->tidy = tidy.ToBoolean().Value(); } - if (Nan::Has(obj, Nan::New("waypoints").ToLocalChecked()).FromJust()) + if (obj.Has("waypoints")) { - v8::Local waypoints = - Nan::Get(obj, Nan::New("waypoints").ToLocalChecked()).ToLocalChecked(); + Napi::Value waypoints = obj.Get("waypoints"); if (waypoints.IsEmpty()) return match_parameters_ptr(); // must be array - if (!waypoints->IsArray()) + if (!waypoints.IsArray()) { - Nan::ThrowError( + ThrowError( + args.Env(), "Waypoints must be an array of integers corresponding to the input coordinates."); return match_parameters_ptr(); } - auto waypoints_array = v8::Local::Cast(waypoints); + auto waypoints_array = waypoints.As(); // must have at least two elements - if (waypoints_array->Length() < 2) + if (waypoints_array.Length() < 2) { - Nan::ThrowError("At least two waypoints must be provided"); + ThrowError(args.Env(), "At least two waypoints must be provided"); return match_parameters_ptr(); } auto coords_size = params->coordinates.size(); - auto waypoints_array_size = waypoints_array->Length(); + auto waypoints_array_size = waypoints_array.Length(); const auto first_index = - Nan::To(Nan::Get(waypoints_array, 0).ToLocalChecked()).FromJust(); + waypoints_array.Get(static_cast(0)).ToNumber().Uint32Value(); const auto last_index = - Nan::To( - Nan::Get(waypoints_array, waypoints_array_size - 1).ToLocalChecked()) - .FromJust(); + waypoints_array.Get(waypoints_array_size - 1).ToNumber().Uint32Value(); if (first_index != 0 || last_index != coords_size - 1) { - Nan::ThrowError("First and last waypoints values must correspond to first and last " - "coordinate indices"); + ThrowError(args.Env(), + "First and last waypoints values must correspond to first and last " + "coordinate indices"); return match_parameters_ptr(); } for (uint32_t i = 0; i < waypoints_array_size; ++i) { - v8::Local waypoint_value = Nan::Get(waypoints_array, i).ToLocalChecked(); + Napi::Value waypoint_value = waypoints_array.Get(i); // all elements must be numbers - if (!waypoint_value->IsNumber()) + if (!waypoint_value.IsNumber()) { - Nan::ThrowError("Waypoint values must be an array of integers"); + ThrowError(args.Env(), "Waypoint values must be an array of integers"); return match_parameters_ptr(); } // check that the waypoint index corresponds with an inpute coordinate - const auto index = Nan::To(waypoint_value).FromJust(); + const auto index = waypoint_value.ToNumber().Uint32Value(); if (index >= coords_size) { - Nan::ThrowError("Waypoints must correspond with the index of an input coordinate"); + ThrowError(args.Env(), + "Waypoints must correspond with the index of an input coordinate"); return match_parameters_ptr(); } - params->waypoints.emplace_back( - static_cast(Nan::To(waypoint_value).FromJust())); + params->waypoints.emplace_back(index); } } diff --git a/lib/binding_napi_v8 b/lib/binding_napi_v8 new file mode 120000 index 000000000..32bc84fb7 --- /dev/null +++ b/lib/binding_napi_v8 @@ -0,0 +1 @@ +binding \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2136845ed..457213005 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "faucet": "^0.0.1", "jsonpath": "^1.1.1", "mkdirp": "^0.5.6", - "nan": "^2.17.0", + "node-addon-api": "^5.0.0", "node-cmake": "^2.5.1", "node-timeout": "0.0.4", "polyline": "^0.2.0", @@ -5436,9 +5436,9 @@ } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "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/color-string": { @@ -6011,6 +6011,15 @@ "integrity": "sha1-skbCuApXCkfBG+HZvRBw7IeLh84=", "dev": true }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -9114,7 +9123,7 @@ "node_modules/find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, "dependencies": { "path-exists": "^2.0.0", @@ -10038,13 +10047,10 @@ "dev": true }, "node_modules/graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "node_modules/gulp-sourcemaps": { "version": "1.6.0", @@ -11854,7 +11860,7 @@ "node_modules/load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -12711,6 +12717,12 @@ "lower-case": "^1.1.1" } }, + "node_modules/node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==", + "dev": true + }, "node_modules/node-cmake": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/node-cmake/-/node-cmake-2.5.1.tgz", @@ -13481,7 +13493,7 @@ "node_modules/path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", @@ -13536,7 +13548,7 @@ "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "engines": { "node": ">=0.10.0" @@ -14276,7 +14288,7 @@ "node_modules/read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, "dependencies": { "load-json-file": "^1.0.0", @@ -14290,7 +14302,7 @@ "node_modules/read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, "dependencies": { "find-up": "^1.0.0", @@ -15126,9 +15138,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "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/simple-concat": { "version": "1.0.1", @@ -16644,15 +16656,6 @@ "node": ">=4.0.0" } }, - "node_modules/table-layout/node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/table/node_modules/ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -18846,9 +18849,9 @@ "dev": true }, "node_modules/yargs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", - "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "dev": true, "dependencies": { "camelcase": "^3.0.0", @@ -18863,13 +18866,13 @@ "string-width": "^1.0.2", "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "5.0.0-security.0" + "yargs-parser": "^5.0.1" } }, "node_modules/yargs-parser": { - "version": "5.0.0-security.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", - "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "dependencies": { "camelcase": "^3.0.0", @@ -23193,9 +23196,9 @@ } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "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 }, "color-string": { @@ -23690,6 +23693,12 @@ "integrity": "sha1-skbCuApXCkfBG+HZvRBw7IeLh84=", "dev": true }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -26233,7 +26242,7 @@ "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, "requires": { "path-exists": "^2.0.0", @@ -26966,9 +26975,9 @@ "dev": true }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "gulp-sourcemaps": { @@ -28353,7 +28362,7 @@ "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -29082,6 +29091,12 @@ "lower-case": "^1.1.1" } }, + "node-addon-api": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz", + "integrity": "sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==", + "dev": true + }, "node-cmake": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/node-cmake/-/node-cmake-2.5.1.tgz", @@ -29696,7 +29711,7 @@ "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -29739,7 +29754,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true }, "pinkie": { @@ -30383,7 +30398,7 @@ "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, "requires": { "load-json-file": "^1.0.0", @@ -30394,7 +30409,7 @@ "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, "requires": { "find-up": "^1.0.0", @@ -31099,9 +31114,9 @@ } }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-concat": { "version": "1.0.1", @@ -32325,14 +32340,6 @@ "lodash.padend": "^4.6.1", "typical": "^2.6.1", "wordwrapjs": "^3.0.0" - }, - "dependencies": { - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - } } }, "tap-parser": { @@ -34121,9 +34128,9 @@ "dev": true }, "yargs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", - "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "dev": true, "requires": { "camelcase": "^3.0.0", @@ -34138,13 +34145,13 @@ "string-width": "^1.0.2", "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "5.0.0-security.0" + "yargs-parser": "^5.0.1" } }, "yargs-parser": { - "version": "5.0.0-security.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", - "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "requires": { "camelcase": "^3.0.0", diff --git a/package.json b/package.json index 9124e8989..6e464a71a 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "babelify": "^10.0.0", "browserify": "^17.0.0", "chalk": "^1.1.3", + "cheap-ruler": "^3.0.2", "command-line-args": "^5.2.1", "command-line-usage": "^5.0.4", "csv-stringify": "^3.0.0", @@ -55,26 +56,26 @@ "eslint": "^5.16.0", "faucet": "^0.0.1", "jsonpath": "^1.1.1", + "mkdirp": "^0.5.6", + "node-addon-api": "^5.0.0", "node-timeout": "0.0.4", "polyline": "^0.2.0", "request": "^2.88.2", + "rimraf": "^2.7.1", "tape": "^4.16.0", "turf": "^3.0.14", "uglify-js": "^3.17.0", "xmlbuilder": "^4.2.1", - "cheap-ruler": "^3.0.2", - "mkdirp": "^0.5.6", - "nan": "^2.17.0", - "node-cmake": "^2.5.1", - "rimraf": "^2.7.1" + "node-cmake": "^2.5.1" }, "main": "lib/index.js", "binary": { + "napi_versions": [8], "module_name": "node_osrm", - "module_path": "./lib/binding/", + "module_path": "./lib/binding_napi_v{napi_build_version}/", "host": "https://github.com", "remote_path": "./Project-OSRM/osrm-backend/releases/download/v{version}/", - "package_name": "{module_name}-v{version}-{node_abi}-{platform}-{arch}-{configuration}.tar.gz" + "package_name": "{module_name}-v{version}-{napi_build_version}-{platform}-{arch}-{configuration}.tar.gz" }, "publishConfig": { "access": "public" diff --git a/src/nodejs/CMakeLists.txt b/src/nodejs/CMakeLists.txt index 7d93a09b6..85ee29ecf 100644 --- a/src/nodejs/CMakeLists.txt +++ b/src/nodejs/CMakeLists.txt @@ -4,6 +4,9 @@ cmake_minimum_required(VERSION 3.1) message(STATUS "Building node_osrm") +set(NAPI_VERSION 8) +add_definitions(-DNAPI_VERSION=${NAPI_VERSION}) + set(BINDING_DIR "${PROJECT_SOURCE_DIR}/lib/binding") list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/node_modules/node-cmake") @@ -13,6 +16,7 @@ nodejs_init() message(STATUS "Configuring node_osrm bindings for NodeJs ${NODEJS_VERSION}") + add_nodejs_module(node_osrm node_osrm.cpp) set_target_properties(node_osrm PROPERTIES CXX_STANDARD 17) # TODO: we disable clang-tidy for this target, because it causes errors in third-party NodeJs related headers @@ -21,6 +25,14 @@ set_target_properties(node_osrm PROPERTIES CXX_CLANG_TIDY "") target_no_warning(node_osrm suggest-destructor-override) target_no_warning(node_osrm suggest-override) +# https://github.com/cjntaylor/node-cmake/issues/53#issuecomment-842357457 +execute_process(COMMAND node -p "require('node-addon-api').include" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE NODE_ADDON_API_DIR) +string(REPLACE "\n" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR}) +string(REPLACE "\"" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR}) + +target_include_directories(node_osrm SYSTEM PRIVATE ${NODE_ADDON_API_DIR}) + + target_link_libraries(node_osrm osrm) # node_osrm artifacts in ${BINDING_DIR} to depend targets on diff --git a/src/nodejs/node_osrm.cpp b/src/nodejs/node_osrm.cpp index 34ecc6914..6471b7697 100644 --- a/src/nodejs/node_osrm.cpp +++ b/src/nodejs/node_osrm.cpp @@ -1,3 +1,5 @@ + + #include "osrm/engine_config.hpp" #include "osrm/osrm.hpp" @@ -9,6 +11,7 @@ #include "osrm/trip_parameters.hpp" #include +#include #include #include #include @@ -21,35 +24,25 @@ namespace node_osrm { - -Engine::Engine(osrm::EngineConfig &config) : Base(), this_(std::make_shared(config)) {} - -Nan::Persistent &Engine::constructor() +Napi::Object Engine::Init(Napi::Env env, Napi::Object exports) { - static Nan::Persistent init; - return init; -} + Napi::Function func = DefineClass(env, + "OSRM", + { + InstanceMethod("route", &Engine::route), + InstanceMethod("nearest", &Engine::nearest), + InstanceMethod("table", &Engine::table), + InstanceMethod("tile", &Engine::tile), + InstanceMethod("match", &Engine::match), + InstanceMethod("trip", &Engine::trip), + }); -NAN_MODULE_INIT(Engine::Init) -{ - const auto whoami = Nan::New("OSRM").ToLocalChecked(); + Napi::FunctionReference *constructor = new Napi::FunctionReference(); + *constructor = Napi::Persistent(func); + env.SetInstanceData(constructor); - auto fnTp = Nan::New(New); - fnTp->InstanceTemplate()->SetInternalFieldCount(1); - fnTp->SetClassName(whoami); - - SetPrototypeMethod(fnTp, "route", route); - SetPrototypeMethod(fnTp, "nearest", nearest); - SetPrototypeMethod(fnTp, "table", table); - SetPrototypeMethod(fnTp, "tile", tile); - SetPrototypeMethod(fnTp, "match", match); - SetPrototypeMethod(fnTp, "trip", trip); - - const auto fn = Nan::GetFunction(fnTp).ToLocalChecked(); - - constructor().Reset(fn); - - Nan::Set(target, whoami, fn); + exports.Set("OSRM", func); + return exports; } // clang-format off @@ -93,35 +86,25 @@ NAN_MODULE_INIT(Engine::Init) * */ // clang-format on -NAN_METHOD(Engine::New) +Engine::Engine(const Napi::CallbackInfo &info) : Napi::ObjectWrap(info) { - if (info.IsConstructCall()) + + try { - try - { - auto config = argumentsToEngineConfig(info); - if (!config) - return; + auto config = argumentsToEngineConfig(info); + if (!config) + return; - auto *const self = new Engine(*config); - self->Wrap(info.This()); - } - catch (const std::exception &ex) - { - return Nan::ThrowTypeError(ex.what()); - } - - info.GetReturnValue().Set(info.This()); + this_ = std::make_shared(*config); } - else + catch (const std::exception &ex) { - return Nan::ThrowTypeError( - "Cannot call constructor as function, you need to use 'new' keyword"); + ThrowTypeError(info.Env(), ex.what()); } } template -inline void async(const Nan::FunctionCallbackInfo &info, +inline void async(const Napi::CallbackInfo &info, ParameterParser argsToParams, ServiceMemFn service, bool requires_multiple_coordinates) @@ -133,22 +116,21 @@ inline void async(const Nan::FunctionCallbackInfo &info, BOOST_ASSERT(params->IsValid()); - if (!info[info.Length() - 1]->IsFunction()) - return Nan::ThrowTypeError("last argument must be a callback function"); + if (!info[info.Length() - 1].IsFunction()) + return ThrowTypeError(info.Env(), "last argument must be a callback function"); - auto *const self = Nan::ObjectWrap::Unwrap(info.Holder()); + auto *const self = Napi::ObjectWrap::Unwrap(info.This().As()); using ParamPtr = decltype(params); - struct Worker final : Nan::AsyncWorker + struct Worker final : Napi::AsyncWorker { Worker(std::shared_ptr osrm_, ParamPtr params_, ServiceMemFn service, - Nan::Callback *callback, + Napi::Function callback, PluginParameters pluginParams_) - : Nan::AsyncWorker(callback, "osrm:async"), osrm{std::move(osrm_)}, - service{std::move(service)}, params{std::move(params_)}, pluginParams{ - std::move(pluginParams_)} + : Napi::AsyncWorker(callback), osrm{std::move(osrm_)}, service{std::move(service)}, + params{std::move(params_)}, pluginParams{std::move(pluginParams_)} { } @@ -194,17 +176,14 @@ inline void async(const Nan::FunctionCallbackInfo &info, } catch (const std::exception &e) { - SetErrorMessage(e.what()); + SetError(e.what()); } - void HandleOKCallback() override + void OnOK() override { - Nan::HandleScope scope; + Napi::HandleScope scope{Env()}; - const constexpr auto argc = 2u; - v8::Local argv[argc] = {Nan::Null(), render(result)}; - - callback->Call(argc, argv, async_resource); + Callback().Call({Env().Null(), render(Env(), result)}); } // Keeps the OSRM object alive even after shutdown until we're done with callback @@ -216,13 +195,14 @@ inline void async(const Nan::FunctionCallbackInfo &info, ObjectOrString result; }; - auto *callback = new Nan::Callback{info[info.Length() - 1].As()}; - Nan::AsyncQueueWorker( - new Worker{self->this_, std::move(params), service, callback, std::move(pluginParams)}); + Napi::Function callback = info[info.Length() - 1].As(); + auto worker = + new Worker(self->this_, std::move(params), service, callback, std::move(pluginParams)); + worker->Queue(); } template -inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, +inline void asyncForTiles(const Napi::CallbackInfo &info, ParameterParser argsToParams, ServiceMemFn service, bool requires_multiple_coordinates) @@ -235,22 +215,21 @@ inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, BOOST_ASSERT(params->IsValid()); - if (!info[info.Length() - 1]->IsFunction()) - return Nan::ThrowTypeError("last argument must be a callback function"); + if (!info[info.Length() - 1].IsFunction()) + return ThrowTypeError(info.Env(), "last argument must be a callback function"); - auto *const self = Nan::ObjectWrap::Unwrap(info.Holder()); + auto *const self = Napi::ObjectWrap::Unwrap(info.This().As()); using ParamPtr = decltype(params); - struct Worker final : Nan::AsyncWorker + struct Worker final : Napi::AsyncWorker { Worker(std::shared_ptr osrm_, ParamPtr params_, ServiceMemFn service, - Nan::Callback *callback, + Napi::Function callback, PluginParameters pluginParams_) - : Nan::AsyncWorker(callback, "osrm:asyncForTiles"), osrm{std::move(osrm_)}, - service{std::move(service)}, params{std::move(params_)}, pluginParams{ - std::move(pluginParams_)} + : Napi::AsyncWorker(callback), osrm{std::move(osrm_)}, service{std::move(service)}, + params{std::move(params_)}, pluginParams{std::move(pluginParams_)} { } @@ -264,18 +243,14 @@ inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, } catch (const std::exception &e) { - SetErrorMessage(e.what()); + SetError(e.what()); } - void HandleOKCallback() override + void OnOK() override { - Nan::HandleScope scope; + Napi::HandleScope scope{Env()}; - const constexpr auto argc = 2u; - auto str_result = result.get(); - v8::Local argv[argc] = {Nan::Null(), render(str_result)}; - - callback->Call(argc, argv, async_resource); + Callback().Call({Env().Null(), render(Env(), result.get())}); } // Keeps the OSRM object alive even after shutdown until we're done with callback @@ -287,9 +262,10 @@ inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, osrm::engine::api::ResultT result; }; - auto *callback = new Nan::Callback{info[info.Length() - 1].As()}; - Nan::AsyncQueueWorker( - new Worker{self->this_, std::move(params), service, callback, std::move(pluginParams)}); + Napi::Function callback = info[info.Length() - 1].As(); + auto worker = + new Worker(self->this_, std::move(params), service, callback, std::move(pluginParams)); + worker->Queue(); } // clang-format off @@ -333,12 +309,13 @@ inline void asyncForTiles(const Nan::FunctionCallbackInfo &info, * }); */ // clang-format on -NAN_METHOD(Engine::route) // +Napi::Value Engine::route(const Napi::CallbackInfo &info) { osrm::Status (osrm::OSRM::*route_fn)(const osrm::RouteParameters ¶ms, osrm::engine::api::ResultT &result) const = &osrm::OSRM::Route; async(info, &argumentsToRouteParameter, route_fn, true); + return info.Env().Undefined(); } // clang-format off @@ -379,12 +356,13 @@ NAN_METHOD(Engine::route) // * }); */ // clang-format on -NAN_METHOD(Engine::nearest) // +Napi::Value Engine::nearest(const Napi::CallbackInfo &info) { osrm::Status (osrm::OSRM::*nearest_fn)(const osrm::NearestParameters ¶ms, osrm::engine::api::ResultT &result) const = &osrm::OSRM::Nearest; async(info, &argumentsToNearestParameter, nearest_fn, false); + return info.Env().Undefined(); } // clang-format off @@ -410,7 +388,6 @@ NAN_METHOD(Engine::nearest) // * @param {Number} [options.scale_factor] Multiply the table duration values in the table by this number for more controlled input into a route optimization solver. * @param {String} [options.snapping] Which edges can be snapped to, either `default`, or `any`. `default` only snaps to edges marked by the profile as `is_startpoint`, `any` will allow snapping to any edge in the routing graph. * @param {Array} [options.annotations] Return the requested table or tables in response. Can be `['duration']` (return the duration matrix, default), `[distance']` (return the distance matrix), or `['duration', distance']` (return both the duration matrix and the distance matrix). - * @param {Function} callback * * @returns {Object} containing `durations`, `distances`, `sources`, and `destinations`. @@ -439,12 +416,13 @@ NAN_METHOD(Engine::nearest) // * }); */ // clang-format on -NAN_METHOD(Engine::table) // +Napi::Value Engine::table(const Napi::CallbackInfo &info) { osrm::Status (osrm::OSRM::*table_fn)(const osrm::TableParameters ¶ms, osrm::engine::api::ResultT &result) const = &osrm::OSRM::Table; async(info, &argumentsToTableParameter, table_fn, true); + return info.Env().Undefined(); } // clang-format off @@ -473,12 +451,13 @@ NAN_METHOD(Engine::table) // * }); */ // clang-format on -NAN_METHOD(Engine::tile) +Napi::Value Engine::tile(const Napi::CallbackInfo &info) { osrm::Status (osrm::OSRM::*tile_fn)(const osrm::TileParameters ¶ms, osrm::engine::api::ResultT &result) const = &osrm::OSRM::Tile; asyncForTiles(info, &argumentsToTileParameters, tile_fn, {/*unused*/}); + return info.Env().Undefined(); } // clang-format off @@ -536,12 +515,13 @@ NAN_METHOD(Engine::tile) * */ // clang-format on -NAN_METHOD(Engine::match) // +Napi::Value Engine::match(const Napi::CallbackInfo &info) { osrm::Status (osrm::OSRM::*match_fn)(const osrm::MatchParameters ¶ms, osrm::engine::api::ResultT &result) const = &osrm::OSRM::Match; async(info, &argumentsToMatchParameter, match_fn, true); + return info.Env().Undefined(); } // clang-format off @@ -611,12 +591,13 @@ NAN_METHOD(Engine::match) // * }); */ // clang-format on -NAN_METHOD(Engine::trip) // +Napi::Value Engine::trip(const Napi::CallbackInfo &info) { osrm::Status (osrm::OSRM::*trip_fn)(const osrm::TripParameters ¶ms, osrm::engine::api::ResultT &result) const = &osrm::OSRM::Trip; async(info, &argumentsToTripParameter, trip_fn, true); + return info.Env().Undefined(); } /** @@ -710,3 +691,10 @@ NAN_METHOD(Engine::trip) // */ } // namespace node_osrm + +Napi::Object InitAll(Napi::Env env, Napi::Object exports) +{ + return node_osrm::Engine::Init(env, exports); +} + +NODE_API_MODULE(addon, InitAll) diff --git a/test/nodejs/benchmark.js b/test/nodejs/benchmark.js new file mode 100644 index 000000000..e8912d606 --- /dev/null +++ b/test/nodejs/benchmark.js @@ -0,0 +1,51 @@ +const OSRM = require('../../'); +const {performance, createHistogram} = require('node:perf_hooks'); + +// usage: node test/nodejs/benchmark.js berlin-latest.osrm 13.388860,52.517037;13.385983,52.496891 +const args = process.argv.slice(2); +const path = args[0] || require('./constants').mld_data_path; + +function parseWaypoints(waypoints) { + if (waypoints == undefined) { + return undefined; + } + return waypoints.split(';').map((waypoint) => { + const [lon, lat] = waypoint.split(','); + return [parseFloat(lon), parseFloat(lat)]; + }); +} +const waypoints = parseWaypoints(args[1]) || [[7.41337, 43.72956],[7.41546, 43.73077]]; +const osrm = new OSRM({path, algorithm: 'MLD'}); + +async function route(coordinates) { + const promise = new Promise((resolve, reject) => { + osrm.route({coordinates, steps: true, overview: 'full'}, (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }); + }); + return promise; +} + +async function benchmark() { + // warmup + await route(waypoints); + + const performanceHistorgram = createHistogram(); + + for (let i = 0; i < 1000; i++) { + const start = performance.now(); + await route(waypoints); + const end = performance.now(); + // record result in microseconds + performanceHistorgram.record(Math.ceil((end - start) * 1000)); + } + + + console.log(performanceHistorgram); +} +benchmark(); + diff --git a/test/nodejs/index.js b/test/nodejs/index.js index bbe58849f..f08356706 100644 --- a/test/nodejs/index.js +++ b/test/nodejs/index.js @@ -8,7 +8,7 @@ var monaco_corech_path = require('./constants').corech_data_path; test('constructor: throws if new keyword is not used', function(assert) { assert.plan(1); assert.throws(function() { OSRM(); }, - /Cannot call constructor as function, you need to use 'new' keyword/); + /Class constructors cannot be invoked without 'new'/); }); test('constructor: uses defaults with no parameter', function(assert) { From 095b726a92fab7c380932ab0fe97d1131baf23cc Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Wed, 16 Nov 2022 21:09:54 +0100 Subject: [PATCH 37/75] Use instead of deprecated (#6458) --- include/storage/serialization.hpp | 2 +- include/storage/shared_data_index.hpp | 2 +- include/util/indexed_data.hpp | 2 +- src/engine/routing_algorithms/alternative_path_mld.cpp | 2 +- src/extractor/location_dependent_data.cpp | 2 +- src/tools/components.cpp | 2 +- unit_tests/storage/tar.cpp | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/storage/serialization.hpp b/include/storage/serialization.hpp index d83abfd9a..60532d691 100644 --- a/include/storage/serialization.hpp +++ b/include/storage/serialization.hpp @@ -10,8 +10,8 @@ #include "storage/tar.hpp" #include -#include #include +#include #include #include diff --git a/include/storage/shared_data_index.hpp b/include/storage/shared_data_index.hpp index 41ae6dabb..8cafc572f 100644 --- a/include/storage/shared_data_index.hpp +++ b/include/storage/shared_data_index.hpp @@ -3,7 +3,7 @@ #include "storage/shared_datatype.hpp" -#include +#include #include #include diff --git a/include/util/indexed_data.hpp b/include/util/indexed_data.hpp index a09425b33..a0d97e443 100644 --- a/include/util/indexed_data.hpp +++ b/include/util/indexed_data.hpp @@ -7,7 +7,7 @@ #include "util/vector_view.hpp" #include -#include +#include #include #include diff --git a/src/engine/routing_algorithms/alternative_path_mld.cpp b/src/engine/routing_algorithms/alternative_path_mld.cpp index 2f063eb72..bc520eb78 100644 --- a/src/engine/routing_algorithms/alternative_path_mld.cpp +++ b/src/engine/routing_algorithms/alternative_path_mld.cpp @@ -13,7 +13,7 @@ #include #include -#include +#include namespace osrm { diff --git a/src/extractor/location_dependent_data.cpp b/src/extractor/location_dependent_data.cpp index 60186c2d6..828364e08 100644 --- a/src/extractor/location_dependent_data.cpp +++ b/src/extractor/location_dependent_data.cpp @@ -8,8 +8,8 @@ #include #include -#include #include +#include #include #include diff --git a/src/tools/components.cpp b/src/tools/components.cpp index ea4f21dbf..7431bbca5 100644 --- a/src/tools/components.cpp +++ b/src/tools/components.cpp @@ -11,7 +11,7 @@ #include "util/typedefs.hpp" #include -#include +#include #include diff --git a/unit_tests/storage/tar.cpp b/unit_tests/storage/tar.cpp index 955aa0f2a..c15a1ea4f 100644 --- a/unit_tests/storage/tar.cpp +++ b/unit_tests/storage/tar.cpp @@ -3,8 +3,8 @@ #include "../common/range_tools.hpp" #include "../common/temporary_file.hpp" -#include #include +#include #include BOOST_AUTO_TEST_SUITE(tar) From 2044398dfdab46dd13e6c0a17df76ffb9a6279d2 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Mon, 28 Nov 2022 16:29:43 +0100 Subject: [PATCH 38/75] Add CI job which builds OSRM with gcc 12 (#6455) --- .github/workflows/osrm-backend.yml | 11 +++++++++++ CHANGELOG.md | 1 + include/util/indexed_data.hpp | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/osrm-backend.yml b/.github/workflows/osrm-backend.yml index 53a27b864..936093374 100644 --- a/.github/workflows/osrm-backend.yml +++ b/.github/workflows/osrm-backend.yml @@ -212,6 +212,17 @@ jobs: CXXCOMPILER: clang++-6.0 ENABLE_CONAN: ON + - name: gcc-12-release + continue-on-error: false + node: 16 + runs-on: ubuntu-22.04 + BUILD_TOOLS: ON + BUILD_TYPE: Release + CCOMPILER: gcc-12 + CXXCOMPILER: g++-12 + ENABLE_BENCHMARKS: ON + CXXFLAGS: '-Wno-array-bounds -Wno-uninitialized' + - name: gcc-11-release continue-on-error: false node: 16 diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f39ab328..d0b54e50c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Unreleased - Changes from 5.27.1 - Build: + - ADDED: Add CI job which builds OSRM with gcc 12. [#6455](https://github.com/Project-OSRM/osrm-backend/pull/6455) - CHANGED: Upgrade to clang-tidy 15. [#6439](https://github.com/Project-OSRM/osrm-backend/pull/6439) - CHANGED: Update actions/cache to v3. [#6420](https://github.com/Project-OSRM/osrm-backend/pull/6420) - REMOVED: Drop support of Node 12 & 14. [#6431](https://github.com/Project-OSRM/osrm-backend/pull/6431) diff --git a/include/util/indexed_data.hpp b/include/util/indexed_data.hpp index a0d97e443..712597784 100644 --- a/include/util/indexed_data.hpp +++ b/include/util/indexed_data.hpp @@ -216,7 +216,7 @@ template struct FixedGroupBlock std::numeric_limits>::max(); auto index = 0; - std::array prefix; + std::array prefix{}; for (OffsetIterator curr = first, next = std::next(first); curr != last; ++curr, ++next) { From 73b2a86a95babb5c58600ee5609fc0818c619c78 Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Sat, 3 Dec 2022 17:53:56 +0100 Subject: [PATCH 39/75] Move vector in CSVFilesParser instead copying it (#6470) --- CHANGELOG.md | 1 + include/updater/csv_file_parser.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0b54e50c..98a871bf4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - NodeJS: - CHANGED: Use node-api instead of NAN. [#6452](https://github.com/Project-OSRM/osrm-backend/pull/6452) - Misc: + - CHANGED: Move vector in CSVFilesParser instead copying it. [#6470](https://github.com/Project-OSRM/osrm-backend/pull/6470) - REMOVED: Get rid of unused functions in util/json_util.hpp. [#6446](https://github.com/Project-OSRM/osrm-backend/pull/6446) - FIXED: Apply workaround for Conan installation issue on CI. [#6442](https://github.com/Project-OSRM/osrm-backend/pull/6442) - FIXED: Fix `npm audit` warnings in NPM package. [#6437](https://github.com/Project-OSRM/osrm-backend/pull/6437) diff --git a/include/updater/csv_file_parser.hpp b/include/updater/csv_file_parser.hpp index c9841798e..92c3dcabb 100644 --- a/include/updater/csv_file_parser.hpp +++ b/include/updater/csv_file_parser.hpp @@ -78,7 +78,7 @@ template struct CSVFilesParser util::Log() << "In total loaded " << csv_filenames.size() << " file(s) with a total of " << lookup.size() << " unique values"; - return LookupTable{lookup}; + return LookupTable{std::move(lookup)}; } catch (const std::exception &e) // TBB should capture to std::exception_ptr and automatically rethrow in this thread. From f4189d9487476646c4b0c4d61bf3efd0f7c6eabb Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 16:08:22 +0100 Subject: [PATCH 40/75] Fix formatting --- include/guidance/turn_lane_handler.hpp | 3 +-- include/partitioner/cell_storage.hpp | 3 ++- include/util/bit_range.hpp | 5 ++++- include/util/filtered_integer_range.hpp | 5 ++++- include/util/integer_range.hpp | 5 ++++- include/util/packed_vector.hpp | 5 ++++- include/util/static_assert.hpp | 6 ++++-- include/util/vector_view.hpp | 5 ++++- unit_tests/util/query_heap.cpp | 4 +++- unit_tests/util/static_rtree.cpp | 17 ++++++++++++----- 10 files changed, 42 insertions(+), 16 deletions(-) diff --git a/include/guidance/turn_lane_handler.hpp b/include/guidance/turn_lane_handler.hpp index b0491d7c4..180bc84b3 100644 --- a/include/guidance/turn_lane_handler.hpp +++ b/include/guidance/turn_lane_handler.hpp @@ -34,8 +34,7 @@ namespace lanes namespace { -using TurnLaneScenario = enum TurnLaneScenario -{ +using TurnLaneScenario = enum TurnLaneScenario { SIMPLE, // a straightforward assignment PARTITION_LOCAL, // an assignment that requires partitioning, using local turns SIMPLE_PREVIOUS, // an assignemtnn using the turns specified at the previous road (e.g. diff --git a/include/partitioner/cell_storage.hpp b/include/partitioner/cell_storage.hpp index 264d43786..db41405c2 100644 --- a/include/partitioner/cell_storage.hpp +++ b/include/partitioner/cell_storage.hpp @@ -100,7 +100,8 @@ template class CellStorageImpl { using ValueT = decltype(*std::declval()); - using base_t = boost::iterator_facade, ValueT, boost::random_access_traversal_tag>; + using base_t = boost:: + iterator_facade, ValueT, boost::random_access_traversal_tag>; public: using value_type = typename base_t::value_type; diff --git a/include/util/bit_range.hpp b/include/util/bit_range.hpp index 08100d6b4..876c46a2d 100644 --- a/include/util/bit_range.hpp +++ b/include/util/bit_range.hpp @@ -49,7 +49,10 @@ class BitIterator : public boost::iterator_facade, boost::forward_traversal_tag, const std::size_t> { - using base_t = boost::iterator_facade, const std::size_t, boost::forward_traversal_tag, const std::size_t>; + using base_t = boost::iterator_facade, + const std::size_t, + boost::forward_traversal_tag, + const std::size_t>; public: using value_type = typename base_t::value_type; diff --git a/include/util/filtered_integer_range.hpp b/include/util/filtered_integer_range.hpp index fcce50ac8..be95cea27 100644 --- a/include/util/filtered_integer_range.hpp +++ b/include/util/filtered_integer_range.hpp @@ -26,7 +26,10 @@ class filtered_integer_iterator boost::single_pass_traversal_tag, Integer> { - using base_t = boost::iterator_facade, Integer, boost::single_pass_traversal_tag, Integer>; + using base_t = boost::iterator_facade, + Integer, + boost::single_pass_traversal_tag, + Integer>; public: using value_type = typename base_t::value_type; diff --git a/include/util/integer_range.hpp b/include/util/integer_range.hpp index 39bf94fd9..cd6052ddc 100644 --- a/include/util/integer_range.hpp +++ b/include/util/integer_range.hpp @@ -22,7 +22,10 @@ class integer_iterator : public boost::iterator_facade boost::random_access_traversal_tag, Integer> { - using base_t = boost::iterator_facade, Integer, boost::random_access_traversal_tag, Integer>; + using base_t = boost::iterator_facade, + Integer, + boost::random_access_traversal_tag, + Integer>; public: using value_type = typename base_t::value_type; diff --git a/include/util/packed_vector.hpp b/include/util/packed_vector.hpp index fc3ec830b..306fc82ca 100644 --- a/include/util/packed_vector.hpp +++ b/include/util/packed_vector.hpp @@ -336,7 +336,10 @@ template class Pack boost::random_access_traversal_tag, ReferenceT> { - using base_t = boost::iterator_facade, DataT, boost::random_access_traversal_tag, ReferenceT>; + using base_t = boost::iterator_facade, + DataT, + boost::random_access_traversal_tag, + ReferenceT>; public: using value_type = typename base_t::value_type; diff --git a/include/util/static_assert.hpp b/include/util/static_assert.hpp index d7400e92a..3615cc10c 100644 --- a/include/util/static_assert.hpp +++ b/include/util/static_assert.hpp @@ -10,13 +10,15 @@ namespace util template inline void static_assert_iter_value() { - using IterValueType = typename std::iterator_traits;::value_type; + using IterValueType = typename std::iterator_traits; + ::value_type; static_assert(std::is_same::value, ""); } template inline void static_assert_iter_category() { - using IterCategoryType = typename std::iterator_traits;::iterator_category; + using IterCategoryType = typename std::iterator_traits; + ::iterator_category; static_assert(std::is_base_of::value, ""); } diff --git a/include/util/vector_view.hpp b/include/util/vector_view.hpp index 0258ef8a4..961b13c7e 100644 --- a/include/util/vector_view.hpp +++ b/include/util/vector_view.hpp @@ -30,7 +30,10 @@ class VectorViewIterator : public boost::iterator_facade { - using base_t = boost::iterator_facade, DataT, boost::random_access_traversal_tag, DataT &>; + using base_t = boost::iterator_facade, + DataT, + boost::random_access_traversal_tag, + DataT &>; public: using value_type = typename base_t::value_type; diff --git a/unit_tests/util/query_heap.cpp b/unit_tests/util/query_heap.cpp index aa9033331..bca90fc73 100644 --- a/unit_tests/util/query_heap.cpp +++ b/unit_tests/util/query_heap.cpp @@ -22,7 +22,9 @@ struct TestData using TestNodeID = NodeID; using TestKey = int; using TestWeight = int; -using storage_types = boost::mpl::list, MapStorage, UnorderedMapStorage>; +using storage_types = boost::mpl::list, + MapStorage, + UnorderedMapStorage>; template struct RandomDataFixture { diff --git a/unit_tests/util/static_rtree.cpp b/unit_tests/util/static_rtree.cpp index 1351d6020..5a9336e1f 100644 --- a/unit_tests/util/static_rtree.cpp +++ b/unit_tests/util/static_rtree.cpp @@ -174,11 +174,18 @@ struct GraphFixture std::vector edges; }; -using TestRandomGraphFixture_LeafHalfFull = RandomGraphFixture; -using TestRandomGraphFixture_LeafFull = RandomGraphFixture; -using TestRandomGraphFixture_TwoLeaves = RandomGraphFixture; -using TestRandomGraphFixture_Branch = RandomGraphFixture; -using TestRandomGraphFixture_MultipleLevels = RandomGraphFixture; +using TestRandomGraphFixture_LeafHalfFull = + RandomGraphFixture; +using TestRandomGraphFixture_LeafFull = + RandomGraphFixture; +using TestRandomGraphFixture_TwoLeaves = + RandomGraphFixture; +using TestRandomGraphFixture_Branch = + RandomGraphFixture; +using TestRandomGraphFixture_MultipleLevels = + RandomGraphFixture; using TestRandomGraphFixture_10_30 = RandomGraphFixture<10, 30>; template From c605b1db38dfb7de3cfc9c30f876a39901aeb16a Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 16:28:03 +0100 Subject: [PATCH 41/75] Fix typo --- include/util/static_assert.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/include/util/static_assert.hpp b/include/util/static_assert.hpp index 3615cc10c..985324c96 100644 --- a/include/util/static_assert.hpp +++ b/include/util/static_assert.hpp @@ -10,15 +10,13 @@ namespace util template inline void static_assert_iter_value() { - using IterValueType = typename std::iterator_traits; - ::value_type; + using IterValueType = typename std::iterator_traits::value_type; static_assert(std::is_same::value, ""); } template inline void static_assert_iter_category() { - using IterCategoryType = typename std::iterator_traits; - ::iterator_category; + using IterCategoryType = typename std::iterator_traits::iterator_category; static_assert(std::is_base_of::value, ""); } From 5bab68c737644d09f2dde1aecf0e0eaa0a5a2ec6 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 18:21:42 +0100 Subject: [PATCH 42/75] Update CMakeLists - remove GOLD linker special case handling - bump minimum cmake version to 3.20 - simplify LTO detection - remove outdated way to check for compiler flags - remove outdated compiler version gates (rely on CXX version) - remove outdated Apple platform handling - disable compiler-specific CXX extensions - require boost 1.70 in all builds - remove unused variable --- CMakeLists.txt | 175 +++---------------------------- cmake/CheckCXXCompilerFlag.cmake | 29 ----- cmake/JSONParser.cmake | 2 +- example/CMakeLists.txt | 12 +-- src/nodejs/CMakeLists.txt | 4 +- 5 files changed, 19 insertions(+), 203 deletions(-) delete mode 100644 cmake/CheckCXXCompilerFlag.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 86adcd678..edb9d65a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ -cmake_minimum_required(VERSION 3.2) +cmake_minimum_required(VERSION 3.20) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED TRUE) - +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR AND NOT MSVC_IDE) message(FATAL_ERROR "In-source builds are not allowed. @@ -33,7 +33,6 @@ option(ENABLE_COVERAGE "Build with coverage instrumentalisation" OFF) option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF) option(ENABLE_LTO "Use LTO if available" OFF) option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF) -option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON) option(ENABLE_NODE_BINDINGS "Build NodeJs bindings" OFF) option(ENABLE_CLANG_TIDY "Enables clang-tidy checks" OFF) @@ -113,29 +112,12 @@ include(CheckCXXCompilerFlag) include(FindPackageHandleStandardArgs) include(GNUInstallDirs) -set(bitness 32) if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(bitness 64) message(STATUS "Building on a 64 bit system") else() message(STATUS "Building on a 32 bit system") endif() -if(WIN32 AND MSVC_VERSION LESS 1900) - message(FATAL_ERROR "Building with Microsoft compiler needs Latest Visual Studio 2015 (Community or better)") -endif() - -# Strictly require GCC>=5.0 and Clang>=3.4 - GCC 4.8 is already too old for C++14. -if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) - message(FATAL_ERROR "GCC>=5.0 required. In case you are on Ubuntu upgrade via ppa:ubuntu-toolchain-r/test") - endif() -elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4) - message(FATAL_ERROR "Clang>=3.4 required. In case you are on Ubuntu upgrade via http://apt.llvm.org") - endif() -endif() - include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include/) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include/) include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/sol2-3.3.0/include) @@ -190,26 +172,6 @@ add_library(osrm_customize src/osrm/customizer.cpp $ add_library(osrm_update $ $ $) add_library(osrm_store $ $ $) -if(ENABLE_GOLD_LINKER) - execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION) - if("${LD_VERSION}" MATCHES "GNU gold") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags") - set(OSRM_LDFLAGS "${OSRM_LDFLAGS} -fuse-ld=gold -Wl,--disable-new-dtags") - message(STATUS "Using GNU gold as linker.") - - # Issue 2785: check gold binutils version and don't use gc-sections for versions prior 2.25 - string(REGEX REPLACE ".*\\(GNU Binutils[^\\)0-9]+([0-9]+\\.[0-9]+)[^\\)]*\\).*" "\\1" GOLD_BINUTILS_VERSION "${LD_VERSION}") - if ("${GOLD_BINUTILS_VERSION}" VERSION_LESS "2.26") - message(STATUS "Disabling gc-sections on gold binutils < 2.26, see: https://sourceware.org/bugzilla/show_bug.cgi?id=17639") - set(LD_AVOID_GC_SECTIONS TRUE) - endif() - else() - message(WARNING "GNU gold linker isn't available.") - set(ENABLE_GOLD_LINKER OFF) - endif() -endif() - # Explicitly set the build type to Release if no other type is specified # on the command line. Without this, cmake defaults to an unoptimized, # non-debug build, which almost nobody wants. @@ -247,74 +209,17 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og -ggdb") endif() - -if(CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo) - message(STATUS "Configuring release mode optimizations") - # Check if LTO is available - check_cxx_compiler_flag("-Wl,-flto" LTO_AVAILABLE) - - if(ENABLE_LTO AND LTO_AVAILABLE) - set(OLD_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - # GCC in addition allows parallelizing LTO - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") - include(ProcessorCount) - ProcessorCount(NPROC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=${NPROC}") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto") - endif() - set(CHECK_LTO_SRC "int main(){return 0;}") - check_cxx_source_compiles("${CHECK_LTO_SRC}" LTO_WORKS) - if(LTO_WORKS) - message(STATUS "LTO working") - set(OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -flto") - set(OSRM_LDFLAGS "${OSRM_LDFLAGS} -flto") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto") - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -flto") - else() - message(STATUS "LTO broken") - set(CMAKE_CXX_FLAGS "${OLD_CXX_FLAGS}") - set(ENABLE_LTO Off) - endif() - - # Since gcc 4.9 the LTO format is non-standart ('slim'), so we need to use the build-in tools - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND NOT MINGW) - find_program(GCC_AR gcc-ar) - find_program(GCC_RANLIB gcc-ranlib) - if ("${GCC_AR}" STREQUAL "GCC_AR-NOTFOUND" OR "${GCC_RANLIB}" STREQUAL "GCC_RANLIB-NOTFOUND") - message(WARNING "GCC specific binutils not found. In case of linker issues export env vars: AR=gcc-ar, NM=gcc-nm, RANLIB=gcc-ranlib") - else() - message(STATUS "Using GCC specific binutils for LTO:") - message(STATUS " ${GCC_AR}") - message(STATUS " ${GCC_RANLIB}") - set(CMAKE_AR ${GCC_AR}) - set(CMAKE_RANLIB ${GCC_RANLIB}) - endif() - endif() - - # Same for clang LTO requires their own toolchain - if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") - find_program(LLVM_AR llvm-ar) - find_program(LLVM_RANLIB llvm-ranlib) - if ("${LLVM_AR}" STREQUAL "LLVM_AR-NOTFOUND" OR "${LLVM_RANLIB}" STREQUAL "LLVM_RANLIB-NOTFOUND") - message(WARNING "LLVM specific binutils not found.") - else() - message(STATUS "Using LLVM specific binutils for LTO:") - message(STATUS " ${LLVM_AR}") - message(STATUS " ${LLVM_RANLIB}") - set(CMAKE_AR ${LLVM_AR}) - set(CMAKE_RANLIB ${LLVM_RANLIB}) - endif() - endif() +if(ENABLE_LTO AND (CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)) + include(CheckIPOSupported) + check_ipo_supported(RESULT LTO_SUPPORTED OUTPUT error) + if(LTO_SUPPORTED) + message(STATUS "IPO / LTO enabled") + set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) + else() + message(WARNING "IPO / LTO not supported: <${error}>") endif() endif() -# TODO: this was added for Mason, we are not sure if it is true after migration to Conan -if(UNIX AND NOT APPLE AND ENABLE_CONAN AND (LTO_WORKS OR ENABLE_GOLD_LINKER)) - message(WARNING "ENABLE_CONAN and ENABLE_LTO/ENABLE_GOLD_LINKER may not work on all linux systems currently") -endif() - set(MAYBE_COVERAGE_LIBRARIES "") if (ENABLE_COVERAGE) if (NOT CMAKE_BUILD_TYPE MATCHES "Debug") @@ -352,14 +257,6 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU") add_dependency_defines(-DWIN32) set(OPTIONAL_SOCKET_LIBS ws2_32 wsock32) endif() - - # -fpermissive is required for parallel_do Intel TBB internal issue with GCC < 5 - # https://github.com/Project-OSRM/osrm-backend/pull/3603#issuecomment-277688589 - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0) - message(STATUS "Adding -fpermissive for GCC version < 5 bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51048). See #3603.") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") - endif() - elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel") # using Intel C++ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-intel -wd10237 -Wall -ipo -fPIC") @@ -377,48 +274,6 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") target_link_libraries(osrm-extract wsock32 ws2_32) endif() -# Configuring linker -execute_process(COMMAND ${CMAKE_CXX_COMPILER} "-Wl,--version" ERROR_QUIET OUTPUT_VARIABLE LINKER_VERSION) -# For ld.gold and ld.bfs (the GNU linkers) we optimize hard -if("${LINKER_VERSION}" MATCHES "GNU gold" OR "${LINKER_VERSION}" MATCHES "GNU ld") - message(STATUS "Setting linker optimizations") - if(NOT (CMAKE_CXX_COMPILER_ID MATCHES "MSVC" OR "${LD_AVOID_GC_SECTIONS}")) - # Tell compiler to put every function in separate section, linker can then match sections and functions - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections") - # Tell linker to do dead code and data eminination during link time discarding sections - set(LINKER_FLAGS "${LINKER_FLAGS} -Wl,--gc-sections") - endif() - # Default linker optimization flags - set(LINKER_FLAGS "${LINKER_FLAGS} -Wl,-O1 -Wl,--hash-style=gnu -Wl,--sort-common") - -else() - message(STATUS "Using unknown linker, not setting linker optimizations") -endif () -set(OSRM_LDFLAGS "${OSRM_LDFLAGS} ${LINKER_FLAGS}") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}") -set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}") -set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}") - -# Activate C++1y -if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") - set(OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -std=c++17") -endif() - -# Configuring other platform dependencies -if(APPLE) - execute_process(COMMAND xcrun --sdk macosx --show-sdk-path OUTPUT_VARIABLE CMAKE_OSX_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE) - exec_program(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION) - string(REGEX MATCH "[0-9]+" DARWIN_VERSION ${DARWIN_VERSION}) - if(OSXLIBSTD) - message(STATUS "linking against ${OSXLIBSTD}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=${OSXLIBSTD}") - elseif(DARWIN_VERSION GREATER 12) - message(STATUS "linking against libc++") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") - endif() -endif() - if(UNIX AND NOT APPLE) set(MAYBE_RT_LIBRARY -lrt) endif() @@ -550,12 +405,7 @@ if(ENABLE_CONAN) # expat and bzip2 are used from conan rather than the system include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include) else() - if (BUILD_ROUTED) - # osrm-routed requires newer boost:asio - find_package(Boost 1.70 REQUIRED COMPONENTS ${BOOST_COMPONENTS}) - else() - find_package(Boost 1.60 REQUIRED COMPONENTS ${BOOST_COMPONENTS}) - endif() + find_package(Boost 1.70 REQUIRED COMPONENTS ${BOOST_COMPONENTS}) add_dependency_includes(${Boost_INCLUDE_DIRS}) find_package(TBB REQUIRED) @@ -602,7 +452,6 @@ if(ENABLE_CCACHE AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILE message(STATUS "Using ccache to speed up incremental builds") set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) - set(ENV{CCACHE_CPP2} "true") endif() endif() diff --git a/cmake/CheckCXXCompilerFlag.cmake b/cmake/CheckCXXCompilerFlag.cmake deleted file mode 100644 index e396f75a9..000000000 --- a/cmake/CheckCXXCompilerFlag.cmake +++ /dev/null @@ -1,29 +0,0 @@ -# - Check whether the CXX compiler supports a given flag. -# CHECK_CXX_COMPILER_FLAG( ) -# - the compiler flag -# - variable to store the result -# This internally calls the check_cxx_source_compiles macro. See help -# for CheckCXXSourceCompiles for a listing of variables that can -# modify the build. - -# Copyright (c) 2006, Alexander Neundorf, -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - - -INCLUDE(CheckCXXSourceCompiles) - -MACRO (CHECK_CXX_COMPILER_FLAG _FLAG _RESULT) - SET(SAFE_CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}") - SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}") - CHECK_CXX_SOURCE_COMPILES("int main() { return 0;}" ${_RESULT} - # Some compilers do not fail with a bad flag - FAIL_REGEX "unrecognized .*option" # GNU - FAIL_REGEX "ignoring unknown option" # MSVC - FAIL_REGEX "[Uu]nknown option" # HP - FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro - FAIL_REGEX "command option .* is not recognized" # XL - ) - SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}") -ENDMACRO (CHECK_CXX_COMPILER_FLAG) diff --git a/cmake/JSONParser.cmake b/cmake/JSONParser.cmake index e1be64e0d..4912cc400 100644 --- a/cmake/JSONParser.cmake +++ b/cmake/JSONParser.cmake @@ -1,7 +1,7 @@ # https://github.com/sbellus/json-cmake/blob/9913da8800b95322d393894d3525d634568f305e/JSONParser.cmake # MIT Licensed - https://github.com/sbellus/json-cmake/blob/master/LICENSE -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.20) if (DEFINED JSonParserGuard) return() diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 154eda39b..30df75509 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.8) +cmake_minimum_required(VERSION 3.20) if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR AND NOT MSVC_IDE) message(FATAL_ERROR "In-source builds are not allowed. @@ -12,20 +12,18 @@ endif() project(osrm-example C CXX) +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -set(bitness 32) if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(bitness 64) message(STATUS "Building on a 64 bit system") else() message(STATUS "Building on a 32 bit system") endif() -if(WIN32 AND MSVC_VERSION LESS 1900) - message(FATAL_ERROR "Building with Microsoft compiler needs Latest Visual Studio 2015 (Community or better)") -endif() - link_directories(${LibOSRM_LIBRARY_DIRS}) add_executable(osrm-example example.cpp) diff --git a/src/nodejs/CMakeLists.txt b/src/nodejs/CMakeLists.txt index 85ee29ecf..3d896037a 100644 --- a/src/nodejs/CMakeLists.txt +++ b/src/nodejs/CMakeLists.txt @@ -1,6 +1,4 @@ -# node-cmake requires CMake 3.1 features; for the osrm project we only -# require CMake 2.8.11 so that we can build e.g. on Trusty by default. -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.20) message(STATUS "Building node_osrm") From 6e5f0d74bd6404c23308b2f75e94d49f70fb567c Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 18:50:37 +0100 Subject: [PATCH 43/75] Use cmake 3.18 instead of 3.20 because of debian support --- CMakeLists.txt | 2 +- example/CMakeLists.txt | 2 +- src/nodejs/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index edb9d65a5..1fcf8e1ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.20) +cmake_minimum_required(VERSION 3.18) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index 30df75509..1ec0ff9cc 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.20) +cmake_minimum_required(VERSION 3.18) if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR AND NOT MSVC_IDE) message(FATAL_ERROR "In-source builds are not allowed. diff --git a/src/nodejs/CMakeLists.txt b/src/nodejs/CMakeLists.txt index 3d896037a..ab1c123b9 100644 --- a/src/nodejs/CMakeLists.txt +++ b/src/nodejs/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.20) +cmake_minimum_required(VERSION 3.18) message(STATUS "Building node_osrm") From 529217277069d42692736b7018c212abae76627f Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 18:58:25 +0100 Subject: [PATCH 44/75] One more place where version is listed --- cmake/JSONParser.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/JSONParser.cmake b/cmake/JSONParser.cmake index 4912cc400..5822bf5f2 100644 --- a/cmake/JSONParser.cmake +++ b/cmake/JSONParser.cmake @@ -1,7 +1,7 @@ # https://github.com/sbellus/json-cmake/blob/9913da8800b95322d393894d3525d634568f305e/JSONParser.cmake # MIT Licensed - https://github.com/sbellus/json-cmake/blob/master/LICENSE -cmake_minimum_required(VERSION 3.20) +cmake_minimum_required(VERSION 3.18) if (DEFINED JSonParserGuard) return() From 1215062e4c425272f8d32639f76475879d299263 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 19:51:50 +0100 Subject: [PATCH 45/75] Port the used bits from CheapRuler, drop dependencies --- CMakeLists.txt | 5 - include/util/cheap_ruler.hpp | 88 + src/util/coordinate_calculation.cpp | 5 +- .../cheap-ruler-cpp-2778eb8/.clang-format | 18 - .../cheap-ruler-cpp-2778eb8/.gitignore | 2 - .../cheap-ruler-cpp-2778eb8/.travis.yml | 25 - .../cheap-ruler-cpp-2778eb8/CMakeLists.txt | 27 - third_party/cheap-ruler-cpp-2778eb8/LICENSE | 15 - third_party/cheap-ruler-cpp-2778eb8/README.md | 199 -- .../cheap-ruler-cpp-2778eb8/cmake/build.cmake | 11 - .../cheap-ruler-cpp-2778eb8/cmake/mason.cmake | 235 -- .../include/mapbox/cheap_ruler.hpp | 390 ---- .../test/cheap_ruler.cpp | 276 --- .../test/fixtures/lines.hpp | 8 - .../test/fixtures/turf.hpp | 1894 ----------------- third_party/geometry.hpp-0.9.2/.gitignore | 2 - third_party/geometry.hpp-0.9.2/.gitmodules | 3 - third_party/geometry.hpp-0.9.2/.travis.yml | 50 - third_party/geometry.hpp-0.9.2/LICENSE | 13 - third_party/geometry.hpp-0.9.2/Makefile | 19 - third_party/geometry.hpp-0.9.2/README.md | 83 - .../include/mapbox/geometry.hpp | 13 - .../include/mapbox/geometry/box.hpp | 34 - .../include/mapbox/geometry/envelope.hpp | 33 - .../include/mapbox/geometry/feature.hpp | 91 - .../mapbox/geometry/for_each_point.hpp | 45 - .../include/mapbox/geometry/geometry.hpp | 58 - .../include/mapbox/geometry/line_string.hpp | 21 - .../mapbox/geometry/multi_line_string.hpp | 21 - .../include/mapbox/geometry/multi_point.hpp | 21 - .../include/mapbox/geometry/multi_polygon.hpp | 21 - .../include/mapbox/geometry/point.hpp | 35 - .../mapbox/geometry/point_arithmetic.hpp | 119 -- .../include/mapbox/geometry/polygon.hpp | 31 - .../geometry.hpp-0.9.2/tests/collection.cpp | 5 - third_party/geometry.hpp-0.9.2/tests/test.cpp | 260 --- 36 files changed, 90 insertions(+), 4086 deletions(-) create mode 100644 include/util/cheap_ruler.hpp delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/.clang-format delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/.gitignore delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/.travis.yml delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/CMakeLists.txt delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/LICENSE delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/README.md delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/cmake/build.cmake delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/cmake/mason.cmake delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/include/mapbox/cheap_ruler.hpp delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/test/cheap_ruler.cpp delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/test/fixtures/lines.hpp delete mode 100644 third_party/cheap-ruler-cpp-2778eb8/test/fixtures/turf.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/.gitignore delete mode 100644 third_party/geometry.hpp-0.9.2/.gitmodules delete mode 100644 third_party/geometry.hpp-0.9.2/.travis.yml delete mode 100644 third_party/geometry.hpp-0.9.2/LICENSE delete mode 100644 third_party/geometry.hpp-0.9.2/Makefile delete mode 100644 third_party/geometry.hpp-0.9.2/README.md delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/box.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/envelope.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/feature.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/for_each_point.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/geometry.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/line_string.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_line_string.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_point.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_polygon.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/point.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/point_arithmetic.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/include/mapbox/geometry/polygon.hpp delete mode 100644 third_party/geometry.hpp-0.9.2/tests/collection.cpp delete mode 100644 third_party/geometry.hpp-0.9.2/tests/test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 86adcd678..475a367a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -432,11 +432,6 @@ include_directories(SYSTEM ${RAPIDJSON_INCLUDE_DIR}) set(MICROTAR_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/microtar/src") include_directories(SYSTEM ${MICROTAR_INCLUDE_DIR}) -set(MBXGEOM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/geometry.hpp-0.9.2/include") -include_directories(SYSTEM ${MBXGEOM_INCLUDE_DIR}) -set(CHEAPRULER_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/cheap-ruler-cpp-2778eb8/include") -include_directories(SYSTEM ${CHEAPRULER_INCLUDE_DIR}) - add_library(MICROTAR OBJECT "${CMAKE_CURRENT_SOURCE_DIR}/third_party/microtar/src/microtar.c") set_property(TARGET MICROTAR PROPERTY POSITION_INDEPENDENT_CODE ON) target_no_warning(MICROTAR unused-variable) diff --git a/include/util/cheap_ruler.hpp b/include/util/cheap_ruler.hpp new file mode 100644 index 000000000..b17c53dc6 --- /dev/null +++ b/include/util/cheap_ruler.hpp @@ -0,0 +1,88 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace mapbox { + +namespace geometry { + template + struct point + { + using coordinate_type = T; + + constexpr point() + : x(), y() + {} + constexpr point(T x_, T y_) + : x(x_), y(y_) + {} + + T x; + T y; + }; +} + +namespace cheap_ruler { + +using point = geometry::point; + +class CheapRuler { + + // Values that define WGS84 ellipsoid model of the Earth + static constexpr double RE = 6378.137; // equatorial radius + static constexpr double FE = 1.0 / 298.257223563; // flattening + + static constexpr double E2 = FE * (2 - FE); + static constexpr double RAD = M_PI / 180.0; + +public: + explicit CheapRuler(double latitude) { + // Curvature formulas from https://en.wikipedia.org/wiki/Earth_radius#Meridional + double mul = RAD * RE * 1000; + double coslat = std::cos(latitude * RAD); + double w2 = 1 / (1 - E2 * (1 - coslat * coslat)); + double w = std::sqrt(w2); + + // multipliers for converting longitude and latitude degrees into distance + kx = mul * w * coslat; // based on normal radius of curvature + ky = mul * w * w2 * (1 - E2); // based on meridonal radius of curvature + } + + double squareDistance(point a, point b) const { + auto dx = longDiff(a.x, b.x) * kx; + auto dy = (a.y - b.y) * ky; + return dx * dx + dy * dy; + } + + // + // Given two points of the form [x = longitude, y = latitude], returns the distance. + // + double distance(point a, point b) const { + return std::sqrt(squareDistance(a, b)); + } + + // + // Returns the bearing between two points in angles. + // + double bearing(point a, point b) const { + auto dx = longDiff(b.x, a.x) * kx; + auto dy = (b.y - a.y) * ky; + + return std::atan2(dx, dy) / RAD; + } + +private: + double ky; + double kx; + static double longDiff(double a, double b) { + return std::remainder(a - b, 360); + } +}; + +} // namespace cheap_ruler +} // namespace mapbox diff --git a/src/util/coordinate_calculation.cpp b/src/util/coordinate_calculation.cpp index ec95a382a..f62ec7be2 100644 --- a/src/util/coordinate_calculation.cpp +++ b/src/util/coordinate_calculation.cpp @@ -1,12 +1,11 @@ #include "util/coordinate_calculation.hpp" +#include "util/cheap_ruler.hpp" #include "util/coordinate.hpp" #include "util/trigonometry_table.hpp" #include "util/web_mercator.hpp" #include -#include - #include #include #include @@ -32,7 +31,7 @@ class CheapRulerContainer for (int n = 0; n < number_of_rulers; n++) { cheap_ruler_cache[n] = mapbox::cheap_ruler::CheapRuler( - step * (n + 0.5) / COORDINATE_PRECISION, mapbox::cheap_ruler::CheapRuler::Meters); + step * (n + 0.5) / COORDINATE_PRECISION); } }; diff --git a/third_party/cheap-ruler-cpp-2778eb8/.clang-format b/third_party/cheap-ruler-cpp-2778eb8/.clang-format deleted file mode 100644 index ff0f39e73..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/.clang-format +++ /dev/null @@ -1,18 +0,0 @@ -Standard: Cpp11 -IndentWidth: 4 -AccessModifierOffset: -4 -UseTab: Never -BinPackParameters: false -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: false -AllowShortBlocksOnASingleLine: false -AllowShortFunctionsOnASingleLine: false -ConstructorInitializerAllOnOneLineOrOnePerLine: true -AlwaysBreakTemplateDeclarations: true -NamespaceIndentation: None -PointerBindsToType: true -SpacesInParentheses: false -BreakBeforeBraces: Attach -ColumnLimit: 100 -Cpp11BracedListStyle: false -SpacesBeforeTrailingComments: 1 diff --git a/third_party/cheap-ruler-cpp-2778eb8/.gitignore b/third_party/cheap-ruler-cpp-2778eb8/.gitignore deleted file mode 100644 index 7117dfc1b..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -build/ -mason_packages/ diff --git a/third_party/cheap-ruler-cpp-2778eb8/.travis.yml b/third_party/cheap-ruler-cpp-2778eb8/.travis.yml deleted file mode 100644 index 260d944a3..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -language: generic - -matrix: - include: - - os: linux - env: CXX=g++-4.9 - sudo: required - dist: trusty - addons: - apt: - sources: [ 'ubuntu-toolchain-r-test' ] - packages: [ 'g++-4.9', 'cmake', 'cmake-data' ] - - os: linux - env: CXX=g++-5 - sudo: required - dist: trusty - addons: - apt: - sources: [ 'ubuntu-toolchain-r-test' ] - packages: [ 'g++-5', 'cmake', 'cmake-data' ] - -cache: apt - -script: - - cmake . && make && ./cheap_ruler diff --git a/third_party/cheap-ruler-cpp-2778eb8/CMakeLists.txt b/third_party/cheap-ruler-cpp-2778eb8/CMakeLists.txt deleted file mode 100644 index 31bc80592..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR) -project(cheap_ruler LANGUAGES CXX C) - -include(cmake/build.cmake) -include(cmake/mason.cmake) - -set(CMAKE_OSX_DEPLOYMENT_TARGET 10.10) -set(CMAKE_CONFIGURATION_TYPES Debug Release) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Wextra -Wpedantic -Wshadow") - -mason_use(geometry VERSION 0.9.2 HEADER_ONLY) -mason_use(gtest VERSION 1.8.0) -mason_use(variant VERSION 1.1.4 HEADER_ONLY) - -add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) - -add_executable(cheap_ruler - ${PROJECT_SOURCE_DIR}/test/cheap_ruler.cpp -) - -target_include_directories(cheap_ruler - PUBLIC ${PROJECT_SOURCE_DIR}/include -) - -target_add_mason_package(cheap_ruler PRIVATE geometry) -target_add_mason_package(cheap_ruler PRIVATE gtest) -target_add_mason_package(cheap_ruler PRIVATE variant) diff --git a/third_party/cheap-ruler-cpp-2778eb8/LICENSE b/third_party/cheap-ruler-cpp-2778eb8/LICENSE deleted file mode 100644 index 6f4f868bb..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -ISC License - -Copyright (c) 2017, Mapbox - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff --git a/third_party/cheap-ruler-cpp-2778eb8/README.md b/third_party/cheap-ruler-cpp-2778eb8/README.md deleted file mode 100644 index 40ceab3e4..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/README.md +++ /dev/null @@ -1,199 +0,0 @@ -# cheap-ruler-cpp - -Port to C++ of [Cheap Ruler](https://github.com/mapbox/cheap-ruler), a collection of very fast approximations to common geodesic measurements. - -[![Build Status](https://travis-ci.org/mapbox/cheap-ruler-cpp.svg?branch=master)](https://travis-ci.org/mapbox/cheap-ruler-cpp) - -# Usage - -```cpp -#include - -namespace cr = mapbox::cheap_ruler; -``` - -All `point`, `line_string`, `polygon`, and `box` references are [mapbox::geometry](https://github.com/mapbox/geometry.hpp) data structures. - -## Create a ruler object - -#### `CheapRuler(double latitude, Unit unit)` - -Creates a ruler object that will approximate measurements around the given latitude with an optional distance unit. Once created, the ruler object has access to the [methods](#methods) below. - -```cpp -auto ruler = cr::CheapRuler(32.8351); -auto milesRuler = cr::CheapRuler(32.8351, cr::CheapRuler::Miles); -``` - -Possible units: - -* `cheap_ruler::CheapRuler::Unit` -* `cheap_ruler::CheapRuler::Kilometers` -* `cheap_ruler::CheapRuler::Miles` -* `cheap_ruler::CheapRuler::NauticalMiles` -* `cheap_ruler::CheapRuler::Meters` -* `cheap_ruler::CheapRuler::Yards` -* `cheap_ruler::CheapRuler::Feet` -* `cheap_ruler::CheapRuler::Inches` - -#### `CheapRuler::fromTile(uint32_t y, uint32_t z)` - -Creates a ruler object from tile coordinates (`y` and `z` integers). Convenient in tile-reduce scripts. - -```cpp -auto ruler = cr::CheapRuler::fromTile(11041, 15); -``` - -## Methods - -#### `distance(point a, point b)` - -Given two points of the form [x = longitude, y = latitude], returns the distance (`double`). - -```cpp -cr::point point_a{-96.9148, 32.8351}; -cr::point point_b{-96.9146, 32.8386}; -auto distance = ruler.distance(point_a, point_b); -std::clog << distance; // 0.388595 -``` - -#### `bearing(point a, point b)` - -Returns the bearing (`double`) between two points in angles. - -```cpp -cr::point point_a{-96.9148, 32.8351}; -cr::point point_b{-96.9146, 32.8386}; -auto bearing = ruler.bearing(point_a, point_b); -std::clog << bearing; // 2.76206 -``` - -#### `destination(point origin, double distance, double bearing)` - -Returns a new point (`point`) given distance and bearing from the starting point. - -```cpp -cr::point point_a{-96.9148, 32.8351}; -auto dest = ruler.destination(point_a, 1.0, -175); -std::clog << dest.x << ", " << dest.y; // -96.9148, 32.8261 -``` - -#### `offset(point origin, double dx, double dy)` - -Returns a new point (`point`) given easting and northing offsets from the starting point. - -```cpp -cr::point point_a{-96.9148, 32.8351}; -auto os = ruler.offset(point_a, 10.0, -5.0); -std::clog << os.x << ", " << os.y; // -96.808, 32.79 -``` - -#### `lineDistance(const line_string& points)` - -Given a line (an array of points), returns the total line distance (`double`). - -```cpp -cr::line_string line_a{{ -96.9, 32.8 }, { -96.8, 32.8 }, { -96.2, 32.3 }}; -auto line_distance = ruler.lineDistance(line_a); -std::clog << line_distance; // 88.2962 -``` - -#### `area(polygon poly)` - -Given a polygon (an array of rings, where each ring is an array of points), returns the area (`double`). - -```cpp -cr::linear_ring ring{{ -96.9, 32.8 }, { -96.8, 32.8 }, { -96.2, 32.3 }, { -96.9, 32.8 }}; -auto area = ruler.area(cr::polygon{ ring }); -std::clog << area; // -``` - -#### `along(const line_string& line, double distance)` - -Returns the point (`point`) at a specified distance along the line. - -```cpp -cr::linear_ring ring{{ -96.9, 32.8 }, { -96.8, 32.8 }, { -96.2, 32.3 }, { -96.9, 32.8 }}; -auto area = ruler.area(cr::polygon{ ring }); -std::clog << area; // 259.581 -``` - -#### `pointOnLine(const line_string& line, point p)` - -Returns a tuple of the form `std::pair` where point is closest point on the line from the given point, index is the start index of the segment with the closest point, and t is a parameter from 0 to 1 that indicates where the closest point is on that segment. - -```cpp -cr::line_string line{{ -96.9, 32.8 }, { -96.8, 32.8 }, { -96.2, 32.3 }}; -cr::point point{-96.9, 32.79}; -auto pol = ruler.pointOnLine(line, point); -auto point = std::get<0>(pol); -std::clog << point.x << ", " << point.y; // -96.9, 32.8 (point) -std::clog << std::get<1>(pol); // 0 (index) -std::clog << std::get<2>(pol); // 0. (t) -``` - -#### `lineSlice(point start, point stop, const line_string& line)` - -Returns a part of the given line (`line_string`) between the start and the stop points (or their closest points on the line). - -```cpp -cr::line_string line{{ -96.9, 32.8 }, { -96.8, 32.8 }, { -96.2, 32.3 }}; -cr::point start_point{-96.9, 32.8}; -cr::point stop_point{-96.8, 32.8}; -auto slice = ruler.lineSlice(start_point, stop_point, line); -std::clog << slice[0].x << ", " << slice[0].y; // -96.9, 32.8 -std::clog << slice[1].x << ", " << slice[1].y; // -96.8, 32.8 -``` - -#### `lineSliceAlong(double start, double stop, const line_string& line)` - -Returns a part of the given line (`line_string`) between the start and the stop points indicated by distance along the line. - -```cpp -cr::line_string line{{ -96.9, 32.8 }, { -96.8, 32.8 }, { -96.2, 32.3 }}; -auto slice = ruler.lineSliceAlong(0.1, 1.2, line); -``` - -#### `bufferPoint(point p, double buffer)` - -Given a point, returns a bounding box object ([w, s, e, n]) created from the given point buffered by a given distance. - -```cpp -cr::point point{-96.9, 32.8}; -auto box = ruler.bufferPoint(point, 0.1); -``` - -#### `bufferBBox(box bbox, double buffer)` - -Given a bounding box, returns the box buffered by a given distance. - -```cpp -cr::box bbox({ 30, 38 }, { 40, 39 }); -auto bbox2 = ruler.bufferBBox(bbox, 1); -``` - -#### `insideBBox(point p, box bbox)` - -Returns true (`bool`) if the given point is inside in the given bounding box, otherwise false. - -```cpp -cr::box bbox({ 30, 38 }, { 40, 39 }); -auto inside = ruler.insideBBox({ 35, 38.5 }, bbox); -std::clog << inside; // true -``` - -# Develop - -```shell -# create targets -cmake . - -# build -make - -# test -./cheap_ruler - -# or just do it all in one! -cmake . && make && ./cheap_ruler -``` diff --git a/third_party/cheap-ruler-cpp-2778eb8/cmake/build.cmake b/third_party/cheap-ruler-cpp-2778eb8/cmake/build.cmake deleted file mode 100644 index 79168336d..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/cmake/build.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# Generate source groups so the files are properly sorted in IDEs like Xcode. -function(create_source_groups target) - get_target_property(sources ${target} SOURCES) - foreach(file ${sources}) - get_filename_component(file "${file}" ABSOLUTE) - string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/" "" group "${file}") - get_filename_component(group "${group}" DIRECTORY) - string(REPLACE "/" "\\" group "${group}") - source_group("${group}" FILES "${file}") - endforeach() -endfunction() diff --git a/third_party/cheap-ruler-cpp-2778eb8/cmake/mason.cmake b/third_party/cheap-ruler-cpp-2778eb8/cmake/mason.cmake deleted file mode 100644 index bc31feeb5..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/cmake/mason.cmake +++ /dev/null @@ -1,235 +0,0 @@ -# Mason CMake - -include(CMakeParseArguments) - -function(mason_detect_platform) - # Determine platform - if(NOT MASON_PLATFORM) - # we call uname -s manually here since - # CMAKE_HOST_SYSTEM_NAME will not be defined before the project() call - execute_process( - COMMAND uname -s - OUTPUT_VARIABLE UNAME - OUTPUT_STRIP_TRAILING_WHITESPACE) - - if (UNAME STREQUAL "Darwin") - set(MASON_PLATFORM "osx" PARENT_SCOPE) - else() - set(MASON_PLATFORM "linux" PARENT_SCOPE) - endif() - endif() - - # Determine platform version string - if(NOT MASON_PLATFORM_VERSION) - # Android Studio only passes ANDROID_ABI, but we need to adjust that to the Mason - if(MASON_PLATFORM STREQUAL "android" AND NOT MASON_PLATFORM_VERSION) - if (ANDROID_ABI STREQUAL "armeabi") - set(MASON_PLATFORM_VERSION "arm-v5-9" PARENT_SCOPE) - elseif (ANDROID_ABI STREQUAL "armeabi-v7a") - set(MASON_PLATFORM_VERSION "arm-v7-9" PARENT_SCOPE) - elseif (ANDROID_ABI STREQUAL "arm64-v8a") - set(MASON_PLATFORM_VERSION "arm-v8-21" PARENT_SCOPE) - elseif (ANDROID_ABI STREQUAL "x86") - set(MASON_PLATFORM_VERSION "x86-9" PARENT_SCOPE) - elseif (ANDROID_ABI STREQUAL "x86_64") - set(MASON_PLATFORM_VERSION "x86-64-21" PARENT_SCOPE) - elseif (ANDROID_ABI STREQUAL "mips") - set(MASON_PLATFORM_VERSION "mips-9" PARENT_SCOPE) - elseif (ANDROID_ABI STREQUAL "mips64") - set(MASON_PLATFORM_VERSION "mips-64-9" PARENT_SCOPE) - else() - message(FATAL_ERROR "Unknown ANDROID_ABI '${ANDROID_ABI}'.") - endif() - elseif(MASON_PLATFORM STREQUAL "ios") - set(MASON_PLATFORM_VERSION "8.0" PARENT_SCOPE) - else() - execute_process( - COMMAND uname -m - OUTPUT_VARIABLE MASON_PLATFORM_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(MASON_PLATFORM_VERSION "${MASON_PLATFORM_VERSION}" PARENT_SCOPE) - endif() - endif() -endfunction() - -function(mason_use _PACKAGE) - if(NOT _PACKAGE) - message(FATAL_ERROR "[Mason] No package name given") - endif() - - cmake_parse_arguments("" "HEADER_ONLY" "VERSION" "" ${ARGN}) - - if(_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "[Mason] mason_use() called with unrecognized arguments: ${_UNPARSED_ARGUMENTS}") - endif() - - if(NOT _VERSION) - message(FATAL_ERROR "[Mason] Specifying a version is required") - endif() - - if(MASON_PACKAGE_${_PACKAGE}_INVOCATION STREQUAL "${MASON_INVOCATION}") - # Check that the previous invocation of mason_use didn't select another version of this package - if(NOT MASON_PACKAGE_${_PACKAGE}_VERSION STREQUAL ${_VERSION}) - message(FATAL_ERROR "[Mason] Already using ${_PACKAGE} ${MASON_PACKAGE_${_PACKAGE}_VERSION}. Cannot select version ${_VERSION}.") - endif() - else() - if(_HEADER_ONLY) - set(_PLATFORM_ID "headers") - else() - set(_PLATFORM_ID "${MASON_PLATFORM}-${MASON_PLATFORM_VERSION}") - endif() - - set(_SLUG "${_PLATFORM_ID}/${_PACKAGE}/${_VERSION}") - set(_INSTALL_PATH "${MASON_PACKAGE_DIR}/${_SLUG}") - file(RELATIVE_PATH _INSTALL_PATH_RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${_INSTALL_PATH}") - - if(NOT EXISTS "${_INSTALL_PATH}") - set(_CACHE_PATH "${MASON_PACKAGE_DIR}/.binaries/${_SLUG}.tar.gz") - if (NOT EXISTS "${_CACHE_PATH}") - # Download the package - set(_URL "${MASON_REPOSITORY}/${_SLUG}.tar.gz") - message("[Mason] Downloading package ${_URL}...") - - set(_FAILED) - set(_ERROR) - # Note: some CMake versions are compiled without SSL support - get_filename_component(_CACHE_DIR "${_CACHE_PATH}" DIRECTORY) - file(MAKE_DIRECTORY "${_CACHE_DIR}") - execute_process( - COMMAND curl --retry 3 -s -f -S -L "${_URL}" -o "${_CACHE_PATH}.tmp" - RESULT_VARIABLE _FAILED - ERROR_VARIABLE _ERROR) - if(_FAILED) - message(FATAL_ERROR "[Mason] Failed to download ${_URL}: ${_ERROR}") - else() - # We downloaded to a temporary file to prevent half-finished downloads - file(RENAME "${_CACHE_PATH}.tmp" "${_CACHE_PATH}") - endif() - endif() - - # Unpack the package - message("[Mason] Unpacking package to ${_INSTALL_PATH_RELATIVE}...") - file(MAKE_DIRECTORY "${_INSTALL_PATH}") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar xzf "${_CACHE_PATH}" - WORKING_DIRECTORY "${_INSTALL_PATH}") - endif() - - # Error out if there is no config file. - if(NOT EXISTS "${_INSTALL_PATH}/mason.ini") - message(FATAL_ERROR "[Mason] Could not find mason.ini for package ${_PACKAGE} ${_VERSION}") - endif() - - set(MASON_PACKAGE_${_PACKAGE}_PREFIX "${_INSTALL_PATH}" CACHE STRING "${_PACKAGE} ${_INSTALL_PATH}" FORCE) - mark_as_advanced(MASON_PACKAGE_${_PACKAGE}_PREFIX) - - # Load the configuration from the ini file - file(STRINGS "${_INSTALL_PATH}/mason.ini" _CONFIG_FILE) - foreach(_LINE IN LISTS _CONFIG_FILE) - string(REGEX MATCH "^([a-z_]+) *= *" _KEY "${_LINE}") - if (_KEY) - string(LENGTH "${_KEY}" _KEY_LENGTH) - string(SUBSTRING "${_LINE}" ${_KEY_LENGTH} -1 _VALUE) - string(REGEX REPLACE ";.*$" "" _VALUE "${_VALUE}") # Trim trailing commas - string(REPLACE "{prefix}" "${_INSTALL_PATH}" _VALUE "${_VALUE}") - string(STRIP "${_VALUE}" _VALUE) - string(REPLACE "=" "" _KEY "${_KEY}") - string(STRIP "${_KEY}" _KEY) - string(TOUPPER "${_KEY}" _KEY) - if(_KEY STREQUAL "INCLUDE_DIRS" OR _KEY STREQUAL "STATIC_LIBS" ) - separate_arguments(_VALUE) - endif() - set(MASON_PACKAGE_${_PACKAGE}_${_KEY} "${_VALUE}" CACHE STRING "${_PACKAGE} ${_KEY}" FORCE) - mark_as_advanced(MASON_PACKAGE_${_PACKAGE}_${_KEY}) - endif() - endforeach() - - # Compare version in the package to catch errors early on - if(NOT _VERSION STREQUAL MASON_PACKAGE_${_PACKAGE}_VERSION) - message(FATAL_ERROR "[Mason] Package at ${_INSTALL_PATH_RELATIVE} has version '${MASON_PACKAGE_${_PACKAGE}_VERSION}', but required '${_VERSION}'") - endif() - - if(NOT _PACKAGE STREQUAL MASON_PACKAGE_${_PACKAGE}_NAME) - message(FATAL_ERROR "[Mason] Package at ${_INSTALL_PATH_RELATIVE} has name '${MASON_PACKAGE_${_PACKAGE}_NAME}', but required '${_NAME}'") - endif() - - if(NOT _HEADER_ONLY) - if(NOT MASON_PLATFORM STREQUAL MASON_PACKAGE_${_PACKAGE}_PLATFORM) - message(FATAL_ERROR "[Mason] Package at ${_INSTALL_PATH_RELATIVE} has platform '${MASON_PACKAGE_${_PACKAGE}_PLATFORM}', but required '${MASON_PLATFORM}'") - endif() - - if(NOT MASON_PLATFORM_VERSION STREQUAL MASON_PACKAGE_${_PACKAGE}_PLATFORM_VERSION) - message(FATAL_ERROR "[Mason] Package at ${_INSTALL_PATH_RELATIVE} has platform version '${MASON_PACKAGE_${_PACKAGE}_PLATFORM_VERSION}', but required '${MASON_PLATFORM_VERSION}'") - endif() - endif() - - # Concatenate the static libs and libraries - set(_LIBRARIES) - list(APPEND _LIBRARIES ${MASON_PACKAGE_${_PACKAGE}_STATIC_LIBS} ${MASON_PACKAGE_${_PACKAGE}_LDFLAGS}) - set(MASON_PACKAGE_${_PACKAGE}_LIBRARIES "${_LIBRARIES}" CACHE STRING "${_PACKAGE} _LIBRARIES" FORCE) - mark_as_advanced(MASON_PACKAGE_${_PACKAGE}_LIBRARIES) - - if(NOT _HEADER_ONLY) - string(REGEX MATCHALL "(^| +)-L *([^ ]+)" MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS "${MASON_PACKAGE_${_PACKAGE}_LDFLAGS}") - string(REGEX REPLACE "(^| +)-L *" "\\1" MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS "${MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS}") - set(MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS "${MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS}" CACHE STRING "${_PACKAGE} ${MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS}" FORCE) - mark_as_advanced(MASON_PACKAGE_${_PACKAGE}_LIBRARY_DIRS) - endif() - - # Store invocation ID to prevent different versions of the same package in one invocation - set(MASON_PACKAGE_${_PACKAGE}_INVOCATION "${MASON_INVOCATION}" CACHE INTERNAL "${_PACKAGE} invocation ID" FORCE) - endif() -endfunction() - -macro(target_add_mason_package _TARGET _VISIBILITY _PACKAGE) - if (NOT MASON_PACKAGE_${_PACKAGE}_INVOCATION) - message(FATAL_ERROR "[Mason] Package ${_PACKAGE} has not been initialized yet") - endif() - - target_include_directories(${_TARGET} ${_VISIBILITY} "${MASON_PACKAGE_${_PACKAGE}_INCLUDE_DIRS}") - target_compile_definitions(${_TARGET} ${_VISIBILITY} "${MASON_PACKAGE_${_PACKAGE}_DEFINITIONS}") - target_compile_options(${_TARGET} ${_VISIBILITY} "${MASON_PACKAGE_${_PACKAGE}_OPTIONS}") - target_link_libraries(${_TARGET} ${_VISIBILITY} "${MASON_PACKAGE_${_PACKAGE}_LIBRARIES}") -endmacro() - -# Setup - -string(RANDOM LENGTH 16 MASON_INVOCATION) - -# Read environment variables if CMake is run in command mode -if (CMAKE_ARGC) - set(MASON_PLATFORM "$ENV{MASON_PLATFORM}") - set(MASON_PLATFORM_VERSION "$ENV{MASON_PLATFORM_VERSION}") - set(MASON_PACKAGE_DIR "$ENV{MASON_PACKAGE_DIR}") - set(MASON_REPOSITORY "$ENV{MASON_REPOSITORY}") -endif() - -# Directory where Mason packages are located; typically ends with mason_packages -if (NOT MASON_PACKAGE_DIR) - set(MASON_PACKAGE_DIR "${CMAKE_SOURCE_DIR}/mason_packages") -endif() - -# URL prefix of where packages are located. -if (NOT MASON_REPOSITORY) - set(MASON_REPOSITORY "https://mason-binaries.s3.amazonaws.com") -endif() - -mason_detect_platform() - -# Execute commands if CMake is run in command mode -if (CMAKE_ARGC) - # Collect remaining arguments for passing to mason_use - set(_MASON_ARGS) - foreach(I RANGE 4 ${CMAKE_ARGC}) - list(APPEND _MASON_ARGS "${CMAKE_ARGV${I}}") - endforeach() - - # Install the package - mason_use(${_MASON_ARGS}) - - # Optionally print variables - if(DEFINED MASON_PACKAGE_${CMAKE_ARGV4}_${CMAKE_ARGV3}) - # CMake can't write to stdout with message() - execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${MASON_PACKAGE_${CMAKE_ARGV4}_${CMAKE_ARGV3}}") - endif() -endif() diff --git a/third_party/cheap-ruler-cpp-2778eb8/include/mapbox/cheap_ruler.hpp b/third_party/cheap-ruler-cpp-2778eb8/include/mapbox/cheap_ruler.hpp deleted file mode 100644 index 19854fc08..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/include/mapbox/cheap_ruler.hpp +++ /dev/null @@ -1,390 +0,0 @@ -#pragma once - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -namespace mapbox { -namespace cheap_ruler { - -using box = geometry::box; -using line_string = geometry::line_string; -using linear_ring = geometry::linear_ring; -using multi_line_string = geometry::multi_line_string; -using point = geometry::point; -using polygon = geometry::polygon; - -class CheapRuler { - - // Values that define WGS84 ellipsoid model of the Earth - static constexpr double RE = 6378.137; // equatorial radius - static constexpr double FE = 1.0 / 298.257223563; // flattening - - static constexpr double E2 = FE * (2 - FE); - static constexpr double RAD = M_PI / 180.0; - -public: - enum Unit { - Kilometers, - Miles, - NauticalMiles, - Meters, - Metres = Meters, - Yards, - Feet, - Inches - }; - - // - // A collection of very fast approximations to common geodesic measurements. Useful - // for performance-sensitive code that measures things on a city scale. Point coordinates - // are in the [x = longitude, y = latitude] form. - // - explicit CheapRuler(double latitude, Unit unit = Kilometers) { - double m = 0.; - - switch (unit) { - case Kilometers: - m = 1.; - break; - case Miles: - m = 1000. / 1609.344; - break; - case NauticalMiles: - m = 1000. / 1852.; - break; - case Meters: - m = 1000.; - break; - case Yards: - m = 1000. / 0.9144; - break; - case Feet: - m = 1000. / 0.3048; - break; - case Inches: - m = 1000. / 0.0254; - break; - } - - // Curvature formulas from https://en.wikipedia.org/wiki/Earth_radius#Meridional - double mul = RAD * RE * m; - double coslat = std::cos(latitude * RAD); - double w2 = 1 / (1 - E2 * (1 - coslat * coslat)); - double w = std::sqrt(w2); - - // multipliers for converting longitude and latitude degrees into distance - kx = mul * w * coslat; // based on normal radius of curvature - ky = mul * w * w2 * (1 - E2); // based on meridonal radius of curvature - } - - static CheapRuler fromTile(uint32_t y, uint32_t z) { - assert(z < 32); - double n = M_PI * (1. - 2. * (y + 0.5) / double(uint32_t(1) << z)); - double latitude = std::atan(std::sinh(n)) / RAD; - - return CheapRuler(latitude); - } - - double squareDistance(point a, point b) const { - auto dx = longDiff(a.x, b.x) * kx; - auto dy = (a.y - b.y) * ky; - return dx * dx + dy * dy; - } - - // - // Given two points of the form [x = longitude, y = latitude], returns the distance. - // - double distance(point a, point b) const { - return std::sqrt(squareDistance(a, b)); - } - - // - // Returns the bearing between two points in angles. - // - double bearing(point a, point b) const { - auto dx = longDiff(b.x, a.x) * kx; - auto dy = (b.y - a.y) * ky; - - return std::atan2(dx, dy) / RAD; - } - - // - // Returns a new point given distance and bearing from the starting point. - // - point destination(point origin, double dist, double bearing_) const { - auto a = bearing_ * RAD; - - return offset(origin, std::sin(a) * dist, std::cos(a) * dist); - } - - // - // Returns a new point given easting and northing offsets from the starting point. - // - point offset(point origin, double dx, double dy) const { - return point(origin.x + dx / kx, origin.y + dy / ky); - } - - // - // Given a line (an array of points), returns the total line distance. - // - double lineDistance(const line_string& points) { - double total = 0.; - - for (size_t i = 1; i < points.size(); ++i) { - total += distance(points[i - 1], points[i]); - } - - return total; - } - - // - // Given a polygon (an array of rings, where each ring is an array of points), - // returns the area. - // - double area(polygon poly) const { - double sum = 0.; - - for (unsigned i = 0; i < poly.size(); ++i) { - auto& ring = poly[i]; - - for (unsigned j = 0, len = ring.size(), k = len - 1; j < len; k = j++) { - sum += longDiff(ring[j].x, ring[k].x) * - (ring[j].y + ring[k].y) * (i ? -1. : 1.); - } - } - - return (std::abs(sum) / 2.) * kx * ky; - } - - // - // Returns the point at a specified distance along the line. - // - point along(const line_string& line, double dist) const { - double sum = 0.; - - if (line.empty()) { - return {}; - } - - if (dist <= 0.) { - return line[0]; - } - - for (unsigned i = 0; i < line.size() - 1; ++i) { - auto p0 = line[i]; - auto p1 = line[i + 1]; - auto d = distance(p0, p1); - - sum += d; - - if (sum > dist) { - return interpolate(p0, p1, (dist - (sum - d)) / d); - } - } - - return line[line.size() - 1]; - } - - // - // Returns the distance from a point `p` to a line segment `a` to `b`. - // - double pointToSegmentDistance(const point& p, const point& a, const point& b) const { - auto t = 0.0; - auto x = a.x; - auto y = a.y; - auto dx = longDiff(b.x, x) * kx; - auto dy = (b.y - y) * ky; - - if (dx != 0.0 || dy != 0.0) { - t = (longDiff(p.x, x) * kx * dx + (p.y - y) * ky * dy) / (dx * dx + dy * dy); - if (t > 1.0) { - x = b.x; - y = b.y; - } else if (t > 0.0) { - x += (dx / kx) * t; - y += (dy / ky) * t; - } - } - return distance(p, { x, y }); - } - - // - // Returns a tuple of the form where point is closest point on the line - // from the given point, index is the start index of the segment with the closest point, - // and t is a parameter from 0 to 1 that indicates where the closest point is on that segment. - // - std::tuple pointOnLine(const line_string& line, point p) const { - double minDist = std::numeric_limits::infinity(); - double minX = 0., minY = 0., minI = 0., minT = 0.; - - if (line.empty()) { - return std::make_tuple(point(), 0., 0.); - } - - for (unsigned i = 0; i < line.size() - 1; ++i) { - auto t = 0.; - auto x = line[i].x; - auto y = line[i].y; - auto dx = longDiff(line[i + 1].x, x) * kx; - auto dy = (line[i + 1].y - y) * ky; - - if (dx != 0. || dy != 0.) { - t = (longDiff(p.x, x) * kx * dx + - (p.y - y) * ky * dy) / (dx * dx + dy * dy); - if (t > 1) { - x = line[i + 1].x; - y = line[i + 1].y; - - } else if (t > 0) { - x += (dx / kx) * t; - y += (dy / ky) * t; - } - } - - auto sqDist = squareDistance(p, {x, y}); - - if (sqDist < minDist) { - minDist = sqDist; - minX = x; - minY = y; - minI = i; - minT = t; - } - } - - return std::make_tuple( - point(minX, minY), minI, ::fmax(0., ::fmin(1., minT))); - } - - // - // Returns a part of the given line between the start and the stop points (or their closest - // points on the line). - // - line_string lineSlice(point start, point stop, const line_string& line) const { - auto getPoint = [](auto tuple) { return std::get<0>(tuple); }; - auto getIndex = [](auto tuple) { return std::get<1>(tuple); }; - auto getT = [](auto tuple) { return std::get<2>(tuple); }; - - auto p1 = pointOnLine(line, start); - auto p2 = pointOnLine(line, stop); - - if (getIndex(p1) > getIndex(p2) || (getIndex(p1) == getIndex(p2) && getT(p1) > getT(p2))) { - auto tmp = p1; - p1 = p2; - p2 = tmp; - } - - line_string slice = { getPoint(p1) }; - - auto l = getIndex(p1) + 1; - auto r = getIndex(p2); - - if (line[l] != slice[0] && l <= r) { - slice.push_back(line[l]); - } - - for (unsigned i = l + 1; i <= r; ++i) { - slice.push_back(line[i]); - } - - if (line[r] != getPoint(p2)) { - slice.push_back(getPoint(p2)); - } - - return slice; - }; - - // - // Returns a part of the given line between the start and the stop points - // indicated by distance along the line. - // - line_string lineSliceAlong(double start, double stop, const line_string& line) const { - double sum = 0.; - line_string slice; - - for (size_t i = 1; i < line.size(); ++i) { - auto p0 = line[i - 1]; - auto p1 = line[i]; - auto d = distance(p0, p1); - - sum += d; - - if (sum > start && slice.size() == 0) { - slice.push_back(interpolate(p0, p1, (start - (sum - d)) / d)); - } - - if (sum >= stop) { - slice.push_back(interpolate(p0, p1, (stop - (sum - d)) / d)); - return slice; - } - - if (sum > start) { - slice.push_back(p1); - } - } - - return slice; - }; - - // - // Given a point, returns a bounding box object ([w, s, e, n]) - // created from the given point buffered by a given distance. - // - box bufferPoint(point p, double buffer) const { - auto v = buffer / ky; - auto h = buffer / kx; - - return box( - point(p.x - h, p.y - v), - point(p.x + h, p.y + v) - ); - } - - // - // Given a bounding box, returns the box buffered by a given distance. - // - box bufferBBox(box bbox, double buffer) const { - auto v = buffer / ky; - auto h = buffer / kx; - - return box( - point(bbox.min.x - h, bbox.min.y - v), - point(bbox.max.x + h, bbox.max.y + v) - ); - } - - // - // Returns true if the given point is inside in the given bounding box, otherwise false. - // - static bool insideBBox(point p, box bbox) { - return p.y >= bbox.min.y && - p.y <= bbox.max.y && - longDiff(p.x, bbox.min.x) >= 0 && - longDiff(p.x, bbox.max.x) <= 0; - } - - static point interpolate(point a, point b, double t) { - double dx = longDiff(b.x, a.x); - double dy = b.y - a.y; - - return point(a.x + dx * t, a.y + dy * t); - } - -private: - double ky; - double kx; - static double longDiff(double a, double b) { - return std::remainder(a - b, 360); - } -}; - -} // namespace cheap_ruler -} // namespace mapbox diff --git a/third_party/cheap-ruler-cpp-2778eb8/test/cheap_ruler.cpp b/third_party/cheap-ruler-cpp-2778eb8/test/cheap_ruler.cpp deleted file mode 100644 index bd51f7ee8..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/test/cheap_ruler.cpp +++ /dev/null @@ -1,276 +0,0 @@ -#include -#include -#include - -#include "fixtures/lines.hpp" -#include "fixtures/turf.hpp" - -namespace cr = mapbox::cheap_ruler; - -class CheapRulerTest : public ::testing::Test { -protected: - cr::CheapRuler ruler = cr::CheapRuler(32.8351); - cr::CheapRuler milesRuler = cr::CheapRuler(32.8351, cr::CheapRuler::Miles); -}; - -void assertErr(double expected, double actual, double maxError) { - // Add a negligible fraction to make sure we - // don't divide by zero. - double error = std::abs((actual - expected) / - (expected == 0. ? expected + 0.000001 : expected)); - - if (error > maxError) { - FAIL() << "expected is " << expected << " but got " << actual; - } -} - -TEST_F(CheapRulerTest, distance) { - for (unsigned i = 0; i < points.size() - 1; ++i) { - auto expected = turf_distance[i]; - auto actual = ruler.distance(points[i], points[i + 1]); - - assertErr(expected, actual, .003); - } -} - -TEST_F(CheapRulerTest, distanceInMiles) { - auto d = ruler.distance({ 30.5, 32.8351 }, { 30.51, 32.8451 }); - auto d2 = milesRuler.distance({ 30.5, 32.8351 }, { 30.51, 32.8451 }); - - assertErr(d / d2, 1.609344, 1e-12); -} - -TEST_F(CheapRulerTest, bearing) { - for (unsigned i = 0; i < points.size() - 1; ++i) { - auto expected = turf_bearing[i]; - auto actual = ruler.bearing(points[i], points[i + 1]); - - assertErr(expected, actual, .005); - } -} - -TEST_F(CheapRulerTest, destination) { - for (unsigned i = 0; i < points.size(); ++i) { - auto bearing = (i % 360) - 180.; - auto expected = turf_destination[i]; - auto actual = ruler.destination(points[i], 1.0, bearing); - - assertErr(expected.x, actual.x, 1e-6); // longitude - assertErr(expected.y, actual.y, 1e-6); // latitude - } -} - -TEST_F(CheapRulerTest, lineDistance) { - { - cr::line_string emptyLine {}; - auto expected = 0.0; - auto actual = ruler.lineDistance(emptyLine); - assertErr(expected, actual, 0.0); - } - - for (unsigned i = 0; i < lines.size(); ++i) { - auto expected = turf_lineDistance[i]; - auto actual = ruler.lineDistance(lines[i]); - - assertErr(expected, actual, 0.003); - } -} - -TEST_F(CheapRulerTest, area) { - for (unsigned i = 0, j = 0; i < lines.size(); ++i) { - if (lines[i].size() < 3) { - continue; - } - - cr::linear_ring ring; - for (auto point : lines[i]) { - ring.push_back(point); - } - ring.push_back(lines[i][0]); - - auto expected = turf_area[j++]; - auto actual = ruler.area(cr::polygon{ ring }); - - assertErr(expected, actual, 0.003); - } -} - -TEST_F(CheapRulerTest, along) { - { - cr::point emptyPoint {}; - cr::line_string emptyLine {}; - auto expected = emptyPoint; - auto actual = ruler.along(emptyLine, 0.0); - - assertErr(expected.x, actual.x, 0.0); - assertErr(expected.y, actual.y, 0.0); - } - - for (unsigned i = 0; i < lines.size(); ++i) { - auto expected = turf_along[i]; - auto actual = ruler.along(lines[i], turf_along_dist[i]); - - assertErr(expected.x, actual.x, 1e-6); // along longitude - assertErr(expected.y, actual.y, 1e-6); // along latitude - } -} - -TEST_F(CheapRulerTest, alongWithDist) { - ASSERT_EQ(ruler.along(lines[0], -5), lines[0][0]); -} - -TEST_F(CheapRulerTest, alongWithDistGreaterThanLength) { - ASSERT_EQ(ruler.along(lines[0], 1000), lines[0][lines[0].size() - 1]); -} - -TEST_F(CheapRulerTest, pointOnLine) { - // not Turf comparison because pointOnLine is bugged https://github.com/Turfjs/turf/issues/344 - cr::line_string line = {{ -77.031669, 38.878605 }, { -77.029609, 38.881946 }}; - auto result = ruler.pointOnLine(line, { -77.034076, 38.882017 }); - - assertErr(std::get<0>(result).x, -77.03052689033436, 1e-6); - assertErr(std::get<0>(result).y, 38.880457324462576, 1e-6); - ASSERT_EQ(std::get<1>(result), 0u); // index - assertErr(std::get<2>(result), 0.5544221677861756, 1e-6); // t - - ASSERT_EQ(std::get<2>(ruler.pointOnLine(line, { -80., 38. })), 0.) << "t is not less than 0"; - ASSERT_EQ(std::get<2>(ruler.pointOnLine(line, { -75., 38. })), 1.) << "t is not bigger than 1"; -} - -TEST_F(CheapRulerTest, pointToSegmentDistance) { - cr::point p{ -77.034076, 38.882017 }; - cr::point p0{ -77.031669, 38.878605 }; - cr::point p1{ -77.029609, 38.881946 }; - const auto distance = ruler.pointToSegmentDistance(p, p0, p1); - assertErr(0.37461484020420416, distance, 1e-6); -} - -TEST_F(CheapRulerTest, lineSlice) { - for (unsigned i = 0; i < lines.size(); ++i) { - auto line = lines[i]; - auto dist = ruler.lineDistance(line); - auto start = ruler.along(line, dist * 0.3); - auto stop = ruler.along(line, dist * 0.7); - auto expected = turf_lineSlice[i]; - auto actual = ruler.lineDistance(ruler.lineSlice(start, stop, line)); - - /// @todo Should update turf_lineSlice and revert maxError back. - assertErr(expected, actual, 1e-4); - } -} - -TEST_F(CheapRulerTest, lineSliceAlong) { - { - cr::line_string emptyLine {}; - auto expected = ruler.lineDistance(emptyLine); - auto actual = ruler.lineDistance(ruler.lineSliceAlong(0.0, 0.0, emptyLine)); - assertErr(expected, actual, 0.0); - } - - for (unsigned i = 0; i < lines.size(); ++i) { - if (i == 46) { - // skip due to Turf bug https://github.com/Turfjs/turf/issues/351 - continue; - }; - - auto line = lines[i]; - auto dist = ruler.lineDistance(line); - auto expected = turf_lineSlice[i]; - auto actual = ruler.lineDistance(ruler.lineSliceAlong(dist * 0.3, dist * 0.7, line)); - - /// @todo Should update turf_lineSlice and revert maxError back. - assertErr(expected, actual, 1e-4); - } -} - -TEST_F(CheapRulerTest, lineSliceReverse) { - auto line = lines[0]; - auto dist = ruler.lineDistance(line); - auto start = ruler.along(line, dist * 0.7); - auto stop = ruler.along(line, dist * 0.3); - auto actual = ruler.lineDistance(ruler.lineSlice(start, stop, line)); - - assertErr(0.018676476689649835, actual, 1e-6); -} - -TEST_F(CheapRulerTest, bufferPoint) { - for (unsigned i = 0; i < points.size(); ++i) { - auto expected = turf_bufferPoint[i]; - auto actual = milesRuler.bufferPoint(points[i], 0.1); - - assertErr(expected.min.x, actual.min.x, 2e-7); - assertErr(expected.min.x, actual.min.x, 2e-7); - assertErr(expected.max.y, actual.max.y, 2e-7); - assertErr(expected.max.y, actual.max.y, 2e-7); - } -} - -TEST_F(CheapRulerTest, bufferBBox) { - cr::box bbox({ 30, 38 }, { 40, 39 }); - cr::box bbox2 = ruler.bufferBBox(bbox, 1); - - assertErr(bbox2.min.x, 29.989319515875376, 1e-6); - assertErr(bbox2.min.y, 37.99098271225711, 1e-6); - assertErr(bbox2.max.x, 40.01068048412462, 1e-6); - assertErr(bbox2.max.y, 39.00901728774289, 1e-6); -} - -TEST_F(CheapRulerTest, insideBBox) { - cr::box bbox({ 30, 38 }, { 40, 39 }); - - ASSERT_TRUE(ruler.insideBBox({ 35, 38.5 }, bbox)); - ASSERT_FALSE(ruler.insideBBox({ 45, 45 }, bbox)); -} - -TEST_F(CheapRulerTest, fromTile) { - auto ruler1 = cr::CheapRuler(50.5); - auto ruler2 = cr::CheapRuler::fromTile(11041, 15); - - cr::point p1(30.5, 50.5); - cr::point p2(30.51, 50.51); - - assertErr(ruler1.distance(p1, p2), ruler2.distance(p1, p2), 2e-5); -} - -TEST_F(CheapRulerTest, longitudeWrap) { - std::random_device rd; - std::mt19937 gen(rd()); - std::bernoulli_distribution d(0.5); // true with prob 0.5 - - auto r = cr::CheapRuler(50.5); - cr::polygon poly(1); - auto& ring = poly[0]; - cr::line_string line; - cr::point origin(0, 50.5); // Greenwich - auto rad = 1000.0; - // construct a regular dodecagon - for (int i = -180; i <= 180; i += 30) { - auto p = r.destination(origin, rad, i); - // shift randomly east/west to the international date line - p.x += d(gen) ? 180 : -180; - ring.push_back(p); - line.push_back(p); - } - auto p = r.lineDistance(line); - auto a = r.area(poly); - // cheap_ruler does planar calculations, so the perimeter and area of a - // planar regular dodecagon with circumradius rad are used in these checks. - // For the record, the results for rad = 1000 km are: - // perimeter area - // planar 6211.657082 3000000 - // WGS84 6187.959236 2996317.6328 - // error 0.38% 0.12% - assertErr(12 * rad / sqrt(2 + sqrt(3.0)), p, 1e-12); - assertErr(3 * rad * rad, a, 1e-12); - for (int j = 1; j < (int)line.size(); ++j) { - auto azi = r.bearing(line[j-1], line[j]); - // offset expect and actual by 1 to make err criterion absolute - assertErr(1, std::remainder(270 - 15 + 30*j - azi, 360) + 1, 1e-12); - } -} - -int main(int argc, char **argv) { - ::testing::InitGoogleTest(&argc, argv); - - return RUN_ALL_TESTS(); -} diff --git a/third_party/cheap-ruler-cpp-2778eb8/test/fixtures/lines.hpp b/third_party/cheap-ruler-cpp-2778eb8/test/fixtures/lines.hpp deleted file mode 100644 index d2ec79d34..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/test/fixtures/lines.hpp +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once - -#include - -namespace cr = mapbox::cheap_ruler; - -static const cr::multi_line_string lines = {{{ -96.920341, 32.838261 }, { -96.920421, 32.838295 }, { -96.920421, 32.838295 }, { -96.920536, 32.838297 }, { -96.920684, 32.838293 }, { -96.920818, 32.838342 }}, {{ -96.920349, 32.838306 }, { -96.920421, 32.838295 }}, {{ -96.919874, 32.837479 }, { -96.920097, 32.837684 }, { -96.92018, 32.837844 }, { -96.92029, 32.838216 }, { -96.920341, 32.838261 }}, {{ -96.915781, 32.834689 }, { -96.915735, 32.834529 }, { -96.91573, 32.834443 }, { -96.915733, 32.834286 }, { -96.915853, 32.8337 }}, {{ -96.915092, 32.836889 }, { -96.915915, 32.836977 }}, {{ -96.914617, 32.83752 }, { -96.914507, 32.838106 }, { -96.914319, 32.839063 }}, {{ -96.915671, 32.833443 }, { -96.915427, 32.833817 }, { -96.91532, 32.833963 }, { -96.915247, 32.834072 }, { -96.915062, 32.834252 }, { -96.914775, 32.834518 }}, {{ -96.9104, 32.837119 }, { -96.910567, 32.837069 }, { -96.9111, 32.836941 }}, {{ -96.91441, 32.836582 }, { -96.914225, 32.836544 }, { -96.914158, 32.836499 }, { -96.914107, 32.836449 }, { -96.914075, 32.836393 }, { -96.914059, 32.836292 }, { -96.914091, 32.836073 }, { -96.914649, 32.834919 }, { -96.914837, 32.834601 }, { -96.914858, 32.834583 }, { -96.914912, 32.834563 }, { -96.914968, 32.834561 }, { -96.91503, 32.83457 }, { -96.915081, 32.834592 }, { -96.915116, 32.834628 }, { -96.915134, 32.834671 }, { -96.91514, 32.834718 }, { -96.915124, 32.834793 }, { -96.914931, 32.835336 }, { -96.914888, 32.835509 }, { -96.91481, 32.835911 }}, {{ -96.914155, 32.836758 }, { -96.913391, 32.836697 }, { -96.912991, 32.836643 }, { -96.912847, 32.836589 }, { -96.912761, 32.836508 }, { -96.912573, 32.836433 }}, {{ -96.917377, 32.837281 }, { -96.917589, 32.837317 }, { -96.918117, 32.837339 }}, {{ -96.920815, 32.836594 }, { -96.919732, 32.836643 }, { -96.918975, 32.836702 }, { -96.918077, 32.836729 }, { -96.916661, 32.83672 }, { -96.916358, 32.836774 }}, {{ -96.911543, 32.836925 }, { -96.911806, 32.837006 }, { -96.911994, 32.837028 }, { -96.912326, 32.837114 }, { -96.912552, 32.837202 }, { -96.912656, 32.83729 }}, {{ -96.914657, 32.836659 }, { -96.914518, 32.837522 }, { -96.914472, 32.837673 }, { -96.914383, 32.837772 }, { -96.914284, 32.837858 }, { -96.914153, 32.837905 }, { -96.914024, 32.837912 }, { -96.913925, 32.837885 }, { -96.913804, 32.837828 }, { -96.913678, 32.837729 }, { -96.913391, 32.837479 }, { -96.913278, 32.837328 }, { -96.913252, 32.837238 }, { -96.913262, 32.837148 }, { -96.913305, 32.837078 }, { -96.91337, 32.837024 }, { -96.91348, 32.837004 }, { -96.914483, 32.83688 }}, {{ -96.915915, 32.836977 }, { -96.916183, 32.837004 }, { -96.916425, 32.837042 }, { -96.916862, 32.837164 }}, {{ -96.915183, 32.840102 }, { -96.915151, 32.839929 }, { -96.915113, 32.839539 }, { -96.915008, 32.838973 }, { -96.914949, 32.83873 }, { -96.914909, 32.838491 }, { -96.914834, 32.838234 }}, {{ -96.914728, 32.842674 }, { -96.914772, 32.84257 }, { -96.914872, 32.842277 }, { -96.914974, 32.841939 }, { -96.915014, 32.841646 }, { -96.915065, 32.84138 }, { -96.915113, 32.84099 }, { -96.915175, 32.840321 }, { -96.915193, 32.839827 }, { -96.915204, 32.839345 }, { -96.91525, 32.839045 }, { -96.915325, 32.838759 }, { -96.915483, 32.838464 }, { -96.915658, 32.838236 }, { -96.915907, 32.837943 }, { -96.91621, 32.837709 }, { -96.91636, 32.837612 }, { -96.916588, 32.837481 }, { -96.916948, 32.837324 }, { -96.91731, 32.837188 }, { -96.918026, 32.837098 }, { -96.918847, 32.83706 }, { -96.919391, 32.83704 }, { -96.919847, 32.83701 }, { -96.920174, 32.836961 }}, {{ -96.914603, 32.839688 }, { -96.914335, 32.841087 }, { -96.914099, 32.841896 }, { -96.913823, 32.842577 }, { -96.91377, 32.842674 }}, {{ -96.915915, 32.836977 }, { -96.916105, 32.837042 }, { -96.916183, 32.837116 }, { -96.916218, 32.837164 }, { -96.916232, 32.83722 }, { -96.916223, 32.837308 }, { -96.916202, 32.837355 }, { -96.916006, 32.837556 }, { -96.915714, 32.837779 }, { -96.915588, 32.83784 }, { -96.915419, 32.837871 }, { -96.915293, 32.837867 }, { -96.91514, 32.837828 }, { -96.915062, 32.837774 }, { -96.915014, 32.837734 }, { -96.914925, 32.837614 }, { -96.914888, 32.837515 }, { -96.914831, 32.837297 }}, {{ -96.917743, 32.833443 }, { -96.917766, 32.836553 }}, {{ -96.912399, 32.842674 }, { -96.911487, 32.841373 }, { -96.9104, 32.841399 }}, {{ -96.91072, 32.84264 }, { -96.910717, 32.842674 }}, {{ -96.911584, 32.833443 }, { -96.911581, 32.833684 }, { -96.911559, 32.835271 }, { -96.911554, 32.83642 }}, {{ -96.920403, 32.833443 }, { -96.920397, 32.833894 }}, {{ -96.9104, 32.833662 }, { -96.911581, 32.833684 }}, {{ -96.914775, 32.834518 }, { -96.914512, 32.835038 }, { -96.914327, 32.835437 }, { -96.914016, 32.836136 }, { -96.913973, 32.83621 }, { -96.913906, 32.83628 }, { -96.913769, 32.836359 }, { -96.913675, 32.836384 }, { -96.913203, 32.836445 }}, {{ -96.9104, 32.837231 }, { -96.910695, 32.837202 }, { -96.911025, 32.837182 }, { -96.911355, 32.837168 }, { -96.911948, 32.837168 }, { -96.912391, 32.837222 }, { -96.912656, 32.83729 }, { -96.913072, 32.83752 }}, {{ -96.916189, 32.83818 }, { -96.918117, 32.837339 }}, {{ -96.918165, 32.84179 }, { -96.917329, 32.840988 }, { -96.91702, 32.840704 }, { -96.916811, 32.840587 }, { -96.916661, 32.840519 }, { -96.916368, 32.840454 }, { -96.916164, 32.840438 }, { -96.915263, 32.840458 }}, {{ -96.914137, 32.840553 }, { -96.914316, 32.840555 }}, {{ -96.91415, 32.840452 }, { -96.914054, 32.841182 }, { -96.913976, 32.841572 }, { -96.913842, 32.842049 }, { -96.913691, 32.842414 }, { -96.913569, 32.842674 }}, {{ -96.914919, 32.842674 }, { -96.91492, 32.842671 }, { -96.9151, 32.842171 }, { -96.915244, 32.84152 }, { -96.915322, 32.840979 }, { -96.915376, 32.840569 }, { -96.915384, 32.840454 }}, {{ -96.915474, 32.833443 }, { -96.915379, 32.833664 }, { -96.915314, 32.833772 }, { -96.915261, 32.833849 }, { -96.915081, 32.834083 }, { -96.914775, 32.834518 }}, {{ -96.913072, 32.83752 }, { -96.913195, 32.837608 }, { -96.913675, 32.838002 }, { -96.913694, 32.838011 }, { -96.91396, 32.838241 }, { -96.914054, 32.838345 }, { -96.914161, 32.838507 }, { -96.914255, 32.838714 }, { -96.914292, 32.83889 }, { -96.914319, 32.839063 }, { -96.914182, 32.840098 }, { -96.91415, 32.840452 }}, {{ -96.917406, 32.836557 }, { -96.91588, 32.836517 }, { -96.915778, 32.836501 }, { -96.915727, 32.836481 }, { -96.91569, 32.836458 }, { -96.915644, 32.836422 }, { -96.915609, 32.836382 }, { -96.915588, 32.836348 }, { -96.915572, 32.836305 }, { -96.915564, 32.836235 }, { -96.915564, 32.836154 }, { -96.915668, 32.835469 }, { -96.915754, 32.834827 }, { -96.915781, 32.834689 }, { -96.915835, 32.834556 }, { -96.916052, 32.834074 }, { -96.916283, 32.833443 }}, {{ -96.915384, 32.840454 }, { -96.915408, 32.839794 }, { -96.915411, 32.839345 }, { -96.915459, 32.839068 }, { -96.91554, 32.838845 }, { -96.915636, 32.838687 }, { -96.915765, 32.838529 }, { -96.915945, 32.838358 }, { -96.916189, 32.83818 }}, {{ -96.919421, 32.837159 }, { -96.919557, 32.837216 }, { -96.919697, 32.837288 }, { -96.919812, 32.8374 }, { -96.919874, 32.837479 }, { -96.920172, 32.838358 }, { -96.920295, 32.838845 }, { -96.920333, 32.839068 }, { -96.920327, 32.839422 }, { -96.920223, 32.839746 }, { -96.920072, 32.840046 }, { -96.919898, 32.840276 }, { -96.919812, 32.840355 }, { -96.919426, 32.84067 }, { -96.918012, 32.84172 }, { -96.91753, 32.84207 }, { -96.917374, 32.842196 }, { -96.916727, 32.842674 }}, {{ -96.916981, 32.842674 }, { -96.917079, 32.842602 }, { -96.917487, 32.842291 }, { -96.918114, 32.841826 }, { -96.919984, 32.840454 }, { -96.920236, 32.840233 }, { -96.920429, 32.839965 }, { -96.920512, 32.839816 }, { -96.92059, 32.839557 }, { -96.920612, 32.839271 }, { -96.920604, 32.839181 }, { -96.920574, 32.839043 }, { -96.920416, 32.83857 }, { -96.920365, 32.83839 }, { -96.920341, 32.838261 }, { -96.9203, 32.838119 }, { -96.920282, 32.837943 }, { -96.920274, 32.83775 }, { -96.920295, 32.837603 }, { -96.920319, 32.837536 }, { -96.920397, 32.837407 }, { -96.920515, 32.837288 }, { -96.920601, 32.837227 }, { -96.920727, 32.83717 }}, {{ -96.91441, 32.836582 }, { -96.914188, 32.836571 }, { -96.913203, 32.836445 }}, {{ -96.914324, 32.840454 }, { -96.91415, 32.840452 }}, {{ -96.921387, 32.836595 }, { -96.920815, 32.836594 }, { -96.917766, 32.836553 }, { -96.917406, 32.836557 }, { -96.915851, 32.836621 }, { -96.915459, 32.836621 }, { -96.915129, 32.836607 }}, {{ -96.918117, 32.837339 }, { -96.918324, 32.837252 }, { -96.918586, 32.837186 }, { -96.918844, 32.837161 }, { -96.919421, 32.837159 }, { -96.920727, 32.83717 }, { -96.921387, 32.83717 }}, {{ -96.913203, 32.836445 }, { -96.913142, 32.836438 }, { -96.912999, 32.836438 }, { -96.912774, 32.836427 }, { -96.912573, 32.836433 }, { -96.911554, 32.83642 }, { -96.9104, 32.836416 }}, {{ -96.915253, 32.840564 }, { -96.915376, 32.840569 }, { -96.915816, 32.840562 }, { -96.916197, 32.840567 }, { -96.916478, 32.840598 }, { -96.916623, 32.840641 }, { -96.916757, 32.840702 }, { -96.916913, 32.840794 }, { -96.917326, 32.841157 }, { -96.917452, 32.841272 }, { -96.917956, 32.841761 }, { -96.918061, 32.841867 }}, {{ -96.9145, 32.842674 }, { -96.914547, 32.842534 }, { -96.914708, 32.841971 }, { -96.914802, 32.841473 }, { -96.914858, 32.841078 }, { -96.914882, 32.840742 }, { -96.914907, 32.840224 }, { -96.914915, 32.839706 }, { -96.914885, 32.839084 }, { -96.914826, 32.83811 }, { -96.914831, 32.837297 }}, {{ -96.914987, 32.836886 }, { -96.915092, 32.836889 }}, {{ -96.914526, 32.836763 }, { -96.914155, 32.836758 }, { -96.9104, 32.836758 }}, {{ -96.921387, 32.836813 }, { -96.918825, 32.836796 }, { -96.916358, 32.836774 }, { -96.915003, 32.836767 }}, {{ -96.914831, 32.837297 }, { -96.914872, 32.836663 }, { -96.915033, 32.835872 }, { -96.91514, 32.83546 }, { -96.915226, 32.835212 }, { -96.915853, 32.8337 }, { -96.91595, 32.833443 }}, {{ -96.915092, 32.836889 }, { -96.916398, 32.836891 }, { -96.919547, 32.836963 }, { -96.921322, 32.836952 }, { -96.921387, 32.836952 }}, {{ -96.9104, 32.837008 }, { -96.910671, 32.836977 }, { -96.9111, 32.836941 }, { -96.911543, 32.836925 }, { -96.912637, 32.836898 }, { -96.913501, 32.836886 }, { -96.914528, 32.83688 }}, {{ -96.91577, 32.833443 }, { -96.915671, 32.833693 }, { -96.915344, 32.834518 }, { -96.91481, 32.835911 }, { -96.914754, 32.836127 }, { -96.914657, 32.836659 }, { -96.914617, 32.83752 }, { -96.914595, 32.838561 }, { -96.914603, 32.839688 }, { -96.914587, 32.840693 }, { -96.914512, 32.841211 }, { -96.914421, 32.841666 }, { -96.914284, 32.842196 }, { -96.914097, 32.842674 }}, {{ -96.914316, 32.840555 }, { -96.915253, 32.840564 }}, {{ -96.916862, 32.837164 }, { -96.917377, 32.837281 }}, {{ -96.915129, 32.836607 }, { -96.91441, 32.836582 }}, {{ -96.915263, 32.840458 }, { -96.914324, 32.840454 }}, {{ -96.914528, 32.83688 }, { -96.914987, 32.836886 }}, {{ -96.915003, 32.836767 }, { -96.914526, 32.836763 }}}; -static const cr::line_string points = {{ -96.920341, 32.838261 }, { -96.920421, 32.838295 }, { -96.920421, 32.838295 }, { -96.920536, 32.838297 }, { -96.920684, 32.838293 }, { -96.920818, 32.838342 }, { -96.920349, 32.838306 }, { -96.920421, 32.838295 }, { -96.919874, 32.837479 }, { -96.920097, 32.837684 }, { -96.92018, 32.837844 }, { -96.92029, 32.838216 }, { -96.920341, 32.838261 }, { -96.915781, 32.834689 }, { -96.915735, 32.834529 }, { -96.91573, 32.834443 }, { -96.915733, 32.834286 }, { -96.915853, 32.8337 }, { -96.915092, 32.836889 }, { -96.915915, 32.836977 }, { -96.914617, 32.83752 }, { -96.914507, 32.838106 }, { -96.914319, 32.839063 }, { -96.915671, 32.833443 }, { -96.915427, 32.833817 }, { -96.91532, 32.833963 }, { -96.915247, 32.834072 }, { -96.915062, 32.834252 }, { -96.914775, 32.834518 }, { -96.9104, 32.837119 }, { -96.910567, 32.837069 }, { -96.9111, 32.836941 }, { -96.91441, 32.836582 }, { -96.914225, 32.836544 }, { -96.914158, 32.836499 }, { -96.914107, 32.836449 }, { -96.914075, 32.836393 }, { -96.914059, 32.836292 }, { -96.914091, 32.836073 }, { -96.914649, 32.834919 }, { -96.914837, 32.834601 }, { -96.914858, 32.834583 }, { -96.914912, 32.834563 }, { -96.914968, 32.834561 }, { -96.91503, 32.83457 }, { -96.915081, 32.834592 }, { -96.915116, 32.834628 }, { -96.915134, 32.834671 }, { -96.91514, 32.834718 }, { -96.915124, 32.834793 }, { -96.914931, 32.835336 }, { -96.914888, 32.835509 }, { -96.91481, 32.835911 }, { -96.914155, 32.836758 }, { -96.913391, 32.836697 }, { -96.912991, 32.836643 }, { -96.912847, 32.836589 }, { -96.912761, 32.836508 }, { -96.912573, 32.836433 }, { -96.917377, 32.837281 }, { -96.917589, 32.837317 }, { -96.918117, 32.837339 }, { -96.920815, 32.836594 }, { -96.919732, 32.836643 }, { -96.918975, 32.836702 }, { -96.918077, 32.836729 }, { -96.916661, 32.83672 }, { -96.916358, 32.836774 }, { -96.911543, 32.836925 }, { -96.911806, 32.837006 }, { -96.911994, 32.837028 }, { -96.912326, 32.837114 }, { -96.912552, 32.837202 }, { -96.912656, 32.83729 }, { -96.914657, 32.836659 }, { -96.914518, 32.837522 }, { -96.914472, 32.837673 }, { -96.914383, 32.837772 }, { -96.914284, 32.837858 }, { -96.914153, 32.837905 }, { -96.914024, 32.837912 }, { -96.913925, 32.837885 }, { -96.913804, 32.837828 }, { -96.913678, 32.837729 }, { -96.913391, 32.837479 }, { -96.913278, 32.837328 }, { -96.913252, 32.837238 }, { -96.913262, 32.837148 }, { -96.913305, 32.837078 }, { -96.91337, 32.837024 }, { -96.91348, 32.837004 }, { -96.914483, 32.83688 }, { -96.915915, 32.836977 }, { -96.916183, 32.837004 }, { -96.916425, 32.837042 }, { -96.916862, 32.837164 }, { -96.915183, 32.840102 }, { -96.915151, 32.839929 }, { -96.915113, 32.839539 }, { -96.915008, 32.838973 }, { -96.914949, 32.83873 }, { -96.914909, 32.838491 }, { -96.914834, 32.838234 }, { -96.914728, 32.842674 }, { -96.914772, 32.84257 }, { -96.914872, 32.842277 }, { -96.914974, 32.841939 }, { -96.915014, 32.841646 }, { -96.915065, 32.84138 }, { -96.915113, 32.84099 }, { -96.915175, 32.840321 }, { -96.915193, 32.839827 }, { -96.915204, 32.839345 }, { -96.91525, 32.839045 }, { -96.915325, 32.838759 }, { -96.915483, 32.838464 }, { -96.915658, 32.838236 }, { -96.915907, 32.837943 }, { -96.91621, 32.837709 }, { -96.91636, 32.837612 }, { -96.916588, 32.837481 }, { -96.916948, 32.837324 }, { -96.91731, 32.837188 }, { -96.918026, 32.837098 }, { -96.918847, 32.83706 }, { -96.919391, 32.83704 }, { -96.919847, 32.83701 }, { -96.920174, 32.836961 }, { -96.914603, 32.839688 }, { -96.914335, 32.841087 }, { -96.914099, 32.841896 }, { -96.913823, 32.842577 }, { -96.91377, 32.842674 }, { -96.915915, 32.836977 }, { -96.916105, 32.837042 }, { -96.916183, 32.837116 }, { -96.916218, 32.837164 }, { -96.916232, 32.83722 }, { -96.916223, 32.837308 }, { -96.916202, 32.837355 }, { -96.916006, 32.837556 }, { -96.915714, 32.837779 }, { -96.915588, 32.83784 }, { -96.915419, 32.837871 }, { -96.915293, 32.837867 }, { -96.91514, 32.837828 }, { -96.915062, 32.837774 }, { -96.915014, 32.837734 }, { -96.914925, 32.837614 }, { -96.914888, 32.837515 }, { -96.914831, 32.837297 }, { -96.917743, 32.833443 }, { -96.917766, 32.836553 }, { -96.912399, 32.842674 }, { -96.911487, 32.841373 }, { -96.9104, 32.841399 }, { -96.91072, 32.84264 }, { -96.910717, 32.842674 }, { -96.911584, 32.833443 }, { -96.911581, 32.833684 }, { -96.911559, 32.835271 }, { -96.911554, 32.83642 }, { -96.920403, 32.833443 }, { -96.920397, 32.833894 }, { -96.9104, 32.833662 }, { -96.911581, 32.833684 }, { -96.914775, 32.834518 }, { -96.914512, 32.835038 }, { -96.914327, 32.835437 }, { -96.914016, 32.836136 }, { -96.913973, 32.83621 }, { -96.913906, 32.83628 }, { -96.913769, 32.836359 }, { -96.913675, 32.836384 }, { -96.913203, 32.836445 }, { -96.9104, 32.837231 }, { -96.910695, 32.837202 }, { -96.911025, 32.837182 }, { -96.911355, 32.837168 }, { -96.911948, 32.837168 }, { -96.912391, 32.837222 }, { -96.912656, 32.83729 }, { -96.913072, 32.83752 }, { -96.916189, 32.83818 }, { -96.918117, 32.837339 }, { -96.918165, 32.84179 }, { -96.917329, 32.840988 }, { -96.91702, 32.840704 }, { -96.916811, 32.840587 }, { -96.916661, 32.840519 }, { -96.916368, 32.840454 }, { -96.916164, 32.840438 }, { -96.915263, 32.840458 }, { -96.914137, 32.840553 }, { -96.914316, 32.840555 }, { -96.91415, 32.840452 }, { -96.914054, 32.841182 }, { -96.913976, 32.841572 }, { -96.913842, 32.842049 }, { -96.913691, 32.842414 }, { -96.913569, 32.842674 }, { -96.914919, 32.842674 }, { -96.91492, 32.842671 }, { -96.9151, 32.842171 }, { -96.915244, 32.84152 }, { -96.915322, 32.840979 }, { -96.915376, 32.840569 }, { -96.915384, 32.840454 }, { -96.915474, 32.833443 }, { -96.915379, 32.833664 }, { -96.915314, 32.833772 }, { -96.915261, 32.833849 }, { -96.915081, 32.834083 }, { -96.914775, 32.834518 }, { -96.913072, 32.83752 }, { -96.913195, 32.837608 }, { -96.913675, 32.838002 }, { -96.913694, 32.838011 }, { -96.91396, 32.838241 }, { -96.914054, 32.838345 }, { -96.914161, 32.838507 }, { -96.914255, 32.838714 }, { -96.914292, 32.83889 }, { -96.914319, 32.839063 }, { -96.914182, 32.840098 }, { -96.91415, 32.840452 }, { -96.917406, 32.836557 }, { -96.91588, 32.836517 }, { -96.915778, 32.836501 }, { -96.915727, 32.836481 }, { -96.91569, 32.836458 }, { -96.915644, 32.836422 }, { -96.915609, 32.836382 }, { -96.915588, 32.836348 }, { -96.915572, 32.836305 }, { -96.915564, 32.836235 }, { -96.915564, 32.836154 }, { -96.915668, 32.835469 }, { -96.915754, 32.834827 }, { -96.915781, 32.834689 }, { -96.915835, 32.834556 }, { -96.916052, 32.834074 }, { -96.916283, 32.833443 }, { -96.915384, 32.840454 }, { -96.915408, 32.839794 }, { -96.915411, 32.839345 }, { -96.915459, 32.839068 }, { -96.91554, 32.838845 }, { -96.915636, 32.838687 }, { -96.915765, 32.838529 }, { -96.915945, 32.838358 }, { -96.916189, 32.83818 }, { -96.919421, 32.837159 }, { -96.919557, 32.837216 }, { -96.919697, 32.837288 }, { -96.919812, 32.8374 }, { -96.919874, 32.837479 }, { -96.920172, 32.838358 }, { -96.920295, 32.838845 }, { -96.920333, 32.839068 }, { -96.920327, 32.839422 }, { -96.920223, 32.839746 }, { -96.920072, 32.840046 }, { -96.919898, 32.840276 }, { -96.919812, 32.840355 }, { -96.919426, 32.84067 }, { -96.918012, 32.84172 }, { -96.91753, 32.84207 }, { -96.917374, 32.842196 }, { -96.916727, 32.842674 }, { -96.916981, 32.842674 }, { -96.917079, 32.842602 }, { -96.917487, 32.842291 }, { -96.918114, 32.841826 }, { -96.919984, 32.840454 }, { -96.920236, 32.840233 }, { -96.920429, 32.839965 }, { -96.920512, 32.839816 }, { -96.92059, 32.839557 }, { -96.920612, 32.839271 }, { -96.920604, 32.839181 }, { -96.920574, 32.839043 }, { -96.920416, 32.83857 }, { -96.920365, 32.83839 }, { -96.920341, 32.838261 }, { -96.9203, 32.838119 }, { -96.920282, 32.837943 }, { -96.920274, 32.83775 }, { -96.920295, 32.837603 }, { -96.920319, 32.837536 }, { -96.920397, 32.837407 }, { -96.920515, 32.837288 }, { -96.920601, 32.837227 }, { -96.920727, 32.83717 }, { -96.91441, 32.836582 }, { -96.914188, 32.836571 }, { -96.913203, 32.836445 }, { -96.914324, 32.840454 }, { -96.91415, 32.840452 }, { -96.921387, 32.836595 }, { -96.920815, 32.836594 }, { -96.917766, 32.836553 }, { -96.917406, 32.836557 }, { -96.915851, 32.836621 }, { -96.915459, 32.836621 }, { -96.915129, 32.836607 }, { -96.918117, 32.837339 }, { -96.918324, 32.837252 }, { -96.918586, 32.837186 }, { -96.918844, 32.837161 }, { -96.919421, 32.837159 }, { -96.920727, 32.83717 }, { -96.921387, 32.83717 }, { -96.913203, 32.836445 }, { -96.913142, 32.836438 }, { -96.912999, 32.836438 }, { -96.912774, 32.836427 }, { -96.912573, 32.836433 }, { -96.911554, 32.83642 }, { -96.9104, 32.836416 }, { -96.915253, 32.840564 }, { -96.915376, 32.840569 }, { -96.915816, 32.840562 }, { -96.916197, 32.840567 }, { -96.916478, 32.840598 }, { -96.916623, 32.840641 }, { -96.916757, 32.840702 }, { -96.916913, 32.840794 }, { -96.917326, 32.841157 }, { -96.917452, 32.841272 }, { -96.917956, 32.841761 }, { -96.918061, 32.841867 }, { -96.9145, 32.842674 }, { -96.914547, 32.842534 }, { -96.914708, 32.841971 }, { -96.914802, 32.841473 }, { -96.914858, 32.841078 }, { -96.914882, 32.840742 }, { -96.914907, 32.840224 }, { -96.914915, 32.839706 }, { -96.914885, 32.839084 }, { -96.914826, 32.83811 }, { -96.914831, 32.837297 }, { -96.914987, 32.836886 }, { -96.915092, 32.836889 }, { -96.914526, 32.836763 }, { -96.914155, 32.836758 }, { -96.9104, 32.836758 }, { -96.921387, 32.836813 }, { -96.918825, 32.836796 }, { -96.916358, 32.836774 }, { -96.915003, 32.836767 }, { -96.914831, 32.837297 }, { -96.914872, 32.836663 }, { -96.915033, 32.835872 }, { -96.91514, 32.83546 }, { -96.915226, 32.835212 }, { -96.915853, 32.8337 }, { -96.91595, 32.833443 }, { -96.915092, 32.836889 }, { -96.916398, 32.836891 }, { -96.919547, 32.836963 }, { -96.921322, 32.836952 }, { -96.921387, 32.836952 }, { -96.9104, 32.837008 }, { -96.910671, 32.836977 }, { -96.9111, 32.836941 }, { -96.911543, 32.836925 }, { -96.912637, 32.836898 }, { -96.913501, 32.836886 }, { -96.914528, 32.83688 }, { -96.91577, 32.833443 }, { -96.915671, 32.833693 }, { -96.915344, 32.834518 }, { -96.91481, 32.835911 }, { -96.914754, 32.836127 }, { -96.914657, 32.836659 }, { -96.914617, 32.83752 }, { -96.914595, 32.838561 }, { -96.914603, 32.839688 }, { -96.914587, 32.840693 }, { -96.914512, 32.841211 }, { -96.914421, 32.841666 }, { -96.914284, 32.842196 }, { -96.914097, 32.842674 }, { -96.914316, 32.840555 }, { -96.915253, 32.840564 }, { -96.916862, 32.837164 }, { -96.917377, 32.837281 }, { -96.915129, 32.836607 }, { -96.91441, 32.836582 }, { -96.915263, 32.840458 }, { -96.914324, 32.840454 }, { -96.914528, 32.83688 }, { -96.914987, 32.836886 }, { -96.915003, 32.836767 }, { -96.914526, 32.836763 }}; diff --git a/third_party/cheap-ruler-cpp-2778eb8/test/fixtures/turf.hpp b/third_party/cheap-ruler-cpp-2778eb8/test/fixtures/turf.hpp deleted file mode 100644 index 42301aa97..000000000 --- a/third_party/cheap-ruler-cpp-2778eb8/test/fixtures/turf.hpp +++ /dev/null @@ -1,1894 +0,0 @@ -#pragma once - -#include - -// Pre-computed test expectations with turf.js - -namespace cr = mapbox::cheap_ruler; - -static const std::vector turf_distance = { - 0.008378522721530966, - 0, - 0.010749717813535198, - 0.013838610971284946, - 0.013657697587927904, - 0.044013281621164545, - 0.0068391514197623125, - 0.10416972567189697, - 0.030891354635076577, - 0.019413765237647276, - 0.04263542169525046, - 0.0069116261879168155, - 0.582645708508002, - 0.018308680637617696, - 0.009577172911626559, - 0.017465334500943574, - 0.06613851306063838, - 0.3617719377192654, - 0.07753561751121403, - 0.13551122988625394, - 0.06598639029222791, - 0.10788718733352708, - 0.637754036319657, - 0.04744046409407494, - 0.019071666981656257, - 0.013911884201543205, - 0.026453803385838824, - 0.03993584290435518, - 0.5008820538480422, - 0.016568611251168885, - 0.05180738530903197, - 0.3119106296673429, - 0.017798808015935193, - 0.008016350616268752, - 0.007324494221885543, - 0.006909617037766451, - 0.01133329359318173, - 0.024542232038179984, - 0.13854858779974746, - 0.039494712699750543, - 0.002803669222998928, - 0.005515366276063487, - 0.005238469974132169, - 0.005880339789619507, - 0.005357898801346142, - 0.0051705154162532425, - 0.005070109623060704, - 0.0052577908286051914, - 0.00847519939173927, - 0.06303372152921366, - 0.019657925611790725, - 0.045304719345077606, - 0.11235257808731806, - 0.07172313743043487, - 0.03786245739823775, - 0.014737426160375995, - 0.012073619242440572, - 0.01944992465839253, - 0.4587699541978461, - 0.02021344170822001, - 0.04940583279333197, - 0.26541509069849073, - 0.10136117015958783, - 0.071051047335519, - 0.0839785094261126, - 0.13233952591634118, - 0.028947596386964588, - 0.450310288271311, - 0.02617846959013443, - 0.01773953006642692, - 0.03246883345774803, - 0.023279127631702524, - 0.013794142444291755, - 0.19974484175602678, - 0.0968663637124452, - 0.017337159580454113, - 0.013800054342251185, - 0.013308139694942028, - 0.01331222080564702, - 0.012080965868250661, - 0.009727373321527968, - 0.012964274265275947, - 0.016122067768646026, - 0.03863515912787102, - 0.019839914076975624, - 0.010301365066689631, - 0.010054214744799303, - 0.008762005427975264, - 0.008542780137735616, - 0.010518226790403411, - 0.09474686301917724, - 0.1342649575551186, - 0.02522592703114516, - 0.023008194493208647, - 0.04303616022369959, - 0.36251220899321573, - 0.019473754396392998, - 0.043524753809585405, - 0.06371623663872246, - 0.02758552742766217, - 0.026845476675765343, - 0.029432835806681268, - 0.4939597997561797, - 0.012276958817933555, - 0.03390371747191658, - 0.03878525490806829, - 0.03280401819558517, - 0.02996855089043349, - 0.043610944953640665, - 0.07463799480713804, - 0.054973280670314324, - 0.05362263439641399, - 0.03364472557328668, - 0.03257474948646934, - 0.035982127999637514, - 0.03017661243030025, - 0.04004558186048798, - 0.03846182853667192, - 0.017689723726582205, - 0.02581380073796066, - 0.03790654917278124, - 0.0370593711860446, - 0.06765988226898403, - 0.07684458549068582, - 0.05088930944950997, - 0.04274689073720004, - 0.031042698873467, - 0.6025557457581485, - 0.15761319510469404, - 0.09264826777038944, - 0.08001841776554604, - 0.011871825072563895, - 0.664627433433829, - 0.01917232375926572, - 0.01099493090349843, - 0.006261363451393286, - 0.0063648042581234765, - 0.009824297643237445, - 0.005584056437412894, - 0.028902860335050025, - 0.03687758065157599, - 0.013590391879516907, - 0.016166117999544854, - 0.011783888353457304, - 0.01494235041421174, - 0.009445375968215059, - 0.0063181221302946585, - 0.015727070675584043, - 0.011541912177440836, - 0.024826353234049702, - 0.5077727699239808, - 0.345931459929503, - 0.845643164225681, - 0.16794289804370816, - 0.10162406414747382, - 0.14123839370037056, - 0.003792191683109981, - 1.0299547040985766, - 0.026807856101721112, - 0.17653371969231604, - 0.12780393266727977, - 0.8908493894032292, - 0.05016778892928127, - 0.934681359703447, - 0.1104041562314812, - 0.31259370205263126, - 0.06284566928645681, - 0.0476296971944526, - 0.0830049159968845, - 0.009159661389404805, - 0.009991588429808441, - 0.015528991567811172, - 0.009214628598242817, - 0.04463082981364765, - 0.2761646624698818, - 0.02775785294501277, - 0.030920921663565613, - 0.030880088364676584, - 0.055419986988230405, - 0.041834856384027466, - 0.02589530670378627, - 0.046540107091908624, - 0.3004110613744119, - 0.20301909742424815, - 0.4951043096230534, - 0.11858115408807053, - 0.04279910991149764, - 0.023470200843156975, - 0.01592837521137288, - 0.028320290449247595, - 0.01914740566847937, - 0.08423100623656579, - 0.10575781800339631, - 0.016729639837999192, - 0.01928515125899576, - 0.08169190304672652, - 0.043987800607954874, - 0.054514411329818525, - 0.04298134155196387, - 0.031085953544609714, - 0.12615909276179177, - 0.0003465282173637971, - 0.058103130282949, - 0.07365046853595525, - 0.060615225341305666, - 0.04588259821425726, - 0.012813260692314313, - 0.7798777201137593, - 0.02613612797608842, - 0.013461529716750041, - 0.009893951634252595, - 0.030991193644600953, - 0.05620493774258541, - 0.3699038744925965, - 0.015097946393717242, - 0.06271302769749793, - 0.0020384128886200997, - 0.03567165517083371, - 0.014525490144668496, - 0.020607956055678806, - 0.0246435390331219, - 0.019879489642093223, - 0.019407494266871623, - 0.11583263922549474, - 0.03948876108912776, - 0.5294244867375493, - 0.1426857432967834, - 0.009697385429695126, - 0.00525992849031739, - 0.00430141196125398, - 0.005875039927428631, - 0.005522219552694836, - 0.0042607480963535544, - 0.005011184230011202, - 0.007821903345226908, - 0.009009616491770123, - 0.07680989084065051, - 0.07186045769829646, - 0.015555751145719514, - 0.015630740713881576, - 0.057320516556811474, - 0.07343146368625852, - 0.7843452939662691, - 0.07344594465684656, - 0.04994298205930179, - 0.031135505320641476, - 0.025933641798745768, - 0.01973190434263985, - 0.021311914846065032, - 0.025391967733273624, - 0.030199067305597543, - 0.3226950750643045, - 0.014203685630096484, - 0.01534037036997655, - 0.016453107333170788, - 0.010525597809363562, - 0.10166018086042491, - 0.05537516038147018, - 0.025057187459666765, - 0.03937935331770495, - 0.03732606414021839, - 0.03623014247507323, - 0.0303133933027351, - 0.01190830530874745, - 0.05028800045819346, - 0.17635692976160655, - 0.05953594686309811, - 0.020222535641001925, - 0.0805146256571518, - 0.02373659967645878, - 0.012165928750908704, - 0.0514820122407643, - 0.07815653280919697, - 0.23201058369437041, - 0.0340423547943379, - 0.03484151181059308, - 0.018298598649656068, - 0.029716445173173824, - 0.03187810305202435, - 0.010038564502119844, - 0.015603661528300027, - 0.0546445315444071, - 0.0205808711039938, - 0.014522895203654958, - 0.016252765900716146, - 0.019648594042289334, - 0.021480373184972493, - 0.016468148859886997, - 0.007782615606278065, - 0.016094168571066846, - 0.017228336077233373, - 0.01051829618341627, - 0.013373893984522116, - 0.5939814038121429, - 0.020783632669147317, - 0.09311654260907076, - 0.45806162186901805, - 0.016262433777165904, - 0.8009278300362112, - 0.05345785152641949, - 0.2849887196254366, - 0.033647685486223135, - 0.14550079382917516, - 0.03663536045894266, - 0.030880282999975885, - 0.29087772423039293, - 0.021630884822714493, - 0.02556252999484156, - 0.024271715891829745, - 0.05392513908839965, - 0.12206094837643991, - 0.06168160301572301, - 0.7690944309219785, - 0.005753846170923199, - 0.01336445751002951, - 0.02106355972240177, - 0.01879685972329176, - 0.0952444313427708, - 0.1078511795464463, - 0.6469708160164086, - 0.011508214196305674, - 0.04112686678910598, - 0.035610088844009874, - 0.026485811067702324, - 0.014370051474837841, - 0.014242735913957073, - 0.017811674662530638, - 0.05585618250055378, - 0.01738598064185313, - 0.07195021868945746, - 0.015339399943488055, - 0.34467463670324133, - 0.016179746130454448, - 0.06440448684565248, - 0.05608468433498269, - 0.04424636779988501, - 0.037440464051362185, - 0.057664402696718915, - 0.05762190400375552, - 0.06924174005124464, - 0.10847808154508215, - 0.0904310617110173, - 0.047983949715355446, - 0.009818685405935522, - 0.054721988898462984, - 0.034677157404038546, - 0.3509325669208246, - 1.0268344467822377, - 0.23944522020834375, - 0.23057234097441315, - 0.12663716357349866, - 0.06110408862755362, - 0.0706237379606926, - 0.08926016309905949, - 0.04690508445469457, - 0.028732090191940274, - 0.17809611583512075, - 0.029989165393382068, - 0.391596040835184, - 0.12205539606742612, - 0.29440576356307174, - 0.16589103850643355, - 0.006074718243210164, - 1.0268328659759098, - 0.02556053511771133, - 0.04029260310233885, - 0.041439782865155726, - 0.10228632526932319, - 0.08075810970675557, - 0.09598294305539697, - 0.39953051109714005, - 0.029306409486832358, - 0.09671994873655325, - 0.1627823795415789, - 0.02458907783680164, - 0.05986464703306779, - 0.09584181947018754, - 0.11580850896272278, - 0.12535825153862024, - 0.11179598232834778, - 0.058041800368261356, - 0.05131909973307807, - 0.0603260376812227, - 0.05596616469177014, - 0.23658290631261256, - 0.0875715634398609, - 0.40697930337242394, - 0.04985868432498091, - 0.2230670459299213, - 0.06725351272770712, - 0.4384349898078352, - 0.08775397845174246, - 0.3979923162137123, - 0.04290208100438889, - 0.013320545764006694, - 0.04458140027621235 -}; - -static const std::vector turf_bearing = { - -63.16835850131531, - 0, - -88.81417863186009, - -91.84236975943857, - -66.48043977763521, - 95.21979003833424, - -100.30570881383704, - 150.61043051772228, - -42.426806215464694, - -23.550372000573976, - -13.952505152879574, - -43.59833577993832, - 132.99198010189937, - 166.41929543157306, - 177.20325520034712, - -179.08016176339177, - -170.23703380143226, - 11.337660289434671, - -82.74731094370897, - 63.53130497081162, - 8.962738746772079, - 9.37241746920313, - -168.57228731224598, - 28.730760752589035, - 31.624597764846637, - 29.367864287830926, - 40.81330085442227, - 42.194625737959534, - 54.716993037210045, - -109.61289479694872, - -105.95081303007647, - -97.35442495838333, - 103.73738360872167, - 128.63753291604394, - 139.40255086492127, - 154.353076115606, - 172.41822883056525, - -173.00067170261374, - -157.88885299734986, - -153.5843194614746, - -135.57055814036255, - -113.78745742707413, - -92.43386994136272, - -80.19821514884795, - -62.824367973789435, - -39.24535094117481, - -19.378190579597625, - -6.122391240486928, - 10.162381849878825, - 16.628046997768607, - 11.796298622071708, - 9.259418658966705, - 33.013988074027225, - 95.42809952694313, - 99.12772053947573, - 114.05171960306723, - 138.26425923091327, - 115.39825807756951, - -78.13409883483345, - -78.57409383589719, - -87.160852199759, - -108.19195718984352, - 86.91738524340066, - 84.70017282115018, - 87.95033104208615, - 90.43302815253836, - 78.02446742577152, - 87.86117672643189, - -69.86932102730815, - -82.07107484952823, - -72.86553078555735, - -65.13553755018475, - -44.79817086959291, - -110.571105457802, - 7.7069914618379975, - 14.357081966766243, - 37.06518971504373, - 44.04525332938273, - 66.87692305523359, - 86.3047355297261, - 107.98313958114178, - 119.27773275782387, - 133.08034139008478, - 136.03334417898122, - 147.83958090135633, - 166.35653589386422, - -174.66648287441066, - -152.70026365512155, - -134.67606484413284, - -102.21019447457768, - -98.37013738611591, - -85.39045487355833, - -83.16251407128772, - -79.41426027366361, - -71.6199202393354, - 25.647805187311675, - 171.1662911122707, - 175.31992210998703, - 171.14075667901446, - 168.46991110160218, - 171.99557069100132, - 166.22310505740552, - 1.1490813990525728, - -160.4320410335643, - -163.99994946634425, - -165.7728900157161, - -173.45680597027817, - -170.84905103756142, - -174.09621979366605, - -175.5476650357732, - -178.24648292689753, - -178.90151317182918, - -172.65900564120977, - -167.57442915983086, - -155.7719187979583, - -147.18225435271103, - -144.4718825804975, - -132.58756100092145, - -127.58358614976032, - -124.36541206185082, - -117.43139970416347, - -114.09107335076804, - -98.50829769899121, - -93.15284638637799, - -92.50530269529919, - -94.47703726903666, - -100.11192008297043, - 59.77360017983539, - 9.143285027353551, - 13.771320155516808, - 18.804056386135507, - 24.65786911308088, - -162.44500486120558, - -67.84560294942295, - -41.52913748098395, - -31.493999863996763, - -11.862722004156867, - 4.911415384854547, - 20.5768593094366, - 39.328103571820634, - 47.73104506840779, - 60.04949187845642, - 77.68453534325027, - 92.16377287776062, - 106.8766740367609, - 129.48750446573763, - 134.76457530705628, - 148.07063441375706, - 162.56674425873655, - 167.60958213096342, - -147.58932438111154, - -0.35602290379352103, - 36.377431696616014, - 149.50345988748333, - 88.36898545914883, - -12.223747274643541, - 4.239696760480642, - -175.4876519466847, - 0.5992644178179116, - 0.6673420115819962, - 0.2094907113015796, - -111.81827272749739, - 0.6404507036839922, - 91.57935182920652, - -88.72964175221959, - -72.73595760634777, - 23.023787324470447, - 21.284935274447214, - 20.497437869075558, - 26.023401004269186, - 38.80671567232787, - 55.538280861535505, - 72.4357211583551, - 81.25555219912327, - 71.54335789800336, - -96.67318521343546, - -94.1256029846292, - -92.8904417068675, - -89.99983922215844, - -81.74515005128639, - -73.017109535514, - -56.65379972139568, - -75.85450215095052, - -117.43602194323526, - -0.5191133757264856, - 138.78810984843733, - 137.56824257563747, - 123.6752409593202, - 118.34970554664147, - 104.79079949099777, - 95.33306354879424, - 88.48636023444747, - 84.26539611797256, - -89.23804769018248, - 126.44610739090022, - 6.304981289653255, - 9.538566926163998, - 13.280042951632822, - 19.166182380726028, - 21.51585631114597, - -89.9996339244023, - -164.35486815306686, - -163.17151075342585, - -169.4719802936045, - -173.09313538953987, - -173.68544129286698, - -176.6550060133922, - -179.38201633291828, - 19.85934450173753, - 26.825916744943097, - 30.042999793582226, - 32.87625705680969, - 30.58584499722022, - 25.48436330531482, - -49.58528537111213, - -45.66818093662166, - -60.58696099977996, - -44.178097235571066, - -37.213574067968544, - -29.02801030830766, - -20.88386390872622, - -10.016986251287301, - -7.470516078862877, - 6.345968960148908, - 4.343209329511361, - -144.91638104371413, - 91.78645944829398, - 100.57490882565328, - 115.0198771218778, - 126.49515676679046, - 132.9667450433102, - 143.6768700122894, - 152.57244080955854, - 162.6386056371201, - 174.5149571496929, - 180, - -172.73016111884994, - -173.57809345551524, - -170.66439195019734, - -161.16292504839234, - -159.27915118031842, - -162.90191364007953, - 6.149002598385885, - -178.25002252904207, - -179.67835798380287, - -171.71629870718354, - -163.02862431499696, - -152.95560774414605, - -145.55034082696017, - -138.50963007714628, - -130.96610418046026, - -110.60445245954395, - -63.488932754631335, - -58.5296285047684, - -40.784935262998765, - -33.4011304023945, - -15.899450270318724, - -11.98079922175284, - -8.147813628278488, - 0.8158694642281521, - 15.093060659786769, - 22.923229163325363, - 32.44078804116013, - 42.447012241263664, - 45.83427921173283, - 48.52837549516453, - 49.16371967470212, - 46.12898587570745, - 48.67322750744069, - -89.99993112361511, - -131.16855313987196, - -132.21634274729973, - -131.43505191524252, - -131.12876979883848, - -136.22759997049272, - -148.82348281194703, - -154.91921385645844, - -165.80042858245199, - -176.30209430550704, - 175.72884637650225, - 169.64893781173248, - 164.32272447851253, - 166.609539892841, - 171.1155850861851, - 166.3637807513156, - 175.0886195159549, - 178.0053467715306, - -173.15552476803634, - -163.24971275122377, - -153.06780391136738, - -140.2005052574728, - -130.17077601985082, - -118.29848203781941, - 96.31992932289273, - 93.37488183764101, - 98.65620852739153, - -13.220894289645209, - 90.78374679182464, - -122.38574263089491, - 90.11906042024525, - 90.91606631491278, - 89.24226505678728, - 87.1952301524552, - 89.99989371956251, - 92.89042347389294, - -73.7442223661134, - -116.5749747098209, - -106.68941539794253, - -96.5786003424879, - -90.23620894320432, - -89.42530845705083, - -89.99982105641459, - 96.0164612641722, - 97.77709140355806, - 89.99996123049279, - 93.32997836025105, - 87.96524189628325, - 90.86961377588838, - 90.23605053342526, - -44.50763881494917, - -87.22999594921937, - -91.08466221917038, - -89.10502963081117, - -82.51948924863764, - -70.55890852242291, - -61.55042515193161, - -54.93400664520933, - -43.708432529297596, - -42.630819035108374, - -40.89066031737039, - -39.768718845646205, - 74.90365235947708, - -164.2486209384613, - -166.49009116775852, - -170.9886716825588, - -173.2072838154825, - -176.56563073545988, - -177.67795564677132, - -179.256576114407, - 177.6794175196906, - 177.08641995168978, - -179.7039343413944, - -162.31174704216053, - -88.05239082476302, - 104.83933395089112, - 90.91884342553296, - 89.99898193057349, - -89.65566421438635, - 90.45177683075481, - 90.60742069201243, - 90.35190900335593, - 15.252229486307309, - -176.88983601147055, - -170.29517886206932, - -167.69014730626628, - -163.75539093753457, - -160.78980004585748, - -162.40423641636087, - 11.815918282011998, - -89.89521786054206, - -88.44037032865228, - -90.4221071958824, - -89.99998237874593, - 89.64945709813418, - -97.7527834928843, - -95.70334593407169, - -92.4612675583479, - -91.68219351312248, - -90.94678497047079, - -90.39810804835399, - -163.10988605669783, - 18.40425036657263, - 18.419844554057384, - 17.853582297033203, - 12.289104432473655, - 8.709879040159981, - 2.2353614586368535, - 1.0172614149903392, - -0.34171312935348624, - 0.7663441543155729, - 6.935793519460202, - 9.538556916896354, - 12.252956857370524, - 18.19480908504452, - -175.0372577909854, - -89.34475877505189, - -158.31621119967375, - -74.8695322495171, - 109.63776192527479, - 92.36950183161946, - -10.475734036813332, - 90.2902405855761, - -177.25427215646803, - -89.10855416703986, - -173.55458838862484, - 90.5716881361661 -}; - -static const std::vector turf_destination = { - { -96.92034100000001, 32.82927060622736 }, - { -96.92060772614725, 32.829305975369245 }, - { -96.92079439543319, 32.82931008237797 }, - { -96.92109595102636, 32.829318926002884 }, - { -96.92143033606274, 32.82932450415998 }, - { -96.92175049436656, 32.82938581393253 }, - { -96.92146736784431, 32.82936485157204 }, - { -96.92172490097579, 32.82937161249924 }, - { -96.9213630235027, 32.8285760913059 }, - { -96.92177070843935, 32.82880428175528 }, - { -96.92203788361117, 32.82899017678576 }, - { -96.92233149855905, 32.82939076851167 }, - { -96.92256548517682, 32.82946704822662 }, - { -96.91818769656206, 32.82592900640833 }, - { -96.91832325986564, 32.825805632710264 }, - { -96.91849903664684, 32.82575891598141 }, - { -96.91868196749337, 32.82564384425943 }, - { -96.91898098457527, 32.82510240477685 }, - { -96.91839818728636, 32.8283385839573 }, - { -96.91939827432712, 32.82847636744433 }, - { -96.91827631973166, 32.82907174007224 }, - { -96.91834125479305, 32.82971268589303 }, - { -96.91832704128093, 32.8307271881736 }, - { -96.91985130136207, 32.82516722942136 }, - { -96.91977856038616, 32.825603791320425 }, - { -96.91984148408056, 32.8258148548345 }, - { -96.91993702946877, 32.82599140014963 }, - { -96.91991915091329, 32.826241406696084 }, - { -96.91979779876095, 32.826579853154904 }, - { -96.91558705439019, 32.82925571745485 }, - { -96.91591658029526, 32.829282976817495 }, - { -96.91661047207285, 32.829234607705295 }, - { -96.92007967053509, 32.82895758586908 }, - { -96.9200521621881, 32.82900388634131 }, - { -96.92014087867756, 32.829045483451324 }, - { -96.92024377268062, 32.82908435082749 }, - { -96.92036379723118, 32.829119461406734 }, - { -96.92049790317056, 32.829111787443004 }, - { -96.92067803914178, 32.82898830051573 }, - { -96.92138209750365, 32.82793197154348 }, - { -96.9217141663508, 32.827713770769876 }, - { -96.92187716351988, 32.82779766780548 }, - { -96.92207102285543, 32.827881631620734 }, - { -96.92226470339185, 32.82798563055431 }, - { -96.92246216268975, 32.828102632325134 }, - { -96.92264635970814, 32.82823460404209 }, - { -96.92281225401825, 32.828382512213935 }, - { -96.92295880519139, 32.828539322759674 }, - { -96.92309097382822, 32.82870200101877 }, - { -96.92319872369181, 32.82889451176149 }, - { -96.92312705780591, 32.829556819195616 }, - { -96.9232028626346, 32.82985088699453 }, - { -96.9232411573597, 32.83037567828073 }, - { -96.92269992821585, 32.83134715565532 }, - { -96.9220470103152, 32.83141228122331 }, - { -96.92175545672075, 32.831486016562685 }, - { -96.92171723372269, 32.83156132277095 }, - { -96.921734306369, 32.8316111604673 }, - { -96.92164664653896, 32.831668489803576 }, - { -96.9265483183977, 32.83265027046581 }, - { -96.92685511412476, 32.832821461731555 }, - { -96.92747508633266, 32.83298002241657 }, - { -96.9302621268373, 32.832372910939625 }, - { -96.92926537384224, 32.832561085283594 }, - { -96.92859171846636, 32.832760503071036 }, - { -96.92777413074916, 32.8329291215357 }, - { -96.92643558565632, 32.833062897544984 }, - { -96.92620707047061, 32.83326078761194 }, - { -96.92146356644531, 32.83355674791104 }, - { -96.92179503322653, 32.8337837342936 }, - { -96.92204845102395, 32.83395270229553 }, - { -96.9224428137804, 32.834186607151885 }, - { -96.92272809550946, 32.834423403814895 }, - { -96.92288827790685, 32.83466104696409 }, - { -96.92494226054892, 32.83418049103243 }, - { -96.92485328363847, 32.83519469016151 }, - { -96.92485407643412, 32.835497598333895 }, - { -96.92480870102905, 32.83574916926978 }, - { -96.92475014863298, 32.83598835649724 }, - { -96.92465640380966, 32.83618911335752 }, - { -96.92456145502362, 32.83635039301763 }, - { -96.92449329255402, 32.83647814848498 }, - { -96.92439990743493, 32.836576332621924 }, - { -96.92429828977875, 32.83663289816016 }, - { -96.92403241904934, 32.83653879771671 }, - { -96.92393731871984, 32.836543983800375 }, - { -96.92392597882305, 32.8366104088374 }, - { -96.92394738757146, 32.83667702518138 }, - { -96.92399854388823, 32.83676378512602 }, - { -96.92406844480034, 32.8368666409214 }, - { -96.92418009097368, 32.837003544787805 }, - { -96.92518146526312, 32.837036448933326 }, - { -96.92660860730805, 32.83729030555763 }, - { -96.9268684835029, 32.83747406688541 }, - { -96.92709910606104, 32.837668685163564 }, - { -96.92752148718918, 32.837947112682556 }, - { -96.92582495878467, 32.84104130174476 }, - { -96.92577181513958, 32.841024204874486 }, - { -96.92570941035605, 32.84078977453039 }, - { -96.92557675694083, 32.8403789633218 }, - { -96.92548692274416, 32.840290723966085 }, - { -96.92541287907572, 32.840206009324746 }, - { -96.92530063370805, 32.84010277239874 }, - { -96.92515475186458, 32.84469596626941 }, - { -96.92515515797638, 32.84474454442302 }, - { -96.9252083791398, 32.84460346030672 }, - { -96.92526044659823, 32.84441666763957 }, - { -96.9252473860237, 32.844274120357106 }, - { -96.92524221144033, 32.84415777262634 }, - { -96.92523092269901, 32.843916578859954 }, - { -96.92523052056168, 32.84339549372804 }, - { -96.9251830757581, 32.843048472162685 }, - { -96.92512558963632, 32.842712469390584 }, - { -96.92510010191579, 32.842557440932126 }, - { -96.92510061543786, 32.842415342624996 }, - { -96.92518115035102, 32.84226313063035 }, - { -96.9252757385188, 32.84217676144705 }, - { -96.92544139007872, 32.84202419192918 }, - { -96.92565814381041, 32.84192937929272 }, - { -96.92571903404281, 32.84197028113293 }, - { -96.92585506965108, 32.841975855439806 }, - { -96.92612027958023, 32.84195406060516 }, - { -96.92638469759416, 32.84195185543719 }, - { -96.92700035587634, 32.84199419917395 }, - { -96.92771828543378, 32.84208705149566 }, - { -96.92815651411966, 32.842196372537174 }, - { -96.92850407135272, 32.84229412289962 }, - { -96.92871998933195, 32.84237126366221 }, - { -96.92303556750609, 32.845222756364045 }, - { -96.92265144507935, 32.84674456312207 }, - { -96.9222967307011, 32.84767464651239 }, - { -96.92189950489244, 32.8484749696396 }, - { -96.92172276419579, 32.848689496153796 }, - { -96.9237410893001, 32.843108190296135 }, - { -96.923802546131, 32.84328701670827 }, - { -96.92374965829724, 32.843472940765764 }, - { -96.9236514626933, 32.84363092836846 }, - { -96.92353000280231, 32.84379494600556 }, - { -96.92338332178431, 32.84398896076638 }, - { -96.9232224556523, 32.84413994035114 }, - { -96.92288446231687, 32.844442853078014 }, - { -96.92244837426914, 32.8447656678973 }, - { -96.92217622162691, 32.8449243543985 }, - { -96.92185905928895, 32.84505088281731 }, - { -96.92158293218587, 32.84514022404786 }, - { -96.92127788623063, 32.84519234965051 }, - { -96.92104596927354, 32.84522723186053 }, - { -96.92084223019, 32.84527384359657 }, - { -96.92059571034834, 32.84523815846969 }, - { -96.92039946444064, 32.84522115078961 }, - { -96.92018153243328, 32.84508279557485 }, - { -96.92293075844712, 32.8413060685728 }, - { -96.92278981214417, 32.844490946195606 }, - { -96.91725748845279, 32.85068440564823 }, - { -96.91617826911245, 32.84945342488996 }, - { -96.91492269293347, 32.84954698255384 }, - { -96.91507279822012, 32.85085305805673 }, - { -96.91489851558394, 32.85094963157779 }, - { -96.91559254022775, 32.84177868407015 }, - { -96.91541578881139, 32.842077197188324 }, - { -96.91521892350433, 32.84371915343081 }, - { -96.91503791956701, 32.844920536056705 }, - { -96.92370969579733, 32.84199332911104 }, - { -96.92352559723263, 32.84249151740852 }, - { -96.9133495208793, 32.842304086578224 }, - { -96.91435055467473, 32.84236802303858 }, - { -96.91736376818267, 32.843241314011124 }, - { -96.91691918097388, 32.843797947525246 }, - { -96.91655185513237, 32.84423091241846 }, - { -96.91605785663661, 32.84496119834133 }, - { -96.91583122001299, 32.845063795761554 }, - { -96.91558001680603, 32.84515969596507 }, - { -96.91525830338438, 32.84526189106002 }, - { -96.91497913504723, 32.84530737397885 }, - { -96.9143215696874, 32.84538613848035 }, - { -96.91133267086113, 32.84618717915156 }, - { -96.91144147769786, 32.84617049140981 }, - { -96.91158505725988, 32.84616007150336 }, - { -96.91172846628058, 32.84615291651313 }, - { -96.91213476159362, 32.84615702435345 }, - { -96.912391, 32.84621239377265 }, - { -96.91246923814964, 32.84627902435345 }, - { -96.91269853223814, 32.84650491651311 }, - { -96.91562893644198, 32.84715807150331 }, - { -96.91737052114979, 32.846307491409796 }, - { -96.91723228122223, 32.85074617915096 }, - { -96.91621037304874, 32.84992913847948 }, - { -96.91571580146685, 32.84962737397773 }, - { -96.9153216256599, 32.84948989105859 }, - { -96.91498690323063, 32.84939869596327 }, - { -96.91450969112039, 32.84930779575933 }, - { -96.91412204438035, 32.84926319833858 }, - { -96.9130380189888, 32.84925191241467 }, - { -96.9117296694325, 32.849312947520374 }, - { -96.91172705571321, 32.84927831400496 }, - { -96.91138023411317, 32.849136023030674 }, - { -96.91110422918695, 32.84982408656827 }, - { -96.91084713208613, 32.850169517397084 }, - { -96.91053498353314, 32.85059932909671 }, - { -96.91020684510828, 32.85091453604562 }, - { -96.909908771174, 32.851122153415716 }, - { -96.9110838227085, 32.85106719716819 }, - { -96.91091104294216, 32.851006684047555 }, - { -96.91091850811969, 32.85044663157913 }, - { -96.91089125672022, 32.849733058059954 }, - { -96.91079932847259, 32.84912698255514 }, - { -96.9106847733917, 32.84864942489266 }, - { -96.91052563309422, 32.848464405656216 }, - { -96.9104503638796, 32.84138094620757 }, - { -96.91019122863675, 32.84152706857188 }, - { -96.909963680057, 32.84155779559022 }, - { -96.90974976319653, 32.84155515080656 }, - { -96.90941051524207, 32.841707158486976 }, - { -96.90894698098482, 32.84205784361321 }, - { -96.907088047852, 32.8449732318619 }, - { -96.90705712898402, 32.844972349651776 }, - { -96.90738505824653, 32.845275224047036 }, - { -96.90725393055232, 32.845190882816425 }, - { -96.90737174860608, 32.84532535439583 }, - { -96.9073195827836, 32.84533166789337 }, - { -96.9072824639789, 32.84539385307118 }, - { -96.90723443684865, 32.84549894034094 }, - { -96.90713155058394, 32.845570960754024 }, - { -96.90702084565024, 32.84563794599061 }, - { -96.9067482915646, 32.846564928343774 }, - { -96.90658305728276, 32.846808940736665 }, - { -96.90970849593005, 32.84280201671265 }, - { -96.90805395125876, 32.84264819030043 }, - { -96.90782578893621, 32.84251649621324 }, - { -96.90765104983556, 32.84237896970015 }, - { -96.90749277157009, 32.84223664656806 }, - { -96.90732799202755, 32.842079563171204 }, - { -96.90717674658113, 32.84191675639983 }, - { -96.90704206968707, 32.84175826366903 }, - { -96.90691499740588, 32.84158912290766 }, - { -96.90679856537491, 32.841391372546596 }, - { -96.90669280511362, 32.84118105150652 }, - { -96.9066938088171, 32.84036519919393 }, - { -96.90667954376929, 32.839590855466795 }, - { -96.90660899268886, 32.8393190606389 }, - { -96.9065682357046, 32.83905085547807 }, - { -96.90669333896665, 32.83843228118014 }, - { -96.90683531022513, 32.83766337935074 }, - { -96.9058493401867, 32.844535191894416 }, - { -96.90579009265895, 32.8437347614251 }, - { -96.90571275338846, 32.84314413061774 }, - { -96.90568335053055, 32.8427243426205 }, - { -96.90568992027882, 32.84235744093508 }, - { -96.90571448391348, 32.84205446940046 }, - { -96.90577507033056, 32.84175047218241 }, - { -96.90588970181872, 32.841432493758276 }, - { -96.90607139760981, 32.84110657890376 }, - { -96.90924427251379, 32.83993677269292 }, - { -96.90932412469623, 32.839844120427756 }, - { -96.90941109238025, 32.839765667714516 }, - { -96.9094761887729, 32.83972646038609 }, - { -96.90949143753902, 32.83965354450662 }, - { -96.9097457551243, 32.840379966340876 }, - { -96.90982829424877, 32.84071377238854 }, - { -96.90982905264774, 32.840783009315054 }, - { -96.90978899510543, 32.840982723954376 }, - { -96.9096541510239, 32.84115196330865 }, - { -96.9094755291208, 32.84129677452172 }, - { -96.90927714334165, 32.84137120486853 }, - { -96.9091700108835, 32.84129430174039 }, - { -96.90876609180499, 32.84145311262188 }, - { -96.90733733141684, 32.8423466850824 }, - { -96.90684390666796, 32.8425400667973 }, - { -96.90667976396954, 32.842509305466734 }, - { -96.90602783642515, 32.84283044883231 }, - { -96.9062802255586, 32.84267354468892 }, - { -96.90637988293022, 32.84244464082416 }, - { -96.90679282812866, 32.84197678503523 }, - { -96.90742804933328, 32.84135502510003 }, - { -96.9093096344923, 32.83982640878158 }, - { -96.90957633247281, 32.839448983750096 }, - { -96.90978728295761, 32.83902479767383 }, - { -96.90989146055402, 32.8387198981243 }, - { -96.90999388620241, 32.838305332592356 }, - { -96.91004354245484, 32.83786414846141 }, - { -96.910066394355, 32.83761939299617 }, - { -96.91007046155549, 32.8373271133384 }, - { -96.90994976743183, 32.83670035648537 }, - { -96.90993922639949, 32.83636716925954 }, - { -96.90995885480693, 32.83608559832425 }, - { -96.90996464686559, 32.835791690151794 }, - { -96.90999659070908, 32.83546449101174 }, - { -96.91004166908012, 32.83512104695675 }, - { -96.91011885853125, 32.83482440380857 }, - { -96.91020213813562, 32.8346086071453 }, - { -96.91034250605827, 32.834331702289695 }, - { -96.91052593504799, 32.834065734289304 }, - { -96.91068039981232, 32.83385874790652 }, - { -96.91087788560367, 32.83365678760608 }, - { -96.90463542953506, 32.83292489754698 }, - { -96.90449088650593, 32.83277112153798 }, - { -96.90358630936747, 32.83250350307465 }, - { -96.90479021695444, 32.83637208523084 }, - { -96.90470246266294, 32.836230910887174 }, - { -96.91202899207734, 32.8322360224265 }, - { -96.91154896132278, 32.83209846174101 }, - { -96.90859475679387, 32.83192227047514 }, - { -96.90833234079028, 32.83179248980202 }, - { -96.90687768221198, 32.83172416046592 }, - { -96.90658876308076, 32.83159332277057 }, - { -96.90636454683248, 32.8314500165631 }, - { -96.90946092710227, 32.83205428121599 }, - { -96.90977902424702, 32.83184115564981 }, - { -96.91015472158404, 32.83165067826693 }, - { -96.91052898267965, 32.83150288697713 }, - { -96.9112247739368, 32.83137981917697 }, - { -96.91265206016878, 32.83127151173788 }, - { -96.91343580663084, 32.831154000995156 }, - { -96.90537803849678, 32.83031332274312 }, - { -96.90544558911877, 32.830192512197605 }, - { -96.90543348303062, 32.83008060402599 }, - { -96.90534168189792, 32.82995963230952 }, - { -96.90527614279657, 32.829857630539124 }, - { -96.90439482744506, 32.82973863160623 }, - { -96.90338069160265, 32.829630667791726 }, - { -96.90837537183168, 32.83367677072692 }, - { -96.90864247408625, 32.83358197150447 }, - { -96.9092286278605, 32.833477300486074 }, - { -96.90975778683836, 32.833386787416 }, - { -96.91018890496235, 32.8333244613814 }, - { -96.91048593761097, 32.833276350803445 }, - { -96.91077383813835, 32.833248483428406 }, - { -96.91108555891405, 32.83325388631932 }, - { -96.911656037352, 32.83353258584669 }, - { -96.91194125915716, 32.833565607685266 }, - { -96.91260613703052, 32.83397497679704 }, - { -96.91287366825213, 32.834003717435394 }, - { -96.90947673989618, 32.83473585312356 }, - { -96.9096893960709, 32.83452340666632 }, - { -96.91001755333926, 32.83389040012315 }, - { -96.91028013353335, 32.833324854811124 }, - { -96.91050608380527, 32.83286479129949 }, - { -96.91070135504911, 32.83246622940192 }, - { -96.91089890631574, 32.831888188170744 }, - { -96.91108067612203, 32.83131268588944 }, - { -96.91122561582051, 32.83063574006906 }, - { -96.91134268123285, 32.82960936744224 }, - { -96.91152479752446, 32.828746583956615 }, - { -96.91185890321435, 32.82828840477211 }, - { -96.9121429460756, 32.828246844255986 }, - { -96.91175689101942, 32.828078915978715 }, - { -96.91156667517494, 32.82803463270799 }, - { -96.90799324737107, 32.82799800640653 }, - { -96.91916255109285, 32.82801904822771 }, - { -96.91678353408332, 32.82797076851257 }, - { -96.91450013877316, 32.827920176786314 }, - { -96.91332930884246, 32.827887281755665 }, - { -96.91334197954883, 32.82839409130596 }, - { -96.91356812298534, 32.82773961249966 }, - { -96.91391466280625, 32.8269308515725 }, - { -96.91420753589344, 32.82650381393292 }, - { -96.91447968982843, 32.82624350416024 }, - { -96.915293077956, 32.8247219260031 }, - { -96.91557662496521, 32.82445808237808 }, - { -96.91490527680895, 32.82789997536924 }, - { -96.91639800000002, 32.82790060622736 }, - { -96.91973372334664, 32.82797397536925 }, - { -96.92169538978655, 32.827967082377995 }, - { -96.92194694254597, 32.82797392600294 }, - { -96.91114632526379, 32.82803950416009 }, - { -96.91160348003399, 32.82802081393272 }, - { -96.91221835065487, 32.82799985157229 }, - { -96.91284688086124, 32.82800161249959 }, - { -96.9141260137614, 32.827995091306086 }, - { -96.91517469340017, 32.82800628175562 }, - { -96.91638586344432, 32.82802617678628 }, - { -96.91781138884836, 32.824617768514706 }, - { -96.91789537076589, 32.82489904823005 }, - { -96.91775069192848, 32.82575800640849 }, - { -96.91739830014022, 32.82718763270885 }, - { -96.91752308915034, 32.82744291597945 }, - { -96.91760604628695, 32.82801684425629 }, - { -96.91774511911717, 32.828922404771156 }, - { -96.91790124953417, 32.830010583954504 }, - { -96.91808638066573, 32.831187367439334 }, - { -96.91824645048688, 32.83224474006578 }, - { -96.91834638886598, 32.832817685886084 }, - { -96.91842915877513, 32.83333018816722 }, - { -96.91846471341049, 32.83392022939806 }, - { -96.9184489944202, 32.83446079129487 }, - { -96.91883781971728, 32.83240685481398 }, - { -96.91994337233697, 32.83248340012787 }, - { -96.9217193101751, 32.82915340668562 }, - { -96.92239995502872, 32.82934285314428 }, - { -96.92031602448525, 32.828743717456945 }, - { -96.91975955095923, 32.82879597681961 }, - { -96.92077369032383, 32.83275160768903 }, - { -96.91999391775727, 32.83282958585012 }, - { -96.9203551842353, 32.829339886339575 }, - { -96.92096990474985, 32.82943248344921 }, - { -96.92113979465543, 32.82940235082567 }, - { -96.9208148234328, 32.8294894614045 } -}; - -static const std::vector turf_lineDistance = { - 0.04662454909427901, - 0.0068391514197623125, - 0.09985216775589113, - 0.1114897011108262, - 0.07753561751121403, - 0.173873577625755, - 0.14681366156746842, - 0.06837599656020085, - 0.43073382183261627, - 0.15584656488988174, - 0.06961927450155198, - 0.4176778492245252, - 0.11346010319030365, - 0.4069191477510672, - 0.0912702817480534, - 0.21057858475480964, - 0.9731217926415133, - 0.3421517057131934, - 0.24832380027187234, - 0.345931459929503, - 0.269566962191182, - 0.003792191683109981, - 0.33114550846131696, - 0.05016778892928127, - 0.1104041562314812, - 0.2820059822767088, - 0.2592491201412077, - 0.20301909742424815, - 0.3324775424083908, - 0.016729639837999192, - 0.2542614100810735, - 0.2514112112841453, - 0.13668774071427742, - 0.3699064116077255, - 0.5100540014631532, - 0.27709292806311164, - 0.7806905867697003, - 0.7768297872678829, - 0.11390017527821808, - 0.016262433777165904, - 0.585110693926173, - 0.30913282118994834, - 0.26207433401586333, - 0.32168722472380185, - 0.6017929391701553, - 0.009818685405935522, - 0.3856097243248631, - 0.5966547247562556, - 0.44360635693488976, - 0.5884269163801416, - 0.3863202991166816, - 1.0477201274090444, - 0.0875715634398609, - 0.04985868432498091, - 0.06725351272770712, - 0.08775397845174246, - 0.04290208100438889, - 0.04458140027621235 -}; - -static const std::vector turf_area = { - 0.00001385291315291015, - 0.00038253063343961127, - 0.0004601665282670179, - 0.000025503489092274364, - 0.000595225685418049, - 0.0000274562733203963, - 0.010106783304640774, - 0.001104280981730458, - 0.00007467453869082208, - 0.00026115590644638464, - 0.0004233598602508744, - 0.010634164210050902, - 0.0001950421991985674, - 0.00045308678876159587, - 0.11642042926261091, - 0.0023790522112468416, - 0.008515769374449783, - 0.007485271287917676, - 0.0000991431197074571, - 0.006085169973921119, - 0.004123438747704956, - 0.010246920654428558, - 0.0017456776108892168, - 0.0012524502918429697, - 0.0002985554527856464, - 0.013319422885021871, - 0.03301062700761473, - 0.005952119850683508, - 0.07276896988546715, - 0.044671110786017286, - 0.00008921566232195025, - 0.0011521493461515583, - 0.002598288702578828, - 0.00017084098623693146, - 0.009460656476931052, - 0.008810544363699217, - 0.00009774280666531308, - 0.000016747619827861367, - 0.005292114515450739, - 0.00050350329460907, - 0.0013371547851014247, - 0.017404511466653897 -}; - -static const std::vector turf_along_dist = { - 0.023312274547139505, - 0.0034195757098811562, - 0.049926083877945567, - 0.0557448505554131, - 0.038767808755607015, - 0.0869367888128775, - 0.07340683078373421, - 0.034187998280100426, - 0.21536691091630814, - 0.07792328244494087, - 0.03480963725077599, - 0.2088389246122626, - 0.05673005159515183, - 0.2034595738755336, - 0.0456351408740267, - 0.10528929237740482, - 0.48656089632075666, - 0.1710758528565967, - 0.12416190013593617, - 0.1729657299647515, - 0.134783481095591, - 0.0018960958415549904, - 0.16557275423065848, - 0.025083894464640634, - 0.0552020781157406, - 0.1410029911383544, - 0.12962456007060386, - 0.10150954871212407, - 0.1662387712041954, - 0.008364819918999596, - 0.12713070504053675, - 0.12570560564207264, - 0.06834387035713871, - 0.18495320580386276, - 0.2550270007315766, - 0.13854646403155582, - 0.39034529338485013, - 0.38841489363394144, - 0.05695008763910904, - 0.008131216888582952, - 0.2925553469630865, - 0.15456641059497417, - 0.13103716700793167, - 0.16084361236190092, - 0.30089646958507765, - 0.004909342702967761, - 0.19280486216243156, - 0.2983273623781278, - 0.22180317846744488, - 0.2942134581900708, - 0.1931601495583408, - 0.5238600637045222, - 0.04378578171993045, - 0.024929342162490455, - 0.03362675636385356, - 0.04387698922587123, - 0.021451040502194443, - 0.022290700138106176 -}; - -static const std::vector turf_along = { - { -96.92058074705263, 32.838295790638604 }, - { -96.92038500000224, 32.838300500005154 }, - { -96.92017837949811, 32.837840876146984 }, - { -96.91575185809616, 32.834193910150304 }, - { -96.91550349979606, 32.83693300067325 }, - { -96.91447049297071, 32.838291837950294 }, - { -96.91528382138036, 32.83401702016945 }, - { -96.91074827033752, 32.837025468206356 }, - { -96.91465325332314, 32.83491180557744 }, - { -96.9133254981959, 32.83668815734806 }, - { -96.91774498947463, 32.8373234997933 }, - { -96.91858548156746, 32.8367137123682 }, - { -96.912125005592, 32.837061935308064 }, - { -96.91369409219625, 32.83774164388782 }, - { -96.91639766393256, 32.837037707584614 }, - { -96.91504330753082, 32.83916332521944 }, - { -96.91553969265065, 32.83839013773005 }, - { -96.91430070726516, 32.841204555275795 }, - { -96.91571233411688, 32.837779806500336 }, - { -96.9177544997986, 32.83499800000052 }, - { -96.91166706734954, 32.841629875937976 }, - { -96.9107185000003, 32.84265700000001 }, - { -96.91156370689538, 32.83493146645441 }, - { -96.92040000000762, 32.83366850000004 }, - { -96.91099049992684, 32.83367300138629 }, - { -96.91421262070213, 32.83569407895492 }, - { -96.91178370739728, 32.83716800028003 }, - { -96.91715300456607, 32.83775950369486 }, - { -96.9169767353908, 32.840679780152996 }, - { -96.91422649999899, 32.840554000031844 }, - { -96.91397243336206, 32.841584696234726 }, - { -96.91523149763671, 32.84157652148576 }, - { -96.91515150426642, 32.83399134463128 }, - { -96.9142729703425, 32.83879948063655 }, - { -96.9156392575161, 32.835658314541256 }, - { -96.91543436762962, 32.83921014952233 }, - { -96.91983675113876, 32.84033226350925 }, - { -96.92009207607055, 32.840359219198234 }, - { -96.91380542577559, 32.836522062530115 }, - { -96.91423699999902, 32.840453000030095 }, - { -96.91825697483056, 32.836559607150164 }, - { -96.91973317221228, 32.83716163055561 }, - { -96.91180206194203, 32.83642316543709 }, - { -96.91691026889121, 32.84079238934942 }, - { -96.91491045374221, 32.840000370933915 }, - { -96.9150394999991, 32.83688750001095 }, - { -96.91246302385605, 32.83675801387829 }, - { -96.91819499264128, 32.8367903863771 }, - { -96.91518494007596, 32.83533040554249 }, - { -96.91823942303637, 32.83693311262287 }, - { -96.91246139013954, 32.83690233470654 }, - { -96.91460659817584, 32.83801219845079 }, - { -96.91478449997625, 32.840559500872736 }, - { -96.91711949983032, 32.83722250026362 }, - { -96.91476949994939, 32.83659450051385 }, - { -96.91479349998943, 32.84045600087646 }, - { -96.91475749999225, 32.836883000209426 }, - { -96.91476449999463, 32.83676500022616 } -}; - -static const std::vector turf_lineSlice = { - 0.018676803463204973, - 0.0027403004691342625, - 0.0398660924057463, - 0.04446856326668934, - 0.031068781600570992, - 0.06935062861161241, - 0.05864407770725445, - 0.02738946433808026, - 0.17194340067724667, - 0.062425250268892694, - 0.027897179178562482, - 0.16737293529254177, - 0.04543404915442931, - 0.1626655495109919, - 0.036564726727473594, - 0.08399080442136823, - 0.3888893870284878, - 0.13649098383658884, - 0.09926948806782267, - 0.13795991467073365, - 0.10778696255372587, - 0.0015123931765971925, - 0.1320632508079359, - 0.020007277614733015, - 0.04424096972304277, - 0.11264746401401557, - 0.10385609012115837, - 0.08127435006240627, - 0.13303959829411355, - 0.006704402992819479, - 0.10142852122895935, - 0.10028174144491304, - 0.054573146193032135, - 0.14766725949326992, - 0.20376574794349672, - 0.11058823108803342, - 0.31189004060932496, - 0.3103422255762966, - 0.04563922619445161, - 0.006517162427091035, - 0.23447174477127802, - 0.12386733468968403, - 0.10502105512101395, - 0.12872246637948387, - 0.2400138878407706, - 0.003934657129647942, - 0.1545266007655544, - 0.23909936135356857, - 0.17696967699870225, - 0.23580214129066726, - 0.15480959152734855, - 0.41791703759808313, - 0.035094313148852196, - 0.01997359910854999, - 0.026950444653916276, - 0.03516739283887676, - 0.01719229231376514, - 0.0178652399166501 -}; - -static const std::vector turf_bufferPoint = { - {{ -96.92206300843843, 32.83681412509083 }, { -96.91861893543, 32.83970785132817 }}, - {{ -96.92214300909791, 32.836848125090825 }, { -96.91869893477045, 32.839741851328164 }}, - {{ -96.92214300909791, 32.836848125090825 }, { -96.91869893477045, 32.839741851328164 }}, - {{ -96.92225800913668, 32.836850125090805 }, { -96.91881393473163, 32.83974385132815 }}, - {{ -96.9224060090591, 32.836846125090815 }, { -96.91896193480923, 32.83973985132816 }}, - {{ -96.92254001000953, 32.83689512509079 }, { -96.91909593385867, 32.83978885132814 }}, - {{ -96.92207100931128, 32.83685912509082 }, { -96.91862693455705, 32.83975285132816 }}, - {{ -96.92214300909791, 32.836848125090825 }, { -96.91869893477045, 32.839741851328164 }}, - {{ -96.92159599327083, 32.83603212509119 }, { -96.91815195059978, 32.838925851328526 }}, - {{ -96.92181899724693, 32.836237125091095 }, { -96.9183749466231, 32.83913085132843 }}, - {{ -96.92190200035026, 32.83639712509101 }, { -96.91845794351933, 32.83929085132836 }}, - {{ -96.92201200756558, 32.836769125090846 }, { -96.91856793630295, 32.83966285132819 }}, - {{ -96.92206300843843, 32.83681412509083 }, { -96.91861893543, 32.83970785132817 }}, - {{ -96.91750293916103, 32.83324212509243 }, { -96.91405900471734, 32.83613585132978 }}, - {{ -96.91745693605817, 32.833082125092524 }, { -96.91401300782061, 32.83597585132986 }}, - {{ -96.91745193439041, 32.83299612509255 }, { -96.91400800948864, 32.83588985132989 }}, - {{ -96.91745493134579, 32.832839125092626 }, { -96.91401101253369, 32.835732851329965 }}, - {{ -96.91757491998197, 32.83225312509288 }, { -96.91413102389916, 32.83514685133023 }}, - {{ -96.91681398182763, 32.83544212509144 }, { -96.91336996204461, 32.83833585132879 }}, - {{ -96.91763698353438, 32.83553012509141 }, { -96.91419296033762, 32.83842385132875 }}, - {{ -96.91633899406605, 32.836073125091154 }, { -96.91289494980445, 32.8389668513285 }}, - {{ -96.91622900543202, 32.836659125090904 }, { -96.91278493843684, 32.83955285132824 }}, - {{ -96.91604102399457, 32.83761612509046 }, { -96.91259691987165, 32.840509851327816 }}, - {{ -96.91739291499829, 32.831996125093006 }, { -96.91394902888356, 32.834889851330345 }}, - {{ -96.91714892225083, 32.83237012509284 }, { -96.91370502162997, 32.83526385133019 }}, - {{ -96.91704192508207, 32.83251612509276 }, { -96.91359801879831, 32.8354098513301 }}, - {{ -96.91696892719582, 32.83262512509271 }, { -96.91352501668426, 32.835518851330065 }}, - {{ -96.91678393068645, 32.83280512509264 }, { -96.91334001319315, 32.83569885132999 }}, - {{ -96.91649693584488, 32.833071125092516 }, { -96.91305300803398, 32.83596485132987 }}, - {{ -96.9121219862885, 32.83567212509135 }, { -96.90867795758311, 32.83856585132869 }}, - {{ -96.91228898531874, 32.83562212509136 }, { -96.90884495855302, 32.838515851328715 }}, - {{ -96.91282198283616, 32.83549412509143 }, { -96.90937796103594, 32.83838785132877 }}, - {{ -96.91613197587343, 32.83513512509158 }, { -96.9126879679997, 32.838028851328936 }}, - {{ -96.91594697513642, 32.835097125091615 }, { -96.91250296873679, 32.83799085132895 }}, - {{ -96.91587997426367, 32.83505212509162 }, { -96.91243596960967, 32.837945851328975 }}, - {{ -96.91582897329396, 32.835002125091656 }, { -96.91238497057954, 32.837895851328994 }}, - {{ -96.91579697220784, 32.83494612509167 }, { -96.91235297166578, 32.837839851329015 }}, - {{ -96.915780970249, 32.83484512509171 }, { -96.9123369736249, 32.83773885132906 }}, - {{ -96.91581296600165, 32.83462612509182 }, { -96.91236897787286, 32.83751985132916 }}, - {{ -96.91637094362142, 32.833472125092335 }, { -96.91292700025633, 32.83636585132968 }}, - {{ -96.91655893745447, 32.833154125092484 }, { -96.91311500642416, 32.83604785132982 }}, - {{ -96.9165799371054, 32.83313612509249 }, { -96.91313600677327, 32.83602985132983 }}, - {{ -96.91663393671753, 32.8331161250925 }, { -96.91319000716118, 32.836009851329834 }}, - {{ -96.91668993667875, 32.83311412509251 }, { -96.91324600719997, 32.83600785132984 }}, - {{ -96.91675193685329, 32.83312312509249 }, { -96.91330800702542, 32.83601685132983 }}, - {{ -96.91680293727993, 32.833145125092486 }, { -96.91335900659871, 32.83603885132984 }}, - {{ -96.91683793797807, 32.833181125092466 }, { -96.91339400590047, 32.83607485132981 }}, - {{ -96.91685593881195, 32.83322412509245 }, { -96.91341200506646, 32.836117851329796 }}, - {{ -96.91686193972342, 32.83327112509243 }, { -96.91341800415486, 32.836164851329784 }}, - {{ -96.91684594117791, 32.8333461250924 }, { -96.9134020027002, 32.836239851329736 }}, - {{ -96.9166529517084, 32.83388912509215 }, { -96.91320899216815, 32.83678285132949 }}, - {{ -96.9166099550635, 32.834062125092075 }, { -96.91316598881261, 32.836955851329414 }}, - {{ -96.91653196285982, 32.83446412509189 }, { -96.91308798101515, 32.83735785132922 }}, - {{ -96.91587697928689, 32.83531112509151 }, { -96.9124329645857, 32.83820485132886 }}, - {{ -96.91511297810382, 32.83525012509153 }, { -96.91166896576897, 32.83814385132888 }}, - {{ -96.91471297705651, 32.83519612509156 }, { -96.91126896681644, 32.83808985132891 }}, - {{ -96.91456897600918, 32.83514212509158 }, { -96.9111249678639, 32.838035851328925 }}, - {{ -96.91448297443822, 32.83506112509162 }, { -96.9110389694351, 32.83795485132896 }}, - {{ -96.91429497298361, 32.834986125091646 }, { -96.9108509708899, 32.83787985132899 }}, - {{ -96.91909898943054, 32.83583412509127 }, { -96.91565495444063, 32.83872785132861 }}, - {{ -96.91931099012878, 32.835870125091255 }, { -96.9158669537423, 32.83876385132859 }}, - {{ -96.91983899055546, 32.83589212509124 }, { -96.91639495331553, 32.838785851328595 }}, - {{ -96.92253697610617, 32.83514712509158 }, { -96.91909296776691, 32.83804085132892 }}, - {{ -96.9214539770565, 32.83519612509156 }, { -96.91800996681643, 32.83808985132891 }}, - {{ -96.9206969782008, 32.835255125091535 }, { -96.91725296567199, 32.83814885132888 }}, - {{ -96.91979897872444, 32.83528212509151 }, { -96.91635496514823, 32.838175851328856 }}, - {{ -96.9183829785499, 32.83527312509153 }, { -96.91493896532283, 32.838166851328864 }}, - {{ -96.91807997959722, 32.8353271250915 }, { -96.91463596427536, 32.83822085132884 }}, - {{ -96.91326498252585, 32.835478125091434 }, { -96.9098209613463, 32.83837185132878 }}, - {{ -96.91352798409686, 32.83555912509139 }, { -96.91008395977508, 32.83845285132874 }}, - {{ -96.91371598452355, 32.83558112509138 }, { -96.91027195934834, 32.83847485132872 }}, - {{ -96.9140479861915, 32.83566712509135 }, { -96.91060395768008, 32.838560851328694 }}, - {{ -96.9142739878983, 32.8357551250913 }, { -96.91082995597309, 32.83864885132865 }}, - {{ -96.91437798960509, 32.835843125091266 }, { -96.91093395426604, 32.83873685132861 }}, - {{ -96.91637897736683, 32.835212125091545 }, { -96.91293496650609, 32.83810585132889 }}, - {{ -96.91623999410484, 32.836075125091156 }, { -96.91279594976567, 32.8389688513285 }}, - {{ -96.91619399703357, 32.836226125091095 }, { -96.9127499468365, 32.83911985132844 }}, - {{ -96.91610499895377, 32.83632512509105 }, { -96.91266094491604, 32.8392188513284 }}, - {{ -96.91600600062179, 32.836411125091 }, { -96.91256194324774, 32.83930485132834 }}, - {{ -96.91587500153341, 32.83645812509098 }, { -96.912430942336, 32.839351851328324 }}, - {{ -96.91574600166918, 32.83646512509099 }, { -96.91230194220022, 32.83935885132834 }}, - {{ -96.91564700114552, 32.83643812509099 }, { -96.912202942724, 32.83933185132834 }}, - {{ -96.91552600003993, 32.83638112509103 }, { -96.91208194382972, 32.83927485132837 }}, - {{ -96.91539999811975, 32.83628212509107 }, { -96.91195594575017, 32.839175851328406 }}, - {{ -96.91511299327082, 32.83603212509119 }, { -96.91166895059978, 32.838925851328526 }}, - {{ -96.91499999034212, 32.83588112509125 }, { -96.91155595352893, 32.838774851328594 }}, - {{ -96.91497398859653, 32.835791125091305 }, { -96.91152995527474, 32.83868485132864 }}, - {{ -96.91498398685096, 32.835701125091326 }, { -96.91153995702057, 32.838594851328665 }}, - {{ -96.9150269854933, 32.83563112509135 }, { -96.91158295837842, 32.8385248513287 }}, - {{ -96.91509198444597, 32.83557712509138 }, { -96.91164795942592, 32.83847085132873 }}, - {{ -96.91520198405807, 32.8355571250914 }, { -96.91175795981388, 32.83845085132874 }}, - {{ -96.91620498165308, 32.835433125091456 }, { -96.9127609622192, 32.8383268513288 }}, - {{ -96.91763698353438, 32.83553012509141 }, { -96.91419296033762, 32.83842385132875 }}, - {{ -96.91790498405807, 32.8355571250914 }, { -96.91446095981388, 32.83845085132874 }}, - {{ -96.91814698479507, 32.83559512509137 }, { -96.91470295907675, 32.83848885132871 }}, - {{ -96.91858398716128, 32.83571712509132 }, { -96.9151399567102, 32.83861085132867 }}, - {{ -96.91690504414862, 32.83865512509 }, { -96.91346089971469, 32.84154885132734 }}, - {{ -96.91687304079277, 32.838482125090074 }, { -96.91342890307102, 32.84137585132741 }}, - {{ -96.91683503322767, 32.838092125090256 }, { -96.91339091063722, 32.840985851327595 }}, - {{ -96.91673002224884, 32.837526125090506 }, { -96.91328592161763, 32.840419851327844 }}, - {{ -96.91667101753538, 32.837283125090615 }, { -96.91322692633173, 32.84017685132796 }}, - {{ -96.9166310128996, 32.83704412509072 }, { -96.9131869309682, 32.83993785132806 }}, - {{ -96.91655600791474, 32.83678712509084 }, { -96.91311193595378, 32.83968085132818 }}, - {{ -96.9164500940436, 32.84122712508884 }, { -96.91300584981255, 32.844120851326174 }}, - {{ -96.91649409202596, 32.84112312508889 }, { -96.9130498518305, 32.84401685132623 }}, - {{ -96.91659408634168, 32.840830125089006 }, { -96.91314985751559, 32.84372385132636 }}, - {{ -96.91669607978447, 32.84049212508917 }, { -96.91325186407373, 32.843385851326516 }}, - {{ -96.91673607410037, 32.8401991250893 }, { -96.91329186975865, 32.84309285132664 }}, - {{ -96.91678706894014, 32.83993312508942 }, { -96.91334287491964, 32.84282685132677 }}, - {{ -96.91683506137448, 32.8395431250896 }, { -96.91339088248637, 32.842436851326944 }}, - {{ -96.91689704839683, 32.8388741250899 }, { -96.91345289546588, 32.84176785132724 }}, - {{ -96.9169150388142, 32.838380125090126 }, { -96.91347090504988, 32.84127385132747 }}, - {{ -96.91692602946458, 32.83789812509034 }, { -96.91348191440086, 32.84079185132768 }}, - {{ -96.91697202364541, 32.83759812509048 }, { -96.91352792022083, 32.84049185132781 }}, - {{ -96.9170470180979, 32.83731212509061 }, { -96.91360292576915, 32.84020585132795 }}, - {{ -96.91720501237589, 32.83701712509073 }, { -96.91376093149196, 32.83991085132807 }}, - {{ -96.91738000795353, 32.836789125090846 }, { -96.91393593591498, 32.83968285132819 }}, - {{ -96.91762900227046, 32.836496125090974 }, { -96.91418494159886, 32.83938985132831 }}, - {{ -96.91793199773183, 32.836262125091075 }, { -96.91448794613815, 32.839155851328414 }}, - {{ -96.91808199585044, 32.83616512509112 }, { -96.9146379480198, 32.83905885132847 }}, - {{ -96.91830999330962, 32.83603412509118 }, { -96.914865950561, 32.83892785132853 }}, - {{ -96.91866999026453, 32.83587712509125 }, { -96.91522595360651, 32.8387708513286 }}, - {{ -96.91903198762677, 32.83574112509132 }, { -96.91558795624465, 32.838634851328656 }}, - {{ -96.9197479858812, 32.83565112509135 }, { -96.91630395799046, 32.8385448513287 }}, - {{ -96.92056898514417, 32.83561312509138 }, { -96.91712495872758, 32.838506851328724 }}, - {{ -96.92111298475629, 32.83559312509138 }, { -96.91766895911556, 32.838486851328724 }}, - {{ -96.92156898417443, 32.83556312509139 }, { -96.9181249596975, 32.838456851328736 }}, - {{ -96.92189598322406, 32.83551412509142 }, { -96.91845196064797, 32.83840785132876 }}, - {{ -96.91632503611791, 32.838241125090185 }, { -96.91288090774655, 32.84113485132754 }}, - {{ -96.91605706325616, 32.83964012508955 }, { -96.91261288060439, 32.8425338513269 }}, - {{ -96.91582107895027, 32.84044912508918 }, { -96.91237686490803, 32.843342851326526 }}, - {{ -96.91554509216175, 32.841130125088874 }, { -96.91210085169466, 32.84402385132622 }}, - {{ -96.9154920940436, 32.84122712508884 }, { -96.91204784981255, 32.844120851326174 }}, - {{ -96.91763698353438, 32.83553012509141 }, { -96.91419296033762, 32.83842385132875 }}, - {{ -96.91782698479507, 32.83559512509137 }, { -96.91438295907676, 32.83848885132871 }}, - {{ -96.91790498623033, 32.83566912509136 }, { -96.91446095764131, 32.83856285132869 }}, - {{ -96.91793998716128, 32.83571712509132 }, { -96.9144959567102, 32.83861085132867 }}, - {{ -96.91795398824742, 32.83577312509131 }, { -96.91450995562391, 32.83866685132865 }}, - {{ -96.91794498995421, 32.83586112509127 }, { -96.91450095391689, 32.8387548513286 }}, - {{ -96.91792399086579, 32.835908125091244 }, { -96.91447995300516, 32.83880185132858 }}, - {{ -96.91772799476429, 32.83610912509115 }, { -96.9142839491061, 32.83900285132848 }}, - {{ -96.91743599908953, 32.83633212509104 }, { -96.91399194478024, 32.839225851328386 }}, - {{ -96.91731000027268, 32.83639312509102 }, { -96.91386594359693, 32.83928685132837 }}, - {{ -96.91714100087395, 32.836424125091014 }, { -96.91369694299557, 32.839317851328346 }}, - {{ -96.91701500079637, 32.83642012509102 }, { -96.91357094307315, 32.839313851328356 }}, - {{ -96.91686200003993, 32.83638112509103 }, { -96.9134179438297, 32.83927485132837 }}, - {{ -96.91678399899256, 32.836327125091046 }, { -96.91333994487724, 32.839220851328385 }}, - {{ -96.91673599821672, 32.83628712509106 }, { -96.91329194565319, 32.83918085132841 }}, - {{ -96.91664699588924, 32.83616712509113 }, { -96.91320294798099, 32.83906085132847 }}, - {{ -96.91660999396908, 32.83606812509117 }, { -96.91316594990144, 32.838961851328506 }}, - {{ -96.91655298974086, 32.83585012509127 }, { -96.91310895413027, 32.8387438513286 }}, - {{ -96.91946491499829, 32.831996125093006 }, { -96.91602102888356, 32.834889851330345 }}, - {{ -96.91948797531097, 32.8351061250916 }, { -96.9160439685622, 32.83799985132893 }}, - {{ -96.9141210940436, 32.84122712508884 }, { -96.91067684981255, 32.844120851326174 }}, - {{ -96.91320906880432, 32.83992612508941 }, { -96.90976487505543, 32.842819851326766 }}, - {{ -96.9121220693087, 32.83995212508941 }, { -96.90867787455099, 32.84284585132676 }}, - {{ -96.91244209338399, 32.84119312508886 }, { -96.90899785047226, 32.844086851326196 }}, - {{ -96.9124390940436, 32.84122712508884 }, { -96.90899484981256, 32.844120851326174 }}, - {{ -96.91330591499829, 32.831996125093006 }, { -96.90986202888357, 32.834889851330345 }}, - {{ -96.9133029196717, 32.83223712509289 }, { -96.90985902420945, 32.835130851330234 }}, - {{ -96.91328095044784, 32.83382412509218 }, { -96.90983699342891, 32.83671785132952 }}, - {{ -96.9132759727315, 32.834973125091665 }, { -96.90983197114207, 32.837866851329 }}, - {{ -96.92212491499828, 32.831996125093006 }, { -96.91868102888355, 32.834889851330345 }}, - {{ -96.92211892374401, 32.8324471250928 }, { -96.91867502013655, 32.83534085133014 }}, - {{ -96.91212191924508, 32.8322151250929 }, { -96.90867802463615, 32.83510885133024 }}, - {{ -96.9133029196717, 32.83223712509289 }, { -96.90985902420945, 32.835130851330234 }}, - {{ -96.91649693584488, 32.833071125092516 }, { -96.91305300803398, 32.83596485132987 }}, - {{ -96.9162339459292, 32.833591125092276 }, { -96.91278999794821, 32.83648485132962 }}, - {{ -96.91604895366716, 32.8339901250921 }, { -96.91260499020915, 32.836883851329446 }}, - {{ -96.9157379672235, 32.8346891250918 }, { -96.91229397665084, 32.83758285132914 }}, - {{ -96.91569496865867, 32.834763125091754 }, { -96.91225097521547, 32.83765685132909 }}, - {{ -96.91562797001627, 32.83483312509173 }, { -96.91218397385767, 32.83772685132906 }}, - {{ -96.91549097154844, 32.83491212509169 }, { -96.9120469723253, 32.83780585132903 }}, - {{ -96.9153969720333, 32.83493712509168 }, { -96.91195297184036, 32.837830851329024 }}, - {{ -96.91492497321636, 32.834998125091644 }, { -96.91148097065712, 32.83789185132899 }}, - {{ -96.91212198846075, 32.835784125091294 }, { -96.90867795541052, 32.83867785132863 }}, - {{ -96.9124169878983, 32.8357551250913 }, { -96.90897295597308, 32.83864885132865 }}, - {{ -96.91274698751039, 32.835735125091325 }, { -96.90930295636103, 32.83862885132866 }}, - {{ -96.91307698723887, 32.835721125091325 }, { -96.90963295663262, 32.838614851328664 }}, - {{ -96.91366998723886, 32.835721125091325 }, { -96.9102259566326, 32.838614851328664 }}, - {{ -96.91411298828622, 32.835775125091295 }, { -96.91066895558512, 32.83866885132864 }}, - {{ -96.91437798960509, 32.835843125091266 }, { -96.91093395426604, 32.83873685132861 }}, - {{ -96.91479399406605, 32.836073125091154 }, { -96.91134994980445, 32.8389668513285 }}, - {{ -96.91791100686734, 32.83673312509086 }, { -96.91446693700134, 32.83962685132821 }}, - {{ -96.91983899055546, 32.83589212509124 }, { -96.91639495331553, 32.838785851328595 }}, - {{ -96.9198870768939, 32.84034312508924 }, { -96.9164428669647, 32.84323685132657 }}, - {{ -96.91905106133568, 32.8395411250896 }, { -96.91560688252517, 32.84243485132695 }}, - {{ -96.91874205582643, 32.83925712508973 }, { -96.91529788803521, 32.84215085132708 }}, - {{ -96.91853305355679, 32.839140125089784 }, { -96.91508889030517, 32.84203385132712 }}, - {{ -96.9183830522377, 32.83907212508981 }, { -96.91493889162446, 32.84196585132715 }}, - {{ -96.9180900509768, 32.83900712508984 }, { -96.91464589288553, 32.84190085132718 }}, - {{ -96.91788605066641, 32.83899112508985 }, { -96.91444189319596, 32.84188485132719 }}, - {{ -96.9169850510544, 32.83901112508983 }, { -96.91354089280793, 32.84190485132717 }}, - {{ -96.91585905289725, 32.83910612508979 }, { -96.91241489096481, 32.84199985132713 }}, - {{ -96.91603805293605, 32.839108125089794 }, { -96.91259389092602, 32.84200185132714 }}, - {{ -96.915872050938, 32.83900512508984 }, { -96.91242789292434, 32.84189885132718 }}, - {{ -96.91577606509908, 32.83973512508951 }, { -96.91233187876121, 32.84262885132685 }}, - {{ -96.91569807266481, 32.84012512508934 }, { -96.91225387119442, 32.843018851326676 }}, - {{ -96.91556408191846, 32.84060212508912 }, { -96.91211986193943, 32.84349585132646 }}, - {{ -96.9154130889995, 32.84096712508895 }, { -96.91196885485739, 32.8438608513263 }}, - {{ -96.9152910940436, 32.84122712508884 }, { -96.91184684981255, 32.844120851326174 }}, - {{ -96.9166410940436, 32.84122712508884 }, { -96.91319684981255, 32.844120851326174 }}, - {{ -96.9166420939854, 32.841224125088836 }, { -96.91319784987074, 32.844117851326175 }}, - {{ -96.91682208428526, 32.84072412508907 }, { -96.9133778595723, 32.84361785132641 }}, - {{ -96.91696607165603, 32.84007312508936 }, { -96.91352187220332, 32.8429668513267 }}, - {{ -96.91704406116109, 32.839532125089605 }, { -96.91359988269978, 32.84242585132694 }}, - {{ -96.91709805320761, 32.83912212508979 }, { -96.91365389065439, 32.84201585132713 }}, - {{ -96.91710605097681, 32.83900712508984 }, { -96.91366189288554, 32.84190085132718 }}, - {{ -96.91719591499829, 32.831996125093006 }, { -96.91375202888356, 32.834889851330345 }}, - {{ -96.91710091928385, 32.83221712509291 }, { -96.91365702459737, 32.83511085133024 }}, - {{ -96.91703592137819, 32.832325125092865 }, { -96.91359202250273, 32.835218851330204 }}, - {{ -96.91698292287138, 32.83240212509282 }, { -96.91353902100933, 32.83529585133016 }}, - {{ -96.91680292740914, 32.832636125092705 }, { -96.91335901647092, 32.83552985133006 }}, - {{ -96.91649693584488, 32.833071125092516 }, { -96.91305300803398, 32.83596485132987 }}, - {{ -96.91479399406605, 32.836073125091154 }, { -96.91134994980445, 32.8389668513285 }}, - {{ -96.91491699577286, 32.836161125091124 }, { -96.9114729480974, 32.83905485132847 }}, - {{ -96.91539700341482, 32.836555125090946 }, { -96.91195294045433, 32.83944885132829 }}, - {{ -96.91541600358939, 32.83656412509095 }, { -96.91197194027974, 32.839457851328284 }}, - {{ -96.91568200805051, 32.83679412509083 }, { -96.91223793581798, 32.83968785132818 }}, - {{ -96.9157760100677, 32.83689812509079 }, { -96.91233193380047, 32.83979185132812 }}, - {{ -96.91588301320994, 32.837060125090716 }, { -96.91243893065779, 32.83995385132806 }}, - {{ -96.91597701722505, 32.83726712509063 }, { -96.91253292664213, 32.840160851327965 }}, - {{ -96.9160140206389, 32.83744312509054 }, { -96.91256992322779, 32.84033685132788 }}, - {{ -96.91604102399457, 32.83761612509046 }, { -96.91259691987165, 32.840509851327816 }}, - {{ -96.91590404407103, 32.83865112509 }, { -96.9124598997923, 32.84154485132734 }}, - {{ -96.915872050938, 32.83900512508984 }, { -96.91242789292434, 32.84189885132718 }}, - {{ -96.91912797538855, 32.835110125091596 }, { -96.91568396848461, 32.838003851328935 }}, - {{ -96.91760197461278, 32.83507012509161 }, { -96.91415796926053, 32.837963851328965 }}, - {{ -96.91749997430246, 32.83505412509162 }, { -96.91405596957087, 32.83794785132897 }}, - {{ -96.91744897391457, 32.835034125091624 }, { -96.91400496995882, 32.83792785132896 }}, - {{ -96.91741197346849, 32.83501112509164 }, { -96.91396797040495, 32.837904851328986 }}, - {{ -96.91736597277028, 32.83497512509165 }, { -96.91392197110326, 32.83786885132899 }}, - {{ -96.91733097199452, 32.83493512509168 }, { -96.91388697187915, 32.83782885132902 }}, - {{ -96.91730997133509, 32.8349011250917 }, { -96.91386597253866, 32.837794851329036 }}, - {{ -96.91729397050113, 32.834858125091706 }, { -96.91384997337273, 32.83775185132905 }}, - {{ -96.91728596914353, 32.83478812509174 }, { -96.91384197473054, 32.83768185132909 }}, - {{ -96.9172859675726, 32.83470712509179 }, { -96.91384197630171, 32.837600851329114 }}, - {{ -96.91738995428774, 32.83402212509209 }, { -96.91394598958846, 32.83691585132943 }}, - {{ -96.91747594183725, 32.833380125092376 }, { -96.91403200204074, 32.83627385132972 }}, - {{ -96.91750293916103, 32.83324212509243 }, { -96.91405900471734, 32.83613585132978 }}, - {{ -96.9175569365818, 32.833109125092506 }, { -96.91411300729696, 32.83600285132985 }}, - {{ -96.9177739272346, 32.83262712509272 }, { -96.91433001664547, 32.83552085133007 }}, - {{ -96.91800491499829, 32.831996125093006 }, { -96.91456102888357, 32.834889851330345 }}, - {{ -96.91710605097681, 32.83900712508984 }, { -96.91366189288554, 32.84190085132718 }}, - {{ -96.91713003817407, 32.83834712509014 }, { -96.9136859056901, 32.84124085132747 }}, - {{ -96.91713302946458, 32.83789812509034 }, { -96.91368891440086, 32.84079185132768 }}, - {{ -96.91718102409155, 32.83762112509046 }, { -96.91373691977464, 32.840514851327804 }}, - {{ -96.91726201976603, 32.83739812509056 }, { -96.91381792410078, 32.8402918513279 }}, - {{ -96.91735801670134, 32.83724012509064 }, { -96.91391392716592, 32.840133851327984 }}, - {{ -96.91748701363667, 32.83708212509072 }, { -96.91404293023102, 32.83997585132805 }}, - {{ -96.91766701031987, 32.836911125090786 }, { -96.91422293354829, 32.83980485132813 }}, - {{ -96.91791100686734, 32.83673312509086 }, { -96.91446693700134, 32.83962685132821 }}, - {{ -96.9211429870643, 32.83571212509132 }, { -96.91769895680719, 32.838605851328666 }}, - {{ -96.92127898816983, 32.83576912509129 }, { -96.9178349557015, 32.83866285132864 }}, - {{ -96.92141898956629, 32.83584112509127 }, { -96.91797495430484, 32.83873485132861 }}, - {{ -96.92153399173858, 32.83595312509122 }, { -96.91808995213223, 32.83884685132857 }}, - {{ -96.92159599327083, 32.83603212509119 }, { -96.91815195059978, 32.838925851328526 }}, - {{ -96.92189401031986, 32.836911125090786 }, { -96.91844993354829, 32.83980485132813 }}, - {{ -96.92201701976603, 32.83739812509056 }, { -96.91857292410077, 32.8402918513279 }}, - {{ -96.92205502409155, 32.83762112509046 }, { -96.91861091977464, 32.840514851327804 }}, - {{ -96.92204903095816, 32.83797512509031 }, { -96.91860491290703, 32.84086885132764 }}, - {{ -96.92194503724296, 32.83829912509015 }, { -96.91850090662132, 32.84119285132749 }}, - {{ -96.92179404306233, 32.83859912509002 }, { -96.91834990080113, 32.84149285132736 }}, - {{ -96.9216200475239, 32.83882912508992 }, { -96.91817589633894, 32.84172285132727 }}, - {{ -96.92153404905635, 32.83890812508988 }, { -96.91808989480624, 32.84180185132723 }}, - {{ -96.92114805516688, 32.839223125089745 }, { -96.91770388869487, 32.842116851327084 }}, - {{ -96.91973407553594, 32.84027312508926 }, { -96.91628986832288, 32.84316685132661 }}, - {{ -96.91925208232587, 32.8406231250891 }, { -96.91580786153199, 32.84351685132645 }}, - {{ -96.91909608477026, 32.84074912508905 }, { -96.91565185908723, 32.8436428513264 }}, - {{ -96.9184490940436, 32.84122712508884 }, { -96.91500484981255, 32.844120851326174 }}, - {{ -96.91870309404361, 32.84122712508884 }, { -96.91525884981256, 32.844120851326174 }}, - {{ -96.91880109264676, 32.841155125088875 }, { -96.9153568512096, 32.84404885132621 }}, - {{ -96.91920908661328, 32.84084412508902 }, { -96.91576485724394, 32.84373785132635 }}, - {{ -96.91983607759231, 32.840379125089214 }, { -96.91639186626621, 32.84327285132656 }}, - {{ -96.92170605097681, 32.83900712508984 }, { -96.91826189288554, 32.84190085132718 }}, - {{ -96.92195804668978, 32.83878612508993 }, { -96.91851389717318, 32.84167985132728 }}, - {{ -96.9221510414911, 32.838518125090054 }, { -96.91870690237259, 32.84141185132741 }}, - {{ -96.92223403860082, 32.83836912509012 }, { -96.91878990526328, 32.841262851327464 }}, - {{ -96.92231203357683, 32.838110125090246 }, { -96.918867910288, 32.841003851327585 }}, - {{ -96.92233402802918, 32.83782412509037 }, { -96.91888991583646, 32.84071785132771 }}, - {{ -96.92232602628341, 32.837734125090414 }, { -96.91888191758245, 32.84062785132776 }}, - {{ -96.92229602360662, 32.83759612509048 }, { -96.91885192025964, 32.84048985132782 }}, - {{ -96.92213801443192, 32.83712312509069 }, { -96.91869392943565, 32.84001685132803 }}, - {{ -96.92208701094057, 32.83694312509076 }, { -96.91864293292753, 32.83983685132811 }}, - {{ -96.92206300843843, 32.83681412509083 }, { -96.91861893543, 32.83970785132817 }}, - {{ -96.92202200568417, 32.836672125090885 }, { -96.91857793818467, 32.83956585132823 }}, - {{ -96.92200400227046, 32.836496125090974 }, { -96.91855994159886, 32.83938985132831 }}, - {{ -96.92199599852705, 32.836303125091064 }, { -96.9185519453428, 32.8391968513284 }}, - {{ -96.92201699567589, 32.83615612509112 }, { -96.91857294819438, 32.83904985132846 }}, - {{ -96.92204099437637, 32.836089125091156 }, { -96.91859694949407, 32.8389828513285 }}, - {{ -96.92211899187434, 32.83596012509121 }, { -96.91867495199645, 32.83885385132855 }}, - {{ -96.9222369895663, 32.83584112509127 }, { -96.91879295430485, 32.83873485132861 }}, - {{ -96.92232298838319, 32.8357801250913 }, { -96.91887895548814, 32.83867385132864 }}, - {{ -96.92244898727766, 32.83572312509131 }, { -96.91900495659381, 32.83861685132866 }}, - {{ -96.91613197587343, 32.83513512509158 }, { -96.9126879679997, 32.838028851328936 }}, - {{ -96.91590997566009, 32.8351241250916 }, { -96.91246596821304, 32.83801785132894 }}, - {{ -96.91492497321636, 32.834998125091644 }, { -96.91148097065712, 32.83789185132899 }}, - {{ -96.9160460509768, 32.83900712508984 }, { -96.91260189288553, 32.84190085132718 }}, - {{ -96.915872050938, 32.83900512508984 }, { -96.91242789292434, 32.84189885132718 }}, - {{ -96.92310897612555, 32.83514812509159 }, { -96.91966496774752, 32.838041851328924 }}, - {{ -96.92253697610617, 32.83514712509158 }, { -96.91909296776691, 32.83804085132892 }}, - {{ -96.91948797531097, 32.8351061250916 }, { -96.9160439685622, 32.83799985132893 }}, - {{ -96.91912797538855, 32.835110125091596 }, { -96.91568396848461, 32.838003851328935 }}, - {{ -96.91757297662981, 32.83517412509158 }, { -96.91412896724319, 32.838067851328915 }}, - {{ -96.91718097662981, 32.83517412509158 }, { -96.91373696724318, 32.838067851328915 }}, - {{ -96.91685097635828, 32.835160125091576 }, { -96.91340696751473, 32.838053851328915 }}, - {{ -96.91983899055546, 32.83589212509124 }, { -96.91639495331553, 32.838785851328595 }}, - {{ -96.92004598886807, 32.83580512509128 }, { -96.91660195500317, 32.838698851328616 }}, - {{ -96.92030798758799, 32.835739125091315 }, { -96.91686395628346, 32.83863285132866 }}, - {{ -96.9205659871031, 32.83571412509132 }, { -96.91712195676841, 32.83860785132867 }}, - {{ -96.9211429870643, 32.83571212509132 }, { -96.91769895680719, 32.838605851328666 }}, - {{ -96.92244898727766, 32.83572312509131 }, { -96.91900495659381, 32.83861685132866 }}, - {{ -96.92310898727766, 32.83572312509131 }, { -96.9196649565938, 32.83861685132866 }}, - {{ -96.91492497321636, 32.834998125091644 }, { -96.91148097065712, 32.83789185132899 }}, - {{ -96.9148639730806, 32.83499112509165 }, { -96.9114199707929, 32.83788485132899 }}, - {{ -96.9147209730806, 32.83499112509165 }, { -96.91127697079291, 32.83788485132899 }}, - {{ -96.91449597286727, 32.834980125091654 }, { -96.91105197100629, 32.837873851329 }}, - {{ -96.91429497298361, 32.834986125091646 }, { -96.9108509708899, 32.83787985132899 }}, - {{ -96.9132759727315, 32.834973125091665 }, { -96.90983197114207, 32.837866851329 }}, - {{ -96.91212197265392, 32.83496912509166 }, { -96.90867797121963, 32.83786285132901 }}, - {{ -96.91697505311063, 32.839117125089786 }, { -96.9135308907514, 32.842010851327124 }}, - {{ -96.91709805320761, 32.83912212508979 }, { -96.91365389065439, 32.84201585132713 }}, - {{ -96.91753805307184, 32.83911512508979 }, { -96.9140938907902, 32.84200885132714 }}, - {{ -96.91791905316883, 32.83912012508979 }, { -96.91447489069319, 32.842013851327124 }}, - {{ -96.91820005377018, 32.83915112508977 }, { -96.91475589009175, 32.842044851327124 }}, - {{ -96.91834505460432, 32.839194125089755 }, { -96.91490088925751, 32.84208785132709 }}, - {{ -96.91847905578763, 32.83925512508973 }, { -96.91503488807402, 32.842148851327075 }}, - {{ -96.9186350575723, 32.83934712508969 }, { -96.91519088628907, 32.84224085132703 }}, - {{ -96.9190480646141, 32.83971012508952 }, { -96.91560387924628, 32.84260385132687 }}, - {{ -96.91917406684502, 32.83982512508947 }, { -96.91572987701505, 32.8427188513268 }}, - {{ -96.91967807633132, 32.84031412508924 }, { -96.91623386752738, 32.843207851326596 }}, - {{ -96.91978307838768, 32.8404201250892 }, { -96.9163388654707, 32.84331385132655 }}, - {{ -96.9162220940436, 32.84122712508884 }, { -96.91277784981256, 32.844120851326174 }}, - {{ -96.91626909132755, 32.841087125088904 }, { -96.912824852529, 32.84398085132624 }}, - {{ -96.91643008040526, 32.84052412508915 }, { -96.91298586345285, 32.84341785132649 }}, - {{ -96.91652407074426, 32.84002612508938 }, { -96.91307987311522, 32.84291985132673 }}, - {{ -96.91658006308158, 32.83963112508957 }, { -96.91313588077902, 32.8425248513269 }}, - {{ -96.91660405656359, 32.839295125089706 }, { -96.91315988729797, 32.842188851327045 }}, - {{ -96.9166290465152, 32.83877712508994 }, { -96.91318489734778, 32.84167085132729 }}, - {{ -96.91663703646707, 32.83825912509018 }, { -96.91319290739735, 32.84115285132752 }}, - {{ -96.91660702440191, 32.83763712509046 }, { -96.91316291946426, 32.840530851327806 }}, - {{ -96.9165480055096, 32.83666312509089 }, { -96.91310393835924, 32.83955685132825 }}, - {{ -96.91655298974086, 32.83585012509127 }, { -96.91310895413027, 32.8387438513286 }}, - {{ -96.91670898176945, 32.83543912509145 }, { -96.91326496210282, 32.838332851328786 }}, - {{ -96.91681398182763, 32.83544212509144 }, { -96.91336996204461, 32.83833585132879 }}, - {{ -96.91624797938387, 32.83531612509151 }, { -96.91280396448872, 32.83820985132885 }}, - {{ -96.91587697928689, 32.83531112509151 }, { -96.9124329645857, 32.83820485132886 }}, - {{ -96.9121219792869, 32.83531112509151 }, { -96.9086779645857, 32.83820485132886 }}, - {{ -96.92310898035362, 32.83536612509148 }, { -96.91966496351884, 32.83825985132882 }}, - {{ -96.9205469800239, 32.83534912509149 }, { -96.9171029638486, 32.838242851328836 }}, - {{ -96.91807997959722, 32.8353271250915 }, { -96.91463596427536, 32.83822085132884 }}, - {{ -96.91672497946146, 32.83532012509149 }, { -96.91328096441114, 32.838213851328845 }}, - {{ -96.91655298974086, 32.83585012509127 }, { -96.91310895413027, 32.8387438513286 }}, - {{ -96.91659397744439, 32.835216125091556 }, { -96.91314996642849, 32.838109851328895 }}, - {{ -96.91675496210344, 32.834425125091904 }, { -96.91331098177162, 32.83731885132925 }}, - {{ -96.91686195411319, 32.8340131250921 }, { -96.91341798976302, 32.83690685132943 }}, - {{ -96.91694794930363, 32.83376512509221 }, { -96.9135039945733, 32.836658851329545 }}, - {{ -96.91757491998197, 32.83225312509288 }, { -96.91413102389916, 32.83514685133023 }}, - {{ -96.91767191499827, 32.831996125093006 }, { -96.91422802888354, 32.834889851330345 }}, - {{ -96.91681398182763, 32.83544212509144 }, { -96.91336996204461, 32.83833585132879 }}, - {{ -96.91811998186644, 32.835444125091456 }, { -96.91467596200583, 32.838337851328795 }}, - {{ -96.92126898326285, 32.835516125091424 }, { -96.91782496060918, 32.83840985132876 }}, - {{ -96.92304398304951, 32.835505125091416 }, { -96.91959996082257, 32.838398851328755 }}, - {{ -96.92310898304952, 32.835505125091416 }, { -96.91966496082256, 32.838398851328755 }}, - {{ -96.91212198413564, 32.835561125091395 }, { -96.90867795973627, 32.838454851328734 }}, - {{ -96.91239298353439, 32.83553012509141 }, { -96.90894896033761, 32.83842385132875 }}, - {{ -96.91282198283616, 32.83549412509143 }, { -96.90937796103594, 32.83838785132877 }}, - {{ -96.91326498252585, 32.835478125091434 }, { -96.9098209613463, 32.83837185132878 }}, - {{ -96.9143589820022, 32.83545112509144 }, { -96.91091496187005, 32.838344851328785 }}, - {{ -96.91522298176945, 32.83543912509145 }, { -96.91177896210282, 32.838332851328786 }}, - {{ -96.91624998165308, 32.835433125091456 }, { -96.9128059622192, 32.8383268513288 }}, - {{ -96.91749191499827, 32.831996125093006 }, { -96.91404802888356, 32.834889851330345 }}, - {{ -96.91739291984624, 32.83224612509289 }, { -96.91394902403492, 32.835139851330226 }}, - {{ -96.91706593584487, 32.833071125092516 }, { -96.91362200803398, 32.83596485132987 }}, - {{ -96.91653196285982, 32.83446412509189 }, { -96.91308798101515, 32.83735785132922 }}, - {{ -96.91647596704895, 32.83468012509178 }, { -96.91303197682542, 32.83757385132914 }}, - {{ -96.91637897736683, 32.835212125091545 }, { -96.91293496650609, 32.83810585132889 }}, - {{ -96.91633899406605, 32.836073125091154 }, { -96.91289494980445, 32.8389668513285 }}, - {{ -96.91631701425736, 32.837114125090686 }, { -96.91287292961024, 32.84000785132803 }}, - {{ -96.91632503611791, 32.838241125090185 }, { -96.91288090774655, 32.84113485132754 }}, - {{ -96.91630905561304, 32.83924612508974 }, { -96.91286488824862, 32.84213985132708 }}, - {{ -96.91623406566167, 32.8397641250895 }, { -96.91278987819858, 32.84265785132684 }}, - {{ -96.91614307448836, 32.84021912508929 }, { -96.9126988693706, 32.84311285132663 }}, - {{ -96.91600608477026, 32.84074912508905 }, { -96.91256185908722, 32.8436428513264 }}, - {{ -96.91581909404358, 32.84122712508884 }, { -96.91237484981255, 32.844120851326174 }}, - {{ -96.91603805293605, 32.839108125089794 }, { -96.91259389092602, 32.84200185132714 }}, - {{ -96.91697505311063, 32.839117125089786 }, { -96.9135308907514, 32.842010851327124 }}, - {{ -96.91858398716128, 32.83571712509132 }, { -96.9151399567102, 32.83861085132867 }}, - {{ -96.91909898943054, 32.83583412509127 }, { -96.91565495444063, 32.83872785132861 }}, - {{ -96.91685097635828, 32.835160125091576 }, { -96.91340696751473, 32.838053851328915 }}, - {{ -96.91613197587343, 32.83513512509158 }, { -96.9126879679997, 32.838028851328936 }}, - {{ -96.9169850510544, 32.83901112508983 }, { -96.91354089280793, 32.84190485132717 }}, - {{ -96.9160460509768, 32.83900712508984 }, { -96.91260189288553, 32.84190085132718 }}, - {{ -96.91624998165308, 32.835433125091456 }, { -96.9128059622192, 32.8383268513288 }}, - {{ -96.91670898176945, 32.83543912509145 }, { -96.91326496210282, 32.838332851328786 }}, - {{ -96.91672497946146, 32.83532012509149 }, { -96.91328096441114, 32.838213851328845 }}, - {{ -96.91624797938387, 32.83531612509151 }, { -96.91280396448872, 32.83820985132885 }} -}; diff --git a/third_party/geometry.hpp-0.9.2/.gitignore b/third_party/geometry.hpp-0.9.2/.gitignore deleted file mode 100644 index 204298f23..000000000 --- a/third_party/geometry.hpp-0.9.2/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -mason_packages -test diff --git a/third_party/geometry.hpp-0.9.2/.gitmodules b/third_party/geometry.hpp-0.9.2/.gitmodules deleted file mode 100644 index 44fba9a2f..000000000 --- a/third_party/geometry.hpp-0.9.2/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule ".mason"] - path = .mason - url = https://github.com/mapbox/mason.git diff --git a/third_party/geometry.hpp-0.9.2/.travis.yml b/third_party/geometry.hpp-0.9.2/.travis.yml deleted file mode 100644 index a567bdc5d..000000000 --- a/third_party/geometry.hpp-0.9.2/.travis.yml +++ /dev/null @@ -1,50 +0,0 @@ -language: generic -sudo: false - -matrix: - include: - - os: linux - env: CXX=g++-4.9 - addons: - apt: - sources: [ 'ubuntu-toolchain-r-test' ] - packages: [ 'g++-4.9' ] - - os: linux - env: CXX=g++-5 - addons: - apt: - sources: [ 'ubuntu-toolchain-r-test' ] - packages: [ 'g++-5' ] - - os: linux - env: CXX=g++-6 - addons: - apt: - sources: [ 'ubuntu-toolchain-r-test' ] - packages: [ 'g++-6' ] - - os: linux - env: CXX=clang++-3.8 - addons: - apt: - sources: [ 'ubuntu-toolchain-r-test' ] - packages: [ 'libstdc++-4.9-dev' ] - before_script: - - git submodule update --init - - .mason/mason install clang++ 3.8.1 - - export PATH=$(.mason/mason prefix clang++ 3.8.1)/bin:$PATH - - os: linux - env: CXX=clang++-3.9 - addons: - apt: - sources: [ 'ubuntu-toolchain-r-test' ] - packages: [ 'libstdc++-4.9-dev' ] - before_script: - - git submodule update --init - - .mason/mason install clang++ 3.9.1 - - export PATH=$(.mason/mason prefix clang++ 3.9.1)/bin:$PATH - - os: osx - osx_image: xcode7.3 - -cache: apt - -script: - - make test diff --git a/third_party/geometry.hpp-0.9.2/LICENSE b/third_party/geometry.hpp-0.9.2/LICENSE deleted file mode 100644 index 8f6a86bd0..000000000 --- a/third_party/geometry.hpp-0.9.2/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2016, Mapbox - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/third_party/geometry.hpp-0.9.2/Makefile b/third_party/geometry.hpp-0.9.2/Makefile deleted file mode 100644 index ec95379ec..000000000 --- a/third_party/geometry.hpp-0.9.2/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -CXXFLAGS += -I include -std=c++14 -DDEBUG -O0 -Wall -Wextra -Werror -MASON ?= .mason/mason - -VARIANT = 1.1.4 - -default: test - -$(MASON): - git submodule update --init - -mason_packages/headers/variant/$(VARIANT): - $(MASON) install variant $(VARIANT) - -test: tests/* include/mapbox/geometry/* mason_packages/headers/variant/$(VARIANT) Makefile - $(CXX) tests/*.cpp $(CXXFLAGS) `$(MASON) cflags variant $(VARIANT)` -o test - ./test - -clean: - rm -f test diff --git a/third_party/geometry.hpp-0.9.2/README.md b/third_party/geometry.hpp-0.9.2/README.md deleted file mode 100644 index 972614a3b..000000000 --- a/third_party/geometry.hpp-0.9.2/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# geometry.hpp - -Provides header-only, generic C++ interfaces for geometry types, geometry collections, and features. - - - `mapbox::geometry::point` - - `mapbox::geometry::multi_point` - - `mapbox::geometry::line_string` - - `mapbox::geometry::multi_line_string` - - `mapbox::geometry::polygon` - - `mapbox::geometry::multi_polygon` - - `mapbox::geometry::geometry_collection` - - `mapbox::geometry::feature` (experimental) - -### Design - -These types are designed to be easy to parse and serialize to [GeoJSON](http://geojson.org/). - -They should also be a robust and high performance container for data processing and conversion. - - -### Goals - - - Header-only - - Fast compile - - c++11/c++14 compatibility - - No external dependencies for usage of core types (point, line_string, etc) - - Minimal dependencies for usage of enclosing `geometry` type (`mapbox::variant`) - - Easily [adaptable to `boost::geometry`](http://www.boost.org/doc/libs/1_56_0/libs/geometry/doc/html/geometry/examples/example__adapting_a_legacy_geometry_object_model.html) - - -### Usage - -Using a single type directly (requires no external dependencies): - -```cpp -#include -#include - -using mapbox::geometry::point; - -int main() { - point pt(1.0,0.0); - std::clog << "x: " << pt.x << " y: " << pt.y << "\n"; -} -``` - -Creating a geometry collection (depends on https://github.com/mapbox/variant): - -```cpp -#include -#include -#include - -using mapbox::geometry::geometry_collection; -using mapbox::geometry::geometry; -using mapbox::geometry::point; - -using point_type = point; - -struct printer -{ - printer() {} - - void operator()(point_type const& pt) const - { - std::clog << "x: " << pt.x << " y: " << pt.y << "\n"; - } - - template - void operator()(T const& g) const - { - std::clog << "encountered non-point geometry\n"; - } -}; - -int main() { - geometry_collection gc; - gc.emplace_back(point_type(1.0,0.0)); - geometry const& geom = gc.at(0); - printer visitor; - mapbox::util::apply_visitor(visitor,geom); -} -``` diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry.hpp deleted file mode 100644 index e23245317..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/box.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/box.hpp deleted file mode 100644 index bf81b703e..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/box.hpp +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include - -namespace mapbox { -namespace geometry { - -template -struct box -{ - using point_type = point; - - constexpr box(point_type const& min_, point_type const& max_) - : min(min_), max(max_) - {} - - point_type min; - point_type max; -}; - -template -constexpr bool operator==(box const& lhs, box const& rhs) -{ - return lhs.min == rhs.min && lhs.max == rhs.max; -} - -template -constexpr bool operator!=(box const& lhs, box const& rhs) -{ - return lhs.min != rhs.min || lhs.max != rhs.max; -} - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/envelope.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/envelope.hpp deleted file mode 100644 index 860358398..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/envelope.hpp +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include -#include - -#include - -namespace mapbox { -namespace geometry { - -template -box envelope(G const& geometry) -{ - using limits = std::numeric_limits; - - T min_t = limits::has_infinity ? -limits::infinity() : limits::min(); - T max_t = limits::has_infinity ? limits::infinity() : limits::max(); - - point min(max_t, max_t); - point max(min_t, min_t); - - for_each_point(geometry, [&] (point const& point) { - if (min.x > point.x) min.x = point.x; - if (min.y > point.y) min.y = point.y; - if (max.x < point.x) max.x = point.x; - if (max.y < point.y) max.y = point.y; - }); - - return box(min, max); -} - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/feature.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/feature.hpp deleted file mode 100644 index 91354442e..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/feature.hpp +++ /dev/null @@ -1,91 +0,0 @@ -#pragma once - -#include - -#include - -#include -#include -#include -#include -#include - -namespace mapbox { -namespace geometry { - -struct value; - -struct null_value_t -{ - constexpr null_value_t() {} - constexpr null_value_t(std::nullptr_t) {} -}; - -constexpr bool operator==(const null_value_t&, const null_value_t&) { return true; } -constexpr bool operator!=(const null_value_t&, const null_value_t&) { return false; } -constexpr bool operator<(const null_value_t&, const null_value_t&) { return false; } - -constexpr null_value_t null_value = null_value_t(); - -// Multiple numeric types (uint64_t, int64_t, double) are present in order to support -// the widest possible range of JSON numbers, which do not have a maximum range. -// Implementations that produce `value`s should use that order for type preference, -// using uint64_t for positive integers, int64_t for negative integers, and double -// for non-integers and integers outside the range of 64 bits. -using value_base = mapbox::util::variant>, - mapbox::util::recursive_wrapper>>; - -struct value : value_base -{ - using value_base::value_base; -}; - -using property_map = std::unordered_map; - -// The same considerations and requirement for numeric types apply as for `value_base`. -using identifier = mapbox::util::variant; - -template -struct feature -{ - using coordinate_type = T; - using geometry_type = mapbox::geometry::geometry; // Fully qualified to avoid GCC -fpermissive error. - - geometry_type geometry; - property_map properties {}; - mapbox::util::optional id {}; - - // GCC 4.9 does not support C++14 aggregates with non-static data member - // initializers. - feature(geometry_type geometry_, - property_map properties_ = property_map {}, - mapbox::util::optional id_ = mapbox::util::optional {}) - : geometry(std::move(geometry_)), - properties(std::move(properties_)), - id(std::move(id_)) {} -}; - -template -constexpr bool operator==(feature const& lhs, feature const& rhs) -{ - return lhs.id == rhs.id && lhs.geometry == rhs.geometry && lhs.properties == rhs.properties; -} - -template -constexpr bool operator!=(feature const& lhs, feature const& rhs) -{ - return !(lhs == rhs); -} - -template class Cont = std::vector> -struct feature_collection : Cont> -{ - using coordinate_type = T; - using feature_type = feature; - using container_type = Cont; - using container_type::container_type; -}; - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/for_each_point.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/for_each_point.hpp deleted file mode 100644 index 44d6e77bd..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/for_each_point.hpp +++ /dev/null @@ -1,45 +0,0 @@ -#pragma once - -#include - -namespace mapbox { -namespace geometry { - -template -auto for_each_point(Point&& point, F&& f) - -> decltype(point.x, point.y, void()) -{ - f(std::forward(point)); -} - -template -auto for_each_point(Container&& container, F&& f) - -> decltype(container.begin(), container.end(), void()); - -template -void for_each_point(mapbox::util::variant const& geom, F&& f) -{ - mapbox::util::variant::visit(geom, [&] (auto const& g) { - for_each_point(g, f); - }); -} - -template -void for_each_point(mapbox::util::variant & geom, F&& f) -{ - mapbox::util::variant::visit(geom, [&] (auto & g) { - for_each_point(g, f); - }); -} - -template -auto for_each_point(Container&& container, F&& f) - -> decltype(container.begin(), container.end(), void()) -{ - for (auto& e: container) { - for_each_point(e, f); - } -} - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/geometry.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/geometry.hpp deleted file mode 100644 index a9d072be7..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/geometry.hpp +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -#include - -// stl -#include - -namespace mapbox { -namespace geometry { - -template class Cont = std::vector> -struct geometry_collection; - -template -using geometry_base = mapbox::util::variant, - line_string, - polygon, - multi_point, - multi_line_string, - multi_polygon, - geometry_collection>; - -template -struct geometry : geometry_base -{ - using coordinate_type = T; - using geometry_base::geometry_base; - - /* - * The default constructor would create a point geometry with default-constructed coordinates; - * i.e. (0, 0). Since this is not particularly useful, and could hide bugs, it is disabled. - */ - geometry() = delete; -}; - -template class Cont> -struct geometry_collection : Cont> -{ - using coordinate_type = T; - using geometry_type = geometry; - using container_type = Cont; - - geometry_collection() = default; - geometry_collection(geometry_collection const&) = default; - geometry_collection(geometry_collection &&) = default; - geometry_collection(std::initializer_list && args) - : container_type(std::forward>(args)) {}; -}; - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/line_string.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/line_string.hpp deleted file mode 100644 index 6d811ce22..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/line_string.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -// mapbox -#include -// stl -#include - -namespace mapbox { -namespace geometry { - -template class Cont = std::vector> -struct line_string : Cont > -{ - using coordinate_type = T; - using point_type = point; - using container_type = Cont; - using container_type::container_type; -}; - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_line_string.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_line_string.hpp deleted file mode 100644 index 07a7a1d60..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_line_string.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -// mapbox -#include -// stl -#include - -namespace mapbox { -namespace geometry { - -template class Cont = std::vector> -struct multi_line_string : Cont> -{ - using coordinate_type = T; - using line_string_type = line_string; - using container_type = Cont; - using container_type::container_type; -}; - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_point.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_point.hpp deleted file mode 100644 index a3c73cff9..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_point.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -// mapbox -#include -// stl -#include - -namespace mapbox { -namespace geometry { - -template class Cont = std::vector> -struct multi_point : Cont> -{ - using coordinate_type = T; - using point_type = point; - using container_type = Cont; - using container_type::container_type; -}; - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_polygon.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_polygon.hpp deleted file mode 100644 index ad230a04c..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/multi_polygon.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -// mapbox -#include -// stl -#include - -namespace mapbox { -namespace geometry { - -template class Cont = std::vector> -struct multi_polygon : Cont> -{ - using coordinate_type = T; - using polygon_type = polygon; - using container_type = Cont; - using container_type::container_type; -}; - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/point.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/point.hpp deleted file mode 100644 index 0cba4996e..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/point.hpp +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -namespace mapbox { -namespace geometry { - -template -struct point -{ - using coordinate_type = T; - - constexpr point() - : x(), y() - {} - constexpr point(T x_, T y_) - : x(x_), y(y_) - {} - - T x; - T y; -}; - -template -constexpr bool operator==(point const& lhs, point const& rhs) -{ - return lhs.x == rhs.x && lhs.y == rhs.y; -} - -template -constexpr bool operator!=(point const& lhs, point const& rhs) -{ - return !(lhs == rhs); -} - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/point_arithmetic.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/point_arithmetic.hpp deleted file mode 100644 index 0c4c63278..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/point_arithmetic.hpp +++ /dev/null @@ -1,119 +0,0 @@ -#pragma once - -namespace mapbox { -namespace geometry { - -template -point operator+(point const& lhs, point const& rhs) -{ - return point(lhs.x + rhs.x, lhs.y + rhs.y); -} - -template -point operator+(point const& lhs, T const& rhs) -{ - return point(lhs.x + rhs, lhs.y + rhs); -} - -template -point operator-(point const& lhs, point const& rhs) -{ - return point(lhs.x - rhs.x, lhs.y - rhs.y); -} - -template -point operator-(point const& lhs, T const& rhs) -{ - return point(lhs.x - rhs, lhs.y - rhs); -} - -template -point operator*(point const& lhs, point const& rhs) -{ - return point(lhs.x * rhs.x, lhs.y * rhs.y); -} - -template -point operator*(point const& lhs, T const& rhs) -{ - return point(lhs.x * rhs, lhs.y * rhs); -} - -template -point operator/(point const& lhs, point const& rhs) -{ - return point(lhs.x / rhs.x, lhs.y / rhs.y); -} - -template -point operator/(point const& lhs, T const& rhs) -{ - return point(lhs.x / rhs, lhs.y / rhs); -} - -template -point& operator+=(point& lhs, point const& rhs) -{ - lhs.x += rhs.x; - lhs.y += rhs.y; - return lhs; -} - -template -point& operator+=(point& lhs, T const& rhs) -{ - lhs.x += rhs; - lhs.y += rhs; - return lhs; -} - -template -point& operator-=(point& lhs, point const& rhs) -{ - lhs.x -= rhs.x; - lhs.y -= rhs.y; - return lhs; -} - -template -point& operator-=(point& lhs, T const& rhs) -{ - lhs.x -= rhs; - lhs.y -= rhs; - return lhs; -} - -template -point& operator*=(point& lhs, point const& rhs) -{ - lhs.x *= rhs.x; - lhs.y *= rhs.y; - return lhs; -} - -template -point& operator*=(point& lhs, T const& rhs) -{ - lhs.x *= rhs; - lhs.y *= rhs; - return lhs; -} - -template -point& operator/=(point& lhs, point const& rhs) -{ - lhs.x /= rhs.x; - lhs.y /= rhs.y; - return lhs; -} - -template -point& operator/=(point& lhs, T const& rhs) -{ - lhs.x /= rhs; - lhs.y /= rhs; - return lhs; -} - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/polygon.hpp b/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/polygon.hpp deleted file mode 100644 index 99a66aa12..000000000 --- a/third_party/geometry.hpp-0.9.2/include/mapbox/geometry/polygon.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -// mapbox -#include - -// stl -#include - -namespace mapbox { -namespace geometry { - -template class Cont = std::vector> -struct linear_ring : Cont> -{ - using coordinate_type = T; - using point_type = point; - using container_type = Cont; - using container_type::container_type; -}; - -template class Cont = std::vector> -struct polygon : Cont> -{ - using coordinate_type = T; - using linear_ring_type = linear_ring; - using container_type = Cont; - using container_type::container_type; -}; - -} // namespace geometry -} // namespace mapbox diff --git a/third_party/geometry.hpp-0.9.2/tests/collection.cpp b/third_party/geometry.hpp-0.9.2/tests/collection.cpp deleted file mode 100644 index a3105a4e8..000000000 --- a/third_party/geometry.hpp-0.9.2/tests/collection.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include - -void test() { - mapbox::geometry::geometry_collection gc; -} diff --git a/third_party/geometry.hpp-0.9.2/tests/test.cpp b/third_party/geometry.hpp-0.9.2/tests/test.cpp deleted file mode 100644 index fcbde4fdc..000000000 --- a/third_party/geometry.hpp-0.9.2/tests/test.cpp +++ /dev/null @@ -1,260 +0,0 @@ -#include - -#include - -using namespace mapbox::geometry; - -static void testPoint() { - point p1; - assert(int(p1.x) == 0); - assert(int(p1.y) == 0); - - point p2(2, 3); - point p3(4, 6); - - assert((p2 + p3) == point(6, 9)); - assert((p2 + 1u) == point(3, 4)); - assert((p3 - p2) == point(2, 3)); - assert((p3 - 1u) == point(3, 5)); - assert((p3 * p2) == point(8, 18)); - assert((p2 * 2u) == point(4, 6)); - assert((p3 / p2) == point(2, 2)); - assert((p3 / 2u) == point(2, 3)); - - { point p(2, 3); assert((p += p3) == point(6, 9)); } - { point p(2, 3); assert((p += 1u) == point(3, 4)); } - { point p(4, 6); assert((p -= p2) == point(2, 3)); } - { point p(4, 6); assert((p -= 1u) == point(3, 5)); } - { point p(4, 6); assert((p *= p2) == point(8, 18)); } - { point p(2, 3); assert((p *= 2u) == point(4, 6)); } - { point p(4, 6); assert((p /= p2) == point(2, 2)); } - { point p(4, 6); assert((p /= 2u) == point(2, 3)); } -} - -static void testMultiPoint() { - multi_point mp1; - assert(mp1.size() == 0); - - multi_point mp2(10); - assert(mp2.size() == 10); - - assert(mp1 == mp1); - assert(!(mp1 != mp1)); - assert(mp1 != mp2); -} - -static void testLineString() { - line_string ls1; - assert(ls1.size() == 0); - - line_string ls2(10); - assert(ls2.size() == 10); - - assert(ls1 == ls1); - assert(!(ls1 != ls1)); - assert(ls1 != ls2); -} - -static void testMultiLineString() { - multi_line_string mls1; - assert(mls1.size() == 0); - - multi_line_string mls2(10); - assert(mls2.size() == 10); - - assert(mls1 == mls1); - assert(!(mls1 != mls1)); - assert(mls1 != mls2); -} - -static void testPolygon() { - polygon pg1; - assert(pg1.size() == 0); - - polygon pg2({{{0, 1}}}); - assert(pg2.size() == 1); - assert(pg2[0].size() == 1); - assert(pg2[0][0] == point(0, 1)); - - assert(pg1 == pg1); - assert(!(pg1 != pg1)); - assert(pg1 != pg2); -} - -static void testMultiPolygon() { - multi_polygon mpg1; - assert(mpg1.size() == 0); - - multi_polygon mpg2(10); - assert(mpg2.size() == 10); - - assert(mpg1 == mpg1); - assert(!(mpg1 != mpg1)); - assert(mpg1 != mpg2); -} - -static void testGeometry() { - geometry pg { point() }; - assert(pg.is>()); - - geometry lsg { line_string() }; - assert(lsg.is>()); - - geometry pgg { polygon() }; - assert(pgg.is>()); - - geometry mpg { multi_point() }; - assert(mpg.is>()); - - geometry mlsg { multi_line_string() }; - assert(mlsg.is>()); - - geometry mpgg { multi_polygon() }; - assert(mpgg.is>()); - - geometry gcg { geometry_collection() }; - assert(gcg.is>()); - - assert(pg == pg); - assert(!(pg != pg)); - assert(pg != lsg); -} - -static void testGeometryCollection() { - geometry_collection gc1; - assert(gc1.size() == 0); - - assert(gc1 == gc1); - assert(!(gc1 != gc1)); -} - -static void testFeature() { - feature pf { point() }; - assert(pf.geometry.is>()); - assert(pf.properties.size() == 0); - - auto &p = pf.properties; - - p["bool"] = true; - p["string"] = std::string("foo"); - p["double"] = 2.5; - p["uint"] = uint64_t(10); - p["int"] = int64_t(-10); - p["null"] = null_value; - - assert(p["bool"].is()); - assert(p["bool"] == true); - assert(p["string"].is()); - assert(p["string"] == std::string("foo")); - assert(p["double"].is()); - assert(p["double"] == 2.5); - assert(p["uint"].is()); - assert(p["uint"] == uint64_t(10)); - assert(p["int"].is()); - assert(p["int"] == int64_t(-10)); - assert(p["null"].is()); - assert(p["null"] == null_value); - - p["null"] = null_value_t{}; - assert(p["null"].is()); - assert(p["null"] == null_value); - - assert(p == p); - assert(!(p != p)); - - assert(pf == pf); - assert(!(pf != pf)); - - assert(p.size() == 6); - - feature id1 { point() }; - id1.id = { uint64_t(1) }; - - feature id2 { point() }; - id1.id = { uint64_t(2) }; - - assert(id1 == id1); - assert(id1 != id2); -} - -static void testFeatureCollection() { - feature_collection fc1; - assert(fc1.size() == 0); - - assert(fc1 == fc1); - assert(!(fc1 != fc1)); -} - -struct point_counter { - std::size_t count = 0; - template - void operator()(Point const&) { count++; }; -}; - -static void testForEachPoint() { - auto count_points = [] (auto const& g) { - point_counter counter; - for_each_point(g, counter); - return counter.count; - }; - - assert(count_points(point()) == 1); - assert(count_points(line_string({{0, 1}, {2, 3}})) == 2); - assert(count_points(geometry(polygon({{{0, 1}, {2, 3}}}))) == 2); - - auto point_negator = [] (point& p) { p *= -1.0; }; - - point p(1, 2); - for_each_point(p, point_negator); - assert(p == point(-1, -2)); - - line_string ls({{0, 1}, {2, 3}}); - for_each_point(ls, point_negator); - assert(ls == line_string({{0, -1}, {-2, -3}})); - - geometry g(polygon({{{0, 1}, {2, 3}}})); - for_each_point(g, point_negator); - assert(g == geometry(polygon({{{0, -1}, {-2, -3}}}))); - - // Custom geometry type - using my_geometry = mapbox::util::variant>; - assert(count_points(my_geometry(point())) == 1); - - // Custom point type - struct my_point { - int16_t x; - int16_t y; - }; - assert(count_points(std::vector({my_point{0, 1}})) == 1); - assert(count_points(mapbox::util::variant(my_point{0, 1})) == 1); -} - -static void testEnvelope() { - assert(envelope(point(0, 0)) == box({0, 0}, {0, 0})); - assert(envelope(line_string({{0, 1}, {2, 3}})) == box({0, 1}, {2, 3})); - assert(envelope(polygon({{{0, 1}, {2, 3}}})) == box({0, 1}, {2, 3})); - - assert(envelope(multi_point({{0, 0}})) == box({0, 0}, {0, 0})); - assert(envelope(multi_line_string({{{0, 1}, {2, 3}}})) == box({0, 1}, {2, 3})); - assert(envelope(multi_polygon({{{{0, 1}, {2, 3}}}})) == box({0, 1}, {2, 3})); - - assert(envelope(geometry(point(0, 0))) == box({0, 0}, {0, 0})); - assert(envelope(geometry_collection({point(0, 0)})) == box({0, 0}, {0, 0})); -} - -int main() { - testPoint(); - testMultiPoint(); - testLineString(); - testMultiLineString(); - testPolygon(); - testMultiPolygon(); - testGeometry(); - testGeometryCollection(); - testFeature(); - testFeatureCollection(); - - testForEachPoint(); - testEnvelope(); - return 0; -} From 612ca82a06f8fe8a9597dcdd5b0cd08d0a707d9d Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 20:01:16 +0100 Subject: [PATCH 46/75] Fix formatting --- include/util/cheap_ruler.hpp | 60 ++++++++++++++--------------- src/util/coordinate_calculation.cpp | 4 +- 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/include/util/cheap_ruler.hpp b/include/util/cheap_ruler.hpp index b17c53dc6..67df8d6f2 100644 --- a/include/util/cheap_ruler.hpp +++ b/include/util/cheap_ruler.hpp @@ -7,41 +7,41 @@ #include #include -namespace mapbox { +namespace mapbox +{ -namespace geometry { - template - struct point - { - using coordinate_type = T; +namespace geometry +{ +template struct point +{ + using coordinate_type = T; - constexpr point() - : x(), y() - {} - constexpr point(T x_, T y_) - : x(x_), y(y_) - {} + constexpr point() : x(), y() {} + constexpr point(T x_, T y_) : x(x_), y(y_) {} - T x; - T y; - }; -} + T x; + T y; +}; +} // namespace geometry -namespace cheap_ruler { +namespace cheap_ruler +{ -using point = geometry::point; +using point = geometry::point; -class CheapRuler { +class CheapRuler +{ // Values that define WGS84 ellipsoid model of the Earth - static constexpr double RE = 6378.137; // equatorial radius + static constexpr double RE = 6378.137; // equatorial radius static constexpr double FE = 1.0 / 298.257223563; // flattening static constexpr double E2 = FE * (2 - FE); static constexpr double RAD = M_PI / 180.0; -public: - explicit CheapRuler(double latitude) { + public: + explicit CheapRuler(double latitude) + { // Curvature formulas from https://en.wikipedia.org/wiki/Earth_radius#Meridional double mul = RAD * RE * 1000; double coslat = std::cos(latitude * RAD); @@ -53,7 +53,8 @@ public: ky = mul * w * w2 * (1 - E2); // based on meridonal radius of curvature } - double squareDistance(point a, point b) const { + double squareDistance(point a, point b) const + { auto dx = longDiff(a.x, b.x) * kx; auto dy = (a.y - b.y) * ky; return dx * dx + dy * dy; @@ -62,26 +63,23 @@ public: // // Given two points of the form [x = longitude, y = latitude], returns the distance. // - double distance(point a, point b) const { - return std::sqrt(squareDistance(a, b)); - } + double distance(point a, point b) const { return std::sqrt(squareDistance(a, b)); } // // Returns the bearing between two points in angles. // - double bearing(point a, point b) const { + double bearing(point a, point b) const + { auto dx = longDiff(b.x, a.x) * kx; auto dy = (b.y - a.y) * ky; return std::atan2(dx, dy) / RAD; } -private: + private: double ky; double kx; - static double longDiff(double a, double b) { - return std::remainder(a - b, 360); - } + static double longDiff(double a, double b) { return std::remainder(a - b, 360); } }; } // namespace cheap_ruler diff --git a/src/util/coordinate_calculation.cpp b/src/util/coordinate_calculation.cpp index f62ec7be2..1e3edc3c4 100644 --- a/src/util/coordinate_calculation.cpp +++ b/src/util/coordinate_calculation.cpp @@ -30,8 +30,8 @@ class CheapRulerContainer { for (int n = 0; n < number_of_rulers; n++) { - cheap_ruler_cache[n] = mapbox::cheap_ruler::CheapRuler( - step * (n + 0.5) / COORDINATE_PRECISION); + cheap_ruler_cache[n] = + mapbox::cheap_ruler::CheapRuler(step * (n + 0.5) / COORDINATE_PRECISION); } }; From 16c6f23791e2b3093b6074fe7bab6a9393ffc0b8 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 20:50:32 +0100 Subject: [PATCH 47/75] Fix CMake warning CMake Warning (dev) at /usr/share/cmake-3.24/Modules/FindPackageHandleStandardArgs.cmake:438 (message): The package name passed to `find_package_handle_standard_args` (PkgConfig) does not match the name of the calling package (Lua). This can lead to problems in calling code that expects `find_package` result variables (e.g., `_FOUND`) to follow a certain pattern. Call Stack (most recent call first): /usr/share/cmake-3.24/Modules/FindPkgConfig.cmake:99 (find_package_handle_standard_args) cmake/FindLua.cmake:39 (include) CMakeLists.txt:571 (find_package) This warning is for project developers. Use -Wno-dev to suppress it. --- cmake/FindLua.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/FindLua.cmake b/cmake/FindLua.cmake index 237dca8e6..d8cc01e8a 100644 --- a/cmake/FindLua.cmake +++ b/cmake/FindLua.cmake @@ -36,7 +36,10 @@ # This is because, the lua location is not standardized and may exist in # locations other than lua/ -include(FindPkgConfig) +if(NOT PKG_CONFIG_FOUND) + include(CMakeFindDependencyMacro) + find_dependency(PkgConfig) +endif() unset(_lua_include_subdirs) unset(_lua_library_names) From 898cbe8da4ab10048740cc41c2c61411726a63df Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sat, 10 Dec 2022 21:50:24 +0100 Subject: [PATCH 48/75] Install PkgConfig on Docker build image --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 094bedee7..a44d3319f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,7 +5,7 @@ RUN mkdir -p /src && mkdir -p /opt RUN apt-get update && \ apt-get -y --no-install-recommends install ca-certificates cmake make git gcc g++ libbz2-dev libxml2-dev wget \ - libzip-dev libboost1.74-all-dev lua5.4 liblua5.4-dev -o APT::Install-Suggests=0 -o APT::Install-Recommends=0 + libzip-dev libboost1.74-all-dev lua5.4 liblua5.4-dev pkg-config -o APT::Install-Suggests=0 -o APT::Install-Recommends=0 RUN NPROC=${BUILD_CONCURRENCY:-$(nproc)} && \ ldconfig /usr/local/lib && \ From a4aa153ba4d9322503793f07e0723002e972ad78 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Sun, 11 Dec 2022 10:10:26 +0100 Subject: [PATCH 49/75] Use nested namespace It's a mechanical change to modernize the code base --- .clang-tidy | 2 ++ .../contractor/contract_excludable_graph.hpp | 5 +--- .../contractor/contracted_edge_container.hpp | 5 +--- include/contractor/contracted_metric.hpp | 5 +--- include/contractor/contractor.hpp | 5 +--- include/contractor/contractor_config.hpp | 5 +--- include/contractor/contractor_graph.hpp | 5 +--- include/contractor/contractor_heap.hpp | 5 +--- include/contractor/contractor_search.hpp | 5 +--- include/contractor/crc32_processor.hpp | 5 +--- include/contractor/files.hpp | 8 +----- include/contractor/graph_contractor.hpp | 5 +--- .../contractor/graph_contractor_adaptors.hpp | 5 +--- include/contractor/query_edge.hpp | 5 +--- include/contractor/query_graph.hpp | 5 +--- include/contractor/serialization.hpp | 8 +----- include/customizer/cell_customizer.hpp | 5 +--- include/customizer/cell_metric.hpp | 5 +--- include/customizer/customizer.hpp | 5 +--- include/customizer/customizer_config.hpp | 5 +--- include/customizer/edge_based_graph.hpp | 5 +--- include/customizer/files.hpp | 8 +----- include/customizer/serialization.hpp | 8 +----- include/engine/algorithm.hpp | 8 +----- include/engine/api/base_api.hpp | 8 +----- include/engine/api/base_parameters.hpp | 8 +----- include/engine/api/base_result.hpp | 8 +----- .../api/flatbuffers/fbresult_generated.h | 8 +----- include/engine/api/json_factory.hpp | 10 ++----- include/engine/api/match_api.hpp | 8 +----- include/engine/api/match_parameters.hpp | 8 +----- include/engine/api/match_parameters_tidy.hpp | 11 +------- include/engine/api/nearest_api.hpp | 8 +----- include/engine/api/nearest_parameters.hpp | 8 +----- include/engine/api/route_api.hpp | 8 +----- include/engine/api/route_parameters.hpp | 8 +----- include/engine/api/table_api.hpp | 8 +----- include/engine/api/table_parameters.hpp | 8 +----- include/engine/api/tile_parameters.hpp | 8 +----- include/engine/api/trip_api.hpp | 8 +----- include/engine/api/trip_parameters.hpp | 8 +----- include/engine/approach.hpp | 5 +--- include/engine/bearing.hpp | 5 +--- include/engine/data_watchdog.hpp | 5 +--- include/engine/datafacade.hpp | 5 +--- .../datafacade/algorithm_datafacade.hpp | 8 +----- .../datafacade/contiguous_block_allocator.hpp | 8 +----- .../contiguous_internalmem_datafacade.hpp | 8 +----- include/engine/datafacade/datafacade_base.hpp | 8 +----- .../datafacade/mmap_memory_allocator.hpp | 8 +----- .../datafacade/process_memory_allocator.hpp | 8 +----- .../datafacade/shared_memory_allocator.hpp | 8 +----- include/engine/datafacade_factory.hpp | 5 +--- include/engine/datafacade_provider.hpp | 5 +--- include/engine/douglas_peucker.hpp | 5 +--- include/engine/engine.hpp | 5 +--- include/engine/engine_config.hpp | 6 +---- include/engine/geospatial_query.hpp | 5 +--- include/engine/guidance/assemble_geometry.hpp | 8 +----- include/engine/guidance/assemble_leg.hpp | 8 +----- include/engine/guidance/assemble_overview.hpp | 8 +----- include/engine/guidance/assemble_route.hpp | 8 +----- include/engine/guidance/assemble_steps.hpp | 8 +----- .../guidance/collapse_scenario_detection.hpp | 8 +----- include/engine/guidance/collapse_turns.hpp | 8 +----- .../engine/guidance/collapsing_utility.hpp | 8 +----- include/engine/guidance/lane_processing.hpp | 8 +----- include/engine/guidance/leg_geometry.hpp | 8 +----- include/engine/guidance/post_processing.hpp | 8 +----- .../guidance/postprocessing_toolkit.hpp | 8 +----- include/engine/guidance/route.hpp | 8 +----- include/engine/guidance/route_leg.hpp | 8 +----- include/engine/guidance/route_step.hpp | 8 +----- include/engine/guidance/step_maneuver.hpp | 8 +----- .../engine/guidance/verbosity_reduction.hpp | 8 +----- include/engine/hint.hpp | 5 +--- include/engine/internal_route_result.hpp | 5 +--- .../engine/map_matching/bayes_classifier.hpp | 8 +----- .../map_matching/hidden_markov_model.hpp | 8 +----- .../map_matching/matching_confidence.hpp | 8 +----- include/engine/map_matching/sub_matching.hpp | 8 +----- include/engine/phantom_node.hpp | 11 +++----- include/engine/plugins/match.hpp | 8 +----- include/engine/plugins/nearest.hpp | 8 +----- include/engine/plugins/plugin_base.hpp | 8 +----- include/engine/plugins/table.hpp | 8 +----- include/engine/plugins/tile.hpp | 8 +----- include/engine/plugins/trip.hpp | 8 +----- include/engine/plugins/viaroute.hpp | 8 +----- include/engine/polyline_compressor.hpp | 5 +--- include/engine/routing_algorithms.hpp | 5 +--- .../routing_algorithms/alternative_path.hpp | 8 +----- .../direct_shortest_path.hpp | 8 +----- .../routing_algorithms/many_to_many.hpp | 8 +----- .../routing_algorithms/map_matching.hpp | 8 +----- .../routing_algorithms/routing_base.hpp | 9 +------ .../routing_algorithms/routing_base_ch.hpp | 13 +-------- .../routing_algorithms/routing_base_mld.hpp | 11 +------- .../routing_algorithms/shortest_path.hpp | 8 +----- .../routing_algorithms/shortest_path_impl.hpp | 8 +----- .../engine/routing_algorithms/tile_turns.hpp | 8 +----- include/engine/search_engine_data.hpp | 5 +--- include/engine/status.hpp | 5 +--- include/engine/trip/trip_brute_force.hpp | 8 +----- .../engine/trip/trip_farthest_insertion.hpp | 8 +----- .../engine/trip/trip_nearest_neighbour.hpp | 8 +----- include/extractor/class_data.hpp | 5 +--- .../extractor/compressed_edge_container.hpp | 5 +--- .../compressed_node_based_graph_edge.hpp | 5 +--- .../extractor/conditional_turn_penalty.hpp | 6 +---- include/extractor/datasources.hpp | 5 +--- include/extractor/edge_based_edge.hpp | 5 +--- .../extractor/edge_based_graph_factory.hpp | 5 +--- include/extractor/edge_based_node.hpp | 5 +--- include/extractor/edge_based_node_segment.hpp | 5 +--- include/extractor/extraction_containers.hpp | 5 +--- .../extractor/extraction_helper_functions.hpp | 5 +--- include/extractor/extraction_node.hpp | 5 +--- include/extractor/extraction_relation.hpp | 5 +--- include/extractor/extraction_segment.hpp | 5 +--- include/extractor/extraction_turn.hpp | 5 +--- include/extractor/extraction_way.hpp | 5 +--- include/extractor/extractor.hpp | 5 +--- include/extractor/extractor_callbacks.hpp | 5 +--- include/extractor/extractor_config.hpp | 5 +--- include/extractor/files.hpp | 8 +----- include/extractor/graph_compressor.hpp | 5 +--- include/extractor/internal_extractor_edge.hpp | 5 +--- include/extractor/intersection/constants.hpp | 8 +----- .../intersection/coordinate_extractor.hpp | 8 +----- .../intersection/have_identical_names.hpp | 8 +----- .../intersection/intersection_analysis.hpp | 8 +----- .../intersection/intersection_edge.hpp | 8 +----- .../intersection/intersection_view.hpp | 8 +----- .../intersection/node_based_graph_walker.hpp | 8 +----- .../intersection_bearings_container.hpp | 5 +--- include/extractor/location_dependent_data.hpp | 5 +--- include/extractor/maneuver_override.hpp | 5 +--- .../maneuver_override_relation_parser.hpp | 5 +--- include/extractor/name_table.hpp | 5 +--- include/extractor/nbg_to_ebg.hpp | 5 +--- include/extractor/node_based_edge.hpp | 5 +--- .../extractor/node_based_graph_factory.hpp | 5 +--- include/extractor/node_data_container.hpp | 5 +--- include/extractor/node_restriction_map.hpp | 5 +--- include/extractor/nodes_of_way.hpp | 5 +--- include/extractor/packed_osm_ids.hpp | 5 +--- include/extractor/profile_properties.hpp | 5 +--- include/extractor/query_node.hpp | 5 +--- include/extractor/raster_source.hpp | 5 +--- include/extractor/restriction.hpp | 5 +--- include/extractor/restriction_graph.hpp | 5 +--- include/extractor/restriction_parser.hpp | 5 +--- include/extractor/road_classification.hpp | 5 +--- .../extractor/scripting_environment_lua.hpp | 5 +--- include/extractor/segment_data_container.hpp | 5 +--- include/extractor/serialization.hpp | 8 +----- include/extractor/suffix_table.hpp | 5 +--- include/extractor/tarjan_scc.hpp | 5 +--- include/extractor/traffic_lights.hpp | 10 +------ include/extractor/traffic_signals.hpp | 5 +--- include/extractor/travel_mode.hpp | 5 +--- include/extractor/turn_lane_types.hpp | 5 +--- include/extractor/turn_path.hpp | 5 +--- include/extractor/turn_path_compressor.hpp | 5 +--- include/extractor/turn_path_filter.hpp | 5 +--- include/extractor/way_restriction_map.hpp | 5 +--- include/guidance/constants.hpp | 5 +--- include/guidance/driveway_handler.hpp | 5 +--- include/guidance/files.hpp | 8 +----- include/guidance/guidance_processing.hpp | 5 +--- include/guidance/intersection.hpp | 5 +--- include/guidance/intersection_handler.hpp | 5 +--- include/guidance/is_through_street.hpp | 5 +--- include/guidance/motorway_handler.hpp | 5 +--- include/guidance/parsing_toolkit.hpp | 8 +----- include/guidance/roundabout_handler.hpp | 5 +--- include/guidance/roundabout_type.hpp | 5 +--- include/guidance/serialization.hpp | 8 +----- include/guidance/sliproad_handler.hpp | 5 +--- include/guidance/statistics_handler.hpp | 5 +--- include/guidance/suppress_mode_handler.hpp | 5 +--- include/guidance/turn_analysis.hpp | 5 +--- include/guidance/turn_bearing.hpp | 5 +--- include/guidance/turn_classification.hpp | 5 +--- include/guidance/turn_data_container.hpp | 5 +--- include/guidance/turn_discovery.hpp | 6 +---- include/guidance/turn_handler.hpp | 5 +--- include/guidance/turn_instruction.hpp | 5 +--- include/guidance/turn_lane_augmentation.hpp | 8 +----- include/guidance/turn_lane_data.hpp | 9 +------ include/guidance/turn_lane_handler.hpp | 11 +------- include/guidance/turn_lane_matcher.hpp | 8 +----- include/osrm/osrm_fwd.hpp | 5 +--- include/partitioner/bisection_graph.hpp | 5 +--- include/partitioner/bisection_graph_view.hpp | 5 +--- .../partitioner/bisection_to_partition.hpp | 5 +--- include/partitioner/cell_statistics.hpp | 5 +--- include/partitioner/cell_storage.hpp | 5 +--- include/partitioner/dinic_max_flow.hpp | 5 +--- include/partitioner/edge_based_graph.hpp | 5 +--- .../partitioner/edge_based_graph_reader.hpp | 5 +--- include/partitioner/files.hpp | 8 +----- include/partitioner/inertial_flow.hpp | 5 +--- include/partitioner/multi_level_graph.hpp | 6 +---- include/partitioner/multi_level_partition.hpp | 5 +--- include/partitioner/partition_graph.hpp | 5 +--- include/partitioner/partitioner.hpp | 5 +--- include/partitioner/partitioner_config.hpp | 5 +--- include/partitioner/recursive_bisection.hpp | 5 +--- .../partitioner/recursive_bisection_state.hpp | 5 +--- include/partitioner/remove_unconnected.hpp | 5 +--- include/partitioner/renumber.hpp | 5 +--- include/partitioner/reorder_first_last.hpp | 5 +--- include/partitioner/serialization.hpp | 8 +----- include/partitioner/tarjan_graph_wrapper.hpp | 5 +--- .../server/api/base_parameters_grammar.hpp | 8 +----- .../server/api/match_parameter_grammar.hpp | 8 +----- .../server/api/nearest_parameter_grammar.hpp | 8 +----- include/server/api/parameters_parser.hpp | 8 +----- include/server/api/parsed_url.hpp | 8 +----- .../server/api/route_parameters_grammar.hpp | 8 +----- .../server/api/table_parameter_grammar.hpp | 8 +----- include/server/api/tile_parameter_grammar.hpp | 8 +----- include/server/api/trip_parameter_grammar.hpp | 8 +----- include/server/api/url_parser.hpp | 8 +----- include/server/connection.hpp | 5 +--- include/server/http/compression_type.hpp | 8 +----- include/server/http/header.hpp | 8 +----- include/server/http/reply.hpp | 8 +----- include/server/http/request.hpp | 8 +----- include/server/request_handler.hpp | 5 +--- include/server/request_parser.hpp | 5 +--- include/server/server.hpp | 5 +--- include/server/service/base_service.hpp | 8 +----- include/server/service/match_service.hpp | 8 +----- include/server/service/nearest_service.hpp | 8 +----- include/server/service/route_service.hpp | 8 +----- include/server/service/table_service.hpp | 8 +----- include/server/service/tile_service.hpp | 8 +----- include/server/service/trip_service.hpp | 8 +----- include/server/service/utils.hpp | 8 +----- include/server/service_handler.hpp | 5 +--- include/storage/block.hpp | 5 +--- include/storage/io.hpp | 8 +----- include/storage/io_config.hpp | 5 +--- include/storage/io_fwd.hpp | 8 +----- include/storage/serialization.hpp | 8 +----- include/storage/shared_data_index.hpp | 5 +--- include/storage/shared_datatype.hpp | 5 +--- include/storage/shared_memory.hpp | 5 +--- include/storage/shared_memory_ownership.hpp | 5 +--- include/storage/shared_monitor.hpp | 5 +--- include/storage/storage.hpp | 5 +--- include/storage/storage_config.hpp | 5 +--- include/storage/tar.hpp | 8 +----- include/storage/tar_fwd.hpp | 8 +----- include/storage/view_factory.hpp | 5 +--- include/updater/csv_file_parser.hpp | 5 +--- include/updater/csv_source.hpp | 8 +----- include/updater/source.hpp | 5 +--- include/updater/updater.hpp | 5 +--- include/updater/updater_config.hpp | 5 +--- include/util/bearing.hpp | 5 +--- include/util/bit_range.hpp | 5 +--- include/util/concurrent_id_map.hpp | 5 +--- include/util/conditional_restrictions.hpp | 5 +--- include/util/connectivity_checksum.hpp | 5 +--- include/util/coordinate_calculation.hpp | 8 +----- include/util/deallocating_vector.hpp | 5 +--- include/util/debug.hpp | 5 +--- include/util/dist_table_wrapper.hpp | 5 +--- include/util/dynamic_graph.hpp | 5 +--- include/util/exception.hpp | 5 +--- include/util/exclude_flag.hpp | 5 +--- include/util/filtered_graph.hpp | 5 +--- include/util/filtered_integer_range.hpp | 5 +--- include/util/fingerprint.hpp | 5 +--- include/util/for_each_indexed.hpp | 5 +--- include/util/for_each_pair.hpp | 5 +--- include/util/for_each_range.hpp | 5 +--- include/util/geojson_debug_logger.hpp | 5 +--- include/util/geojson_debug_policies.hpp | 5 +--- include/util/geojson_debug_policy_toolkit.hpp | 5 +--- include/util/geojson_validation.hpp | 5 +--- include/util/graph_traits.hpp | 9 +------ include/util/graph_utils.hpp | 5 +--- include/util/group_by.hpp | 5 +--- include/util/guidance/bearing_class.hpp | 16 ++--------- include/util/guidance/entry_class.hpp | 13 ++------- include/util/guidance/name_announcements.hpp | 8 +----- include/util/guidance/turn_lanes.hpp | 16 ++--------- include/util/hilbert_value.hpp | 5 +--- include/util/indexed_data.hpp | 5 +--- include/util/integer_range.hpp | 5 +--- include/util/isatty.hpp | 5 +--- include/util/json_container.hpp | 27 +------------------ include/util/json_deep_compare.hpp | 8 +----- include/util/json_renderer.hpp | 8 +----- include/util/json_util.hpp | 8 +----- include/util/log.hpp | 5 +--- include/util/lua_util.hpp | 5 +--- include/util/matrix_graph_wrapper.hpp | 5 +--- include/util/meminfo.hpp | 5 +--- include/util/mmap_file.hpp | 5 +--- include/util/mmap_tar.hpp | 5 +--- include/util/msb.hpp | 5 +--- include/util/node_based_graph.hpp | 5 +--- include/util/opening_hours.hpp | 5 +--- include/util/packed_vector.hpp | 5 +--- include/util/percent.hpp | 5 +--- include/util/permutation.hpp | 5 +--- include/util/query_heap.hpp | 5 +--- include/util/range_table.hpp | 5 +--- include/util/rectangle.hpp | 5 +--- include/util/serialization.hpp | 8 +----- include/util/static_assert.hpp | 9 +++---- include/util/static_graph.hpp | 5 +--- include/util/static_rtree.hpp | 5 +--- include/util/string_util.hpp | 5 +--- include/util/timed_histogram.hpp | 5 +--- include/util/timezones.hpp | 5 +--- include/util/timing_util.hpp | 5 +--- include/util/to_osm_link.hpp | 5 +--- include/util/trigonometry_table.hpp | 5 +--- include/util/vector_tile.hpp | 8 +----- include/util/vector_view.hpp | 5 +--- include/util/viewport.hpp | 8 +----- include/util/web_mercator.hpp | 8 +----- include/util/xor_fast_hash.hpp | 5 +--- include/util/xor_fast_hash_storage.hpp | 5 +--- src/benchmarks/static_rtree.cpp | 5 +--- src/contractor/contractor.cpp | 5 +--- src/contractor/contractor_search.cpp | 5 +--- src/contractor/graph_contractor.cpp | 5 +--- src/customize/customizer.cpp | 5 +--- src/engine/api/json_factory.cpp | 11 +------- .../datafacade/mmap_memory_allocator.cpp | 8 +----- .../datafacade/process_memory_allocator.cpp | 8 +----- .../datafacade/shared_memory_allocator.cpp | 8 +----- src/engine/douglas_peucker.cpp | 5 +--- src/engine/engine_config.cpp | 5 +--- src/engine/guidance/assemble_overview.cpp | 8 +----- src/engine/guidance/assemble_route.cpp | 8 +----- src/engine/guidance/assemble_steps.cpp | 11 +------- .../guidance/collapse_scenario_detection.cpp | 8 +----- src/engine/guidance/collapse_turns.cpp | 8 +----- src/engine/guidance/lane_processing.cpp | 8 +----- src/engine/guidance/post_processing.cpp | 8 +----- src/engine/guidance/verbosity_reduction.cpp | 8 +----- src/engine/hint.cpp | 5 +--- src/engine/plugins/match.cpp | 8 +----- src/engine/plugins/nearest.cpp | 8 +----- src/engine/plugins/table.cpp | 8 +----- src/engine/plugins/tile.cpp | 8 +----- src/engine/plugins/trip.cpp | 8 +----- src/engine/plugins/viaroute.cpp | 8 +----- src/engine/polyline_compressor.cpp | 8 +----- .../alternative_path_ch.cpp | 8 +----- .../alternative_path_mld.cpp | 8 +----- .../direct_shortest_path.cpp | 8 +----- .../routing_algorithms/many_to_many_ch.cpp | 8 +----- .../routing_algorithms/many_to_many_mld.cpp | 8 +----- .../routing_algorithms/map_matching.cpp | 8 +----- .../routing_algorithms/routing_base.cpp | 8 +----- .../routing_algorithms/routing_base_ch.cpp | 12 +-------- .../routing_algorithms/shortest_path.cpp | 8 +----- src/engine/routing_algorithms/tile_turns.cpp | 8 +----- src/engine/search_engine_data.cpp | 5 +--- src/extractor/compressed_edge_container.cpp | 5 +--- src/extractor/edge_based_graph_factory.cpp | 5 +--- src/extractor/extraction_containers.cpp | 5 +--- src/extractor/extractor.cpp | 5 +--- src/extractor/extractor_callbacks.cpp | 5 +--- src/extractor/graph_compressor.cpp | 5 +--- .../intersection/coordinate_extractor.cpp | 8 +----- .../intersection/have_identical_names.cpp | 8 +----- src/extractor/intersection/intersection.cpp | 8 +----- .../intersection/intersection_analysis.cpp | 8 +----- .../intersection/mergable_road_detector.cpp | 8 +----- .../intersection/node_based_graph_walker.cpp | 8 +----- src/extractor/location_dependent_data.cpp | 5 +--- .../maneuver_override_relation_parser.cpp | 5 +--- src/extractor/node_based_graph_factory.cpp | 5 +--- src/extractor/raster_source.cpp | 5 +--- src/extractor/restriction_graph.cpp | 5 +--- src/extractor/restriction_parser.cpp | 5 +--- src/extractor/scripting_environment_lua.cpp | 5 +--- src/extractor/suffix_table.cpp | 5 +--- src/extractor/turn_path_compressor.cpp | 5 +--- src/extractor/turn_path_filter.cpp | 5 +--- src/extractor/way_restriction_map.cpp | 5 +--- src/guidance/driveway_handler.cpp | 5 +--- src/guidance/guidance_processing.cpp | 5 +--- src/guidance/intersection_handler.cpp | 5 +--- src/guidance/motorway_handler.cpp | 5 +--- src/guidance/roundabout_handler.cpp | 5 +--- ...segregated_intersection_classification.cpp | 5 +--- src/guidance/sliproad_handler.cpp | 5 +--- src/guidance/suppress_mode_handler.cpp | 5 +--- src/guidance/turn_analysis.cpp | 5 +--- src/guidance/turn_classification.cpp | 5 +--- src/guidance/turn_discovery.cpp | 8 +----- src/guidance/turn_handler.cpp | 5 +--- src/guidance/turn_lane_augmentation.cpp | 8 +----- src/guidance/turn_lane_data.cpp | 8 +----- src/guidance/turn_lane_handler.cpp | 8 +----- src/guidance/turn_lane_matcher.cpp | 8 +----- src/partitioner/bisection_graph_view.cpp | 5 +--- src/partitioner/bisection_to_partition.cpp | 5 +--- src/partitioner/dinic_max_flow.cpp | 5 +--- src/partitioner/inertial_flow.cpp | 5 +--- src/partitioner/partitioner.cpp | 5 +--- src/partitioner/recursive_bisection.cpp | 5 +--- src/partitioner/recursive_bisection_state.cpp | 5 +--- src/partitioner/renumber.cpp | 5 +--- src/partitioner/tarjan_graph_wrapper.cpp | 5 +--- src/server/api/parameters_parser.cpp | 8 +----- src/server/api/url_parser.cpp | 8 +----- src/server/connection.cpp | 5 +--- src/server/http/reply.cpp | 8 +----- src/server/request_handler.cpp | 5 +--- src/server/request_parser.cpp | 5 +--- src/server/service/match_service.cpp | 8 +----- src/server/service/nearest_service.cpp | 8 +----- src/server/service/route_service.cpp | 8 +----- src/server/service/table_service.cpp | 8 +----- src/server/service/tile_service.cpp | 8 +----- src/server/service/trip_service.cpp | 8 +----- src/server/service_handler.cpp | 5 +--- src/storage/io_config.cpp | 5 +--- src/storage/storage.cpp | 5 +--- src/tools/components.cpp | 5 +--- src/tools/routed.cpp | 5 +--- src/updater/csv_source.cpp | 8 +----- src/updater/updater.cpp | 5 +--- src/util/conditional_restrictions.cpp | 10 ++----- src/util/coordinate.cpp | 5 +--- src/util/coordinate_calculation.cpp | 9 +------ src/util/exception.cpp | 5 +--- src/util/fingerprint.cpp | 5 +--- src/util/geojson_debug_policies.cpp | 5 +--- src/util/guidance/bearing_class.cpp | 8 +----- src/util/guidance/entry_class.cpp | 8 +----- src/util/guidance/turn_lanes.cpp | 8 +----- src/util/log.cpp | 5 +--- src/util/opening_hours.cpp | 5 +--- src/util/timed_histogram.cpp | 8 +----- src/util/timezones.cpp | 5 +--- .../contractor/contracted_edge_container.cpp | 5 +--- unit_tests/contractor/helper.hpp | 5 +--- unit_tests/engine/offline_facade.cpp | 18 +++---------- unit_tests/mocks/mock_datafacade.hpp | 5 +--- .../mocks/mock_scripting_environment.hpp | 6 +---- unit_tests/server/parameters_io.hpp | 5 +--- unit_tests/server/url_parser.cpp | 8 +----- 456 files changed, 469 insertions(+), 2474 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index 03f7f39d2..229e2e69a 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -49,6 +49,8 @@ Checks: > -misc-misplaced-const, -misc-definitions-in-headers, -misc-unused-parameters, + modernize-concat-nested-namespaces, + modernize-use-using, performance-*, -performance-noexcept-move-constructor, -performance-no-int-to-ptr, diff --git a/include/contractor/contract_excludable_graph.hpp b/include/contractor/contract_excludable_graph.hpp index 2f49e68eb..05567f287 100644 --- a/include/contractor/contract_excludable_graph.hpp +++ b/include/contractor/contract_excludable_graph.hpp @@ -7,9 +7,7 @@ #include "contractor/graph_contractor_adaptors.hpp" #include "contractor/query_graph.hpp" -namespace osrm -{ -namespace contractor +namespace osrm::contractor { using GraphAndFilter = std::tuple>>; @@ -94,7 +92,6 @@ inline auto contractExcludableGraph(ContractorGraph contractor_graph_, return GraphAndFilter{QueryGraph{num_nodes, edge_container.edges}, edge_container.MakeEdgeFilters()}; } -} // namespace contractor } // namespace osrm #endif diff --git a/include/contractor/contracted_edge_container.hpp b/include/contractor/contracted_edge_container.hpp index db3ae5cc9..89affa65a 100644 --- a/include/contractor/contracted_edge_container.hpp +++ b/include/contractor/contracted_edge_container.hpp @@ -14,9 +14,7 @@ #include #include -namespace osrm -{ -namespace contractor +namespace osrm::contractor { struct ContractedEdgeContainer @@ -164,7 +162,6 @@ struct ContractedEdgeContainer std::vector flags; std::vector edges; }; -} // namespace contractor } // namespace osrm #endif diff --git a/include/contractor/contracted_metric.hpp b/include/contractor/contracted_metric.hpp index c795a139a..184e6aae2 100644 --- a/include/contractor/contracted_metric.hpp +++ b/include/contractor/contracted_metric.hpp @@ -3,9 +3,7 @@ #include "contractor/query_graph.hpp" -namespace osrm -{ -namespace contractor +namespace osrm::contractor { namespace detail @@ -19,7 +17,6 @@ template struct ContractedMetric using ContractedMetric = detail::ContractedMetric; using ContractedMetricView = detail::ContractedMetric; -} // namespace contractor } // namespace osrm #endif diff --git a/include/contractor/contractor.hpp b/include/contractor/contractor.hpp index a0335d8ea..5db562e30 100644 --- a/include/contractor/contractor.hpp +++ b/include/contractor/contractor.hpp @@ -30,9 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "contractor/contractor_config.hpp" -namespace osrm -{ -namespace contractor +namespace osrm::contractor { /// Base class of osrm-contract @@ -49,7 +47,6 @@ class Contractor private: ContractorConfig config; }; -} // namespace contractor } // namespace osrm #endif // PROCESSING_CHAIN_HPP diff --git a/include/contractor/contractor_config.hpp b/include/contractor/contractor_config.hpp index 18e8ae222..164065cb0 100644 --- a/include/contractor/contractor_config.hpp +++ b/include/contractor/contractor_config.hpp @@ -35,9 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -namespace osrm -{ -namespace contractor +namespace osrm::contractor { struct ContractorConfig final : storage::IOConfig @@ -71,7 +69,6 @@ struct ContractorConfig final : storage::IOConfig //(e.g. 0.8 contracts 80 percent of the hierarchy, leaving a core of 20%) double core_factor = 1.0; }; -} // namespace contractor } // namespace osrm #endif // EXTRACTOR_OPTIONS_HPP diff --git a/include/contractor/contractor_graph.hpp b/include/contractor/contractor_graph.hpp index e8cef068a..13d44985f 100644 --- a/include/contractor/contractor_graph.hpp +++ b/include/contractor/contractor_graph.hpp @@ -4,9 +4,7 @@ #include "util/dynamic_graph.hpp" #include -namespace osrm -{ -namespace contractor +namespace osrm::contractor { struct ContractorEdgeData @@ -42,7 +40,6 @@ struct ContractorEdgeData using ContractorGraph = util::DynamicGraph; using ContractorEdge = ContractorGraph::InputEdge; -} // namespace contractor } // namespace osrm #endif // OSRM_CONTRACTOR_CONTRACTOR_GRAPH_HPP_ diff --git a/include/contractor/contractor_heap.hpp b/include/contractor/contractor_heap.hpp index 7f505bb8a..79fce9df5 100644 --- a/include/contractor/contractor_heap.hpp +++ b/include/contractor/contractor_heap.hpp @@ -5,9 +5,7 @@ #include "util/typedefs.hpp" #include "util/xor_fast_hash_storage.hpp" -namespace osrm -{ -namespace contractor +namespace osrm::contractor { struct ContractorHeapData { @@ -24,7 +22,6 @@ using ContractorHeap = util::QueryHeap>; -} // namespace contractor } // namespace osrm #endif // OSRM_CONTRACTOR_CONTRACTOR_HEAP_HPP_ diff --git a/include/contractor/contractor_search.hpp b/include/contractor/contractor_search.hpp index 246228980..ebc0b40b9 100644 --- a/include/contractor/contractor_search.hpp +++ b/include/contractor/contractor_search.hpp @@ -8,9 +8,7 @@ #include -namespace osrm -{ -namespace contractor +namespace osrm::contractor { void search(ContractorHeap &heap, @@ -20,7 +18,6 @@ void search(ContractorHeap &heap, const EdgeWeight weight_limit, const NodeID forbidden_node); -} // namespace contractor } // namespace osrm #endif // OSRM_CONTRACTOR_DIJKSTRA_HPP diff --git a/include/contractor/crc32_processor.hpp b/include/contractor/crc32_processor.hpp index a441ae576..c909731ba 100644 --- a/include/contractor/crc32_processor.hpp +++ b/include/contractor/crc32_processor.hpp @@ -9,9 +9,7 @@ #include -namespace osrm -{ -namespace contractor +namespace osrm::contractor { class IteratorbasedCRC32 @@ -125,7 +123,6 @@ struct RangebasedCRC32 private: IteratorbasedCRC32 crc32; }; -} // namespace contractor } // namespace osrm #endif /* ITERATOR_BASED_CRC32_H */ diff --git a/include/contractor/files.hpp b/include/contractor/files.hpp index 39ffa5b54..6c747b6cf 100644 --- a/include/contractor/files.hpp +++ b/include/contractor/files.hpp @@ -5,11 +5,7 @@ #include -namespace osrm -{ -namespace contractor -{ -namespace files +namespace osrm::contractor::files { // reads .osrm.hsgr file template @@ -52,8 +48,6 @@ inline void writeGraph(const boost::filesystem::path &path, serialization::write(writer, "/ch/metrics/" + pair.first, pair.second); } } -} // namespace files -} // namespace contractor } // namespace osrm #endif diff --git a/include/contractor/graph_contractor.hpp b/include/contractor/graph_contractor.hpp index a6a3891c2..2df62c795 100644 --- a/include/contractor/graph_contractor.hpp +++ b/include/contractor/graph_contractor.hpp @@ -8,9 +8,7 @@ #include #include -namespace osrm -{ -namespace contractor +namespace osrm::contractor { std::vector contractGraph(ContractorGraph &graph, @@ -37,7 +35,6 @@ inline auto contractGraph(ContractorGraph &graph, graph, {}, std::move(node_is_contractable), std::move(node_weights), core_factor); } -} // namespace contractor } // namespace osrm #endif // OSRM_CONTRACTOR_GRAPH_CONTRACTOR_HPP diff --git a/include/contractor/graph_contractor_adaptors.hpp b/include/contractor/graph_contractor_adaptors.hpp index cfd447efb..a622b9048 100644 --- a/include/contractor/graph_contractor_adaptors.hpp +++ b/include/contractor/graph_contractor_adaptors.hpp @@ -10,9 +10,7 @@ #include -namespace osrm -{ -namespace contractor +namespace osrm::contractor { // Make sure to move in the input edge list! @@ -177,7 +175,6 @@ template inline std::vector toEdges(GraphT g return edges; } -} // namespace contractor } // namespace osrm #endif // OSRM_CONTRACTOR_GRAPH_CONTRACTION_ADAPTORS_HPP_ diff --git a/include/contractor/query_edge.hpp b/include/contractor/query_edge.hpp index 08f163044..f8281ac0e 100644 --- a/include/contractor/query_edge.hpp +++ b/include/contractor/query_edge.hpp @@ -5,9 +5,7 @@ #include -namespace osrm -{ -namespace contractor +namespace osrm::contractor { struct QueryEdge @@ -77,7 +75,6 @@ struct QueryEdge data.distance == right.data.distance); } }; -} // namespace contractor } // namespace osrm #endif // QUERYEDGE_HPP diff --git a/include/contractor/query_graph.hpp b/include/contractor/query_graph.hpp index c0c4b6cf5..ad7844435 100644 --- a/include/contractor/query_graph.hpp +++ b/include/contractor/query_graph.hpp @@ -6,9 +6,7 @@ #include "util/static_graph.hpp" #include "util/typedefs.hpp" -namespace osrm -{ -namespace contractor +namespace osrm::contractor { namespace detail @@ -19,7 +17,6 @@ using QueryGraph = util::StaticGraph; using QueryGraph = detail::QueryGraph; using QueryGraphView = detail::QueryGraph; -} // namespace contractor } // namespace osrm #endif // QUERYEDGE_HPP diff --git a/include/contractor/serialization.hpp b/include/contractor/serialization.hpp index 693216d6a..da9ec8bdb 100644 --- a/include/contractor/serialization.hpp +++ b/include/contractor/serialization.hpp @@ -8,11 +8,7 @@ #include "storage/serialization.hpp" #include "storage/tar.hpp" -namespace osrm -{ -namespace contractor -{ -namespace serialization +namespace osrm::contractor::serialization { template @@ -46,8 +42,6 @@ void read(storage::tar::FileReader &reader, metric.edge_filter[index]); } } -} // namespace serialization -} // namespace contractor } // namespace osrm #endif diff --git a/include/customizer/cell_customizer.hpp b/include/customizer/cell_customizer.hpp index 8a104e2e0..5cb924c89 100644 --- a/include/customizer/cell_customizer.hpp +++ b/include/customizer/cell_customizer.hpp @@ -10,9 +10,7 @@ #include -namespace osrm -{ -namespace customizer +namespace osrm::customizer { class CellCustomizer @@ -235,7 +233,6 @@ class CellCustomizer const partitioner::MultiLevelPartition &partition; }; -} // namespace customizer } // namespace osrm #endif // OSRM_CELLS_CUSTOMIZER_HPP diff --git a/include/customizer/cell_metric.hpp b/include/customizer/cell_metric.hpp index a522facc3..2adf713fb 100644 --- a/include/customizer/cell_metric.hpp +++ b/include/customizer/cell_metric.hpp @@ -7,9 +7,7 @@ #include "util/typedefs.hpp" #include "util/vector_view.hpp" -namespace osrm -{ -namespace customizer +namespace osrm::customizer { namespace detail { @@ -26,7 +24,6 @@ template struct CellMetricImpl using CellMetric = detail::CellMetricImpl; using CellMetricView = detail::CellMetricImpl; -} // namespace customizer } // namespace osrm #endif diff --git a/include/customizer/customizer.hpp b/include/customizer/customizer.hpp index a7716cf1b..40d2583f8 100644 --- a/include/customizer/customizer.hpp +++ b/include/customizer/customizer.hpp @@ -3,9 +3,7 @@ #include "customizer/customizer_config.hpp" -namespace osrm -{ -namespace customizer +namespace osrm::customizer { class Customizer @@ -14,7 +12,6 @@ class Customizer int Run(const CustomizationConfig &config); }; -} // namespace customizer } // namespace osrm #endif // OSRM_CUSTOMIZE_CUSTOMIZER_HPP diff --git a/include/customizer/customizer_config.hpp b/include/customizer/customizer_config.hpp index 4df629de5..ca5258fb2 100644 --- a/include/customizer/customizer_config.hpp +++ b/include/customizer/customizer_config.hpp @@ -9,9 +9,7 @@ #include "storage/io_config.hpp" #include "updater/updater_config.hpp" -namespace osrm -{ -namespace customizer +namespace osrm::customizer { struct CustomizationConfig final : storage::IOConfig @@ -39,7 +37,6 @@ struct CustomizationConfig final : storage::IOConfig updater::UpdaterConfig updater_config; }; -} // namespace customizer } // namespace osrm #endif // OSRM_CUSTOMIZE_CUSTOMIZER_CONFIG_HPP diff --git a/include/customizer/edge_based_graph.hpp b/include/customizer/edge_based_graph.hpp index b90f464a7..2f5a552b2 100644 --- a/include/customizer/edge_based_graph.hpp +++ b/include/customizer/edge_based_graph.hpp @@ -11,9 +11,7 @@ #include -namespace osrm -{ -namespace customizer +namespace osrm::customizer { struct EdgeBasedGraphEdgeData @@ -126,7 +124,6 @@ using MultiLevelEdgeBasedGraph = MultiLevelGraph; using MultiLevelEdgeBasedGraphView = MultiLevelGraph; -} // namespace customizer } // namespace osrm #endif diff --git a/include/customizer/files.hpp b/include/customizer/files.hpp index 335b77a30..287ca5063 100644 --- a/include/customizer/files.hpp +++ b/include/customizer/files.hpp @@ -9,11 +9,7 @@ #include -namespace osrm -{ -namespace customizer -{ -namespace files +namespace osrm::customizer::files { // reads .osrm.cell_metrics file @@ -106,8 +102,6 @@ inline void writeGraph(const boost::filesystem::path &path, writer.WriteFrom("/mld/connectivity_checksum", connectivity_checksum); serialization::write(writer, "/mld/multilevelgraph", graph); } -} // namespace files -} // namespace customizer } // namespace osrm #endif diff --git a/include/customizer/serialization.hpp b/include/customizer/serialization.hpp index c242f8ba3..158d37a39 100644 --- a/include/customizer/serialization.hpp +++ b/include/customizer/serialization.hpp @@ -9,11 +9,7 @@ #include "storage/shared_memory_ownership.hpp" #include "storage/tar.hpp" -namespace osrm -{ -namespace customizer -{ -namespace serialization +namespace osrm::customizer::serialization { template @@ -65,8 +61,6 @@ inline void write(storage::tar::FileWriter &writer, storage::serialization::write(writer, name + "/is_backward_edge", graph.is_backward_edge); storage::serialization::write(writer, name + "/node_to_edge_offset", graph.node_to_edge_offset); } -} // namespace serialization -} // namespace customizer } // namespace osrm #endif diff --git a/include/engine/algorithm.hpp b/include/engine/algorithm.hpp index 1d65cac04..eca88b21c 100644 --- a/include/engine/algorithm.hpp +++ b/include/engine/algorithm.hpp @@ -3,11 +3,7 @@ #include -namespace osrm -{ -namespace engine -{ -namespace routing_algorithms +namespace osrm::engine::routing_algorithms { // Contraction Hiearchy @@ -111,8 +107,6 @@ template <> struct HasGetTileTurns final : std::true_type template <> struct HasExcludeFlags final : std::true_type { }; -} // namespace routing_algorithms -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/base_api.hpp b/include/engine/api/base_api.hpp index 0cd066d0f..a1ce063f1 100644 --- a/include/engine/api/base_api.hpp +++ b/include/engine/api/base_api.hpp @@ -18,11 +18,7 @@ #include #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { static const constexpr char *INTERSECTION_DELIMITER = " / "; @@ -170,8 +166,6 @@ class BaseAPI const BaseParameters ¶meters; }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/base_parameters.hpp b/include/engine/api/base_parameters.hpp index d5bb71a53..7e243dc98 100644 --- a/include/engine/api/base_parameters.hpp +++ b/include/engine/api/base_parameters.hpp @@ -38,11 +38,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { /** @@ -124,8 +120,6 @@ struct BaseParameters }); } }; -} // namespace api -} // namespace engine } // namespace osrm #endif // ROUTE_PARAMETERS_HPP diff --git a/include/engine/api/base_result.hpp b/include/engine/api/base_result.hpp index 5dd63e7a9..eae87550a 100644 --- a/include/engine/api/base_result.hpp +++ b/include/engine/api/base_result.hpp @@ -8,16 +8,10 @@ #include "util/json_container.hpp" -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { using ResultT = mapbox::util::variant; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/flatbuffers/fbresult_generated.h b/include/engine/api/flatbuffers/fbresult_generated.h index 05211bec6..ec5690022 100644 --- a/include/engine/api/flatbuffers/fbresult_generated.h +++ b/include/engine/api/flatbuffers/fbresult_generated.h @@ -6,10 +6,7 @@ #include "flatbuffers/flatbuffers.h" -namespace osrm { -namespace engine { -namespace api { -namespace fbresult { +namespace osrm::engine::api::fbresult { struct Position; @@ -2431,9 +2428,6 @@ inline std::unique_ptr UnPackSizePrefixe return std::unique_ptr(GetSizePrefixedFBResult(buf)->UnPack(res)); } -} // namespace fbresult -} // namespace api -} // namespace engine } // namespace osrm #endif // FLATBUFFERS_GENERATED_FBRESULT_OSRM_ENGINE_API_FBRESULT_H_ diff --git a/include/engine/api/json_factory.hpp b/include/engine/api/json_factory.hpp index f92dba16a..3e3c98005 100644 --- a/include/engine/api/json_factory.hpp +++ b/include/engine/api/json_factory.hpp @@ -19,16 +19,12 @@ #include #include -namespace osrm -{ -namespace engine +namespace osrm::engine { struct Hint; -namespace api -{ -namespace json +namespace api::json { namespace detail { @@ -112,9 +108,7 @@ util::json::Object makeRouteLeg(guidance::RouteLeg leg, util::json::Array steps) util::json::Array makeRouteLegs(std::vector legs, std::vector step_geometries, std::vector annotations); -} // namespace json } // namespace api -} // namespace engine } // namespace osrm #endif // ENGINE_GUIDANCE_API_RESPONSE_GENERATOR_HPP_ diff --git a/include/engine/api/match_api.hpp b/include/engine/api/match_api.hpp index d7899817d..341f9cc3b 100644 --- a/include/engine/api/match_api.hpp +++ b/include/engine/api/match_api.hpp @@ -12,11 +12,7 @@ #include "util/integer_range.hpp" -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { class MatchAPI final : public RouteAPI @@ -253,8 +249,6 @@ class MatchAPI final : public RouteAPI const tidy::Result &tidy_result; }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/match_parameters.hpp b/include/engine/api/match_parameters.hpp index 774a2c09d..e2009bd6e 100644 --- a/include/engine/api/match_parameters.hpp +++ b/include/engine/api/match_parameters.hpp @@ -32,11 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { /** @@ -98,8 +94,6 @@ struct MatchParameters : public RouteParameters (timestamps.empty() || timestamps.size() == coordinates.size()); } }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/match_parameters_tidy.hpp b/include/engine/api/match_parameters_tidy.hpp index 694dd6885..43b12dd13 100644 --- a/include/engine/api/match_parameters_tidy.hpp +++ b/include/engine/api/match_parameters_tidy.hpp @@ -11,13 +11,7 @@ #include #include -namespace osrm -{ -namespace engine -{ -namespace api -{ -namespace tidy +namespace osrm::engine::api::tidy { struct Thresholds @@ -200,9 +194,6 @@ inline Result tidy(const MatchParameters ¶ms, Thresholds cfg = {15., 5}) return result; } -} // namespace tidy -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/nearest_api.hpp b/include/engine/api/nearest_api.hpp index 43c42de29..1f031f2f5 100644 --- a/include/engine/api/nearest_api.hpp +++ b/include/engine/api/nearest_api.hpp @@ -12,11 +12,7 @@ #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { class NearestAPI final : public BaseAPI @@ -164,8 +160,6 @@ class NearestAPI final : public BaseAPI } }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/nearest_parameters.hpp b/include/engine/api/nearest_parameters.hpp index 576e75352..d6217fcfa 100644 --- a/include/engine/api/nearest_parameters.hpp +++ b/include/engine/api/nearest_parameters.hpp @@ -30,11 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "engine/api/base_parameters.hpp" -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { /** @@ -52,8 +48,6 @@ struct NearestParameters : public BaseParameters bool IsValid() const { return BaseParameters::IsValid() && number_of_results >= 1; } }; -} // namespace api -} // namespace engine } // namespace osrm #endif // ENGINE_API_NEAREST_PARAMETERS_HPP diff --git a/include/engine/api/route_api.hpp b/include/engine/api/route_api.hpp index 044ea0b1b..a494abe64 100644 --- a/include/engine/api/route_api.hpp +++ b/include/engine/api/route_api.hpp @@ -31,11 +31,7 @@ #include #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { class RouteAPI : public BaseAPI @@ -1001,8 +997,6 @@ class RouteAPI : public BaseAPI } }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/route_parameters.hpp b/include/engine/api/route_parameters.hpp index 8d5dd9ae4..a513daad1 100644 --- a/include/engine/api/route_parameters.hpp +++ b/include/engine/api/route_parameters.hpp @@ -32,11 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { /** @@ -211,8 +207,6 @@ inline RouteParameters::AnnotationsType operator|=(RouteParameters::AnnotationsT { return lhs = lhs | rhs; } -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/table_api.hpp b/include/engine/api/table_api.hpp index 21dc80a28..2eaee214b 100644 --- a/include/engine/api/table_api.hpp +++ b/include/engine/api/table_api.hpp @@ -22,11 +22,7 @@ #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { class TableAPI final : public BaseAPI @@ -422,8 +418,6 @@ class TableAPI final : public BaseAPI const TableParameters ¶meters; }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/table_parameters.hpp b/include/engine/api/table_parameters.hpp index 4d3db980e..ea860652c 100644 --- a/include/engine/api/table_parameters.hpp +++ b/include/engine/api/table_parameters.hpp @@ -36,11 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { /** @@ -166,8 +162,6 @@ inline TableParameters::AnnotationsType &operator|=(TableParameters::Annotations { return lhs = lhs | rhs; } -} // namespace api -} // namespace engine } // namespace osrm #endif // ENGINE_API_TABLE_PARAMETERS_HPP diff --git a/include/engine/api/tile_parameters.hpp b/include/engine/api/tile_parameters.hpp index e5328e7c7..2c5bafc27 100644 --- a/include/engine/api/tile_parameters.hpp +++ b/include/engine/api/tile_parameters.hpp @@ -30,11 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { /** @@ -70,8 +66,6 @@ struct TileParameters final return valid_x && valid_y && valid_z; } }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/trip_api.hpp b/include/engine/api/trip_api.hpp index fb8e5598b..74e17676b 100644 --- a/include/engine/api/trip_api.hpp +++ b/include/engine/api/trip_api.hpp @@ -10,11 +10,7 @@ #include "util/integer_range.hpp" -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { class TripAPI final : public RouteAPI @@ -180,8 +176,6 @@ class TripAPI final : public RouteAPI const TripParameters ¶meters; }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/api/trip_parameters.hpp b/include/engine/api/trip_parameters.hpp index 84d6b861a..bffcae38c 100644 --- a/include/engine/api/trip_parameters.hpp +++ b/include/engine/api/trip_parameters.hpp @@ -33,11 +33,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include -namespace osrm -{ -namespace engine -{ -namespace api +namespace osrm::engine::api { /** @@ -76,8 +72,6 @@ struct TripParameters : public RouteParameters bool IsValid() const { return RouteParameters::IsValid(); } }; -} // namespace api -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/approach.hpp b/include/engine/approach.hpp index f7d671a9c..c5ee5182a 100644 --- a/include/engine/approach.hpp +++ b/include/engine/approach.hpp @@ -30,9 +30,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -namespace osrm -{ -namespace engine +namespace osrm::engine { enum class Approach : std::uint8_t @@ -41,6 +39,5 @@ enum class Approach : std::uint8_t UNRESTRICTED = 1 }; -} } // namespace osrm #endif diff --git a/include/engine/bearing.hpp b/include/engine/bearing.hpp index 54e24f57f..60bfe28fe 100644 --- a/include/engine/bearing.hpp +++ b/include/engine/bearing.hpp @@ -28,9 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef OSRM_ENGINE_BEARING_HPP #define OSRM_ENGINE_BEARING_HPP -namespace osrm -{ -namespace engine +namespace osrm::engine { struct Bearing @@ -46,7 +44,6 @@ inline bool operator==(const Bearing lhs, const Bearing rhs) return lhs.bearing == rhs.bearing && lhs.range == rhs.range; } inline bool operator!=(const Bearing lhs, const Bearing rhs) { return !(lhs == rhs); } -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/data_watchdog.hpp b/include/engine/data_watchdog.hpp index 29fb93443..1e913a26b 100644 --- a/include/engine/data_watchdog.hpp +++ b/include/engine/data_watchdog.hpp @@ -17,9 +17,7 @@ #include #include -namespace osrm -{ -namespace engine +namespace osrm::engine { namespace detail @@ -149,7 +147,6 @@ class DataWatchdogImpl class FacadeT> using DataWatchdog = detail::DataWatchdogImpl>; -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/datafacade.hpp b/include/engine/datafacade.hpp index f0f8e9e5b..1488610e0 100644 --- a/include/engine/datafacade.hpp +++ b/include/engine/datafacade.hpp @@ -3,15 +3,12 @@ #include "engine/datafacade/contiguous_internalmem_datafacade.hpp" -namespace osrm -{ -namespace engine +namespace osrm::engine { using DataFacadeBase = datafacade::ContiguousInternalMemoryDataFacadeBase; template using DataFacade = datafacade::ContiguousInternalMemoryDataFacade; -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/datafacade/algorithm_datafacade.hpp b/include/engine/datafacade/algorithm_datafacade.hpp index 73c6b4732..d838f9c09 100644 --- a/include/engine/datafacade/algorithm_datafacade.hpp +++ b/include/engine/datafacade/algorithm_datafacade.hpp @@ -12,11 +12,7 @@ #include "util/filtered_graph.hpp" #include "util/integer_range.hpp" -namespace osrm -{ -namespace engine -{ -namespace datafacade +namespace osrm::engine::datafacade { // Namespace local aliases for algorithms @@ -109,8 +105,6 @@ template <> class AlgorithmDataFacade virtual EdgeID FindEdge(const NodeID edge_based_node_from, const NodeID edge_based_node_to) const = 0; }; -} // namespace datafacade -} // namespace engine } // namespace osrm #endif diff --git a/include/engine/datafacade/contiguous_block_allocator.hpp b/include/engine/datafacade/contiguous_block_allocator.hpp index 0af5b310b..5103dc8a8 100644 --- a/include/engine/datafacade/contiguous_block_allocator.hpp +++ b/include/engine/datafacade/contiguous_block_allocator.hpp @@ -3,11 +3,7 @@ #include "storage/shared_data_index.hpp" -namespace osrm -{ -namespace engine -{ -namespace datafacade +namespace osrm::engine::datafacade { class ContiguousBlockAllocator @@ -19,8 +15,6 @@ class ContiguousBlockAllocator virtual const storage::SharedDataIndex &GetIndex() = 0; }; -} // namespace datafacade -} // namespace engine } // namespace osrm #endif // OSRM_ENGINE_DATAFACADE_CONTIGUOUS_BLOCK_ALLOCATOR_HPP_ diff --git a/include/engine/datafacade/contiguous_internalmem_datafacade.hpp b/include/engine/datafacade/contiguous_internalmem_datafacade.hpp index 48d00e0c1..936c9a927 100644 --- a/include/engine/datafacade/contiguous_internalmem_datafacade.hpp +++ b/include/engine/datafacade/contiguous_internalmem_datafacade.hpp @@ -28,11 +28,7 @@ #include #include -namespace osrm -{ -namespace engine -{ -namespace datafacade +namespace osrm::engine::datafacade { template class ContiguousInternalMemoryAlgorithmDataFacade; @@ -693,8 +689,6 @@ class ContiguousInternalMemoryDataFacade final { } }; -} // namespace datafacade -} // namespace engine } // namespace osrm #endif // CONTIGUOUS_INTERNALMEM_DATAFACADE_HPP diff --git a/include/engine/datafacade/datafacade_base.hpp b/include/engine/datafacade/datafacade_base.hpp index 8ecd5946e..d38a329bf 100644 --- a/include/engine/datafacade/datafacade_base.hpp +++ b/include/engine/datafacade/datafacade_base.hpp @@ -40,11 +40,7 @@ #include #include -namespace osrm -{ -namespace engine -{ -namespace datafacade +namespace osrm::engine::datafacade { class BaseDataFacade @@ -189,8 +185,6 @@ class BaseDataFacade virtual std::vector GetOverridesThatStartAt(const NodeID edge_based_node_id) const = 0; }; -} // namespace datafacade -} // namespace engine } // namespace osrm #endif // DATAFACADE_BASE_HPP diff --git a/include/engine/datafacade/mmap_memory_allocator.hpp b/include/engine/datafacade/mmap_memory_allocator.hpp index 817fcf9db..9fae0f562 100644 --- a/include/engine/datafacade/mmap_memory_allocator.hpp +++ b/include/engine/datafacade/mmap_memory_allocator.hpp @@ -12,11 +12,7 @@ #include #include -namespace osrm -{ -namespace engine -{ -namespace datafacade +namespace osrm::engine::datafacade { /** @@ -37,8 +33,6 @@ class MMapMemoryAllocator final : public ContiguousBlockAllocator std::string rtree_filename; }; -} // namespace datafacade -} // namespace engine } // namespace osrm #endif // OSRM_ENGINE_DATAFACADE_SHARED_MEMORY_ALLOCATOR_HPP_ diff --git a/include/engine/datafacade/process_memory_allocator.hpp b/include/engine/datafacade/process_memory_allocator.hpp index 742f20e36..5851f545f 100644 --- a/include/engine/datafacade/process_memory_allocator.hpp +++ b/include/engine/datafacade/process_memory_allocator.hpp @@ -6,11 +6,7 @@ #include -namespace osrm -{ -namespace engine -{ -namespace datafacade +namespace osrm::engine::datafacade { /** @@ -34,8 +30,6 @@ class ProcessMemoryAllocator final : public ContiguousBlockAllocator std::unique_ptr internal_memory; }; -} // namespace datafacade -} // namespace engine } // namespace osrm #endif // OSRM_ENGINE_DATAFACADE_PROCESS_MEMORY_ALLOCATOR_HPP_ diff --git a/include/engine/datafacade/shared_memory_allocator.hpp b/include/engine/datafacade/shared_memory_allocator.hpp index 5b0a0989a..5326d8d37 100644 --- a/include/engine/datafacade/shared_memory_allocator.hpp +++ b/include/engine/datafacade/shared_memory_allocator.hpp @@ -8,11 +8,7 @@ #include -namespace osrm -{ -namespace engine -{ -namespace datafacade +namespace osrm::engine::datafacade { /** @@ -35,8 +31,6 @@ class SharedMemoryAllocator final : public ContiguousBlockAllocator std::vector> memory_regions; }; -} // namespace datafacade -} // namespace engine } // namespace osrm #endif // OSRM_ENGINE_DATAFACADE_SHARED_MEMORY_ALLOCATOR_HPP_ diff --git a/include/engine/datafacade_factory.hpp b/include/engine/datafacade_factory.hpp index e01c70f72..705b8ff19 100644 --- a/include/engine/datafacade_factory.hpp +++ b/include/engine/datafacade_factory.hpp @@ -16,9 +16,7 @@ #include #include -namespace osrm -{ -namespace engine +namespace osrm::engine { // This class selects the right facade for template