From f4fc5aaf868a48a68eeb6231aa90e1017da89325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Erik=20St=C3=B8wer?= Date: Thu, 11 Jan 2024 10:37:56 +0100 Subject: [PATCH 001/101] Enable renovate for debug ui, group non-major --- renovate.json5 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/renovate.json5 b/renovate.json5 index 42e7552c338..19f2c097e21 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -32,7 +32,9 @@ }, { "matchFiles": ["client-next/package.json"], - "enabled": false + "matchUpdateTypes": ["patch", "minor"], + "groupName": "Debug UI dependencies (non-major)", + "schedule": ["on the first day of the week"] }, // gbfs-java-model patch releases are automatic dependency upgrades so we automerge { From c225e1ec88722b25a9cb0d96386477a2f2f7870b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Erik=20St=C3=B8wer?= Date: Thu, 11 Jan 2024 14:26:17 +0100 Subject: [PATCH 002/101] Assign all debug ui renovate PRs to testower --- renovate.json5 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/renovate.json5 b/renovate.json5 index 19f2c097e21..ac50333d01d 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -34,7 +34,13 @@ "matchFiles": ["client-next/package.json"], "matchUpdateTypes": ["patch", "minor"], "groupName": "Debug UI dependencies (non-major)", - "schedule": ["on the first day of the week"] + "schedule": ["on the first day of the week"], + "assignees": ["testower"] + }, + { + "matchFiles": ["client-next/package.json"], + "matchUpdateTypes": ["major"], + "assignees": ["testower"] }, // gbfs-java-model patch releases are automatic dependency upgrades so we automerge { From a65ff0d69c671480157eca8c0a547a84acf4fb00 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 18 Dec 2023 17:30:07 +0200 Subject: [PATCH 003/101] Introduce vehicle walking preferences --- .../ext/restapi/resources/RequestToPreferencesMapper.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index bfac498ff8c..30f834ae0bd 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -70,7 +70,6 @@ private void mapBike() { setIfNotNull( req.bikeOptimizeType, optimizeType -> bike.withOptimizeType(LegacyBicycleOptimizeType.map(optimizeType)) - ); if (req.bikeOptimizeType == LegacyBicycleOptimizeType.TRIANGLE) { bike.withOptimizeTriangle(triangle -> { From 5efaaf786eb855c7cea970e41b0bbffe45e9ba2f Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 4 Jan 2024 11:49:35 +0200 Subject: [PATCH 004/101] Add scooter preferences class --- .../preference/ScooterPreferences.java | 221 ++++++++++++++++++ .../preference/ScooterPreferencesTest.java | 99 ++++++++ 2 files changed, 320 insertions(+) create mode 100644 src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java create mode 100644 src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java new file mode 100644 index 00000000000..a6a878424a6 --- /dev/null +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java @@ -0,0 +1,221 @@ +package org.opentripplanner.routing.api.request.preference; + +import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; +import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; +import static org.opentripplanner.routing.core.BicycleOptimizeType.SAFE_STREETS; +import static org.opentripplanner.routing.core.BicycleOptimizeType.TRIANGLE; + +import java.io.Serializable; +import java.util.Objects; +import java.util.function.Consumer; +import org.opentripplanner.framework.model.Units; +import org.opentripplanner.framework.tostring.ToStringBuilder; +import org.opentripplanner.routing.core.BicycleOptimizeType; + +/** + * The scooter preferences contain all speed, reluctance, cost and factor preferences for scooter + * related to street and transit routing. The values are normalized(rounded) so the class can used + * as a cache key. + * + * Scooter rental is only supported currently. + *

+ * THIS CLASS IS IMMUTABLE AND THREAD-SAFE. + */ +public final class ScooterPreferences implements Serializable { + + public static final ScooterPreferences DEFAULT = new ScooterPreferences(); + + private final double speed; + private final double reluctance; + private final VehicleRentalPreferences rental; + private final BicycleOptimizeType optimizeType; + private final TimeSlopeSafetyTriangle optimizeTriangle; + private final VehicleWalkingPreferences walking; + + private ScooterPreferences() { + this.speed = 5; + this.reluctance = 2.0; + this.rental = VehicleRentalPreferences.DEFAULT; + this.optimizeType = SAFE_STREETS; + this.optimizeTriangle = TimeSlopeSafetyTriangle.DEFAULT; + this.walking = VehicleWalkingPreferences.DEFAULT; + } + + private ScooterPreferences(Builder builder) { + this.speed = Units.speed(builder.speed); + this.reluctance = Units.reluctance(builder.reluctance); + this.rental = builder.rental; + this.optimizeType = Objects.requireNonNull(builder.optimizeType); + this.optimizeTriangle = Objects.requireNonNull(builder.optimizeTriangle); + this.walking = builder.walking; + } + + public static ScooterPreferences.Builder of() { + return new Builder(DEFAULT); + } + + public ScooterPreferences.Builder copyOf() { + return new Builder(this); + } + + /** + * Default: 5 m/s, ~11 mph, a random scooter speed + */ + public double speed() { + return speed; + } + + public double reluctance() { + return reluctance; + } + + /** Rental preferences that can be different per request */ + public VehicleRentalPreferences rental() { + return rental; + } + + /** + * The set of characteristics that the user wants to optimize for -- defaults to SAFE_STREETS. + */ + public BicycleOptimizeType optimizeType() { + return optimizeType; + } + + public TimeSlopeSafetyTriangle optimizeTriangle() { + return optimizeTriangle; + } + + /** Scooter walking preferences that can be different per request */ + public VehicleWalkingPreferences walking() { + return walking; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ScooterPreferences that = (ScooterPreferences) o; + return ( + doubleEquals(that.speed, speed) && + doubleEquals(that.reluctance, reluctance) && + Objects.equals(rental, that.rental) && + optimizeType == that.optimizeType && + optimizeTriangle.equals(that.optimizeTriangle) && + Objects.equals(walking, that.walking) + ); + } + + @Override + public int hashCode() { + return Objects.hash(speed, reluctance, rental, optimizeType, optimizeTriangle, walking); + } + + @Override + public String toString() { + return ToStringBuilder + .of(ScooterPreferences.class) + .addNum("speed", speed, DEFAULT.speed) + .addNum("reluctance", reluctance, DEFAULT.reluctance) + .addObj("rental", rental, DEFAULT.rental) + .addEnum("optimizeType", optimizeType, DEFAULT.optimizeType) + .addObj("optimizeTriangle", optimizeTriangle, DEFAULT.optimizeTriangle) + .addObj("walking", walking, DEFAULT.walking) + .toString(); + } + + @SuppressWarnings("UnusedReturnValue") + public static class Builder { + + private final ScooterPreferences original; + private double speed; + private double reluctance; + private VehicleRentalPreferences rental; + private BicycleOptimizeType optimizeType; + private TimeSlopeSafetyTriangle optimizeTriangle; + + public VehicleWalkingPreferences walking; + + public Builder(ScooterPreferences original) { + this.original = original; + this.speed = original.speed; + this.reluctance = original.reluctance; + this.rental = original.rental; + this.optimizeType = original.optimizeType; + this.optimizeTriangle = original.optimizeTriangle; + this.walking = original.walking; + } + + public ScooterPreferences original() { + return original; + } + + public double speed() { + return speed; + } + + public Builder withSpeed(double speed) { + this.speed = speed; + return this; + } + + public double reluctance() { + return reluctance; + } + + public Builder withReluctance(double reluctance) { + this.reluctance = reluctance; + return this; + } + + public Builder withRental(Consumer body) { + this.rental = ifNotNull(this.rental, original.rental).copyOf().apply(body).build(); + return this; + } + + public BicycleOptimizeType optimizeType() { + return optimizeType; + } + + public Builder withOptimizeType(BicycleOptimizeType optimizeType) { + this.optimizeType = optimizeType; + return this; + } + + public TimeSlopeSafetyTriangle optimizeTriangle() { + return optimizeTriangle; + } + + /** This also sets the optimization type as TRIANGLE if triangle parameters are defined */ + public Builder withForcedOptimizeTriangle(Consumer body) { + var builder = TimeSlopeSafetyTriangle.of(); + body.accept(builder); + this.optimizeTriangle = builder.buildOrDefault(this.optimizeTriangle); + if (!builder.isEmpty()) { + this.optimizeType = TRIANGLE; + } + return this; + } + + public Builder withOptimizeTriangle(Consumer body) { + var builder = TimeSlopeSafetyTriangle.of(); + body.accept(builder); + this.optimizeTriangle = builder.buildOrDefault(this.optimizeTriangle); + return this; + } + + public Builder withWalking(Consumer body) { + this.walking = ifNotNull(this.walking, original.walking).copyOf().apply(body).build(); + return this; + } + + public Builder apply(Consumer body) { + body.accept(this); + return this; + } + + public ScooterPreferences build() { + var value = new ScooterPreferences(this); + return original.equals(value) ? original : value; + } + } +} diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java new file mode 100644 index 00000000000..11ec7f3be79 --- /dev/null +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java @@ -0,0 +1,99 @@ +package org.opentripplanner.routing.api.request.preference; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.opentripplanner.routing.api.request.preference.ImmutablePreferencesAsserts.assertEqualsAndHashCode; + +import org.junit.jupiter.api.Test; +import org.opentripplanner.routing.core.BicycleOptimizeType; + +class ScooterPreferencesTest { + + public static final double SPEED = 2.0; + public static final double RELUCTANCE = 1.2; + public static final TimeSlopeSafetyTriangle TRIANGLE = TimeSlopeSafetyTriangle + .of() + .withSlope(1) + .build(); + public static final BicycleOptimizeType OPTIMIZE_TYPE = BicycleOptimizeType.TRIANGLE; + + private final ScooterPreferences subject = ScooterPreferences + .of() + .withSpeed(SPEED) + .withReluctance(RELUCTANCE) + .withOptimizeType(OPTIMIZE_TYPE) + .withOptimizeTriangle(it -> it.withSlope(1).build()) + .build(); + + @Test + void speed() { + assertEquals(SPEED, subject.speed()); + } + + @Test + void reluctance() { + assertEquals(RELUCTANCE, subject.reluctance()); + } + + @Test + void optimizeType() { + assertEquals(OPTIMIZE_TYPE, subject.optimizeType()); + } + + @Test + void optimizeTriangle() { + assertEquals(TRIANGLE, subject.optimizeTriangle()); + } + + @Test + void testOfAndCopyOf() { + // Return same object if no value is set + assertSame(ScooterPreferences.DEFAULT, ScooterPreferences.of().build()); + assertSame(subject, subject.copyOf().build()); + } + + @Test + void testCopyOfEqualsAndHashCode() { + // Create a copy, make a change and set it back again to force creating a new object + var other = subject.copyOf().withSpeed(0.7).build(); + var same = other.copyOf().withSpeed(SPEED).build(); + assertEqualsAndHashCode(subject, other, same); + } + + @Test + void testToString() { + assertEquals("ScooterPreferences{}", ScooterPreferences.DEFAULT.toString()); + assertEquals( + "ScooterPreferences{" + + "speed: 2.0, " + + "reluctance: 1.2, " + + "optimizeType: TRIANGLE, " + + "optimizeTriangle: TimeSlopeSafetyTriangle[time=0.0, slope=1.0, safety=0.0]" + + "}", + subject.toString() + ); + } + + @Test + void testForcedTriangleOptimization() { + var trianglePreferences = ScooterPreferences + .of() + .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) + .build(); + assertEquals(BicycleOptimizeType.TRIANGLE, trianglePreferences.optimizeType()); + + var conflictingPreferences = ScooterPreferences + .of() + .withOptimizeType(BicycleOptimizeType.SAFE_STREETS) + .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) + .build(); + assertEquals(BicycleOptimizeType.TRIANGLE, conflictingPreferences.optimizeType()); + + var emptyTrianglePreferences = ScooterPreferences + .of() + .withOptimizeType(BicycleOptimizeType.SAFE_STREETS) + .withForcedOptimizeTriangle(it -> it.build()) + .build(); + assertEquals(BicycleOptimizeType.SAFE_STREETS, emptyTrianglePreferences.optimizeType()); + } +} From 04b87514467e07829c561562598f93379313dc2d Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 4 Jan 2024 12:02:25 +0200 Subject: [PATCH 005/101] Rename optimization type and update comments --- .../mapping/LegacyBicycleOptimizeType.java | 24 ------------------ .../resources/RequestToPreferencesMapper.java | 7 +++--- .../restapi/resources/RoutingResource.java | 10 +++----- .../LegacyVehicleRoutingOptimizeType.java | 25 +++++++++++++++++++ .../gtfs/mapping/OptimizationTypeMapper.java | 14 +++++------ .../apis/gtfs/mapping/RouteRequestMapper.java | 4 +-- .../preferences/BikePreferencesMapper.java | 4 +-- .../apis/transmodel/model/EnumTypes.java | 12 ++++----- .../apis/transmodel/model/plan/TripQuery.java | 7 ++++-- .../request/preference/BikePreferences.java | 16 ++++++------ .../preference/ScooterPreferences.java | 16 ++++++------ .../preference/TimeSlopeSafetyTriangle.java | 17 +++++++------ ...e.java => VehicleRoutingOptimizeType.java} | 12 ++++----- .../visualizer/GraphVisualizer.java | 14 +++++------ .../gtfs/mapping/RouteRequestMapperTest.java | 4 +-- .../mapping/TripRequestMapperTest.java | 12 ++++----- .../BikePreferencesMapperTest.java | 6 ++--- .../mapping/ElevationSnapshotTest.java | 4 +-- .../preference/BikePreferencesTest.java | 15 +++++------ .../preference/ScooterPreferencesTest.java | 15 +++++------ .../integration/BicycleRoutingTest.java | 4 +-- .../street/model/edge/StreetEdgeTest.java | 4 +-- 22 files changed, 126 insertions(+), 120 deletions(-) delete mode 100644 src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyBicycleOptimizeType.java create mode 100644 src/main/java/org/opentripplanner/api/mapping/LegacyVehicleRoutingOptimizeType.java rename src/main/java/org/opentripplanner/routing/core/{BicycleOptimizeType.java => VehicleRoutingOptimizeType.java} (52%) diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyBicycleOptimizeType.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyBicycleOptimizeType.java deleted file mode 100644 index ff50a03534b..00000000000 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyBicycleOptimizeType.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.routing.core.BicycleOptimizeType; - -/** - * Bicycle optimization types that are only meant to be used by the REST API. Related to {@link org.opentripplanner.routing.core.BicycleOptimizeType} - */ -public enum LegacyBicycleOptimizeType { - QUICK, - SAFE, - FLAT, - GREENWAYS, - TRIANGLE; - - public static BicycleOptimizeType map(LegacyBicycleOptimizeType type) { - return switch (type) { - case QUICK -> BicycleOptimizeType.SHORTEST_DURATION; - case FLAT -> BicycleOptimizeType.FLAT_STREETS; - case SAFE -> BicycleOptimizeType.SAFE_STREETS; - case GREENWAYS -> BicycleOptimizeType.SAFEST_STREETS; - case TRIANGLE -> BicycleOptimizeType.TRIANGLE; - }; - } -} diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index 30f834ae0bd..2208ec13a14 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -2,7 +2,7 @@ import jakarta.validation.constraints.NotNull; import java.util.function.Consumer; -import org.opentripplanner.ext.restapi.mapping.LegacyBicycleOptimizeType; +import org.opentripplanner.api.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.routing.algorithm.filterchain.api.TransitGeneralizedCostFilterParams; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; @@ -69,9 +69,10 @@ private void mapBike() { setIfNotNull(req.bikeBoardCost, bike::withBoardCost); setIfNotNull( req.bikeOptimizeType, - optimizeType -> bike.withOptimizeType(LegacyBicycleOptimizeType.map(optimizeType)) + optimizeType -> bike.withOptimizeType(LegacyVehicleRoutingOptimizeType.map(optimizeType)) + ); - if (req.bikeOptimizeType == LegacyBicycleOptimizeType.TRIANGLE) { + if (req.bikeOptimizeType == LegacyVehicleRoutingOptimizeType.TRIANGLE) { bike.withOptimizeTriangle(triangle -> { setIfNotNull(req.triangleTimeFactor, triangle::withTime); setIfNotNull(req.triangleSlopeFactor, triangle::withSlope); diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java index 1c234e3ff9e..53464940a9e 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java @@ -18,9 +18,9 @@ import javax.xml.datatype.DatatypeConstants; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; +import org.opentripplanner.api.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.api.parameter.QualifiedModeSet; import org.opentripplanner.ext.dataoverlay.api.DataOverlayParameters; -import org.opentripplanner.ext.restapi.mapping.LegacyBicycleOptimizeType; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.framework.time.DurationUtils; @@ -239,17 +239,15 @@ public abstract class RoutingResource { protected Double triangleTimeFactor; /** - * The set of characteristics that the user wants to optimize for. @See OptimizeType. + * The set of characteristics that the user wants to optimize for in bicycle and scooter routing. + * @See OptimizeType. * * @deprecated TODO OTP2 this should be completely removed and done only with individual cost * parameters - * Also: apparently OptimizeType only affects BICYCLE mode traversal of - * street segments. If this is the case it should be very well - * documented and carried over into the Enum name. */ @Deprecated @QueryParam("optimize") - protected LegacyBicycleOptimizeType bikeOptimizeType; + protected LegacyVehicleRoutingOptimizeType bikeOptimizeType; /** * The set of modes that a user is willing to use, with qualifiers stating whether vehicles should diff --git a/src/main/java/org/opentripplanner/api/mapping/LegacyVehicleRoutingOptimizeType.java b/src/main/java/org/opentripplanner/api/mapping/LegacyVehicleRoutingOptimizeType.java new file mode 100644 index 00000000000..0cb2ae38bcc --- /dev/null +++ b/src/main/java/org/opentripplanner/api/mapping/LegacyVehicleRoutingOptimizeType.java @@ -0,0 +1,25 @@ +package org.opentripplanner.api.mapping; + +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; + +/** + * Bicycle and scooter optimization types that are only meant to be used by the REST API. Related to + * {@link VehicleRoutingOptimizeType} + */ +public enum LegacyVehicleRoutingOptimizeType { + QUICK, + SAFE, + FLAT, + GREENWAYS, + TRIANGLE; + + public static VehicleRoutingOptimizeType map(LegacyVehicleRoutingOptimizeType type) { + return switch (type) { + case QUICK -> VehicleRoutingOptimizeType.SHORTEST_DURATION; + case FLAT -> VehicleRoutingOptimizeType.FLAT_STREETS; + case SAFE -> VehicleRoutingOptimizeType.SAFE_STREETS; + case GREENWAYS -> VehicleRoutingOptimizeType.SAFEST_STREETS; + case TRIANGLE -> VehicleRoutingOptimizeType.TRIANGLE; + }; + } +} diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/OptimizationTypeMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/OptimizationTypeMapper.java index 1f53652f7b7..7f4f5200256 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/OptimizationTypeMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/OptimizationTypeMapper.java @@ -2,18 +2,18 @@ import javax.annotation.Nonnull; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; public final class OptimizationTypeMapper { @Nonnull - public static BicycleOptimizeType map(GraphQLTypes.GraphQLOptimizeType optimizeType) { + public static VehicleRoutingOptimizeType map(GraphQLTypes.GraphQLOptimizeType optimizeType) { return switch (optimizeType) { - case QUICK -> BicycleOptimizeType.SHORTEST_DURATION; - case FLAT -> BicycleOptimizeType.FLAT_STREETS; - case SAFE -> BicycleOptimizeType.SAFE_STREETS; - case GREENWAYS -> BicycleOptimizeType.SAFEST_STREETS; - case TRIANGLE -> BicycleOptimizeType.TRIANGLE; + case QUICK -> VehicleRoutingOptimizeType.SHORTEST_DURATION; + case FLAT -> VehicleRoutingOptimizeType.FLAT_STREETS; + case SAFE -> VehicleRoutingOptimizeType.SAFE_STREETS; + case GREENWAYS -> VehicleRoutingOptimizeType.SAFEST_STREETS; + case TRIANGLE -> VehicleRoutingOptimizeType.TRIANGLE; }; } } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java index 212bfbcf380..5cdae33850f 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java @@ -28,7 +28,7 @@ import org.opentripplanner.routing.api.request.preference.VehicleWalkingPreferences; import org.opentripplanner.routing.api.request.request.filter.SelectRequest; import org.opentripplanner.routing.api.request.request.filter.TransitFilterRequest; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.transit.model.basic.MainAndSubMode; import org.opentripplanner.transit.model.basic.TransitMode; @@ -79,7 +79,7 @@ public static RouteRequest toRouteRequest( ) ); } - if (bike.optimizeType() == BicycleOptimizeType.TRIANGLE) { + if (bike.optimizeType() == VehicleRoutingOptimizeType.TRIANGLE) { bike.withOptimizeTriangle(triangle -> { callWith.argument("triangle.timeFactor", triangle::withTime); callWith.argument("triangle.slopeFactor", triangle::withSlope); diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapper.java index 1179c034e93..76826d31e2d 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapper.java @@ -4,7 +4,7 @@ import org.opentripplanner.apis.transmodel.support.DataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.BikePreferences; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; public class BikePreferencesMapper { @@ -37,7 +37,7 @@ public static void mapBikePreferences( // bike.withWalkingReluctance(WALK_BIKE_RELATIVE_RELUCTANCE * (double)r ); //}); - if (bike.optimizeType() == BicycleOptimizeType.TRIANGLE) { + if (bike.optimizeType() == VehicleRoutingOptimizeType.TRIANGLE) { bike.withOptimizeTriangle(triangle -> { callWith.argument("triangleFactors.time", triangle::withTime); callWith.argument("triangleFactors.slope", triangle::withSlope); diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java b/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java index e2897d868c9..b85d4ce19b9 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/EnumTypes.java @@ -17,7 +17,7 @@ import org.opentripplanner.routing.api.request.preference.ItineraryFilterDebugProfile; import org.opentripplanner.routing.api.response.InputField; import org.opentripplanner.routing.api.response.RoutingErrorCode; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.stoptimes.ArrivalDeparture; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model.basic.Accessibility; @@ -64,11 +64,11 @@ public class EnumTypes { public static final GraphQLEnumType BICYCLE_OPTIMISATION_METHOD = GraphQLEnumType .newEnum() .name("BicycleOptimisationMethod") - .value("quick", BicycleOptimizeType.SHORTEST_DURATION) - .value("safe", BicycleOptimizeType.SAFE_STREETS) - .value("flat", BicycleOptimizeType.FLAT_STREETS) - .value("greenways", BicycleOptimizeType.SAFEST_STREETS) - .value("triangle", BicycleOptimizeType.TRIANGLE) + .value("quick", VehicleRoutingOptimizeType.SHORTEST_DURATION) + .value("safe", VehicleRoutingOptimizeType.SAFE_STREETS) + .value("flat", VehicleRoutingOptimizeType.FLAT_STREETS) + .value("greenways", VehicleRoutingOptimizeType.SAFEST_STREETS) + .value("triangle", VehicleRoutingOptimizeType.TRIANGLE) .build(); public static final GraphQLEnumType BIKES_ALLOWED = GraphQLEnumType diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java index abeeb187342..bf34d9928e4 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java @@ -20,7 +20,7 @@ import org.opentripplanner.apis.transmodel.model.framework.PenaltyForStreetModeType; import org.opentripplanner.apis.transmodel.support.GqlUtil; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; public class TripQuery { @@ -371,7 +371,10 @@ public static GraphQLFieldDefinition create( "When setting the " + EnumTypes.BICYCLE_OPTIMISATION_METHOD.getName() + " to '" + - enumValAsString(EnumTypes.BICYCLE_OPTIMISATION_METHOD, BicycleOptimizeType.TRIANGLE) + + enumValAsString( + EnumTypes.BICYCLE_OPTIMISATION_METHOD, + VehicleRoutingOptimizeType.TRIANGLE + ) + "', use these values to tell the routing engine how important each of the factors is compared to the others. All values should add up to 1." ) .type(TriangleFactorsInputType.INPUT_TYPE) diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java index 26da1476b38..5767b74eaa8 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java @@ -2,8 +2,8 @@ import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; -import static org.opentripplanner.routing.core.BicycleOptimizeType.SAFE_STREETS; -import static org.opentripplanner.routing.core.BicycleOptimizeType.TRIANGLE; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.SAFE_STREETS; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.TRIANGLE; import java.io.Serializable; import java.util.Objects; @@ -11,7 +11,7 @@ import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; import org.opentripplanner.framework.tostring.ToStringBuilder; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; /** * The bike preferences contain all speed, reluctance, cost and factor preferences for biking @@ -29,7 +29,7 @@ public final class BikePreferences implements Serializable { private final Cost boardCost; private final VehicleParkingPreferences parking; private final VehicleRentalPreferences rental; - private final BicycleOptimizeType optimizeType; + private final VehicleRoutingOptimizeType optimizeType; private final TimeSlopeSafetyTriangle optimizeTriangle; private final VehicleWalkingPreferences walking; @@ -96,7 +96,7 @@ public VehicleRentalPreferences rental() { /** * The set of characteristics that the user wants to optimize for -- defaults to SAFE_STREETS. */ - public BicycleOptimizeType optimizeType() { + public VehicleRoutingOptimizeType optimizeType() { return optimizeType; } @@ -164,7 +164,7 @@ public static class Builder { private Cost boardCost; private VehicleParkingPreferences parking; private VehicleRentalPreferences rental; - private BicycleOptimizeType optimizeType; + private VehicleRoutingOptimizeType optimizeType; private TimeSlopeSafetyTriangle optimizeTriangle; private VehicleWalkingPreferences walking; @@ -221,11 +221,11 @@ public Builder withRental(Consumer body) { return this; } - public BicycleOptimizeType optimizeType() { + public VehicleRoutingOptimizeType optimizeType() { return optimizeType; } - public Builder withOptimizeType(BicycleOptimizeType optimizeType) { + public Builder withOptimizeType(VehicleRoutingOptimizeType optimizeType) { this.optimizeType = optimizeType; return this; } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java index a6a878424a6..10b9c01e686 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java @@ -2,15 +2,15 @@ import static org.opentripplanner.framework.lang.DoubleUtils.doubleEquals; import static org.opentripplanner.framework.lang.ObjectUtils.ifNotNull; -import static org.opentripplanner.routing.core.BicycleOptimizeType.SAFE_STREETS; -import static org.opentripplanner.routing.core.BicycleOptimizeType.TRIANGLE; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.SAFE_STREETS; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.TRIANGLE; import java.io.Serializable; import java.util.Objects; import java.util.function.Consumer; import org.opentripplanner.framework.model.Units; import org.opentripplanner.framework.tostring.ToStringBuilder; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; /** * The scooter preferences contain all speed, reluctance, cost and factor preferences for scooter @@ -28,7 +28,7 @@ public final class ScooterPreferences implements Serializable { private final double speed; private final double reluctance; private final VehicleRentalPreferences rental; - private final BicycleOptimizeType optimizeType; + private final VehicleRoutingOptimizeType optimizeType; private final TimeSlopeSafetyTriangle optimizeTriangle; private final VehicleWalkingPreferences walking; @@ -77,7 +77,7 @@ public VehicleRentalPreferences rental() { /** * The set of characteristics that the user wants to optimize for -- defaults to SAFE_STREETS. */ - public BicycleOptimizeType optimizeType() { + public VehicleRoutingOptimizeType optimizeType() { return optimizeType; } @@ -130,7 +130,7 @@ public static class Builder { private double speed; private double reluctance; private VehicleRentalPreferences rental; - private BicycleOptimizeType optimizeType; + private VehicleRoutingOptimizeType optimizeType; private TimeSlopeSafetyTriangle optimizeTriangle; public VehicleWalkingPreferences walking; @@ -172,11 +172,11 @@ public Builder withRental(Consumer body) { return this; } - public BicycleOptimizeType optimizeType() { + public VehicleRoutingOptimizeType optimizeType() { return optimizeType; } - public Builder withOptimizeType(BicycleOptimizeType optimizeType) { + public Builder withOptimizeType(VehicleRoutingOptimizeType optimizeType) { this.optimizeType = optimizeType; return this; } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java b/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java index 99925a441fd..ae4f1039f32 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/TimeSlopeSafetyTriangle.java @@ -4,13 +4,14 @@ import static org.opentripplanner.framework.lang.DoubleUtils.roundTo2Decimals; /** - * Sets the (bicycle) triangle routing parameters -- the relative importance of safety, flatness, - * and speed. These three fields should have values between 0 and 1, and should add up to 1. + * Sets the (bicycle or scooter) triangle routing parameters -- the relative importance of safety, + * flatness, and speed. These three fields should have values between 0 and 1, and should add up to + * 1. *

* The constructor accepts any three numbers and will normalize them to add up to 1. {@code time} * and {@code slope} are rounded to the closest two decimal number, then - * {@code safety := 1.0 - (time + slope)}. This is done to make the rounding predictable and - * to allways add up to one. This allows this class to be used in an index of a cache. For example: + * {@code safety := 1.0 - (time + slope)}. This is done to make the rounding predictable and to + * allways add up to one. This allows this class to be used in an index of a cache. For example: *

  *   ( 1.0, 1.0, 1.0 ) => ( time: 0.33, slope: 0.33, safety: 0.34 )
  * 
@@ -25,10 +26,10 @@ public record TimeSlopeSafetyTriangle(double time, double slope, double safety) public static final TimeSlopeSafetyTriangle DEFAULT = new TimeSlopeSafetyTriangle(1, 1, 1); /** - * Sets the bicycle triangle routing parameters -- the relative importance of safety, flatness, - * and speed. These three fields of the RouteRequest should have values between 0 and 1, and - * should add up to 1. This setter function accepts any three numbers and will normalize them to - * add up to 1. + * Sets the bicycle or scooter triangle routing parameters -- the relative importance of safety, + * flatness, and speed. These three fields of the RouteRequest should have values between 0 and 1, + * and should add up to 1. This setter function accepts any three numbers and will normalize them + * to add up to 1. */ public TimeSlopeSafetyTriangle(double time, double slope, double safety) { safety = positiveValueOrZero(safety); diff --git a/src/main/java/org/opentripplanner/routing/core/BicycleOptimizeType.java b/src/main/java/org/opentripplanner/routing/core/VehicleRoutingOptimizeType.java similarity index 52% rename from src/main/java/org/opentripplanner/routing/core/BicycleOptimizeType.java rename to src/main/java/org/opentripplanner/routing/core/VehicleRoutingOptimizeType.java index 1d639e0af8b..cb8436b83b3 100644 --- a/src/main/java/org/opentripplanner/routing/core/BicycleOptimizeType.java +++ b/src/main/java/org/opentripplanner/routing/core/VehicleRoutingOptimizeType.java @@ -5,10 +5,10 @@ import java.util.Set; /** - * When planning a bicycle route what should be optimized for. Optimize types are basically - * combined presets of routing parameters, except for triangle. + * When planning a bicycle or scooter route what should be optimized for. Optimize types are + * basically combined presets of routing parameters, except for triangle. */ -public enum BicycleOptimizeType { +public enum VehicleRoutingOptimizeType { /** This was previously called QUICK */ SHORTEST_DURATION, /** This was previously called SAFE */ @@ -19,14 +19,14 @@ public enum BicycleOptimizeType { SAFEST_STREETS, TRIANGLE; - private static final Set NON_TRIANGLE_VALUES = Collections.unmodifiableSet( + private static final Set NON_TRIANGLE_VALUES = Collections.unmodifiableSet( EnumSet.complementOf(EnumSet.of(TRIANGLE)) ); /** - * Return all values that are not {@link BicycleOptimizeType#TRIANGLE}. + * Return all values that are not {@link VehicleRoutingOptimizeType#TRIANGLE}. */ - public static Set nonTriangleValues() { + public static Set nonTriangleValues() { return NON_TRIANGLE_VALUES; } } diff --git a/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java b/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java index f15aff9048b..338423df961 100644 --- a/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java +++ b/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java @@ -64,7 +64,7 @@ import org.opentripplanner.astar.spi.TraverseVisitor; import org.opentripplanner.graph_builder.issue.api.DataImportIssue; import org.opentripplanner.routing.api.request.RouteRequest; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.impl.GraphPathFinder; import org.opentripplanner.street.model.edge.Edge; @@ -547,20 +547,20 @@ protected void route(String from, String to) { } } - BicycleOptimizeType getSelectedOptimizeType() { + VehicleRoutingOptimizeType getSelectedOptimizeType() { if (opQuick.isSelected()) { - return BicycleOptimizeType.SHORTEST_DURATION; + return VehicleRoutingOptimizeType.SHORTEST_DURATION; } if (opSafe.isSelected()) { - return BicycleOptimizeType.SAFE_STREETS; + return VehicleRoutingOptimizeType.SAFE_STREETS; } if (opFlat.isSelected()) { - return BicycleOptimizeType.FLAT_STREETS; + return VehicleRoutingOptimizeType.FLAT_STREETS; } if (opGreenways.isSelected()) { - return BicycleOptimizeType.SAFEST_STREETS; + return VehicleRoutingOptimizeType.SAFEST_STREETS; } - return BicycleOptimizeType.SHORTEST_DURATION; + return VehicleRoutingOptimizeType.SHORTEST_DURATION; } private Container makeDiffTab() { diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java index b05dd77e2a9..92b91a141bd 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java @@ -5,8 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.params.provider.Arguments.of; -import static org.opentripplanner.routing.core.BicycleOptimizeType.SAFE_STREETS; -import static org.opentripplanner.routing.core.BicycleOptimizeType.TRIANGLE; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.SAFE_STREETS; +import static org.opentripplanner.routing.core.VehicleRoutingOptimizeType.TRIANGLE; import graphql.ExecutionInput; import graphql.execution.ExecutionId; diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java index 9a01a36cbcb..1e0d5a36f53 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/TripRequestMapperTest.java @@ -40,7 +40,7 @@ import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.preference.StreetPreferences; import org.opentripplanner.routing.api.request.preference.TimeSlopeSafetyTriangle; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.service.realtimevehicles.internal.DefaultRealtimeVehicleService; import org.opentripplanner.service.vehiclerental.internal.DefaultVehicleRentalService; @@ -255,14 +255,14 @@ public void testMaxDirectDurationForFlexWithTooLongDuration() { public void testBikeTriangleFactors() { Map arguments = Map.of( "bicycleOptimisationMethod", - BicycleOptimizeType.TRIANGLE, + VehicleRoutingOptimizeType.TRIANGLE, "triangleFactors", Map.of("safety", 0.1, "slope", 0.1, "time", 0.8) ); var req1 = TripRequestMapper.createRequest(executionContext(arguments)); - assertEquals(BicycleOptimizeType.TRIANGLE, req1.preferences().bike().optimizeType()); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, req1.preferences().bike().optimizeType()); assertEquals( new TimeSlopeSafetyTriangle(0.8, 0.1, 0.1), req1.preferences().bike().optimizeTriangle() @@ -272,18 +272,18 @@ public void testBikeTriangleFactors() { @Test void testDefaultTriangleFactors() { var req2 = TripRequestMapper.createRequest(executionContext(Map.of())); - assertEquals(BicycleOptimizeType.SAFE_STREETS, req2.preferences().bike().optimizeType()); + assertEquals(VehicleRoutingOptimizeType.SAFE_STREETS, req2.preferences().bike().optimizeType()); assertEquals(TimeSlopeSafetyTriangle.DEFAULT, req2.preferences().bike().optimizeTriangle()); } - static Stream noTriangleCases = BicycleOptimizeType + static Stream noTriangleCases = VehicleRoutingOptimizeType .nonTriangleValues() .stream() .map(Arguments::of); @ParameterizedTest @VariableSource("noTriangleCases") - public void testBikeTriangleFactorsHasNoEffect(BicycleOptimizeType bot) { + public void testBikeTriangleFactorsHasNoEffect(VehicleRoutingOptimizeType bot) { Map arguments = Map.of( "bicycleOptimisationMethod", bot, diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapperTest.java index a72fd25cbfa..786ddc5c198 100644 --- a/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/BikePreferencesMapperTest.java @@ -9,7 +9,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.opentripplanner.apis.transmodel._support.TestDataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.BikePreferences; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; class BikePreferencesMapperTest { @@ -23,7 +23,7 @@ static List mapBikePreferencesTestCases() { Arguments.of("bikeSpeed", 10.0, "BikePreferences{speed: 10.0}"), Arguments.of( "bicycleOptimisationMethod", - BicycleOptimizeType.TRIANGLE, + VehicleRoutingOptimizeType.TRIANGLE, "BikePreferences{optimizeType: TRIANGLE}" ), // No effect unless BicycleOptimize is TRIANGLE @@ -64,7 +64,7 @@ static List mapBikePreferencesOptimizeTriangleTestCases() { @ParameterizedTest @MethodSource("mapBikePreferencesOptimizeTriangleTestCases") void testMapBikePreferencesOptimizeTriangle(String field, Object value, String expected) { - var preferences = BikePreferences.of().withOptimizeType(BicycleOptimizeType.TRIANGLE); + var preferences = BikePreferences.of().withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE); mapBikePreferences(preferences, TestDataFetcherDecorator.of(field, value)); assertEquals( "BikePreferences{optimizeType: TRIANGLE, optimizeTriangle: " + expected + "}", diff --git a/src/test/java/org/opentripplanner/routing/algorithm/mapping/ElevationSnapshotTest.java b/src/test/java/org/opentripplanner/routing/algorithm/mapping/ElevationSnapshotTest.java index 9027b0a0dd5..677edfcbabf 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/mapping/ElevationSnapshotTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/mapping/ElevationSnapshotTest.java @@ -19,7 +19,7 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.error.RoutingValidationException; @ExtendWith(SnapshotExtension.class) @@ -98,7 +98,7 @@ public void directBike() { request.withPreferences(pref -> pref.withBike(bike -> bike - .withOptimizeType(BicycleOptimizeType.TRIANGLE) + .withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE) .withOptimizeTriangle(b -> b.withTime(0.3).withSlope(0.4).withSafety(0.3)) ) ); diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java index 8a6ac3f4f45..3bbaf0105e5 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java @@ -5,7 +5,7 @@ import static org.opentripplanner.routing.api.request.preference.ImmutablePreferencesAsserts.assertEqualsAndHashCode; import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; class BikePreferencesTest { @@ -16,7 +16,8 @@ class BikePreferencesTest { .of() .withSlope(1) .build(); - public static final BicycleOptimizeType OPTIMIZE_TYPE = BicycleOptimizeType.TRIANGLE; + public static final VehicleRoutingOptimizeType OPTIMIZE_TYPE = + VehicleRoutingOptimizeType.TRIANGLE; public static final int RENTAL_PICKUP_TIME = 30; public static final int PARK_COST = 30; @@ -106,20 +107,20 @@ void testForcedTriangleOptimization() { .of() .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) .build(); - assertEquals(BicycleOptimizeType.TRIANGLE, trianglePreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, trianglePreferences.optimizeType()); var conflictingPreferences = BikePreferences .of() - .withOptimizeType(BicycleOptimizeType.SAFE_STREETS) + .withOptimizeType(VehicleRoutingOptimizeType.SAFE_STREETS) .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) .build(); - assertEquals(BicycleOptimizeType.TRIANGLE, conflictingPreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, conflictingPreferences.optimizeType()); var emptyTrianglePreferences = BikePreferences .of() - .withOptimizeType(BicycleOptimizeType.SAFE_STREETS) + .withOptimizeType(VehicleRoutingOptimizeType.SAFE_STREETS) .withForcedOptimizeTriangle(it -> it.build()) .build(); - assertEquals(BicycleOptimizeType.SAFE_STREETS, emptyTrianglePreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.SAFE_STREETS, emptyTrianglePreferences.optimizeType()); } } diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java index 11ec7f3be79..4b6554cbe07 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java @@ -5,7 +5,7 @@ import static org.opentripplanner.routing.api.request.preference.ImmutablePreferencesAsserts.assertEqualsAndHashCode; import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; class ScooterPreferencesTest { @@ -15,7 +15,8 @@ class ScooterPreferencesTest { .of() .withSlope(1) .build(); - public static final BicycleOptimizeType OPTIMIZE_TYPE = BicycleOptimizeType.TRIANGLE; + public static final VehicleRoutingOptimizeType OPTIMIZE_TYPE = + VehicleRoutingOptimizeType.TRIANGLE; private final ScooterPreferences subject = ScooterPreferences .of() @@ -80,20 +81,20 @@ void testForcedTriangleOptimization() { .of() .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) .build(); - assertEquals(BicycleOptimizeType.TRIANGLE, trianglePreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, trianglePreferences.optimizeType()); var conflictingPreferences = ScooterPreferences .of() - .withOptimizeType(BicycleOptimizeType.SAFE_STREETS) + .withOptimizeType(VehicleRoutingOptimizeType.SAFE_STREETS) .withForcedOptimizeTriangle(it -> it.withSlope(1).build()) .build(); - assertEquals(BicycleOptimizeType.TRIANGLE, conflictingPreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.TRIANGLE, conflictingPreferences.optimizeType()); var emptyTrianglePreferences = ScooterPreferences .of() - .withOptimizeType(BicycleOptimizeType.SAFE_STREETS) + .withOptimizeType(VehicleRoutingOptimizeType.SAFE_STREETS) .withForcedOptimizeTriangle(it -> it.build()) .build(); - assertEquals(BicycleOptimizeType.SAFE_STREETS, emptyTrianglePreferences.optimizeType()); + assertEquals(VehicleRoutingOptimizeType.SAFE_STREETS, emptyTrianglePreferences.optimizeType()); } } diff --git a/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java b/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java index d5b7733f3e8..db937ff2a6e 100644 --- a/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java +++ b/src/test/java/org/opentripplanner/street/integration/BicycleRoutingTest.java @@ -16,7 +16,7 @@ import org.opentripplanner.routing.algorithm.mapping.GraphPathToItineraryMapper; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.impl.GraphPathFinder; import org.opentripplanner.street.search.TemporaryVerticesContainer; @@ -76,7 +76,7 @@ private static String computePolyline(Graph graph, GenericLocation from, Generic request.setFrom(from); request.setTo(to); request.withPreferences(p -> - p.withBike(it -> it.withOptimizeType(BicycleOptimizeType.SHORTEST_DURATION)) + p.withBike(it -> it.withOptimizeType(VehicleRoutingOptimizeType.SHORTEST_DURATION)) ); request.journey().direct().setMode(StreetMode.BIKE); diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java index 42d841b9fa3..60e8cf58952 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java @@ -18,7 +18,7 @@ import org.locationtech.jts.geom.LineString; import org.locationtech.jts.geom.impl.PackedCoordinateSequence; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.core.BicycleOptimizeType; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.util.ElevationUtils; import org.opentripplanner.routing.util.SlopeCosts; import org.opentripplanner.street.model.StreetTraversalPermission; @@ -357,7 +357,7 @@ public void testBikeOptimizeTriangle() { .withBike(bike -> bike .withSpeed(SPEED) - .withOptimizeType(BicycleOptimizeType.TRIANGLE) + .withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE) .withOptimizeTriangle(it -> it.withTime(1)) .withReluctance(1) ) From a7c92a96caee8d18437af7a2f4ede260c731b464 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 18 Jan 2024 11:46:16 +0200 Subject: [PATCH 006/101] Use scooter preferences --- .../routing/api/request/StreetMode.java | 32 ++++++++------ .../preference/RoutingPreferences.java | 43 ++++++++++++++++--- .../street/StreetVehicleRentalLink.java | 5 ++- .../street/model/edge/StreetEdge.java | 29 +++++++------ .../edge/StreetEdgeReluctanceCalculator.java | 1 + .../model/edge/StreetTransitEntityLink.java | 14 +++--- .../street/model/edge/TemporaryFreeEdge.java | 14 +++--- .../street/search/state/StateData.java | 8 +++- .../EuclideanRemainingWeightHeuristic.java | 3 ++ 9 files changed, 102 insertions(+), 47 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java index 0f5d65305b3..bb5dc4b7f04 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java +++ b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java @@ -7,63 +7,63 @@ public enum StreetMode implements DocumentedEnum { * No street mode is set. This option is used if we do not want street routing at all in this part * of the search. */ - NOT_SET(true, true, true, false, false, false, false, false, false), + NOT_SET(true, true, true, false, false, false, false, false, false, false), /** * Walk only */ - WALK(true, true, true, true, false, false, false, false, false), + WALK(true, true, true, true, false, false, false, false, false, false), /** * Bike only */ - BIKE(true, true, true, false, true, false, false, false, false), + BIKE(true, true, true, false, true, false, false, false, false, false), /** * Bike to a bike parking area, then walk the rest of the way. *

* Direct mode and access mode only. */ - BIKE_TO_PARK(true, false, false, true, true, false, false, true, false), + BIKE_TO_PARK(true, false, false, true, true, false, false, false, true, false), /** * Walk to a bike rental point, bike to a bike rental drop-off point, and walk the rest of the * way. This can include bike rental at fixed locations or free-floating services. */ - BIKE_RENTAL(true, true, true, true, true, false, true, false, false), + BIKE_RENTAL(true, true, true, true, true, false, false, true, false, false), /** * Walk to a scooter rental point, ride a scooter to a scooter rental drop-off point, and walk the * rest of the way. This can include scooter rental at fixed locations or free-floating services. */ - SCOOTER_RENTAL(true, true, true, true, true, false, true, false, false), + SCOOTER_RENTAL(true, true, true, true, false, false, true, true, false, false), /** * Car only *

* Direct mode only. */ - CAR(true, false, false, false, false, true, false, false, false), + CAR(true, false, false, false, false, true, false, false, false, false), /** * Start in the car, drive to a parking area, and walk the rest of the way. *

* Direct mode and access mode only. */ - CAR_TO_PARK(true, false, false, true, false, true, false, true, false), + CAR_TO_PARK(true, false, false, true, false, true, false, false, true, false), /** * Walk to a pickup point along the road, drive to a drop-off point along the road, and walk the * rest of the way. This can include various taxi-services or kiss & ride. */ - CAR_PICKUP(true, false, true, true, false, true, false, false, true), + CAR_PICKUP(true, false, true, true, false, true, false, false, false, true), /** * Walk to a car rental point, drive to a car rental drop-off point and walk the rest of the way. * This can include car rental at fixed locations or free-floating services. */ - CAR_RENTAL(true, true, true, true, false, true, true, false, false), + CAR_RENTAL(true, true, true, true, false, true, false, true, false, false), /** * Using a car hailing app like Uber or Lyft to get to a train station or all the way to the destination. */ - CAR_HAILING(true, false, true, false, false, true, false, false, true), + CAR_HAILING(true, false, true, false, false, true, false, false, false, true), /** * Encompasses all types of on-demand and flexible transportation. */ - FLEXIBLE(true, false, true, true, false, false, false, false, false); + FLEXIBLE(true, false, true, true, false, false, false, false, false, false); final boolean access; @@ -77,6 +77,8 @@ public enum StreetMode implements DocumentedEnum { final boolean includesDriving; + final boolean includesScooter; + final boolean includesRenting; final boolean includesParking; @@ -90,6 +92,7 @@ public enum StreetMode implements DocumentedEnum { boolean includesWalking, boolean includesBiking, boolean includesDriving, + boolean includesScooter, boolean includesRenting, boolean includesParking, boolean includesPickup @@ -100,6 +103,7 @@ public enum StreetMode implements DocumentedEnum { this.includesWalking = includesWalking; this.includesBiking = includesBiking; this.includesDriving = includesDriving; + this.includesScooter = includesScooter; this.includesRenting = includesRenting; this.includesParking = includesParking; this.includesPickup = includesPickup; @@ -117,6 +121,10 @@ public boolean includesDriving() { return includesDriving; } + public boolean includesScooter() { + return includesScooter; + } + public boolean includesRenting() { return includesRenting; } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java index d3d22160935..3fec7a9e46e 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java @@ -7,6 +7,7 @@ import java.util.Objects; import java.util.function.Consumer; import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.search.TraverseMode; @@ -23,6 +24,7 @@ public final class RoutingPreferences implements Serializable { private final WheelchairPreferences wheelchair; private final BikePreferences bike; private final CarPreferences car; + private final ScooterPreferences scooter; private final SystemPreferences system; private final ItineraryFilterPreferences itineraryFilter; @@ -34,6 +36,7 @@ public RoutingPreferences() { this.wheelchair = WheelchairPreferences.DEFAULT; this.bike = BikePreferences.DEFAULT; this.car = CarPreferences.DEFAULT; + this.scooter = ScooterPreferences.DEFAULT; this.system = SystemPreferences.DEFAULT; this.itineraryFilter = ItineraryFilterPreferences.DEFAULT; } @@ -46,6 +49,7 @@ private RoutingPreferences(Builder builder) { this.street = requireNonNull(builder.street()); this.bike = requireNonNull(builder.bike()); this.car = requireNonNull(builder.car()); + this.scooter = requireNonNull(builder.scooter()); this.system = requireNonNull(builder.system()); this.itineraryFilter = requireNonNull(builder.itineraryFilter()); } @@ -90,6 +94,10 @@ public CarPreferences car() { return car; } + public ScooterPreferences scooter() { + return scooter; + } + /** * Get parking preferences for the traverse mode. Note, only car and bike are supported. */ @@ -99,20 +107,28 @@ public VehicleParkingPreferences parking(TraverseMode mode) { /** * Get rental preferences for the traverse mode. Note, only car, scooter and bike are supported. - * - * TODO make scooter preferences independent of bike */ + @Nonnull public VehicleRentalPreferences rental(TraverseMode mode) { - return mode == TraverseMode.CAR ? car.rental() : bike.rental(); + return switch (mode) { + case BICYCLE -> bike.rental(); + case CAR -> car.rental(); + case SCOOTER -> scooter.rental(); + default -> throw new IllegalArgumentException("rental(): Invalid mode " + mode); + }; } /** * Get rental preferences for the traverse mode. Note, only car, scooter and bike are supported. - * - * TODO make scooter preferences independent of bike */ + @Nullable public VehicleRentalPreferences rental(StreetMode mode) { - return mode == StreetMode.CAR_RENTAL ? car.rental() : bike.rental(); + return switch (mode) { + case BIKE_RENTAL -> bike.rental(); + case CAR_RENTAL -> car.rental(); + case SCOOTER_RENTAL -> scooter.rental(); + default -> null; + }; } @Nonnull @@ -126,12 +142,15 @@ public SystemPreferences system() { /** * The road speed for a specific traverse mode. + * + * NOTE, this is only used for tests and doesn't support scooter walking */ public double getSpeed(TraverseMode mode, boolean walkingBike) { return switch (mode) { case WALK -> walkingBike ? bike.walking().speed() : walk.speed(); case BICYCLE -> bike.speed(); case CAR -> car.speed(); + case SCOOTER -> scooter.speed(); default -> throw new IllegalArgumentException("getSpeed(): Invalid mode " + mode); }; } @@ -149,6 +168,7 @@ public boolean equals(Object o) { Objects.equals(wheelchair, that.wheelchair) && Objects.equals(bike, that.bike) && Objects.equals(car, that.car) && + Objects.equals(scooter, that.scooter) && Objects.equals(system, that.system) && Objects.equals(itineraryFilter, that.itineraryFilter) ); @@ -164,6 +184,7 @@ public int hashCode() { wheelchair, bike, car, + scooter, system, itineraryFilter ); @@ -179,6 +200,7 @@ public static class Builder { private WheelchairPreferences wheelchair = null; private BikePreferences bike = null; private CarPreferences car = null; + private ScooterPreferences scooter = null; private SystemPreferences system = null; private ItineraryFilterPreferences itineraryFilter = null; @@ -259,6 +281,15 @@ public Builder withCar(Consumer body) { return this; } + public ScooterPreferences scooter() { + return scooter == null ? original.scooter : scooter; + } + + public Builder withScooter(Consumer body) { + this.scooter = ifNotNull(this.scooter, original.scooter).copyOf().apply(body).build(); + return this; + } + public SystemPreferences system() { return system == null ? original.system : system; } diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java b/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java index 4a18aae03c2..385b347d24a 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java @@ -53,7 +53,10 @@ public State[] traverse(State s0) { } var preferences = s0.getPreferences().rental(s0.getRequest().mode()); - if (vehicleRentalPlaceVertex.getStation().networkIsNotAllowed(preferences)) { + // preferences will be null while finding nearest places with WALK mode + if ( + preferences != null && vehicleRentalPlaceVertex.getStation().networkIsNotAllowed(preferences) + ) { return State.empty(); } diff --git a/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java b/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java index 1e3594ee04b..ca33396b0a3 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java +++ b/src/main/java/org/opentripplanner/street/model/edge/StreetEdge.java @@ -234,8 +234,9 @@ public double calculateSpeed( case WALK -> walkingBike ? preferences.bike().walking().speed() : preferences.walk().speed(); - case BICYCLE, SCOOTER -> preferences.bike().speed(); + case BICYCLE -> preferences.bike().speed(); case CAR -> getCarSpeed(); + case SCOOTER -> preferences.scooter().speed(); case FLEX -> throw new IllegalArgumentException("getSpeed(): Invalid mode " + traverseMode); }; @@ -1098,7 +1099,7 @@ private StateEditor doTraverse(State s0, TraverseMode traverseMode, boolean walk var traversalCosts = switch (traverseMode) { - case BICYCLE, SCOOTER -> bicycleTraversalCost(preferences, speed); + case BICYCLE, SCOOTER -> bicycleOrScooterTraversalCost(preferences, traverseMode, speed); case WALK -> walkingTraversalCosts( preferences, traverseMode, @@ -1213,10 +1214,17 @@ private TraversalCosts otherTraversalCosts( } @Nonnull - private TraversalCosts bicycleTraversalCost(RoutingPreferences pref, double speed) { + private TraversalCosts bicycleOrScooterTraversalCost( + RoutingPreferences pref, + TraverseMode mode, + double speed + ) { double time = getEffectiveBikeDistance() / speed; double weight; - switch (pref.bike().optimizeType()) { + var optimizeType = mode == TraverseMode.BICYCLE + ? pref.bike().optimizeType() + : pref.scooter().optimizeType(); + switch (optimizeType) { case SAFEST_STREETS -> { weight = bicycleSafetyFactor * getDistanceMeters() / speed; if (bicycleSafetyFactor <= SAFEST_STREETS_SAFETY_FACTOR) { @@ -1232,20 +1240,17 @@ private TraversalCosts bicycleTraversalCost(RoutingPreferences pref, double spee double quick = getEffectiveBikeDistance(); double safety = getEffectiveBicycleSafetyDistance(); double slope = getEffectiveBikeDistanceForWorkCost(); - weight = - quick * - pref.bike().optimizeTriangle().time() + - slope * - pref.bike().optimizeTriangle().slope() + - safety * - pref.bike().optimizeTriangle().safety(); + var triangle = mode == TraverseMode.BICYCLE + ? pref.bike().optimizeTriangle() + : pref.scooter().optimizeTriangle(); + weight = quick * triangle.time() + slope * triangle.slope() + safety * triangle.safety(); weight /= speed; } default -> weight = getDistanceMeters() / speed; } var reluctance = StreetEdgeReluctanceCalculator.computeReluctance( pref, - TraverseMode.BICYCLE, + mode, false, isStairs() ); diff --git a/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeReluctanceCalculator.java b/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeReluctanceCalculator.java index ee2f3d833ee..a6fdf4ce6f1 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeReluctanceCalculator.java +++ b/src/main/java/org/opentripplanner/street/model/edge/StreetEdgeReluctanceCalculator.java @@ -25,6 +25,7 @@ static double computeReluctance( case WALK -> walkingBike ? pref.bike().walking().reluctance() : pref.walk().reluctance(); case BICYCLE -> pref.bike().reluctance(); case CAR -> pref.car().reluctance(); + case SCOOTER -> pref.scooter().reluctance(); default -> throw new IllegalArgumentException( "getReluctance(): Invalid mode " + traverseMode ); diff --git a/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java b/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java index df5b24a5928..dabd70bf28d 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java +++ b/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java @@ -137,13 +137,13 @@ else if ( @Nonnull private State[] buildState(State s0, StateEditor s1, RoutingPreferences pref) { - var rentalPreferences = s0.getRequest().preferences().rental(s0.getRequest().mode()); - if ( - s0.isRentingVehicleFromStation() && - s0.mayKeepRentedVehicleAtDestination() && - rentalPreferences.allowArrivingInRentedVehicleAtDestination() - ) { - s1.incrementWeight(rentalPreferences.arrivingInRentalVehicleAtDestinationCost().toSeconds()); + if (s0.isRentingVehicleFromStation() && s0.mayKeepRentedVehicleAtDestination()) { + var rentalPreferences = s0.getRequest().preferences().rental(s0.getRequest().mode()); + if (rentalPreferences.allowArrivingInRentedVehicleAtDestination()) { + s1.incrementWeight( + rentalPreferences.arrivingInRentalVehicleAtDestinationCost().toSeconds() + ); + } } s1.setBackMode(null); diff --git a/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java b/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java index d825a8fcbea..e93c6523d89 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java +++ b/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java @@ -42,13 +42,13 @@ public State[] traverse(State s0) { s1.incrementWeight(1); s1.setBackMode(null); - var rentalPreferences = s0.getPreferences().rental(s0.getRequest().mode()); - if ( - s0.isRentingVehicleFromStation() && - s0.mayKeepRentedVehicleAtDestination() && - rentalPreferences.allowArrivingInRentedVehicleAtDestination() - ) { - s1.incrementWeight(rentalPreferences.arrivingInRentalVehicleAtDestinationCost().toSeconds()); + if (s0.isRentingVehicleFromStation() && s0.mayKeepRentedVehicleAtDestination()) { + var rentalPreferences = s0.getPreferences().rental(s0.getRequest().mode()); + if (rentalPreferences.allowArrivingInRentedVehicleAtDestination()) { + s1.incrementWeight( + rentalPreferences.arrivingInRentalVehicleAtDestinationCost().toSeconds() + ); + } } return s1.makeStateArray(); diff --git a/src/main/java/org/opentripplanner/street/search/state/StateData.java b/src/main/java/org/opentripplanner/street/search/state/StateData.java index cc2bfa5a57a..d1db14d91f4 100644 --- a/src/main/java/org/opentripplanner/street/search/state/StateData.java +++ b/src/main/java/org/opentripplanner/street/search/state/StateData.java @@ -87,7 +87,9 @@ public static List getInitialStateDatas( return getInitialStateDatas( request.mode(), request.arriveBy(), - rentalPreferences.allowArrivingInRentedVehicleAtDestination(), + rentalPreferences != null + ? rentalPreferences.allowArrivingInRentedVehicleAtDestination() + : false, stateDataConstructor ); } @@ -102,7 +104,9 @@ public static StateData getBaseCaseStateData(StreetSearchRequest request) { var stateDatas = getInitialStateDatas( request.mode(), request.arriveBy(), - rentalPreferences.allowArrivingInRentedVehicleAtDestination(), + rentalPreferences != null + ? rentalPreferences.allowArrivingInRentedVehicleAtDestination() + : false, StateData::new ); diff --git a/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java b/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java index e43278901d4..7bccdbb94df 100644 --- a/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java +++ b/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java @@ -55,6 +55,9 @@ private double getStreetSpeedUpperBound(RoutingPreferences preferences, StreetMo if (streetMode.includesBiking()) { return preferences.bike().speed(); } + if (streetMode.includesScooter()) { + return preferences.scooter().speed(); + } return preferences.walk().speed(); } From 07f9c170422760418d6fc7472994e38cd21c390c Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 18 Jan 2024 11:46:38 +0200 Subject: [PATCH 007/101] Add scooter preferences to router-config --- docs/RouteRequest.md | 108 ++++++++++++++++++ docs/RouterConfiguration.md | 18 +++ .../routerequest/RouteRequestConfig.java | 38 ++++++ .../standalone/config/router-config.json | 18 +++ 4 files changed, 182 insertions(+) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 199eda8a332..0bdae72fd30 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -125,6 +125,30 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe |       [costLimitFunction](#rd_if_transitGeneralizedCostLimit_costLimitFunction) | `cost-linear-function` | The base function used by the filter. | *Optional* | `"15m + 1.50 t"` | 2.2 | |       [intervalRelaxFactor](#rd_if_transitGeneralizedCostLimit_intervalRelaxFactor) | `double` | How much the filter should be relaxed for itineraries that do not overlap in time. | *Optional* | `0.4` | 2.2 | | [maxDirectStreetDurationForMode](#rd_maxDirectStreetDurationForMode) | `enum map of duration` | Limit direct route duration per street mode. | *Optional* | | 2.2 | +| scooter | `object` | Scooter preferences. | *Optional* | | 2.5 | +|    [optimization](#rd_scooter_optimization) | `enum` | The set of characteristics that the user wants to optimize for. | *Optional* | `"safe-streets"` | 2.0 | +|    reluctance | `double` | A multiplier for how bad scooter travel is, compared to being in transit for equal lengths of time. | *Optional* | `2.0` | 2.0 | +|    speed | `double` | Max scooter speed along streets, in meters per second | *Optional* | `5.0` | 2.0 | +|    rental | `object` | Vehicle rental options | *Optional* | | 2.3 | +|       allowKeepingAtDestination | `boolean` | If a vehicle should be allowed to be kept at the end of a station-based rental. | *Optional* | `false` | 2.2 | +|       dropOffCost | `integer` | Cost to drop-off a rented vehicle. | *Optional* | `30` | 2.0 | +|       dropOffTime | `duration` | Time to drop-off a rented vehicle. | *Optional* | `"PT30S"` | 2.0 | +|       keepingAtDestinationCost | `integer` | The cost of arriving at the destination with the rented vehicle, to discourage doing so. | *Optional* | `0` | 2.2 | +|       pickupCost | `integer` | Cost to rent a vehicle. | *Optional* | `120` | 2.0 | +|       pickupTime | `duration` | Time to rent a vehicle. | *Optional* | `"PT1M"` | 2.0 | +|       useAvailabilityInformation | `boolean` | Whether or not vehicle rental availability information will be used to plan vehicle rental trips. | *Optional* | `false` | 2.0 | +|       [allowedNetworks](#rd_scooter_rental_allowedNetworks) | `string[]` | The vehicle rental networks which may be used. If empty all networks may be used. | *Optional* | | 2.1 | +|       [bannedNetworks](#rd_scooter_rental_bannedNetworks) | `string[]` | The vehicle rental networks which may not be used. If empty, no networks are banned. | *Optional* | | 2.1 | +|    [triangle](#rd_scooter_triangle) | `object` | Triangle optimization criteria. | *Optional* | | 2.5 | +|       flatness | `double` | Relative importance of flat terrain (range 0-1). | *Optional* | `0.0` | 2.0 | +|       [safety](#rd_scooter_triangle_safety) | `double` | Relative importance of safety (range 0-1). | *Optional* | `0.0` | 2.0 | +|       time | `double` | Relative importance of duration of travel (range 0-1). | *Optional* | `0.0` | 2.0 | +|    walk | `object` | Preferences for walking a vehicle. | *Optional* | | 2.5 | +|       [hopCost](#rd_scooter_walk_hopCost) | `integer` | The cost of hopping on or off a vehicle. | *Optional* | `0` | 2.0 | +|       [hopTime](#rd_scooter_walk_hopTime) | `duration` | The time it takes the user to hop on or off a vehicle in seconds. | *Optional* | `"PT0S"` | 2.0 | +|       reluctance | `double` | A multiplier for how bad walking with a vehicle is, compared to being in transit for equal lengths of time. | *Optional* | `5.0` | 2.1 | +|       speed | `double` | The user's vehicle walking speed in meters/second. Defaults to approximately 3 MPH. | *Optional* | `1.33` | 2.1 | +|       stairsReluctance | `double` | How bad is it to walk the vehicle up/down a flight of stairs compared to taking a detour. | *Optional* | `10.0` | 2.3 | | [transferOptimization](#rd_transferOptimization) | `object` | Optimize where a transfer between to trip happens. | *Optional* | | 2.1 | |    [backTravelWaitTimeFactor](#rd_to_backTravelWaitTimeFactor) | `double` | To reduce back-travel we favor waiting, this reduces the cost of waiting. | *Optional* | `1.0` | 2.1 | |    [extraStopBoardAlightCostsFactor](#rd_to_extraStopBoardAlightCostsFactor) | `double` | Add an extra board- and alight-cost for prioritized stops. | *Optional* | `0.0` | 2.1 | @@ -827,6 +851,72 @@ Override the settings in `maxDirectStreetDuration` for specific street modes. Th done because some street modes searches are much more resource intensive than others. +

optimization

+ +**Since version:** `2.0` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"safe-streets"` +**Path:** /routingDefaults/scooter +**Enum values:** `shortest-duration` | `safe-streets` | `flat-streets` | `safest-streets` | `triangle` + +The set of characteristics that the user wants to optimize for. + +If the triangle optimization is used, it's enough to just define the triangle parameters + +

allowedNetworks

+ +**Since version:** `2.1` ∙ **Type:** `string[]` ∙ **Cardinality:** `Optional` +**Path:** /routingDefaults/scooter/rental + +The vehicle rental networks which may be used. If empty all networks may be used. + +

bannedNetworks

+ +**Since version:** `2.1` ∙ **Type:** `string[]` ∙ **Cardinality:** `Optional` +**Path:** /routingDefaults/scooter/rental + +The vehicle rental networks which may not be used. If empty, no networks are banned. + +

triangle

+ +**Since version:** `2.5` ∙ **Type:** `object` ∙ **Cardinality:** `Optional` +**Path:** /routingDefaults/scooter + +Triangle optimization criteria. + +Optimization type doesn't need to be defined if these values are defined. + +

safety

+ +**Since version:** `2.0` ∙ **Type:** `double` ∙ **Cardinality:** `Optional` ∙ **Default value:** `0.0` +**Path:** /routingDefaults/scooter/triangle + +Relative importance of safety (range 0-1). + +This factor can also include other concerns such as convenience and general cyclist +preferences by taking into account road surface etc. + + +

hopCost

+ +**Since version:** `2.0` ∙ **Type:** `integer` ∙ **Cardinality:** `Optional` ∙ **Default value:** `0` +**Path:** /routingDefaults/scooter/walk + +The cost of hopping on or off a vehicle. + +There are different parameters for the cost of renting or parking a vehicle and this is +not meant for controlling the cost of those events. + + +

hopTime

+ +**Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` +**Path:** /routingDefaults/scooter/walk + +The time it takes the user to hop on or off a vehicle in seconds. + +Time it takes to rent or park a vehicle have their own parameters and this is not meant +for controlling the duration of those events. + +

transferOptimization

**Since version:** `2.1` ∙ **Type:** `object` ∙ **Cardinality:** `Optional` @@ -1093,6 +1183,24 @@ include stairs as a last result. "cost" : 600 } }, + "scooter" : { + "speed" : 5, + "reluctance" : 5.0, + "walk" : { + "reluctance" : 10.0, + "stairsReluctance" : 150.0 + }, + "rental" : { + "pickupCost" : 120, + "dropOffTime" : "30s", + "dropOffCost" : 30 + }, + "triangle" : { + "safety" : 0.4, + "flatness" : 0.3, + "time" : 0.3 + } + }, "walk" : { "speed" : 1.3, "reluctance" : 4.0, diff --git a/docs/RouterConfiguration.md b/docs/RouterConfiguration.md index 23e2e3763d4..dfe3c3f9750 100644 --- a/docs/RouterConfiguration.md +++ b/docs/RouterConfiguration.md @@ -496,6 +496,24 @@ Used to group requests when monitoring OTP. "cost" : 600 } }, + "scooter" : { + "speed" : 5, + "reluctance" : 5.0, + "walk" : { + "reluctance" : 10.0, + "stairsReluctance" : 150.0 + }, + "rental" : { + "pickupCost" : 120, + "dropOffTime" : "30s", + "dropOffCost" : 30 + }, + "triangle" : { + "safety" : 0.4, + "flatness" : 0.3, + "time" : 0.3 + } + }, "walk" : { "speed" : 1.3, "reluctance" : 4.0, diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 4538f6de84d..ac2a73aead4 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -24,6 +24,7 @@ import org.opentripplanner.routing.api.request.preference.BikePreferences; import org.opentripplanner.routing.api.request.preference.CarPreferences; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; +import org.opentripplanner.routing.api.request.preference.ScooterPreferences; import org.opentripplanner.routing.api.request.preference.StreetPreferences; import org.opentripplanner.routing.api.request.preference.SystemPreferences; import org.opentripplanner.routing.api.request.preference.TransitPreferences; @@ -181,6 +182,7 @@ private static void mapPreferences(NodeAdapter c, RoutingPreferences.Builder pre preferences.withBike(it -> mapBikePreferences(c, it)); preferences.withStreet(it -> mapStreetPreferences(c, it)); preferences.withCar(it -> mapCarPreferences(c, it)); + preferences.withScooter(it -> mapScooterPreferences(c, it)); preferences.withSystem(it -> mapSystemPreferences(c, it)); preferences.withTransfer(it -> mapTransferPreferences(c, it)); preferences.withWalk(it -> mapWalkPreferences(c, it)); @@ -621,6 +623,42 @@ private static void mapCarPreferences(NodeAdapter root, CarPreferences.Builder b .withRental(it -> mapRental(c, it)); } + private static void mapScooterPreferences(NodeAdapter root, ScooterPreferences.Builder builder) { + var dft = builder.original(); + NodeAdapter c = root.of("scooter").since(V2_5).summary("Scooter preferences.").asObject(); + builder + .withSpeed( + c + .of("speed") + .since(V2_0) + .summary("Max scooter speed along streets, in meters per second") + .asDouble(dft.speed()) + ) + .withReluctance( + c + .of("reluctance") + .since(V2_0) + .summary( + "A multiplier for how bad scooter travel is, compared to being in transit for equal lengths of time." + ) + .asDouble(dft.reluctance()) + ) + .withOptimizeType( + c + .of("optimization") + .since(V2_0) + .summary("The set of characteristics that the user wants to optimize for.") + .description( + "If the triangle optimization is used, it's enough to just define the triangle parameters" + ) + .asEnum(dft.optimizeType()) + ) + // triangle overrides the optimization type if defined + .withForcedOptimizeTriangle(it -> mapOptimizationTriangle(c, it)) + .withWalking(it -> mapVehicleWalking(c, it)) + .withRental(it -> mapRental(c, it)); + } + private static void mapSystemPreferences(NodeAdapter c, SystemPreferences.Builder builder) { var dft = builder.original(); builder diff --git a/src/test/resources/standalone/config/router-config.json b/src/test/resources/standalone/config/router-config.json index 863b9bec279..0a6cb6ee831 100644 --- a/src/test/resources/standalone/config/router-config.json +++ b/src/test/resources/standalone/config/router-config.json @@ -57,6 +57,24 @@ "cost": 600 } }, + "scooter": { + "speed": 5, + "reluctance": 5.0, + "walk": { + "reluctance": 10.0, + "stairsReluctance": 150.0 + }, + "rental": { + "pickupCost": 120, + "dropOffTime": "30s", + "dropOffCost": 30 + }, + "triangle": { + "safety": 0.4, + "flatness": 0.3, + "time": 0.3 + } + }, "walk": { "speed": 1.3, "reluctance": 4.0, From 545315c92c94462e521291f0bf5a660277d4c7d4 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 19 Jan 2024 15:14:33 +0200 Subject: [PATCH 008/101] Remove scooter walking preferences --- docs/RouteRequest.md | 28 ------------------- .../preference/ScooterPreferences.java | 22 ++------------- .../routerequest/RouteRequestConfig.java | 1 - .../standalone/config/router-config.json | 4 --- 4 files changed, 2 insertions(+), 53 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 0bdae72fd30..70fa0d26e49 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -143,12 +143,6 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe |       flatness | `double` | Relative importance of flat terrain (range 0-1). | *Optional* | `0.0` | 2.0 | |       [safety](#rd_scooter_triangle_safety) | `double` | Relative importance of safety (range 0-1). | *Optional* | `0.0` | 2.0 | |       time | `double` | Relative importance of duration of travel (range 0-1). | *Optional* | `0.0` | 2.0 | -|    walk | `object` | Preferences for walking a vehicle. | *Optional* | | 2.5 | -|       [hopCost](#rd_scooter_walk_hopCost) | `integer` | The cost of hopping on or off a vehicle. | *Optional* | `0` | 2.0 | -|       [hopTime](#rd_scooter_walk_hopTime) | `duration` | The time it takes the user to hop on or off a vehicle in seconds. | *Optional* | `"PT0S"` | 2.0 | -|       reluctance | `double` | A multiplier for how bad walking with a vehicle is, compared to being in transit for equal lengths of time. | *Optional* | `5.0` | 2.1 | -|       speed | `double` | The user's vehicle walking speed in meters/second. Defaults to approximately 3 MPH. | *Optional* | `1.33` | 2.1 | -|       stairsReluctance | `double` | How bad is it to walk the vehicle up/down a flight of stairs compared to taking a detour. | *Optional* | `10.0` | 2.3 | | [transferOptimization](#rd_transferOptimization) | `object` | Optimize where a transfer between to trip happens. | *Optional* | | 2.1 | |    [backTravelWaitTimeFactor](#rd_to_backTravelWaitTimeFactor) | `double` | To reduce back-travel we favor waiting, this reduces the cost of waiting. | *Optional* | `1.0` | 2.1 | |    [extraStopBoardAlightCostsFactor](#rd_to_extraStopBoardAlightCostsFactor) | `double` | Add an extra board- and alight-cost for prioritized stops. | *Optional* | `0.0` | 2.1 | @@ -895,28 +889,6 @@ This factor can also include other concerns such as convenience and general cycl preferences by taking into account road surface etc. -

hopCost

- -**Since version:** `2.0` ∙ **Type:** `integer` ∙ **Cardinality:** `Optional` ∙ **Default value:** `0` -**Path:** /routingDefaults/scooter/walk - -The cost of hopping on or off a vehicle. - -There are different parameters for the cost of renting or parking a vehicle and this is -not meant for controlling the cost of those events. - - -

hopTime

- -**Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` -**Path:** /routingDefaults/scooter/walk - -The time it takes the user to hop on or off a vehicle in seconds. - -Time it takes to rent or park a vehicle have their own parameters and this is not meant -for controlling the duration of those events. - -

transferOptimization

**Since version:** `2.1` ∙ **Type:** `object` ∙ **Cardinality:** `Optional` diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java index 10b9c01e686..7c139c08730 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java @@ -30,7 +30,6 @@ public final class ScooterPreferences implements Serializable { private final VehicleRentalPreferences rental; private final VehicleRoutingOptimizeType optimizeType; private final TimeSlopeSafetyTriangle optimizeTriangle; - private final VehicleWalkingPreferences walking; private ScooterPreferences() { this.speed = 5; @@ -38,7 +37,6 @@ private ScooterPreferences() { this.rental = VehicleRentalPreferences.DEFAULT; this.optimizeType = SAFE_STREETS; this.optimizeTriangle = TimeSlopeSafetyTriangle.DEFAULT; - this.walking = VehicleWalkingPreferences.DEFAULT; } private ScooterPreferences(Builder builder) { @@ -47,7 +45,6 @@ private ScooterPreferences(Builder builder) { this.rental = builder.rental; this.optimizeType = Objects.requireNonNull(builder.optimizeType); this.optimizeTriangle = Objects.requireNonNull(builder.optimizeTriangle); - this.walking = builder.walking; } public static ScooterPreferences.Builder of() { @@ -85,11 +82,6 @@ public TimeSlopeSafetyTriangle optimizeTriangle() { return optimizeTriangle; } - /** Scooter walking preferences that can be different per request */ - public VehicleWalkingPreferences walking() { - return walking; - } - @Override public boolean equals(Object o) { if (this == o) return true; @@ -100,14 +92,13 @@ public boolean equals(Object o) { doubleEquals(that.reluctance, reluctance) && Objects.equals(rental, that.rental) && optimizeType == that.optimizeType && - optimizeTriangle.equals(that.optimizeTriangle) && - Objects.equals(walking, that.walking) + optimizeTriangle.equals(that.optimizeTriangle) ); } @Override public int hashCode() { - return Objects.hash(speed, reluctance, rental, optimizeType, optimizeTriangle, walking); + return Objects.hash(speed, reluctance, rental, optimizeType, optimizeTriangle); } @Override @@ -119,7 +110,6 @@ public String toString() { .addObj("rental", rental, DEFAULT.rental) .addEnum("optimizeType", optimizeType, DEFAULT.optimizeType) .addObj("optimizeTriangle", optimizeTriangle, DEFAULT.optimizeTriangle) - .addObj("walking", walking, DEFAULT.walking) .toString(); } @@ -133,8 +123,6 @@ public static class Builder { private VehicleRoutingOptimizeType optimizeType; private TimeSlopeSafetyTriangle optimizeTriangle; - public VehicleWalkingPreferences walking; - public Builder(ScooterPreferences original) { this.original = original; this.speed = original.speed; @@ -142,7 +130,6 @@ public Builder(ScooterPreferences original) { this.rental = original.rental; this.optimizeType = original.optimizeType; this.optimizeTriangle = original.optimizeTriangle; - this.walking = original.walking; } public ScooterPreferences original() { @@ -203,11 +190,6 @@ public Builder withOptimizeTriangle(Consumer bo return this; } - public Builder withWalking(Consumer body) { - this.walking = ifNotNull(this.walking, original.walking).copyOf().apply(body).build(); - return this; - } - public Builder apply(Consumer body) { body.accept(this); return this; diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index ac2a73aead4..c0dcede55a7 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -655,7 +655,6 @@ private static void mapScooterPreferences(NodeAdapter root, ScooterPreferences.B ) // triangle overrides the optimization type if defined .withForcedOptimizeTriangle(it -> mapOptimizationTriangle(c, it)) - .withWalking(it -> mapVehicleWalking(c, it)) .withRental(it -> mapRental(c, it)); } diff --git a/src/test/resources/standalone/config/router-config.json b/src/test/resources/standalone/config/router-config.json index 0a6cb6ee831..a3082e0a13a 100644 --- a/src/test/resources/standalone/config/router-config.json +++ b/src/test/resources/standalone/config/router-config.json @@ -60,10 +60,6 @@ "scooter": { "speed": 5, "reluctance": 5.0, - "walk": { - "reluctance": 10.0, - "stairsReluctance": 150.0 - }, "rental": { "pickupCost": 120, "dropOffTime": "30s", From e28230f7d1e2113ece71e1ad6ee7202a37072885 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 19 Jan 2024 15:17:44 +0200 Subject: [PATCH 009/101] Improve tests --- .../api/request/preference/ScooterPreferencesTest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java index 4b6554cbe07..01a12ef5cbb 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/ScooterPreferencesTest.java @@ -17,12 +17,14 @@ class ScooterPreferencesTest { .build(); public static final VehicleRoutingOptimizeType OPTIMIZE_TYPE = VehicleRoutingOptimizeType.TRIANGLE; + public static final int RENTAL_PICKUP_TIME = 30; private final ScooterPreferences subject = ScooterPreferences .of() .withSpeed(SPEED) .withReluctance(RELUCTANCE) .withOptimizeType(OPTIMIZE_TYPE) + .withRental(rental -> rental.withPickupTime(RENTAL_PICKUP_TIME).build()) .withOptimizeTriangle(it -> it.withSlope(1).build()) .build(); @@ -46,6 +48,12 @@ void optimizeTriangle() { assertEquals(TRIANGLE, subject.optimizeTriangle()); } + @Test + void rental() { + var vehicleRental = VehicleRentalPreferences.of().withPickupTime(RENTAL_PICKUP_TIME).build(); + assertEquals(vehicleRental, subject.rental()); + } + @Test void testOfAndCopyOf() { // Return same object if no value is set @@ -68,6 +76,7 @@ void testToString() { "ScooterPreferences{" + "speed: 2.0, " + "reluctance: 1.2, " + + "rental: VehicleRentalPreferences{pickupTime: 30s}, " + "optimizeType: TRIANGLE, " + "optimizeTriangle: TimeSlopeSafetyTriangle[time=0.0, slope=1.0, safety=0.0]" + "}", From 9ae66d363fb71354c98a7e6ed1a429a899e1f512 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 19 Jan 2024 17:26:53 +0200 Subject: [PATCH 010/101] Set scooter preferences to be equal to bike preferences in apis --- docs/RouteRequest.md | 4 -- docs/RouterConfiguration.md | 4 -- .../resources/RequestToPreferencesMapper.java | 22 ++++++ .../apis/gtfs/mapping/RouteRequestMapper.java | 22 ++++++ .../transmodel/mapping/PreferencesMapper.java | 2 + .../preferences/ScooterPreferencesMapper.java | 36 ++++++++++ .../visualizer/GraphVisualizer.java | 6 ++ .../ScooterPreferencesMapperTest.java | 70 +++++++++++++++++++ .../module/osm/TriangleInequalityTest.java | 1 + .../routing/algorithm/TurnCostTest.java | 1 + 10 files changed, 160 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapper.java create mode 100644 src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapperTest.java diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 70fa0d26e49..d478bb01c6e 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -1158,10 +1158,6 @@ include stairs as a last result. "scooter" : { "speed" : 5, "reluctance" : 5.0, - "walk" : { - "reluctance" : 10.0, - "stairsReluctance" : 150.0 - }, "rental" : { "pickupCost" : 120, "dropOffTime" : "30s", diff --git a/docs/RouterConfiguration.md b/docs/RouterConfiguration.md index dfe3c3f9750..abf338c44e5 100644 --- a/docs/RouterConfiguration.md +++ b/docs/RouterConfiguration.md @@ -499,10 +499,6 @@ Used to group requests when monitoring OTP. "scooter" : { "speed" : 5, "reluctance" : 5.0, - "walk" : { - "reluctance" : 10.0, - "stairsReluctance" : 150.0 - }, "rental" : { "pickupCost" : 120, "dropOffTime" : "30s", diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index 2208ec13a14..009d1c03c1f 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -32,6 +32,7 @@ void map() { mapCar(); mapWalk(); mapBike(); + mapScooter(); var boardAndAlightSlack = mapTransit(); @@ -95,6 +96,27 @@ private void mapBike() { }); } + private void mapScooter() { + preferences.withScooter(scooter -> { + setIfNotNull(req.bikeSpeed, scooter::withSpeed); + setIfNotNull(req.bikeReluctance, scooter::withReluctance); + setIfNotNull( + req.bikeOptimizeType, + optimizeType -> scooter.withOptimizeType(LegacyVehicleRoutingOptimizeType.map(optimizeType)) + ); + + if (req.bikeOptimizeType == LegacyVehicleRoutingOptimizeType.TRIANGLE) { + scooter.withOptimizeTriangle(triangle -> { + setIfNotNull(req.triangleTimeFactor, triangle::withTime); + setIfNotNull(req.triangleSlopeFactor, triangle::withSlope); + setIfNotNull(req.triangleSafetyFactor, triangle::withSafety); + }); + } + + scooter.withRental(this::mapRental); + }); + } + private BoardAndAlightSlack mapTransit() { preferences.withTransit(tr -> { setIfNotNull(req.boardSlack, tr::withDefaultBoardSlackSec); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java index 5cdae33850f..d9a190ccf5d 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java @@ -98,6 +98,28 @@ public static RouteRequest toRouteRequest( car.withRental(rental -> setRentalPreferences(callWith, request, rental)); }); + preferences.withScooter(scooter -> { + callWith.argument("bikeReluctance", scooter::withReluctance); + callWith.argument("bikeSpeed", scooter::withSpeed); + + if (environment.getArgument("optimize") != null) { + scooter.withOptimizeType( + OptimizationTypeMapper.map( + GraphQLTypes.GraphQLOptimizeType.valueOf(environment.getArgument("optimize")) + ) + ); + } + if (scooter.optimizeType() == VehicleRoutingOptimizeType.TRIANGLE) { + scooter.withOptimizeTriangle(triangle -> { + callWith.argument("triangle.timeFactor", triangle::withTime); + callWith.argument("triangle.slopeFactor", triangle::withSlope); + callWith.argument("triangle.safetyFactor", triangle::withSafety); + }); + } + + scooter.withRental(rental -> setRentalPreferences(callWith, request, rental)); + }); + preferences.withWalk(b -> { callWith.argument("walkReluctance", b::withReluctance); callWith.argument("walkSpeed", b::withSpeed); diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java index 846437952e4..a86193553f2 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/PreferencesMapper.java @@ -3,6 +3,7 @@ import static org.opentripplanner.apis.transmodel.mapping.preferences.BikePreferencesMapper.mapBikePreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.CarPreferencesMapper.mapCarPreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.ItineraryFilterPreferencesMapper.mapItineraryFilterPreferences; +import static org.opentripplanner.apis.transmodel.mapping.preferences.ScooterPreferencesMapper.mapScooterPreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.StreetPreferencesMapper.mapStreetPreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.TransferPreferencesMapper.mapTransferPreferences; import static org.opentripplanner.apis.transmodel.mapping.preferences.TransitPreferencesMapper.mapTransitPreferences; @@ -24,6 +25,7 @@ static void mapPreferences( preferences.withWalk(walk -> mapWalkPreferences(walk, callWith)); preferences.withBike(bike -> mapBikePreferences(bike, callWith)); preferences.withCar(car -> mapCarPreferences(car, callWith)); + preferences.withScooter(scooter -> mapScooterPreferences(scooter, callWith)); preferences.withTransfer(transfer -> mapTransferPreferences(transfer, environment, callWith)); preferences.withTransit(transit -> mapTransitPreferences(transit, environment, callWith)); preferences.withItineraryFilter(itineraryFilter -> diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapper.java new file mode 100644 index 00000000000..d7d5c019f93 --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapper.java @@ -0,0 +1,36 @@ +package org.opentripplanner.apis.transmodel.mapping.preferences; + +import static org.opentripplanner.apis.transmodel.mapping.preferences.RentalPreferencesMapper.mapRentalPreferences; + +import org.opentripplanner.apis.transmodel.support.DataFetcherDecorator; +import org.opentripplanner.routing.api.request.preference.ScooterPreferences; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; + +public class ScooterPreferencesMapper { + + public static void mapScooterPreferences( + ScooterPreferences.Builder scooter, + DataFetcherDecorator callWith + ) { + callWith.argument("bikeSpeed", scooter::withSpeed); + callWith.argument("bicycleOptimisationMethod", scooter::withOptimizeType); + + // WALK reluctance is used for backwards compatibility, then overridden + callWith.argument( + "walkReluctance", + r -> { + scooter.withReluctance((double) r); + } + ); + + if (scooter.optimizeType() == VehicleRoutingOptimizeType.TRIANGLE) { + scooter.withOptimizeTriangle(triangle -> { + callWith.argument("triangleFactors.time", triangle::withTime); + callWith.argument("triangleFactors.slope", triangle::withSlope); + callWith.argument("triangleFactors.safety", triangle::withSafety); + }); + } + + scooter.withRental(rental -> mapRentalPreferences(rental, callWith)); + } +} diff --git a/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java b/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java index 338423df961..6ab7d86917c 100644 --- a/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java +++ b/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java @@ -490,6 +490,12 @@ protected void route(String from, String to) { // there should be a ui element for walk distance and optimize type .withOptimizeType(getSelectedOptimizeType()) ); + preferences.withScooter(scooter -> + scooter + .withSpeed(Float.parseFloat(bikeSpeed.getText())) + // there should be a ui element for walk distance and optimize type + .withOptimizeType(getSelectedOptimizeType()) + ); }); System.out.println("--------"); diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapperTest.java new file mode 100644 index 00000000000..2b5c7563ac2 --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/preferences/ScooterPreferencesMapperTest.java @@ -0,0 +1,70 @@ +package org.opentripplanner.apis.transmodel.mapping.preferences; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.opentripplanner.apis.transmodel.mapping.preferences.ScooterPreferencesMapper.mapScooterPreferences; + +import java.util.List; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.apis.transmodel._support.TestDataFetcherDecorator; +import org.opentripplanner.routing.api.request.preference.ScooterPreferences; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; + +class ScooterPreferencesMapperTest { + + static List mapScooterPreferencesTestCases() { + return List.of( + Arguments.of("walkReluctance", 10.0, "ScooterPreferences{reluctance: 10.0}"), + Arguments.of("bikeSpeed", 10.0, "ScooterPreferences{speed: 10.0}"), + Arguments.of( + "bicycleOptimisationMethod", + VehicleRoutingOptimizeType.TRIANGLE, + "ScooterPreferences{optimizeType: TRIANGLE}" + ), + // No effect unless BicycleOptimize is TRIANGLE + Arguments.of("triangleFactors.time", 0.17, "ScooterPreferences{}"), + Arguments.of("triangleFactors.slope", 0.12, "ScooterPreferences{}"), + Arguments.of("triangleFactors.safety", 0.13, "ScooterPreferences{}") + ); + } + + @ParameterizedTest + @MethodSource("mapScooterPreferencesTestCases") + void testMapScooterPreferences(String field, Object value, String expected) { + var preferences = ScooterPreferences.of(); + mapScooterPreferences(preferences, TestDataFetcherDecorator.of(field, value)); + assertEquals(expected, preferences.build().toString()); + } + + static List mapScooterPreferencesOptimizeTriangleTestCases() { + return List.of( + Arguments.of( + "triangleFactors.time", + 0.17, + "TimeSlopeSafetyTriangle[time=1.0, slope=0.0, safety=0.0]" + ), + Arguments.of( + "triangleFactors.slope", + 0.12, + "TimeSlopeSafetyTriangle[time=0.0, slope=1.0, safety=0.0]" + ), + Arguments.of( + "triangleFactors.safety", + 0.13, + "TimeSlopeSafetyTriangle[time=0.0, slope=0.0, safety=1.0]" + ) + ); + } + + @ParameterizedTest + @MethodSource("mapScooterPreferencesOptimizeTriangleTestCases") + void testMapScooterPreferencesOptimizeTriangle(String field, Object value, String expected) { + var preferences = ScooterPreferences.of().withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE); + mapScooterPreferences(preferences, TestDataFetcherDecorator.of(field, value)); + assertEquals( + "ScooterPreferences{optimizeType: TRIANGLE, optimizeTriangle: " + expected + "}", + preferences.build().toString() + ); + } +} diff --git a/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java b/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java index 4cdada95e4b..52069a7a72e 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/osm/TriangleInequalityTest.java @@ -182,6 +182,7 @@ private void checkTriangleInequality(RequestModes modes, List fil .withStreet(street -> street.withTurnReluctance(1.0)) .withCar(car -> car.withSpeed(1.0).withReluctance(1.0)) .withBike(bike -> bike.withSpeed(1.0).withReluctance(1.0)) + .withScooter(scooter -> scooter.withSpeed(1.0).withReluctance(1.0)) ); if (modes != null) { diff --git a/src/test/java/org/opentripplanner/routing/algorithm/TurnCostTest.java b/src/test/java/org/opentripplanner/routing/algorithm/TurnCostTest.java index 53e340dcc63..dfb062226a4 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/TurnCostTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/TurnCostTest.java @@ -94,6 +94,7 @@ public void before() { preferences .withCar(it -> it.withSpeed(1.0).withReluctance(1.0)) .withBike(bike -> bike.withSpeed(1.0).withReluctance(1.0)) + .withScooter(scooter -> scooter.withSpeed(1.0).withReluctance(1.0)) .withWalk(walk -> walk.withSpeed(1.0).withStairsReluctance(1.0).withReluctance(1.0)) .withStreet(it -> it.withTurnReluctance(1.0)) ); From b22d9e406da07635bab51956149f6ee0f43f1526 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 19 Jan 2024 17:27:36 +0200 Subject: [PATCH 011/101] Disable scooter arrival to destination in access requests --- .../routing/algorithm/raptoradapter/router/TransitRouter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java index 1b5c836c832..62b655cfc18 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java @@ -232,6 +232,8 @@ private Collection fetchAccessEgresses(AccessEgressType typ accessRequest.withPreferences(p -> { p.withBike(b -> b.withRental(r -> r.withAllowArrivingInRentedVehicleAtDestination(false))); p.withCar(c -> c.withRental(r -> r.withAllowArrivingInRentedVehicleAtDestination(false))); + p.withScooter(s -> s.withRental(r -> r.withAllowArrivingInRentedVehicleAtDestination(false)) + ); }); } From 3d38d4a15932c58fb82bdc67882fc294d2d8b615 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 19 Jan 2024 17:40:05 +0200 Subject: [PATCH 012/101] Move class to correct package --- .../ext/restapi}/mapping/LegacyVehicleRoutingOptimizeType.java | 2 +- .../ext/restapi/resources/RequestToPreferencesMapper.java | 2 +- .../opentripplanner/ext/restapi/resources/RoutingResource.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/LegacyVehicleRoutingOptimizeType.java (93%) diff --git a/src/main/java/org/opentripplanner/api/mapping/LegacyVehicleRoutingOptimizeType.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java similarity index 93% rename from src/main/java/org/opentripplanner/api/mapping/LegacyVehicleRoutingOptimizeType.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java index 0cb2ae38bcc..675e8541048 100644 --- a/src/main/java/org/opentripplanner/api/mapping/LegacyVehicleRoutingOptimizeType.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index 009d1c03c1f..91e7b790ba7 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -2,7 +2,7 @@ import jakarta.validation.constraints.NotNull; import java.util.function.Consumer; -import org.opentripplanner.api.mapping.LegacyVehicleRoutingOptimizeType; +import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.framework.lang.ObjectUtils; import org.opentripplanner.routing.algorithm.filterchain.api.TransitGeneralizedCostFilterParams; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java index 53464940a9e..1d985f0e555 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java @@ -18,9 +18,9 @@ import javax.xml.datatype.DatatypeConstants; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; -import org.opentripplanner.api.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.api.parameter.QualifiedModeSet; import org.opentripplanner.ext.dataoverlay.api.DataOverlayParameters; +import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.framework.time.DurationUtils; From 242b3fbbf694ab550985963ac14859fdaee6abea Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 19 Jan 2024 18:09:21 +0100 Subject: [PATCH 013/101] Return agencies and feed publisher in geocoding --- docs/apis/Apis.md | 2 +- docs/sandbox/GeocoderAPI.md | 8 ++--- .../ext/geocoder/LuceneIndexTest.java | 1 + .../ext/geocoder/GeocoderResource.java | 24 ++++++++------ .../ext/geocoder/LuceneIndex.java | 28 ++++++++++++---- .../ext/geocoder/StopCluster.java | 15 ++++++++- .../ext/geocoder/StopClusterMapper.java | 32 +++++++++++++++++-- .../opentripplanner/apis/APIEndpoints.java | 2 ++ .../service/DefaultTransitService.java | 5 +++ .../transit/service/TransitService.java | 2 ++ 10 files changed, 96 insertions(+), 23 deletions(-) diff --git a/docs/apis/Apis.md b/docs/apis/Apis.md index 48b530a57e1..d9f0467bbca 100644 --- a/docs/apis/Apis.md +++ b/docs/apis/Apis.md @@ -18,7 +18,7 @@ entities on a vector map. The [Actuator API](../sandbox/ActuatorAPI.md) provides endpoints for checking the health status of the OTP instance and reading live application metrics. -The [Geocoder API](../sandbox/GeocoderAPI.md) allows you to geocode street corners and stop names. +The [Geocoder API](../sandbox/GeocoderAPI.md) allows you to geocode stop names and codes. ## Legacy APIs (to be removed) diff --git a/docs/sandbox/GeocoderAPI.md b/docs/sandbox/GeocoderAPI.md index 0405724fff6..f7a1be3f293 100644 --- a/docs/sandbox/GeocoderAPI.md +++ b/docs/sandbox/GeocoderAPI.md @@ -26,7 +26,7 @@ To enable this you need to add the feature to `otp-config.json`. The required geocode API for Stop and From/To searches in the debug client. -Path: `/otp/routers/{routerId}/geocode` +Path: `/otp/geocode` It supports the following URL parameters: @@ -40,12 +40,12 @@ It supports the following URL parameters: #### Stop clusters A stop cluster is a deduplicated groups of stops. This means that for any stop that has a parent -station only the parent is returned and for stops that have identical names and are very close +station only the parent is returned and for stops that have _identical_ names and are very close to each other, only one is returned. -This is useful for a general purpose fuzzy "stop" search. +This is useful for a general purpose fuzzy stop search. -Path: `/otp/routers/{routerId}/geocode/stopClusters` +Path: `/otp/geocode/stopClusters` It supports the following URL parameters: diff --git a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java index 371bcb249b6..178b8b6fd67 100644 --- a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java @@ -105,6 +105,7 @@ static void setup() { .of(ALEXANDERPLATZ_STATION, BERLIN_HAUPTBAHNHOF_STATION, FIVE_POINTS_STATION) .forEach(stopModel::withStation); var transitModel = new TransitModel(stopModel.build(), new Deduplicator()); + transitModel.index(); var transitService = new DefaultTransitService(transitModel) { private final Multimap modes = ImmutableMultimap .builder() diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java b/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java index 39ed6da297c..f5d1f950632 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java @@ -21,24 +21,30 @@ /** * OTP simple built-in geocoder used by the debug client. */ -@Path("/routers/{ignoreRouterId}/geocode") +@Path("/geocode") @Produces(MediaType.APPLICATION_JSON) public class GeocoderResource { private final OtpServerRequestContext serverContext; - /** - * @deprecated The support for multiple routers are removed from OTP2. See - * https://github.com/opentripplanner/OpenTripPlanner/issues/2760 - */ - @Deprecated - @PathParam("ignoreRouterId") - private String ignoreRouterId; - public GeocoderResource(@Context OtpServerRequestContext requestContext) { serverContext = requestContext; } + /** + * This class is only here for backwards-compatibility. It will be removed in the future. + */ + @Path("/routers/{ignoreRouterId}/geocode") + public static class GeocoderResourceOldPath extends GeocoderResource { + + public GeocoderResourceOldPath( + @Context OtpServerRequestContext serverContext, + @PathParam("ignoreRouterId") String ignore + ) { + super(serverContext); + } + } + /** * Geocode using data using the OTP graph for stops, clusters and street names * diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java index 71b0cf67b34..e390c900377 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java @@ -42,7 +42,6 @@ import org.apache.lucene.store.ByteBuffersDirectory; import org.opentripplanner.ext.geocoder.StopCluster.Coordinate; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.StopLocation; @@ -67,6 +66,7 @@ public class LuceneIndex implements Serializable { public LuceneIndex(TransitService transitService) { this.transitService = transitService; + var stopClusterMapper = new StopClusterMapper(transitService); this.analyzer = new PerFieldAnalyzerWrapper( @@ -80,7 +80,6 @@ public LuceneIndex(TransitService transitService) { var directory = new ByteBuffersDirectory(); - var stopClusterMapper = new StopClusterMapper(transitService); try { try ( var directoryWriter = new IndexWriter( @@ -128,7 +127,7 @@ public LuceneIndex(TransitService transitService) { directoryWriter, StopCluster.class, stopCluster.id().toString(), - new NonLocalizedString(stopCluster.name()), + I18NString.of(stopCluster.name()), stopCluster.code(), stopCluster.coordinate().lat(), stopCluster.coordinate().lon(), @@ -176,17 +175,34 @@ public Stream queryStopLocationGroups(String query, boolean * one of those is chosen at random and returned. */ public Stream queryStopClusters(String query) { - return matchingDocuments(StopCluster.class, query, false).map(LuceneIndex::toStopCluster); + return matchingDocuments(StopCluster.class, query, false).map(this::toStopCluster); } - private static StopCluster toStopCluster(Document document) { + private StopCluster toStopCluster(Document document) { var id = FeedScopedId.parse(document.get(ID)); var name = document.get(NAME); var code = document.get(CODE); var lat = document.getField(LAT).numericValue().doubleValue(); var lon = document.getField(LON).numericValue().doubleValue(); var modes = Arrays.asList(document.getValues(MODE)); - return new StopCluster(id, code, name, new Coordinate(lat, lon), modes); + var stopLocation = transitService.getStopLocation(id); + var agencies = transitService + .getAgenciesForStopLocation(stopLocation) + .stream() + .map(StopClusterMapper::toAgency) + .toList(); + var feedPublisher = StopClusterMapper.toFeedPublisher( + transitService.getFeedInfo(id.getFeedId()) + ); + return new StopCluster( + id, + code, + name, + new Coordinate(lat, lon), + modes, + agencies, + feedPublisher + ); } static IndexWriterConfig iwcWithSuggestField(Analyzer analyzer, final Set suggestFields) { diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/StopCluster.java b/src/ext/java/org/opentripplanner/ext/geocoder/StopCluster.java index afb60960ed4..8ffd44511fd 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/StopCluster.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/StopCluster.java @@ -1,6 +1,7 @@ package org.opentripplanner.ext.geocoder; import java.util.Collection; +import java.util.List; import javax.annotation.Nullable; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -18,10 +19,22 @@ record StopCluster( @Nullable String code, String name, Coordinate coordinate, - Collection modes + Collection modes, + List agencies, + @Nullable FeedPublisher feedPublisher ) { /** * Easily serializable version of a coordinate */ public record Coordinate(double lat, double lon) {} + + /** + * Easily serializable version of an agency + */ + public record Agency(FeedScopedId id, String name) {} + + /** + * Easily serializable version of a feed publisher + */ + public record FeedPublisher(String name) {} } diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java index bc2f4f7022b..186d6d6b57e 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java @@ -6,6 +6,8 @@ import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; +import org.opentripplanner.model.FeedInfo; +import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.site.StopLocationsGroup; import org.opentripplanner.transit.service.TransitService; @@ -62,7 +64,15 @@ StopCluster map(StopLocationsGroup g) { null, g.getName().toString(), toCoordinate(g.getCoordinate()), - modes + modes, + g + .getChildStops() + .stream() + .flatMap(sl -> transitService.getAgenciesForStopLocation(sl).stream()) + .distinct() + .map(StopClusterMapper::toAgency) + .toList(), + toFeedPublisher(transitService.getFeedInfo(g.getId().getFeedId())) ); } @@ -76,7 +86,13 @@ Optional map(StopLocation sl) { sl.getCode(), name.toString(), toCoordinate(sl.getCoordinate()), - modes + modes, + transitService + .getAgenciesForStopLocation(sl) + .stream() + .map(StopClusterMapper::toAgency) + .toList(), + toFeedPublisher(transitService.getFeedInfo(sl.getId().getFeedId())) ); }); } @@ -85,5 +101,17 @@ private static StopCluster.Coordinate toCoordinate(WgsCoordinate c) { return new StopCluster.Coordinate(c.latitude(), c.longitude()); } + static StopCluster.Agency toAgency(Agency a) { + return new StopCluster.Agency(a.getId(), a.getName()); + } + + static StopCluster.FeedPublisher toFeedPublisher(FeedInfo fi) { + if (fi == null) { + return null; + } else { + return new StopCluster.FeedPublisher(fi.getPublisherName()); + } + } + private record DeduplicationKey(I18NString name, WgsCoordinate coordinate) {} } diff --git a/src/main/java/org/opentripplanner/apis/APIEndpoints.java b/src/main/java/org/opentripplanner/apis/APIEndpoints.java index 68f6bda3d3a..555ea1659f1 100644 --- a/src/main/java/org/opentripplanner/apis/APIEndpoints.java +++ b/src/main/java/org/opentripplanner/apis/APIEndpoints.java @@ -61,6 +61,8 @@ private APIEndpoints() { addIfEnabled(SandboxAPIMapboxVectorTilesApi, VectorTilesResource.class); addIfEnabled(SandboxAPIParkAndRideApi, ParkAndRideResource.class); addIfEnabled(SandboxAPIGeocoder, GeocoderResource.class); + // scheduled to be removed and only here for backwards compatibility + addIfEnabled(SandboxAPIGeocoder, GeocoderResource.GeocoderResourceOldPath.class); addIfEnabled(SandboxAPITravelTime, TravelTimeResource.class); // scheduled to be removed diff --git a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java index 0d08bcf34b2..91d129e0a0c 100644 --- a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -572,6 +572,11 @@ public List getModesOfStopLocation(StopLocation stop) { return sortByOccurrenceAndReduce(getPatternModesOfStop(stop)).toList(); } + @Override + public List getAgenciesForStopLocation(StopLocation stop) { + return getRoutesForStop(stop).stream().map(Route::getAgency).distinct().toList(); + } + /** * For each pattern visiting this {@link StopLocation} return its {@link TransitMode} */ diff --git a/src/main/java/org/opentripplanner/transit/service/TransitService.java b/src/main/java/org/opentripplanner/transit/service/TransitService.java index d0664aa292d..5006ed93f30 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -215,4 +215,6 @@ List stopTimesForPatternAtStop( * So, if more patterns of mode BUS than RAIL visit the stop, the result will be [BUS,RAIL]. */ List getModesOfStopLocation(StopLocation stop); + + List getAgenciesForStopLocation(StopLocation stop); } From d4d7c5518f04318c0770d0d96924c49478c2e583 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 20 Jan 2024 09:13:51 +0100 Subject: [PATCH 014/101] Serialize agencies in Lucene index --- .../ext/geocoder/LuceneIndexTest.java | 13 ++++---- .../ext/geocoder/LuceneIndex.java | 31 +++++++++++------- .../ext/geocoder/LuceneStopCluster.java | 19 +++++++++++ .../ext/geocoder/StopClusterMapper.java | 32 +++++++------------ 4 files changed, 56 insertions(+), 39 deletions(-) create mode 100644 src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java diff --git a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java index 178b8b6fd67..01b62a63891 100644 --- a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java @@ -175,14 +175,15 @@ class StopClusters { } ) void stopClustersWithTypos(String searchTerm) { - var result1 = index.queryStopClusters(searchTerm).toList(); - assertEquals(List.of(mapper.map(ALEXANDERPLATZ_STATION)), result1); + var results = index.queryStopClusters(searchTerm).toList(); + var ids = results.stream().map(StopCluster::id).toList(); + assertEquals(List.of(ALEXANDERPLATZ_STATION.getId()), ids); } @Test void fuzzyStopClusters() { - var result1 = index.queryStopClusters("arts").toList(); - assertEquals(List.of(mapper.map(ARTS_CENTER).get()), result1); + var result1 = index.queryStopClusters("arts").map(StopCluster::id).toList(); + assertEquals(List.of(ARTS_CENTER.getId()), result1); } @Test @@ -221,8 +222,8 @@ void deduplicatedStopClusters() { } ) void stopClustersWithSpace(String query) { - var result = index.queryStopClusters(query).toList(); - assertEquals(List.of(mapper.map(FIVE_POINTS_STATION)), result); + var result = index.queryStopClusters(query).map(StopCluster::id).toList(); + assertEquals(List.of(FIVE_POINTS_STATION.getId()), result); } @ParameterizedTest diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java index e390c900377..26c4d34ce25 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java @@ -59,14 +59,16 @@ public class LuceneIndex implements Serializable { private static final String LAT = "latitude"; private static final String LON = "longitude"; private static final String MODE = "mode"; + private static final String AGENCY_IDS= "agency_ids"; private final TransitService transitService; private final Analyzer analyzer; private final SuggestIndexSearcher searcher; + private final StopClusterMapper stopClusterMapper; public LuceneIndex(TransitService transitService) { this.transitService = transitService; - var stopClusterMapper = new StopClusterMapper(transitService); + this.stopClusterMapper = new StopClusterMapper(transitService); this.analyzer = new PerFieldAnalyzerWrapper( @@ -98,6 +100,7 @@ public LuceneIndex(TransitService transitService) { stopLocation.getCode(), stopLocation.getCoordinate().latitude(), stopLocation.getCoordinate().longitude(), + Set.of(), Set.of() ) ); @@ -113,6 +116,7 @@ public LuceneIndex(TransitService transitService) { null, stopLocationsGroup.getCoordinate().latitude(), stopLocationsGroup.getCoordinate().longitude(), + Set.of(), Set.of() ) ); @@ -131,7 +135,8 @@ public LuceneIndex(TransitService transitService) { stopCluster.code(), stopCluster.coordinate().lat(), stopCluster.coordinate().lon(), - stopCluster.modes() + stopCluster.modes(), + stopCluster.agencies() ) ); } @@ -179,23 +184,21 @@ public Stream queryStopClusters(String query) { } private StopCluster toStopCluster(Document document) { - var id = FeedScopedId.parse(document.get(ID)); + var clusterId = FeedScopedId.parse(document.get(ID)); var name = document.get(NAME); var code = document.get(CODE); var lat = document.getField(LAT).numericValue().doubleValue(); var lon = document.getField(LON).numericValue().doubleValue(); var modes = Arrays.asList(document.getValues(MODE)); - var stopLocation = transitService.getStopLocation(id); - var agencies = transitService - .getAgenciesForStopLocation(stopLocation) - .stream() - .map(StopClusterMapper::toAgency) - .toList(); + var agencies = Arrays.stream(document.getValues(AGENCY_IDS)).map(id -> { + var fsid = FeedScopedId.parse(id); + return transitService.getAgencyForId(fsid); + }).filter(Objects::nonNull).map(StopClusterMapper::toAgency).toList(); var feedPublisher = StopClusterMapper.toFeedPublisher( - transitService.getFeedInfo(id.getFeedId()) + transitService.getFeedInfo(clusterId.getFeedId()) ); return new StopCluster( - id, + clusterId, code, name, new Coordinate(lat, lon), @@ -230,7 +233,8 @@ private static void addToIndex( @Nullable String code, double latitude, double longitude, - Collection modes + Collection modes, + Collection agencyIds ) { String typeName = type.getSimpleName(); @@ -251,6 +255,9 @@ private static void addToIndex( for (var mode : modes) { document.add(new TextField(MODE, mode, Store.YES)); } + for (var ids : agencyIds) { + document.add(new TextField(AGENCY_IDS, ids, Store.YES)); + } try { writer.addDocument(document); diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java new file mode 100644 index 00000000000..3f916186430 --- /dev/null +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java @@ -0,0 +1,19 @@ +package org.opentripplanner.ext.geocoder; + +import java.util.Collection; +import javax.annotation.Nullable; +import org.opentripplanner.transit.model.framework.FeedScopedId; + +/** + * A package-private helper type for transporting + */ +record LuceneStopCluster( + FeedScopedId id, + @Nullable + String code, + String name, + StopCluster.Coordinate coordinate, + Collection modes, + Collection agencies + ){ +} diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java index 186d6d6b57e..c1a6d216ff0 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java @@ -13,7 +13,7 @@ import org.opentripplanner.transit.service.TransitService; /** - * Mappers for generating {@link StopCluster} from the transit model. + * Mappers for generating {@link LuceneStopCluster} from the transit model. */ class StopClusterMapper { @@ -23,6 +23,7 @@ class StopClusterMapper { this.transitService = transitService; } + /** * De-duplicates collections of {@link StopLocation} and {@link StopLocationsGroup} into a stream * of {@link StopCluster}. @@ -31,7 +32,7 @@ class StopClusterMapper { * - of "identical" stops which are very close to each other and have an identical name, only one * is chosen (at random) */ - Iterable generateStopClusters( + Iterable generateStopClusters( Collection stopLocations, Collection stopLocationsGroups ) { @@ -57,42 +58,31 @@ Iterable generateStopClusters( return Iterables.concat(deduplicatedStops, stations); } - StopCluster map(StopLocationsGroup g) { + LuceneStopCluster map(StopLocationsGroup g) { var modes = transitService.getModesOfStopLocationsGroup(g).stream().map(Enum::name).toList(); - return new StopCluster( + var agencies = g.getChildStops().stream().flatMap(s -> transitService.getAgenciesForStopLocation(s).stream()).distinct().map(s ->s.getId().toString()).toList(); + return new LuceneStopCluster( g.getId(), null, g.getName().toString(), toCoordinate(g.getCoordinate()), modes, - g - .getChildStops() - .stream() - .flatMap(sl -> transitService.getAgenciesForStopLocation(sl).stream()) - .distinct() - .map(StopClusterMapper::toAgency) - .toList(), - toFeedPublisher(transitService.getFeedInfo(g.getId().getFeedId())) + agencies ); } - Optional map(StopLocation sl) { + Optional map(StopLocation sl) { + var agencies = transitService.getAgenciesForStopLocation(sl).stream().map(a -> a.getId().toString()).toList(); return Optional .ofNullable(sl.getName()) .map(name -> { var modes = transitService.getModesOfStopLocation(sl).stream().map(Enum::name).toList(); - return new StopCluster( + return new LuceneStopCluster( sl.getId(), sl.getCode(), name.toString(), toCoordinate(sl.getCoordinate()), - modes, - transitService - .getAgenciesForStopLocation(sl) - .stream() - .map(StopClusterMapper::toAgency) - .toList(), - toFeedPublisher(transitService.getFeedInfo(sl.getId().getFeedId())) + modes, agencies ); }); } From 8726b2fe10a7e48ed5de4e702b8cc3207897f22f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 20 Jan 2024 10:01:25 +0100 Subject: [PATCH 015/101] Add test for agencies --- .../ext/geocoder/LuceneIndexTest.java | 52 +++++++++++++++---- .../ext/geocoder/LuceneIndex.java | 18 ++++--- .../ext/geocoder/LuceneStopCluster.java | 6 +-- .../ext/geocoder/StopClusterMapper.java | 18 +++++-- 4 files changed, 69 insertions(+), 25 deletions(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java index 01b62a63891..348586377d4 100644 --- a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java @@ -18,6 +18,8 @@ import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; +import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; import org.opentripplanner.transit.model.site.StopLocation; @@ -28,57 +30,63 @@ class LuceneIndexTest { private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + static final Agency BVG = Agency + .of(id("bvg")) + .withName("BVG") + .withTimezone("Europe/Berlin") + .build(); + // Berlin - static Station BERLIN_HAUPTBAHNHOF_STATION = TEST_MODEL + static final Station BERLIN_HAUPTBAHNHOF_STATION = TEST_MODEL .station("Hauptbahnhof") .withCoordinate(52.52495, 13.36952) .build(); - static Station ALEXANDERPLATZ_STATION = TEST_MODEL + static final Station ALEXANDERPLATZ_STATION = TEST_MODEL .station("Alexanderplatz") .withCoordinate(52.52277, 13.41046) .build(); - static RegularStop ALEXANDERPLATZ_BUS = TEST_MODEL + static final RegularStop ALEXANDERPLATZ_BUS = TEST_MODEL .stop("Alexanderplatz Bus") .withCoordinate(52.52277, 13.41046) .withVehicleType(BUS) .withParentStation(ALEXANDERPLATZ_STATION) .build(); - static RegularStop ALEXANDERPLATZ_RAIL = TEST_MODEL + static final RegularStop ALEXANDERPLATZ_RAIL = TEST_MODEL .stop("Alexanderplatz S-Bahn") .withCoordinate(52.52157, 13.41123) .withVehicleType(TransitMode.RAIL) .withParentStation(ALEXANDERPLATZ_STATION) .build(); - static RegularStop LICHTERFELDE_OST_1 = TEST_MODEL + static final RegularStop LICHTERFELDE_OST_1 = TEST_MODEL .stop("Lichterfelde Ost") .withId(id("lichterfelde-gleis-1")) .withCoordinate(52.42986, 13.32808) .build(); - static RegularStop LICHTERFELDE_OST_2 = TEST_MODEL + static final RegularStop LICHTERFELDE_OST_2 = TEST_MODEL .stop("Lichterfelde Ost") .withId(id("lichterfelde-gleis-2")) .withCoordinate(52.42985, 13.32807) .build(); - static RegularStop WESTHAFEN = TEST_MODEL + static final RegularStop WESTHAFEN = TEST_MODEL .stop("Westhafen") .withVehicleType(null) .withCoordinate(52.42985, 13.32807) .build(); // Atlanta - static Station FIVE_POINTS_STATION = TEST_MODEL + static final Station FIVE_POINTS_STATION = TEST_MODEL .station("Five Points") .withCoordinate(33.753899, -84.39156) .build(); - static RegularStop ARTS_CENTER = TEST_MODEL + static final RegularStop ARTS_CENTER = TEST_MODEL .stop("Arts Center") .withCode("4456") .withCoordinate(52.52277, 13.41046) .build(); - static RegularStop ARTHUR = TEST_MODEL + static final RegularStop ARTHUR = TEST_MODEL .stop("Arthur Langford Jr Pl SW at 220") .withCoordinate(52.52277, 13.41046) .build(); @@ -120,6 +128,23 @@ public List getModesOfStopLocation(StopLocation stop) { return List.copyOf(modes.get(stop)); } } + + @Override + public List getAgenciesForStopLocation(StopLocation stop) { + if (stop.equals(ALEXANDERPLATZ_BUS)) { + return List.of(BVG); + } else { + return List.of(); + } + } + + @Override + public Agency getAgencyForId(FeedScopedId id) { + if (id.equals(BVG.getId())) { + return BVG; + } + return null; + } }; index = new LuceneIndex(transitService); mapper = new StopClusterMapper(transitService); @@ -242,5 +267,12 @@ void modes() { assertEquals(WESTHAFEN.getName().toString(), stop.name()); assertEquals(List.of(FERRY.name(), BUS.name()), stop.modes()); } + + @Test + void agencies() { + var result = index.queryStopClusters("alexanderplatz").toList().getFirst(); + assertEquals(ALEXANDERPLATZ_STATION.getName().toString(), result.name()); + assertEquals(List.of(StopClusterMapper.toAgency(BVG)), result.agencies()); + } } } diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java index 26c4d34ce25..75e0fc3333a 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java @@ -59,16 +59,15 @@ public class LuceneIndex implements Serializable { private static final String LAT = "latitude"; private static final String LON = "longitude"; private static final String MODE = "mode"; - private static final String AGENCY_IDS= "agency_ids"; + private static final String AGENCY_IDS = "agency_ids"; private final TransitService transitService; private final Analyzer analyzer; private final SuggestIndexSearcher searcher; - private final StopClusterMapper stopClusterMapper; public LuceneIndex(TransitService transitService) { this.transitService = transitService; - this.stopClusterMapper = new StopClusterMapper(transitService); + StopClusterMapper stopClusterMapper = new StopClusterMapper(transitService); this.analyzer = new PerFieldAnalyzerWrapper( @@ -190,10 +189,15 @@ private StopCluster toStopCluster(Document document) { var lat = document.getField(LAT).numericValue().doubleValue(); var lon = document.getField(LON).numericValue().doubleValue(); var modes = Arrays.asList(document.getValues(MODE)); - var agencies = Arrays.stream(document.getValues(AGENCY_IDS)).map(id -> { - var fsid = FeedScopedId.parse(id); - return transitService.getAgencyForId(fsid); - }).filter(Objects::nonNull).map(StopClusterMapper::toAgency).toList(); + var agencies = Arrays + .stream(document.getValues(AGENCY_IDS)) + .map(id -> { + var fsid = FeedScopedId.parse(id); + return transitService.getAgencyForId(fsid); + }) + .filter(Objects::nonNull) + .map(StopClusterMapper::toAgency) + .toList(); var feedPublisher = StopClusterMapper.toFeedPublisher( transitService.getFeedInfo(clusterId.getFeedId()) ); diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java index 3f916186430..25776e1d39f 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java @@ -9,11 +9,9 @@ */ record LuceneStopCluster( FeedScopedId id, - @Nullable - String code, + @Nullable String code, String name, StopCluster.Coordinate coordinate, Collection modes, Collection agencies - ){ -} +) {} diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java index c1a6d216ff0..d231765b66d 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java @@ -23,7 +23,6 @@ class StopClusterMapper { this.transitService = transitService; } - /** * De-duplicates collections of {@link StopLocation} and {@link StopLocationsGroup} into a stream * of {@link StopCluster}. @@ -60,7 +59,13 @@ Iterable generateStopClusters( LuceneStopCluster map(StopLocationsGroup g) { var modes = transitService.getModesOfStopLocationsGroup(g).stream().map(Enum::name).toList(); - var agencies = g.getChildStops().stream().flatMap(s -> transitService.getAgenciesForStopLocation(s).stream()).distinct().map(s ->s.getId().toString()).toList(); + var agencies = g + .getChildStops() + .stream() + .flatMap(s -> transitService.getAgenciesForStopLocation(s).stream()) + .distinct() + .map(s -> s.getId().toString()) + .toList(); return new LuceneStopCluster( g.getId(), null, @@ -72,7 +77,11 @@ LuceneStopCluster map(StopLocationsGroup g) { } Optional map(StopLocation sl) { - var agencies = transitService.getAgenciesForStopLocation(sl).stream().map(a -> a.getId().toString()).toList(); + var agencies = transitService + .getAgenciesForStopLocation(sl) + .stream() + .map(a -> a.getId().toString()) + .toList(); return Optional .ofNullable(sl.getName()) .map(name -> { @@ -82,7 +91,8 @@ Optional map(StopLocation sl) { sl.getCode(), name.toString(), toCoordinate(sl.getCoordinate()), - modes, agencies + modes, + agencies ); }); } From 1db3ac13d8c5a2b3685087494883f2709407a64b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 20 Jan 2024 17:35:11 +0100 Subject: [PATCH 016/101] Add test for feed publisher --- .../ext/geocoder/LuceneIndexTest.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java index 348586377d4..0b5933c2a52 100644 --- a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java @@ -7,6 +7,7 @@ import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; +import java.time.LocalDate; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -15,6 +16,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.opentripplanner.model.FeedInfo; import org.opentripplanner.transit.model._data.TransitModelForTest; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; @@ -145,6 +147,11 @@ public Agency getAgencyForId(FeedScopedId id) { } return null; } + + @Override + public FeedInfo getFeedInfo(String feedId) { + return new FeedInfo("F", "A Publisher", "http://example.com", "de", LocalDate.MIN, LocalDate.MIN, "1"); + } }; index = new LuceneIndex(transitService); mapper = new StopClusterMapper(transitService); @@ -154,7 +161,7 @@ public Agency getAgencyForId(FeedScopedId id) { void stopLocations() { var result1 = index.queryStopLocations("lich", true).toList(); assertEquals(1, result1.size()); - assertEquals(LICHTERFELDE_OST_1.getName().toString(), result1.get(0).getName().toString()); + assertEquals(LICHTERFELDE_OST_1.getName().toString(), result1.getFirst().getName().toString()); var result2 = index.queryStopLocations("alexan", true).collect(Collectors.toSet()); assertEquals(Set.of(ALEXANDERPLATZ_BUS, ALEXANDERPLATZ_RAIL), result2); @@ -215,7 +222,7 @@ void fuzzyStopClusters() { void deduplicatedStopClusters() { var result = index.queryStopClusters("lich").toList(); assertEquals(1, result.size()); - assertEquals(LICHTERFELDE_OST_1.getName().toString(), result.get(0).name()); + assertEquals(LICHTERFELDE_OST_1.getName().toString(), result.getFirst().name()); } @ParameterizedTest @@ -256,23 +263,24 @@ void stopClustersWithSpace(String query) { void fuzzyStopCode(String query) { var result = index.queryStopClusters(query).toList(); assertEquals(1, result.size()); - assertEquals(ARTS_CENTER.getName().toString(), result.get(0).name()); + assertEquals(ARTS_CENTER.getName().toString(), result.getFirst().name()); } @Test void modes() { var result = index.queryStopClusters("westh").toList(); assertEquals(1, result.size()); - var stop = result.get(0); + var stop = result.getFirst(); assertEquals(WESTHAFEN.getName().toString(), stop.name()); assertEquals(List.of(FERRY.name(), BUS.name()), stop.modes()); } @Test - void agencies() { + void agenciesAndFeedPublisher() { var result = index.queryStopClusters("alexanderplatz").toList().getFirst(); assertEquals(ALEXANDERPLATZ_STATION.getName().toString(), result.name()); assertEquals(List.of(StopClusterMapper.toAgency(BVG)), result.agencies()); + assertEquals("A Publisher", result.feedPublisher().name()); } } } From 1182afd9f95d1c03b38bc89cfc6cb6238f7de15c Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 21 Jan 2024 00:02:20 +0100 Subject: [PATCH 017/101] Add documentation --- .../opentripplanner/ext/geocoder/LuceneIndexTest.java | 10 +++++++++- .../ext/geocoder/LuceneStopCluster.java | 2 +- .../transit/service/TransitService.java | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java index 0b5933c2a52..8dc3ff77a01 100644 --- a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java @@ -150,7 +150,15 @@ public Agency getAgencyForId(FeedScopedId id) { @Override public FeedInfo getFeedInfo(String feedId) { - return new FeedInfo("F", "A Publisher", "http://example.com", "de", LocalDate.MIN, LocalDate.MIN, "1"); + return new FeedInfo( + "F", + "A Publisher", + "http://example.com", + "de", + LocalDate.MIN, + LocalDate.MIN, + "1" + ); } }; index = new LuceneIndex(transitService); diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java index 25776e1d39f..49f1a7ee5c3 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java @@ -5,7 +5,7 @@ import org.opentripplanner.transit.model.framework.FeedScopedId; /** - * A package-private helper type for transporting + * A package-private helper type for transporting data before serializing. */ record LuceneStopCluster( FeedScopedId id, diff --git a/src/main/java/org/opentripplanner/transit/service/TransitService.java b/src/main/java/org/opentripplanner/transit/service/TransitService.java index 5006ed93f30..c16b928d2bd 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -216,5 +216,9 @@ List stopTimesForPatternAtStop( */ List getModesOfStopLocation(StopLocation stop); + /** + * Iterates over all routes that visit this stop location and return a de-duplicated list + * of their agencies. + */ List getAgenciesForStopLocation(StopLocation stop); } From 0e529c74808670b8579ae0f5499ef7d83a5260bf Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 21 Jan 2024 11:35:18 +0100 Subject: [PATCH 018/101] Add tests --- .../org/opentripplanner/ext/geocoder/LuceneIndex.java | 2 +- .../ext/geocoder/LuceneStopCluster.java | 2 +- .../ext/geocoder/StopClusterMapper.java | 6 ++---- .../transit/service/DefaultTransitService.java | 10 ++++++++++ .../transit/service/TransitService.java | 6 ++++++ .../transit/service/DefaultTransitServiceTest.java | 9 +++++++++ 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java index 75e0fc3333a..b92b36f5a59 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java @@ -135,7 +135,7 @@ public LuceneIndex(TransitService transitService) { stopCluster.coordinate().lat(), stopCluster.coordinate().lon(), stopCluster.modes(), - stopCluster.agencies() + stopCluster.agencyIds() ) ); } diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java index 49f1a7ee5c3..f58d7aa9af9 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneStopCluster.java @@ -13,5 +13,5 @@ record LuceneStopCluster( String name, StopCluster.Coordinate coordinate, Collection modes, - Collection agencies + Collection agencyIds ) {} diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java index d231765b66d..10243665ac8 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java @@ -59,11 +59,9 @@ Iterable generateStopClusters( LuceneStopCluster map(StopLocationsGroup g) { var modes = transitService.getModesOfStopLocationsGroup(g).stream().map(Enum::name).toList(); - var agencies = g - .getChildStops() + var agencies = transitService + .getAgenciesForStopLocationsGroup(g) .stream() - .flatMap(s -> transitService.getAgenciesForStopLocation(s).stream()) - .distinct() .map(s -> s.getId().toString()) .toList(); return new LuceneStopCluster( diff --git a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java index 91d129e0a0c..f38499bfd68 100644 --- a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -577,6 +577,16 @@ public List getAgenciesForStopLocation(StopLocation stop) { return getRoutesForStop(stop).stream().map(Route::getAgency).distinct().toList(); } + @Override + public List getAgenciesForStopLocationsGroup(StopLocationsGroup group) { + return group + .getChildStops() + .stream() + .flatMap(sl -> getAgenciesForStopLocation(sl).stream()) + .distinct() + .toList(); + } + /** * For each pattern visiting this {@link StopLocation} return its {@link TransitMode} */ diff --git a/src/main/java/org/opentripplanner/transit/service/TransitService.java b/src/main/java/org/opentripplanner/transit/service/TransitService.java index c16b928d2bd..156a3c8dd1a 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -216,6 +216,12 @@ List stopTimesForPatternAtStop( */ List getModesOfStopLocation(StopLocation stop); + /** + * Iterates over all child stops, the routes that visit this stop and return a de-duplicated list + * of their agencies. + */ + List getAgenciesForStopLocationsGroup(StopLocationsGroup group); + /** * Iterates over all routes that visit this stop location and return a de-duplicated list * of their agencies. diff --git a/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java b/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java index 2a26dc681be..ab3d5c8ae0a 100644 --- a/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java +++ b/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java @@ -43,6 +43,8 @@ static void setup() { .build(); var transitModel = new TransitModel(stopModel, new Deduplicator()); + transitModel.addTripPattern(RAIL_PATTERN.getId(), RAIL_PATTERN); + transitModel.index(); service = new DefaultTransitService(transitModel) { @@ -74,4 +76,11 @@ void stationModes() { var modes = service.getModesOfStopLocationsGroup(STATION); assertEquals(List.of(RAIL, FERRY, TRAM), modes); } + + @Test + void stopAgencies() { + var stop = RAIL_PATTERN.getStopPattern().getStop(0); + var agencies = service.getAgenciesForStopLocation(stop); + assertEquals("[Agency{F:A1 Agency Test}]", agencies.toString()); + } } From a0e40e354167d886e963c3b2662e942dc8ced5ae Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 21 Jan 2024 22:04:56 +0100 Subject: [PATCH 019/101] Inline code --- .../java/org/opentripplanner/ext/geocoder/LuceneIndex.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java index b92b36f5a59..56769db0028 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java @@ -191,10 +191,7 @@ private StopCluster toStopCluster(Document document) { var modes = Arrays.asList(document.getValues(MODE)); var agencies = Arrays .stream(document.getValues(AGENCY_IDS)) - .map(id -> { - var fsid = FeedScopedId.parse(id); - return transitService.getAgencyForId(fsid); - }) + .map(id -> transitService.getAgencyForId(FeedScopedId.parse(id))) .filter(Objects::nonNull) .map(StopClusterMapper::toAgency) .toList(); From 3beffe3ca8ba21e40f52f3ec49eb043be8f82586 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 22 Jan 2024 12:00:02 +0200 Subject: [PATCH 020/101] Use scooter speed in direct street router --- .../raptoradapter/router/street/DirectStreetRouter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java index 2c6b09c2fb2..6229cbb022c 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java @@ -96,6 +96,8 @@ private static double calculateDistanceMaxLimit(RouteRequest request) { distanceLimit = durationLimit * preferences.car().speed(); } else if (mode.includesBiking()) { distanceLimit = durationLimit * preferences.bike().speed(); + } else if (mode.includesScooter()) { + distanceLimit = durationLimit * preferences.scooter().speed(); } else if (mode.includesWalking()) { distanceLimit = durationLimit * preferences.walk().speed(); } else { From 3db40a775d78b35ab25dc97fce16f987a59ac58c Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 22 Jan 2024 12:08:47 +0200 Subject: [PATCH 021/101] Add scooter to some more router-cofig examples --- docs/examples/entur/router-config.json | 9 +++++++++ docs/examples/ibi/atlanta/router-config.json | 11 +++++++++++ 2 files changed, 20 insertions(+) diff --git a/docs/examples/entur/router-config.json b/docs/examples/entur/router-config.json index ffdec9ded79..1fc56bd8401 100644 --- a/docs/examples/entur/router-config.json +++ b/docs/examples/entur/router-config.json @@ -36,6 +36,15 @@ "dropOffCost": 30 } }, + "scooter": { + "speed": 5, + "reluctance": 5.0, + "rental": { + "pickupCost": 120, + "dropOffTime": "30s", + "dropOffCost": 30 + } + }, "walk": { "speed": 1.3, "reluctance": 4.0, diff --git a/docs/examples/ibi/atlanta/router-config.json b/docs/examples/ibi/atlanta/router-config.json index 909c164ec43..7d6e7272fcd 100644 --- a/docs/examples/ibi/atlanta/router-config.json +++ b/docs/examples/ibi/atlanta/router-config.json @@ -17,6 +17,17 @@ "pickupCost": 850 } }, + "scooter": { + "triangle": { + "time": 0.3, + "flatness": 0.3, + "safety": 0.4 + }, + "rental": { + "pickupTime": "3m", + "pickupCost": 850 + } + }, "itineraryFilters": { // only show non-transit (ie. walking) when it's at least as good as the transit option "nonTransitGeneralizedCostLimit": "0 + 1.0 x", From 01f1576599a0a653002b19a0419763476c3dd266 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 22 Jan 2024 12:26:42 +0200 Subject: [PATCH 022/101] Add test for scooter in routing preferences --- .../routing/core/RoutingPreferencesTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java b/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java index c67d539e902..c3cff43b1a9 100644 --- a/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java @@ -48,6 +48,16 @@ public void copyOfWithBikeChanges() { assertSame(pref.walk(), copy.walk()); } + @Test + public void copyOfWithScooterChanges() { + var pref = new RoutingPreferences(); + var copy = pref.copyOf().withScooter(b -> b.withReluctance(2.5)).build(); + + assertNotSame(pref, copy); + assertNotSame(pref.scooter(), copy.scooter()); + assertSame(pref.walk(), copy.walk()); + } + @Test public void copyOfWithWalkChanges() { var pref = new RoutingPreferences(); From a5fe85e8f1c4fd0b2fee76c09472e63a27df94cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 11:13:03 +0000 Subject: [PATCH 023/101] fix(deps): update dependency com.google.guava:guava to v33 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 34f4365b580..72b13f5854b 100644 --- a/pom.xml +++ b/pom.xml @@ -739,7 +739,7 @@ com.google.guava guava - 32.1.3-jre + 33.0.0-jre From 5159265161cf836016aa9825a9eaf930a68c7552 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 22 Jan 2024 13:26:04 +0200 Subject: [PATCH 024/101] Add tests for vehicle rental edge --- .../model/edge/VehicleRentalEdgeTest.java | 138 ++++++++++++++++-- 1 file changed, 124 insertions(+), 14 deletions(-) diff --git a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java index 84f5efcc1c5..c490e315933 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java @@ -30,7 +30,7 @@ class VehicleRentalEdgeTest { VehicleRentalPlaceVertex vertex; @Test - void testRentingWithAvailableVehicles() { + void testRentingWithAvailableBikes() { initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3); var s1 = rent(); @@ -49,7 +49,7 @@ void testRentingWithNoAvailableVehicles() { @Test void testRentingWithNoAvailableVehiclesAndNoRealtimeUsage() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 0, 3, false, true, false); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 0, 3, false, true, false, false); var s1 = rent(); @@ -76,7 +76,7 @@ void testReturningWithNoAvailableSpaces() { @Test void testReturningWithNoAvailableSpacesAndOverloading() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, true, true, true); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, true, true, true, false); var s1 = rentAndDropOff(); @@ -85,7 +85,7 @@ void testReturningWithNoAvailableSpacesAndOverloading() { @Test void testReturningWithNoAvailableSpacesAndNoRealtimeUsage() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, false, true, false); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, false, true, false, false); var s1 = rentAndDropOff(); @@ -94,7 +94,7 @@ void testReturningWithNoAvailableSpacesAndNoRealtimeUsage() { @Test void testRentingFromClosedStation() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, true, false, true); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 0, true, false, true, false); var s1 = rent(); @@ -103,13 +103,13 @@ void testRentingFromClosedStation() { @Test void testReturningToClosedStation() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, true, true, true); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, true, true, true, false); var s1 = rent(); assertFalse(State.isEmpty(s1)); - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, true, false, true); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, true, false, true, false); var s2 = dropOff(s1[0]); @@ -118,15 +118,78 @@ void testReturningToClosedStation() { @Test void testReturningAndReturningToClosedStationWithNoRealtimeUsage() { - initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, false, true, false); + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, false, true, false, false); var s1 = rentAndDropOff(); assertFalse(State.isEmpty(s1)); } + @Test + void testRentingWithFreeFloatingBicycle() { + initFreeFloatingEdgeAndRequest(StreetMode.BIKE_RENTAL, RentalFormFactor.BICYCLE, false); + + var s1 = rent(); + + assertFalse(State.isEmpty(s1)); + } + + @Test + void testRentingWithFreeFloatingScooter() { + initFreeFloatingEdgeAndRequest(StreetMode.SCOOTER_RENTAL, RentalFormFactor.SCOOTER, false); + + var s1 = rent(); + + assertFalse(State.isEmpty(s1)); + } + + @Test + void testRentingWithFreeFloatingCar() { + initFreeFloatingEdgeAndRequest(StreetMode.CAR_RENTAL, RentalFormFactor.CAR, false); + + var s1 = rent(); + + assertFalse(State.isEmpty(s1)); + } + + @Test + void testBannedBicycleNetworkStation() { + initEdgeAndRequest(StreetMode.BIKE_RENTAL, 3, 3, false, true, true, true); + + var s1 = rent(); + + assertTrue(State.isEmpty(s1)); + } + + @Test + void testBannedBicycleNetworkFreeFloating() { + initFreeFloatingEdgeAndRequest(StreetMode.BIKE_RENTAL, RentalFormFactor.BICYCLE, true); + + var s1 = rent(); + + assertTrue(State.isEmpty(s1)); + } + + @Test + void testBannedScooterNetworkFreeFloating() { + initFreeFloatingEdgeAndRequest(StreetMode.SCOOTER_RENTAL, RentalFormFactor.SCOOTER, true); + + var s1 = rent(); + + assertTrue(State.isEmpty(s1)); + } + + @Test + void testBannedCarNetworkFreeFloating() { + initFreeFloatingEdgeAndRequest(StreetMode.CAR_RENTAL, RentalFormFactor.CAR, true); + + var s1 = rent(); + + assertTrue(State.isEmpty(s1)); + } + private void initEdgeAndRequest(StreetMode mode, int vehicles, int spaces) { - initEdgeAndRequest(mode, vehicles, spaces, false, true, true); + initEdgeAndRequest(mode, vehicles, spaces, false, true, true, false); } @Nested @@ -204,7 +267,8 @@ private void initEdgeAndRequest( int spaces, boolean overloadingAllowed, boolean stationOn, - boolean useRealtime + boolean useRealtime, + boolean banNetwork ) { var station = TestVehicleRentalStationBuilder .of() @@ -218,17 +282,63 @@ private void initEdgeAndRequest( vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(vertex, RentalFormFactor.BICYCLE); + Set bannedNetworks = banNetwork ? Set.of(station.getNetwork()) : Set.of(); + this.request = StreetSearchRequest .of() .withMode(mode) .withPreferences(preferences -> preferences - .withCar(car -> - car.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) - ) .withBike(bike -> - bike.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) + bike.withRental(rental -> + rental + .withUseAvailabilityInformation(useRealtime) + .withBannedNetworks(bannedNetworks) + ) + ) + .build() + ) + .build(); + } + + private void initFreeFloatingEdgeAndRequest( + StreetMode mode, + RentalFormFactor formFactor, + boolean banNetwork + ) { + var network = "1"; + + VehicleRentalVehicle rentalVehicle = new VehicleRentalVehicle(); + + rentalVehicle.latitude = 1; + rentalVehicle.longitude = 1; + rentalVehicle.id = new FeedScopedId(network, "123"); + rentalVehicle.vehicleType = + new RentalVehicleType( + new FeedScopedId(network, "type"), + "type", + formFactor, + RentalVehicleType.PropulsionType.ELECTRIC, + 100000d + ); + + this.vertex = new VehicleRentalPlaceVertex(rentalVehicle); + + vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(vertex, formFactor); + + Set bannedNetworks = banNetwork ? Set.of(network) : Set.of(); + + this.request = + StreetSearchRequest + .of() + .withMode(mode) + .withPreferences(preferences -> + preferences + .withCar(car -> car.withRental(rental -> rental.withBannedNetworks(bannedNetworks))) + .withBike(bike -> bike.withRental(rental -> rental.withBannedNetworks(bannedNetworks))) + .withScooter(scooter -> + scooter.withRental(rental -> rental.withBannedNetworks(bannedNetworks)) ) .build() ) From 6901346f1f461da4e6b14002b4817ff857685945 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 22 Jan 2024 15:11:38 +0200 Subject: [PATCH 025/101] Add scooter street edge traversal tests --- .../street/model/edge/StreetEdgeTest.java | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java index 60e8cf58952..0435ca16c82 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java @@ -21,6 +21,12 @@ import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.util.ElevationUtils; import org.opentripplanner.routing.util.SlopeCosts; +import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; +import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; +import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink; +import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; +import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; +import org.opentripplanner.street.model.RentalFormFactor; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.TurnRestriction; import org.opentripplanner.street.model._data.StreetModelForTest; @@ -33,6 +39,7 @@ import org.opentripplanner.street.search.request.StreetSearchRequestBuilder; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.StateData; +import org.opentripplanner.transit.model.framework.FeedScopedId; public class StreetEdgeTest { @@ -121,6 +128,88 @@ public void testTraverseAsCar() { assertEquals(expectedWeight, s1.getWeight(), 0.0); } + @Test + public void testTraverseFloatingScooter() { + // This test does not depend on the setup method - and can probably be simplified + Coordinate c1 = new Coordinate(-122.575033, 45.456773); + Coordinate c2 = new Coordinate(-122.576668, 45.451426); + + var formFactor = RentalFormFactor.SCOOTER; + var rentalVertex = createRentalVertex(formFactor); + var vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(rentalVertex, formFactor); + + StreetVertex v1 = StreetModelForTest.intersectionVertex("v1", c1.x, c1.y); + StreetVertex v2 = StreetModelForTest.intersectionVertex("v2", c2.x, c2.y); + + var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(rentalVertex, v1); + + GeometryFactory factory = new GeometryFactory(); + LineString geometry = factory.createLineString(new Coordinate[] { c1, c2 }); + + double length = 650.0; + + StreetEdge testStreet = new StreetEdgeBuilder<>() + .withFromVertex(v1) + .withToVertex(v2) + .withGeometry(geometry) + .withName("Test Lane") + .withMeterLength(length) + .withPermission(StreetTraversalPermission.ALL) + .withBack(false) + .buildAndConnect(); + + var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withSpeed(5))); + + State slowResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withSpeed(10))); + + State fastResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + + // Cost and time should be less when scooter speed is higher. + assertTrue(slowResult.getWeight() > fastResult.getWeight() + DELTA); + assertTrue(slowResult.getElapsedTimeSeconds() > fastResult.getElapsedTimeSeconds()); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withReluctance(1))); + State lowReluctanceResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withReluctance(5))); + + State highReluctanceResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + // Cost should be more when reluctance is higher but the time should be the same. + assertTrue(highReluctanceResult.getWeight() > lowReluctanceResult.getWeight() + DELTA); + + assertEquals( + highReluctanceResult.getElapsedTimeSeconds(), + lowReluctanceResult.getElapsedTimeSeconds() + ); + } + @Test public void testModeSetCanTraverse() { StreetEdge e = streetEdge(v1, v2, 1.0, StreetTraversalPermission.ALL); @@ -400,4 +489,135 @@ public void testBikeOptimizeTriangle() { double expectedWeight = timeWeight * 0.33 + slopeWeight * 0.33 + safetyWeight * 0.34; assertEquals(expectedWeight, result.getWeight(), DELTA); } + + @Test + public void testScooterOptimizeTriangle() { + // This test does not depend on the setup method - and can probably be simplified + Coordinate c1 = new Coordinate(-122.575033, 45.456773); + Coordinate c2 = new Coordinate(-122.576668, 45.451426); + + var formFactor = RentalFormFactor.SCOOTER; + + var rentalVertex = createRentalVertex(formFactor); + var vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(rentalVertex, formFactor); + + StreetVertex v1 = StreetModelForTest.intersectionVertex("v1", c1.x, c1.y); + StreetVertex v2 = StreetModelForTest.intersectionVertex("v2", c2.x, c2.y); + + var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(rentalVertex, v1); + + GeometryFactory factory = new GeometryFactory(); + LineString geometry = factory.createLineString(new Coordinate[] { c1, c2 }); + + double length = 650.0; + + StreetEdge testStreet = new StreetEdgeBuilder<>() + .withFromVertex(v1) + .withToVertex(v2) + .withGeometry(geometry) + .withName("Test Lane") + .withMeterLength(length) + .withPermission(StreetTraversalPermission.ALL) + .withBack(false) + // a safe street + .withBicycleSafetyFactor(0.74f) + .buildAndConnect(); + + Coordinate[] profile = new Coordinate[] { + new Coordinate(0, 0), // slope = 0.1 + new Coordinate(length / 2, length / 20.0), + new Coordinate(length, 0), // slope = -0.1 + }; + PackedCoordinateSequence elev = new PackedCoordinateSequence.Double(profile); + StreetElevationExtensionBuilder + .of(testStreet) + .withElevationProfile(elev) + .withComputed(false) + .build() + .ifPresent(testStreet::setElevationExtension); + + SlopeCosts costs = ElevationUtils.getSlopeCosts(elev, true); + double trueLength = costs.lengthMultiplier * length; + double slopeWorkLength = testStreet.getEffectiveBikeDistanceForWorkCost(); + double slopeSpeedLength = testStreet.getEffectiveBikeDistance(); + + var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); + + request.withPreferences(pref -> + pref + .withScooter(scooter -> + scooter + .withSpeed(SPEED) + .withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE) + .withOptimizeTriangle(it -> it.withTime(1)) + .withReluctance(1) + ) + .withWalk(walk -> walk.withReluctance(1)) + .withCar(car -> car.withReluctance(1)) + ); + + var rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + var startState = link.traverse(rentedState[0])[0]; + + State result = testStreet.traverse(startState)[0]; + double expectedTimeWeight = slopeSpeedLength / SPEED; + assertEquals(TraverseMode.SCOOTER, result.currentMode()); + assertEquals(expectedTimeWeight, result.getWeight() - startState.getWeight(), DELTA); + + request.withPreferences(p -> + p.withScooter(scooter -> scooter.withOptimizeTriangle(it -> it.withSlope(1))) + ); + rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + startState = link.traverse(rentedState[0])[0]; + + result = testStreet.traverse(startState)[0]; + double slopeWeight = result.getWeight(); + double expectedSlopeWeight = slopeWorkLength / SPEED; + assertEquals(expectedSlopeWeight, slopeWeight - startState.getWeight(), DELTA); + assertTrue(length * 1.5 / SPEED < slopeWeight); + assertTrue(length * 1.5 * 10 / SPEED > slopeWeight); + + request.withPreferences(p -> + p.withScooter(scooter -> scooter.withOptimizeTriangle(it -> it.withSafety(1))) + ); + rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + startState = link.traverse(rentedState[0])[0]; + + result = testStreet.traverse(startState)[0]; + double slopeSafety = costs.slopeSafetyCost; + double safetyWeight = result.getWeight(); + double expectedSafetyWeight = (trueLength * 0.74 + slopeSafety) / SPEED; + assertEquals(expectedSafetyWeight, safetyWeight - startState.getWeight(), DELTA); + } + + private VehicleRentalPlaceVertex createRentalVertex(RentalFormFactor formFactor) { + VehicleRentalVehicle rentalVehicle = new VehicleRentalVehicle(); + + var network = "1"; + rentalVehicle.latitude = -122.575133; + rentalVehicle.longitude = 45.456773; + rentalVehicle.id = new FeedScopedId(network, "123"); + rentalVehicle.vehicleType = + new RentalVehicleType( + new FeedScopedId(network, "type"), + "type", + formFactor, + RentalVehicleType.PropulsionType.ELECTRIC, + 100000d + ); + + return new VehicleRentalPlaceVertex(rentalVehicle); + } + + private State traverseStreetFromRental( + StreetEdge streetEdge, + VehicleRentalEdge rentalEdge, + StreetVehicleRentalLink link, + VehicleRentalPlaceVertex rentalVertex, + StreetSearchRequest request + ) { + var rentedState = rentalEdge.traverse(new State(rentalVertex, request)); + var startState = link.traverse(rentedState[0])[0]; + return streetEdge.traverse(startState)[0]; + } } From fe388c785c56d9c277e7f70cec89482dce2fb9c3 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 22 Jan 2024 15:35:54 +0200 Subject: [PATCH 026/101] Add test for walking before rental --- .../street/model/edge/StreetEdgeTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java index 0435ca16c82..743cfa673ba 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java @@ -210,6 +210,33 @@ public void testTraverseFloatingScooter() { ); } + @Test + public void testWalkingBeforeScooter() { + StreetEdge e1 = streetEdgeBuilder(v1, v2, 100.0, StreetTraversalPermission.ALL) + .withCarSpeed(10.0f) + .buildAndConnect(); + + var request = StreetSearchRequest + .copyOf(proto) + .withPreferences(pref -> pref.withWalk(walk -> walk.withReluctance(1))) + .withMode(StreetMode.SCOOTER_RENTAL); + + State s0 = new State(v1, request.build()); + State result = e1.traverse(s0)[0]; + + request.withPreferences(pref -> + pref.withScooter(scooter -> scooter.withReluctance(5).withSpeed(8.5)) + ); + + s0 = new State(v1, request.build()); + var scooterReluctanceResult = e1.traverse(s0)[0]; + + // Scooter preferences shouldn't affect walking when SCOOTER_RENTAL is used as mode + assertEquals(TraverseMode.WALK, result.currentMode()); + assertEquals(result.getWeight(), scooterReluctanceResult.getWeight(), DELTA); + assertEquals(result.getElapsedTimeSeconds(), scooterReluctanceResult.getElapsedTimeSeconds()); + } + @Test public void testModeSetCanTraverse() { StreetEdge e = streetEdge(v1, v2, 1.0, StreetTraversalPermission.ALL); From da95a92b0602d1a5c3b69bfbdcf8cca9fc1678d3 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 23 Jan 2024 14:21:42 +0200 Subject: [PATCH 027/101] Update src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java Co-authored-by: Leonard Ehrenfried --- .../routing/api/request/preference/ScooterPreferences.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java index 7c139c08730..1d5cf83a54b 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/ScooterPreferences.java @@ -17,7 +17,7 @@ * related to street and transit routing. The values are normalized(rounded) so the class can used * as a cache key. * - * Scooter rental is only supported currently. + * Only Scooter rental is supported currently. *

* THIS CLASS IS IMMUTABLE AND THREAD-SAFE. */ From cdc84e2943a921b41b8216782b32165c7ea752c2 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 23 Jan 2024 15:12:14 +0200 Subject: [PATCH 028/101] Apply suggestions from code review Co-authored-by: Leonard Ehrenfried --- .../org/opentripplanner/street/model/edge/StreetEdgeTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java index 743cfa673ba..a346baf3cb9 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java @@ -155,7 +155,6 @@ public void testTraverseFloatingScooter() { .withName("Test Lane") .withMeterLength(length) .withPermission(StreetTraversalPermission.ALL) - .withBack(false) .buildAndConnect(); var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); @@ -545,7 +544,6 @@ public void testScooterOptimizeTriangle() { .withName("Test Lane") .withMeterLength(length) .withPermission(StreetTraversalPermission.ALL) - .withBack(false) // a safe street .withBicycleSafetyFactor(0.74f) .buildAndConnect(); From ae61117ad6ae5f0b1e56cf60b6e0546a0b13b43f Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 23 Jan 2024 15:45:10 +0200 Subject: [PATCH 029/101] Refactor tests --- .../model/_data/StreetModelForTest.java | 16 ++ .../edge/StreetEdgeScooterTraversalTest.java | 249 ++++++++++++++++++ .../street/model/edge/StreetEdgeTest.java | 245 ----------------- .../model/edge/VehicleRentalEdgeTest.java | 21 +- 4 files changed, 268 insertions(+), 263 deletions(-) create mode 100644 src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java diff --git a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java index 1f3dbf8c4c9..cd0ad900311 100644 --- a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java +++ b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java @@ -9,6 +9,9 @@ import org.opentripplanner.framework.geometry.SphericalDistanceLibrary; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; +import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; +import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; +import org.opentripplanner.street.model.RentalFormFactor; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.edge.StreetEdgeBuilder; @@ -93,4 +96,17 @@ public static StreetEdge streetEdge( ) { return streetEdge(from, to, 1, permissions); } + + public static VehicleRentalPlaceVertex rentalVertex(RentalFormFactor formFactor) { + var rentalVehicleBuilder = TestFreeFloatingRentalVehicleBuilder.of().withLatitude(-122.575133).withLongitude(45.456773); + if (formFactor == RentalFormFactor.SCOOTER) { + rentalVehicleBuilder.withVehicleScooter(); + } else if (formFactor == RentalFormFactor.BICYCLE) { + rentalVehicleBuilder.withVehicleBicycle(); + } else if (formFactor == RentalFormFactor.CAR) { + rentalVehicleBuilder.withVehicleCar(); + } + return new VehicleRentalPlaceVertex(rentalVehicleBuilder.build()); + } + } diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java new file mode 100644 index 00000000000..215b3cb6467 --- /dev/null +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java @@ -0,0 +1,249 @@ +package org.opentripplanner.street.model.edge; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.LineString; +import org.locationtech.jts.geom.impl.PackedCoordinateSequence; +import org.opentripplanner.routing.api.request.StreetMode; +import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; +import org.opentripplanner.routing.util.ElevationUtils; +import org.opentripplanner.routing.util.SlopeCosts; +import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink; +import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; +import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; +import org.opentripplanner.street.model.RentalFormFactor; +import org.opentripplanner.street.model.StreetTraversalPermission; +import org.opentripplanner.street.model._data.StreetModelForTest; +import org.opentripplanner.street.model.vertex.StreetVertex; +import org.opentripplanner.street.search.TraverseMode; +import org.opentripplanner.street.search.request.StreetSearchRequest; +import org.opentripplanner.street.search.state.State; + +public class StreetEdgeScooterTraversalTest { + + private static final double DELTA = 0.00001; + private static final double SPEED = 6.0; + + @Test + public void testTraverseFloatingScooter() { + // This test does not depend on the setup method - and can probably be simplified + Coordinate c1 = new Coordinate(-122.575033, 45.456773); + Coordinate c2 = new Coordinate(-122.576668, 45.451426); + + var formFactor = RentalFormFactor.SCOOTER; + var rentalVertex = StreetModelForTest.rentalVertex(formFactor); + var vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(rentalVertex, formFactor); + + StreetVertex v1 = StreetModelForTest.intersectionVertex("v1", c1.x, c1.y); + StreetVertex v2 = StreetModelForTest.intersectionVertex("v2", c2.x, c2.y); + + var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(rentalVertex, v1); + + GeometryFactory factory = new GeometryFactory(); + LineString geometry = factory.createLineString(new Coordinate[] { c1, c2 }); + + double length = 650.0; + + StreetEdge testStreet = new StreetEdgeBuilder<>() + .withFromVertex(v1) + .withToVertex(v2) + .withGeometry(geometry) + .withName("Test Lane") + .withMeterLength(length) + .withPermission(StreetTraversalPermission.ALL) + .buildAndConnect(); + + var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withSpeed(5))); + + State slowResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withSpeed(10))); + + State fastResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + + // Cost and time should be less when scooter speed is higher. + assertTrue(slowResult.getWeight() > fastResult.getWeight() + DELTA); + assertTrue(slowResult.getElapsedTimeSeconds() > fastResult.getElapsedTimeSeconds()); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withReluctance(1))); + State lowReluctanceResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + + request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withReluctance(5))); + + State highReluctanceResult = traverseStreetFromRental( + testStreet, + vehicleRentalEdge, + link, + rentalVertex, + request.build() + ); + // Cost should be more when reluctance is higher but the time should be the same. + assertTrue(highReluctanceResult.getWeight() > lowReluctanceResult.getWeight() + DELTA); + + assertEquals( + highReluctanceResult.getElapsedTimeSeconds(), + lowReluctanceResult.getElapsedTimeSeconds() + ); + } + + @Test + public void testWalkingBeforeScooter() { + StreetEdge e1 = StreetModelForTest.streetEdgeBuilder(StreetModelForTest.V1, StreetModelForTest.V2, 100.0, StreetTraversalPermission.ALL) + .withCarSpeed(10.0f) + .buildAndConnect(); + + var request = StreetSearchRequest + .of() + .withPreferences(pref -> pref.withWalk(walk -> walk.withReluctance(1))) + .withMode(StreetMode.SCOOTER_RENTAL); + + State s0 = new State(StreetModelForTest.V1, request.build()); + State result = e1.traverse(s0)[0]; + + request.withPreferences(pref -> + pref.withScooter(scooter -> scooter.withReluctance(5).withSpeed(8.5)) + ); + + s0 = new State(StreetModelForTest.V1, request.build()); + var scooterReluctanceResult = e1.traverse(s0)[0]; + + // Scooter preferences shouldn't affect walking when SCOOTER_RENTAL is used as mode + assertEquals(TraverseMode.WALK, result.currentMode()); + assertEquals(result.getWeight(), scooterReluctanceResult.getWeight(), DELTA); + assertEquals(result.getElapsedTimeSeconds(), scooterReluctanceResult.getElapsedTimeSeconds()); + } + + @Test + public void testScooterOptimizeTriangle() { + // This test does not depend on the setup method - and can probably be simplified + Coordinate c1 = new Coordinate(-122.575033, 45.456773); + Coordinate c2 = new Coordinate(-122.576668, 45.451426); + + var formFactor = RentalFormFactor.SCOOTER; + + var rentalVertex = StreetModelForTest.rentalVertex(formFactor); + var vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(rentalVertex, formFactor); + + StreetVertex v1 = StreetModelForTest.intersectionVertex("v1", c1.x, c1.y); + StreetVertex v2 = StreetModelForTest.intersectionVertex("v2", c2.x, c2.y); + + var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(rentalVertex, v1); + + GeometryFactory factory = new GeometryFactory(); + LineString geometry = factory.createLineString(new Coordinate[] { c1, c2 }); + + double length = 650.0; + + StreetEdge testStreet = new StreetEdgeBuilder<>() + .withFromVertex(v1) + .withToVertex(v2) + .withGeometry(geometry) + .withName("Test Lane") + .withMeterLength(length) + .withPermission(StreetTraversalPermission.ALL) + // a safe street + .withBicycleSafetyFactor(0.74f) + .buildAndConnect(); + + Coordinate[] profile = new Coordinate[] { + new Coordinate(0, 0), // slope = 0.1 + new Coordinate(length / 2, length / 20.0), + new Coordinate(length, 0), // slope = -0.1 + }; + PackedCoordinateSequence elev = new PackedCoordinateSequence.Double(profile); + StreetElevationExtensionBuilder + .of(testStreet) + .withElevationProfile(elev) + .withComputed(false) + .build() + .ifPresent(testStreet::setElevationExtension); + + SlopeCosts costs = ElevationUtils.getSlopeCosts(elev, true); + double trueLength = costs.lengthMultiplier * length; + double slopeWorkLength = testStreet.getEffectiveBikeDistanceForWorkCost(); + double slopeSpeedLength = testStreet.getEffectiveBikeDistance(); + + var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); + + request.withPreferences(pref -> + pref + .withScooter(scooter -> + scooter + .withSpeed(SPEED) + .withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE) + .withOptimizeTriangle(it -> it.withTime(1)) + .withReluctance(1) + ) + .withWalk(walk -> walk.withReluctance(1)) + .withCar(car -> car.withReluctance(1)) + ); + + var rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + var startState = link.traverse(rentedState[0])[0]; + + State result = testStreet.traverse(startState)[0]; + double expectedTimeWeight = slopeSpeedLength / SPEED; + assertEquals(TraverseMode.SCOOTER, result.currentMode()); + assertEquals(expectedTimeWeight, result.getWeight() - startState.getWeight(), DELTA); + + request.withPreferences(p -> + p.withScooter(scooter -> scooter.withOptimizeTriangle(it -> it.withSlope(1))) + ); + rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + startState = link.traverse(rentedState[0])[0]; + + result = testStreet.traverse(startState)[0]; + double slopeWeight = result.getWeight(); + double expectedSlopeWeight = slopeWorkLength / SPEED; + assertEquals(expectedSlopeWeight, slopeWeight - startState.getWeight(), DELTA); + assertTrue(length * 1.5 / SPEED < slopeWeight); + assertTrue(length * 1.5 * 10 / SPEED > slopeWeight); + + request.withPreferences(p -> + p.withScooter(scooter -> scooter.withOptimizeTriangle(it -> it.withSafety(1))) + ); + rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); + startState = link.traverse(rentedState[0])[0]; + + result = testStreet.traverse(startState)[0]; + double slopeSafety = costs.slopeSafetyCost; + double safetyWeight = result.getWeight(); + double expectedSafetyWeight = (trueLength * 0.74 + slopeSafety) / SPEED; + assertEquals(expectedSafetyWeight, safetyWeight - startState.getWeight(), DELTA); + } + + private State traverseStreetFromRental( + StreetEdge streetEdge, + VehicleRentalEdge rentalEdge, + StreetVehicleRentalLink link, + VehicleRentalPlaceVertex rentalVertex, + StreetSearchRequest request + ) { + var rentedState = rentalEdge.traverse(new State(rentalVertex, request)); + var startState = link.traverse(rentedState[0])[0]; + return streetEdge.traverse(startState)[0]; + } +} diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java index a346baf3cb9..60e8cf58952 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java @@ -21,12 +21,6 @@ import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; import org.opentripplanner.routing.util.ElevationUtils; import org.opentripplanner.routing.util.SlopeCosts; -import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; -import org.opentripplanner.service.vehiclerental.street.StreetVehicleRentalLink; -import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; -import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; -import org.opentripplanner.street.model.RentalFormFactor; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model.TurnRestriction; import org.opentripplanner.street.model._data.StreetModelForTest; @@ -39,7 +33,6 @@ import org.opentripplanner.street.search.request.StreetSearchRequestBuilder; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.StateData; -import org.opentripplanner.transit.model.framework.FeedScopedId; public class StreetEdgeTest { @@ -128,114 +121,6 @@ public void testTraverseAsCar() { assertEquals(expectedWeight, s1.getWeight(), 0.0); } - @Test - public void testTraverseFloatingScooter() { - // This test does not depend on the setup method - and can probably be simplified - Coordinate c1 = new Coordinate(-122.575033, 45.456773); - Coordinate c2 = new Coordinate(-122.576668, 45.451426); - - var formFactor = RentalFormFactor.SCOOTER; - var rentalVertex = createRentalVertex(formFactor); - var vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(rentalVertex, formFactor); - - StreetVertex v1 = StreetModelForTest.intersectionVertex("v1", c1.x, c1.y); - StreetVertex v2 = StreetModelForTest.intersectionVertex("v2", c2.x, c2.y); - - var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(rentalVertex, v1); - - GeometryFactory factory = new GeometryFactory(); - LineString geometry = factory.createLineString(new Coordinate[] { c1, c2 }); - - double length = 650.0; - - StreetEdge testStreet = new StreetEdgeBuilder<>() - .withFromVertex(v1) - .withToVertex(v2) - .withGeometry(geometry) - .withName("Test Lane") - .withMeterLength(length) - .withPermission(StreetTraversalPermission.ALL) - .buildAndConnect(); - - var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); - - request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withSpeed(5))); - - State slowResult = traverseStreetFromRental( - testStreet, - vehicleRentalEdge, - link, - rentalVertex, - request.build() - ); - request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withSpeed(10))); - - State fastResult = traverseStreetFromRental( - testStreet, - vehicleRentalEdge, - link, - rentalVertex, - request.build() - ); - - // Cost and time should be less when scooter speed is higher. - assertTrue(slowResult.getWeight() > fastResult.getWeight() + DELTA); - assertTrue(slowResult.getElapsedTimeSeconds() > fastResult.getElapsedTimeSeconds()); - - request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withReluctance(1))); - State lowReluctanceResult = traverseStreetFromRental( - testStreet, - vehicleRentalEdge, - link, - rentalVertex, - request.build() - ); - - request.withPreferences(pref -> pref.withScooter(scooter -> scooter.withReluctance(5))); - - State highReluctanceResult = traverseStreetFromRental( - testStreet, - vehicleRentalEdge, - link, - rentalVertex, - request.build() - ); - // Cost should be more when reluctance is higher but the time should be the same. - assertTrue(highReluctanceResult.getWeight() > lowReluctanceResult.getWeight() + DELTA); - - assertEquals( - highReluctanceResult.getElapsedTimeSeconds(), - lowReluctanceResult.getElapsedTimeSeconds() - ); - } - - @Test - public void testWalkingBeforeScooter() { - StreetEdge e1 = streetEdgeBuilder(v1, v2, 100.0, StreetTraversalPermission.ALL) - .withCarSpeed(10.0f) - .buildAndConnect(); - - var request = StreetSearchRequest - .copyOf(proto) - .withPreferences(pref -> pref.withWalk(walk -> walk.withReluctance(1))) - .withMode(StreetMode.SCOOTER_RENTAL); - - State s0 = new State(v1, request.build()); - State result = e1.traverse(s0)[0]; - - request.withPreferences(pref -> - pref.withScooter(scooter -> scooter.withReluctance(5).withSpeed(8.5)) - ); - - s0 = new State(v1, request.build()); - var scooterReluctanceResult = e1.traverse(s0)[0]; - - // Scooter preferences shouldn't affect walking when SCOOTER_RENTAL is used as mode - assertEquals(TraverseMode.WALK, result.currentMode()); - assertEquals(result.getWeight(), scooterReluctanceResult.getWeight(), DELTA); - assertEquals(result.getElapsedTimeSeconds(), scooterReluctanceResult.getElapsedTimeSeconds()); - } - @Test public void testModeSetCanTraverse() { StreetEdge e = streetEdge(v1, v2, 1.0, StreetTraversalPermission.ALL); @@ -515,134 +400,4 @@ public void testBikeOptimizeTriangle() { double expectedWeight = timeWeight * 0.33 + slopeWeight * 0.33 + safetyWeight * 0.34; assertEquals(expectedWeight, result.getWeight(), DELTA); } - - @Test - public void testScooterOptimizeTriangle() { - // This test does not depend on the setup method - and can probably be simplified - Coordinate c1 = new Coordinate(-122.575033, 45.456773); - Coordinate c2 = new Coordinate(-122.576668, 45.451426); - - var formFactor = RentalFormFactor.SCOOTER; - - var rentalVertex = createRentalVertex(formFactor); - var vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(rentalVertex, formFactor); - - StreetVertex v1 = StreetModelForTest.intersectionVertex("v1", c1.x, c1.y); - StreetVertex v2 = StreetModelForTest.intersectionVertex("v2", c2.x, c2.y); - - var link = StreetVehicleRentalLink.createStreetVehicleRentalLink(rentalVertex, v1); - - GeometryFactory factory = new GeometryFactory(); - LineString geometry = factory.createLineString(new Coordinate[] { c1, c2 }); - - double length = 650.0; - - StreetEdge testStreet = new StreetEdgeBuilder<>() - .withFromVertex(v1) - .withToVertex(v2) - .withGeometry(geometry) - .withName("Test Lane") - .withMeterLength(length) - .withPermission(StreetTraversalPermission.ALL) - // a safe street - .withBicycleSafetyFactor(0.74f) - .buildAndConnect(); - - Coordinate[] profile = new Coordinate[] { - new Coordinate(0, 0), // slope = 0.1 - new Coordinate(length / 2, length / 20.0), - new Coordinate(length, 0), // slope = -0.1 - }; - PackedCoordinateSequence elev = new PackedCoordinateSequence.Double(profile); - StreetElevationExtensionBuilder - .of(testStreet) - .withElevationProfile(elev) - .withComputed(false) - .build() - .ifPresent(testStreet::setElevationExtension); - - SlopeCosts costs = ElevationUtils.getSlopeCosts(elev, true); - double trueLength = costs.lengthMultiplier * length; - double slopeWorkLength = testStreet.getEffectiveBikeDistanceForWorkCost(); - double slopeSpeedLength = testStreet.getEffectiveBikeDistance(); - - var request = StreetSearchRequest.of().withMode(StreetMode.SCOOTER_RENTAL); - - request.withPreferences(pref -> - pref - .withScooter(scooter -> - scooter - .withSpeed(SPEED) - .withOptimizeType(VehicleRoutingOptimizeType.TRIANGLE) - .withOptimizeTriangle(it -> it.withTime(1)) - .withReluctance(1) - ) - .withWalk(walk -> walk.withReluctance(1)) - .withCar(car -> car.withReluctance(1)) - ); - - var rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); - var startState = link.traverse(rentedState[0])[0]; - - State result = testStreet.traverse(startState)[0]; - double expectedTimeWeight = slopeSpeedLength / SPEED; - assertEquals(TraverseMode.SCOOTER, result.currentMode()); - assertEquals(expectedTimeWeight, result.getWeight() - startState.getWeight(), DELTA); - - request.withPreferences(p -> - p.withScooter(scooter -> scooter.withOptimizeTriangle(it -> it.withSlope(1))) - ); - rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); - startState = link.traverse(rentedState[0])[0]; - - result = testStreet.traverse(startState)[0]; - double slopeWeight = result.getWeight(); - double expectedSlopeWeight = slopeWorkLength / SPEED; - assertEquals(expectedSlopeWeight, slopeWeight - startState.getWeight(), DELTA); - assertTrue(length * 1.5 / SPEED < slopeWeight); - assertTrue(length * 1.5 * 10 / SPEED > slopeWeight); - - request.withPreferences(p -> - p.withScooter(scooter -> scooter.withOptimizeTriangle(it -> it.withSafety(1))) - ); - rentedState = vehicleRentalEdge.traverse(new State(rentalVertex, request.build())); - startState = link.traverse(rentedState[0])[0]; - - result = testStreet.traverse(startState)[0]; - double slopeSafety = costs.slopeSafetyCost; - double safetyWeight = result.getWeight(); - double expectedSafetyWeight = (trueLength * 0.74 + slopeSafety) / SPEED; - assertEquals(expectedSafetyWeight, safetyWeight - startState.getWeight(), DELTA); - } - - private VehicleRentalPlaceVertex createRentalVertex(RentalFormFactor formFactor) { - VehicleRentalVehicle rentalVehicle = new VehicleRentalVehicle(); - - var network = "1"; - rentalVehicle.latitude = -122.575133; - rentalVehicle.longitude = 45.456773; - rentalVehicle.id = new FeedScopedId(network, "123"); - rentalVehicle.vehicleType = - new RentalVehicleType( - new FeedScopedId(network, "type"), - "type", - formFactor, - RentalVehicleType.PropulsionType.ELECTRIC, - 100000d - ); - - return new VehicleRentalPlaceVertex(rentalVehicle); - } - - private State traverseStreetFromRental( - StreetEdge streetEdge, - VehicleRentalEdge rentalEdge, - StreetVehicleRentalLink link, - VehicleRentalPlaceVertex rentalVertex, - StreetSearchRequest request - ) { - var rentedState = rentalEdge.traverse(new State(rentalVertex, request)); - var startState = link.traverse(rentedState[0])[0]; - return streetEdge.traverse(startState)[0]; - } } diff --git a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java index c490e315933..0e68ea0da78 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java @@ -18,6 +18,7 @@ import org.opentripplanner.service.vehiclerental.street.VehicleRentalEdge; import org.opentripplanner.service.vehiclerental.street.VehicleRentalPlaceVertex; import org.opentripplanner.street.model.RentalFormFactor; +import org.opentripplanner.street.model._data.StreetModelForTest; import org.opentripplanner.street.search.request.StreetSearchRequest; import org.opentripplanner.street.search.state.State; import org.opentripplanner.street.search.state.VehicleRentalState; @@ -307,27 +308,11 @@ private void initFreeFloatingEdgeAndRequest( RentalFormFactor formFactor, boolean banNetwork ) { - var network = "1"; - - VehicleRentalVehicle rentalVehicle = new VehicleRentalVehicle(); - - rentalVehicle.latitude = 1; - rentalVehicle.longitude = 1; - rentalVehicle.id = new FeedScopedId(network, "123"); - rentalVehicle.vehicleType = - new RentalVehicleType( - new FeedScopedId(network, "type"), - "type", - formFactor, - RentalVehicleType.PropulsionType.ELECTRIC, - 100000d - ); - - this.vertex = new VehicleRentalPlaceVertex(rentalVehicle); + this.vertex = StreetModelForTest.rentalVertex(formFactor); vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(vertex, formFactor); - Set bannedNetworks = banNetwork ? Set.of(network) : Set.of(); + Set bannedNetworks = banNetwork ? Set.of(this.vertex.getStation().getNetwork()) : Set.of(); this.request = StreetSearchRequest From a3090d2dc3962a81570acbae5365055a771efdd5 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 23 Jan 2024 16:02:06 +0200 Subject: [PATCH 030/101] Fix formatting --- .../street/model/_data/StreetModelForTest.java | 6 ++++-- .../street/model/edge/StreetEdgeScooterTraversalTest.java | 8 +++++++- .../street/model/edge/VehicleRentalEdgeTest.java | 4 +++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java index cd0ad900311..d50c8a74dfc 100644 --- a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java +++ b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java @@ -98,7 +98,10 @@ public static StreetEdge streetEdge( } public static VehicleRentalPlaceVertex rentalVertex(RentalFormFactor formFactor) { - var rentalVehicleBuilder = TestFreeFloatingRentalVehicleBuilder.of().withLatitude(-122.575133).withLongitude(45.456773); + var rentalVehicleBuilder = TestFreeFloatingRentalVehicleBuilder + .of() + .withLatitude(-122.575133) + .withLongitude(45.456773); if (formFactor == RentalFormFactor.SCOOTER) { rentalVehicleBuilder.withVehicleScooter(); } else if (formFactor == RentalFormFactor.BICYCLE) { @@ -108,5 +111,4 @@ public static VehicleRentalPlaceVertex rentalVertex(RentalFormFactor formFactor) } return new VehicleRentalPlaceVertex(rentalVehicleBuilder.build()); } - } diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java index 215b3cb6467..734b1efa2b9 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeScooterTraversalTest.java @@ -111,7 +111,13 @@ public void testTraverseFloatingScooter() { @Test public void testWalkingBeforeScooter() { - StreetEdge e1 = StreetModelForTest.streetEdgeBuilder(StreetModelForTest.V1, StreetModelForTest.V2, 100.0, StreetTraversalPermission.ALL) + StreetEdge e1 = StreetModelForTest + .streetEdgeBuilder( + StreetModelForTest.V1, + StreetModelForTest.V2, + 100.0, + StreetTraversalPermission.ALL + ) .withCarSpeed(10.0f) .buildAndConnect(); diff --git a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java index 0e68ea0da78..a3fbfcb018e 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java @@ -312,7 +312,9 @@ private void initFreeFloatingEdgeAndRequest( vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(vertex, formFactor); - Set bannedNetworks = banNetwork ? Set.of(this.vertex.getStation().getNetwork()) : Set.of(); + Set bannedNetworks = banNetwork + ? Set.of(this.vertex.getStation().getNetwork()) + : Set.of(); this.request = StreetSearchRequest From 4e14a55c4454e8dced9e2c158ab3929c3f1e9ca3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 01:46:02 +0000 Subject: [PATCH 031/101] fix(deps): update geotools.version to v30.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 34f4365b580..681d3b015a0 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ 137 - 30.1 + 30.2 2.50 2.16.1 3.1.5 From 47e2b94fb58e00535b9f567b9e5aa1ef535bbd2f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 18:38:46 +0000 Subject: [PATCH 032/101] fix(deps): update dependency org.apache.httpcomponents.client5:httpclient5 to v5.3.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 34f4365b580..06f002ff5c0 100644 --- a/pom.xml +++ b/pom.xml @@ -876,7 +876,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.3 + 5.3.1 commons-cli From 4410fb10d519007e0c45a87928e00022149cac73 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 30 Jan 2024 16:08:42 +0200 Subject: [PATCH 033/101] Rename hopCost/Time -> mountDismountCost/Time in prefs --- docs/RouteRequest.md | 8 +-- .../resources/RequestToPreferencesMapper.java | 4 +- .../apis/gtfs/mapping/RouteRequestMapper.java | 4 +- .../preference/VehicleWalkingPreferences.java | 50 +++++++++---------- .../routerequest/VehicleWalkingConfig.java | 12 ++--- .../street/model/edge/BikeWalkableEdge.java | 12 +++-- .../VehicleWalkingPreferencesTest.java | 20 ++++---- .../street/integration/BikeWalkingTest.java | 5 +- .../street/model/edge/StreetEdgeTest.java | 4 +- 9 files changed, 63 insertions(+), 56 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 199eda8a332..4cae701db57 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -78,8 +78,8 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe |       [safety](#rd_bicycle_triangle_safety) | `double` | Relative importance of safety (range 0-1). | *Optional* | `0.0` | 2.0 | |       time | `double` | Relative importance of duration of travel (range 0-1). | *Optional* | `0.0` | 2.0 | |    walk | `object` | Preferences for walking a vehicle. | *Optional* | | 2.5 | -|       [hopCost](#rd_bicycle_walk_hopCost) | `integer` | The cost of hopping on or off a vehicle. | *Optional* | `0` | 2.0 | -|       [hopTime](#rd_bicycle_walk_hopTime) | `duration` | The time it takes the user to hop on or off a vehicle. | *Optional* | `"PT0S"` | 2.0 | +|       [mountDismountCost](#rd_bicycle_walk_mountDismountCost) | `integer` | The cost of hopping on or off a vehicle. | *Optional* | `0` | 2.0 | +|       [mountDismountTime](#rd_bicycle_walk_mountDismountTime) | `duration` | The time it takes the user to hop on or off a vehicle. | *Optional* | `"PT0S"` | 2.0 | |       reluctance | `double` | A multiplier for how bad walking with a vehicle is, compared to being in transit for equal lengths of time. | *Optional* | `5.0` | 2.1 | |       speed | `double` | The user's vehicle walking speed in meters/second. Defaults to approximately 3 MPH. | *Optional* | `1.33` | 2.1 | |       stairsReluctance | `double` | How bad is it to walk the vehicle up/down a flight of stairs compared to taking a detour. | *Optional* | `10.0` | 2.3 | @@ -525,7 +525,7 @@ This factor can also include other concerns such as convenience and general cycl preferences by taking into account road surface etc. -

hopCost

+

mountDismountCost

**Since version:** `2.0` ∙ **Type:** `integer` ∙ **Cardinality:** `Optional` ∙ **Default value:** `0` **Path:** /routingDefaults/bicycle/walk @@ -536,7 +536,7 @@ There are different parameters for the cost of renting or parking a vehicle and not meant for controlling the cost of those events. -

hopTime

+

mountDismountTime

**Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` **Path:** /routingDefaults/bicycle/walk diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index bfac498ff8c..bf44da6be00 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -89,8 +89,8 @@ private void mapBike() { bike.withWalking(walk -> { setIfNotNull(req.bikeWalkingSpeed, walk::withSpeed); setIfNotNull(req.bikeWalkingReluctance, walk::withReluctance); - setIfNotNull(req.bikeSwitchTime, walk::withHopTime); - setIfNotNull(req.bikeSwitchCost, walk::withHopCost); + setIfNotNull(req.bikeSwitchTime, walk::withMountDismountTime); + setIfNotNull(req.bikeSwitchCost, walk::withMountDismountCost); }); }); } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java index 212bfbcf380..5bc00cb7a85 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java @@ -340,8 +340,8 @@ private static void setVehicleWalkingPreferences( ) { callWith.argument("bikeWalkingReluctance", walking::withReluctance); callWith.argument("bikeWalkingSpeed", walking::withSpeed); - callWith.argument("bikeSwitchTime", time -> walking.withHopTime((int) time)); - callWith.argument("bikeSwitchCost", cost -> walking.withHopCost((int) cost)); + callWith.argument("bikeSwitchTime", time -> walking.withMountDismountTime((int) time)); + callWith.argument("bikeSwitchCost", cost -> walking.withMountDismountCost((int) cost)); } private static class CallerWithEnvironment { diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferences.java index aa3631e1c6b..b7adc04df1c 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferences.java @@ -19,15 +19,15 @@ public class VehicleWalkingPreferences implements Serializable { private final double speed; private final double reluctance; - private final Duration hopTime; - private final Cost hopCost; + private final Duration mountDismountTime; + private final Cost mountDismountCost; private final double stairsReluctance; private VehicleWalkingPreferences() { this.speed = 1.33; this.reluctance = 5.0; - this.hopTime = Duration.ZERO; - this.hopCost = Cost.ZERO; + this.mountDismountTime = Duration.ZERO; + this.mountDismountCost = Cost.ZERO; // very high reluctance to carry the bike up/down a flight of stairs this.stairsReluctance = 10; } @@ -39,8 +39,8 @@ private VehicleWalkingPreferences() { private VehicleWalkingPreferences(Builder builder) { this.speed = Units.speed(builder.speed); this.reluctance = Units.reluctance(builder.reluctance); - this.hopTime = Duration.ofSeconds(Units.duration(builder.hopTime)); - this.hopCost = Cost.costOfSeconds(builder.hopCost); + this.mountDismountTime = Duration.ofSeconds(Units.duration(builder.mountDismountTime)); + this.mountDismountCost = Cost.costOfSeconds(builder.mountDismountCost); this.stairsReluctance = Units.reluctance(builder.stairsReluctance); } @@ -73,13 +73,13 @@ public double reluctance() { } /** Time to get on and off your own vehicle. */ - public Duration hopTime() { - return hopTime; + public Duration mountDismountTime() { + return mountDismountTime; } /** Cost of getting on and off your own vehicle. */ - public Cost hopCost() { - return hopCost; + public Cost mountDismountCost() { + return mountDismountCost; } /** Reluctance of walking carrying a vehicle up a flight of stairs. */ @@ -95,15 +95,15 @@ public boolean equals(Object o) { return ( speed == that.speed && reluctance == that.reluctance && - Objects.equals(hopTime, that.hopTime) && - Objects.equals(hopCost, that.hopCost) && + Objects.equals(mountDismountTime, that.mountDismountTime) && + Objects.equals(mountDismountCost, that.mountDismountCost) && stairsReluctance == that.stairsReluctance ); } @Override public int hashCode() { - return Objects.hash(speed, reluctance, hopTime, hopCost, stairsReluctance); + return Objects.hash(speed, reluctance, mountDismountTime, mountDismountCost, stairsReluctance); } @Override @@ -112,8 +112,8 @@ public String toString() { .of(VehicleWalkingPreferences.class) .addNum("speed", speed, DEFAULT.speed) .addNum("reluctance", reluctance, DEFAULT.reluctance) - .addObj("hopTime", hopTime, DEFAULT.hopTime) - .addObj("hopCost", hopCost, DEFAULT.hopCost) + .addObj("mountDismountTime", mountDismountTime, DEFAULT.mountDismountTime) + .addObj("mountDismountCost", mountDismountCost, DEFAULT.mountDismountCost) .addNum("stairsReluctance", stairsReluctance, DEFAULT.stairsReluctance) .toString(); } @@ -123,16 +123,16 @@ public static class Builder { private final VehicleWalkingPreferences original; private double speed; private double reluctance; - private int hopTime; - private int hopCost; + private int mountDismountTime; + private int mountDismountCost; private double stairsReluctance; private Builder(VehicleWalkingPreferences original) { this.original = original; this.speed = original.speed; this.reluctance = original.reluctance; - this.hopTime = (int) original.hopTime.toSeconds(); - this.hopCost = original.hopCost.toSeconds(); + this.mountDismountTime = (int) original.mountDismountTime.toSeconds(); + this.mountDismountCost = original.mountDismountCost.toSeconds(); this.stairsReluctance = original.stairsReluctance; } @@ -146,18 +146,18 @@ public VehicleWalkingPreferences.Builder withReluctance(double reluctance) { return this; } - public VehicleWalkingPreferences.Builder withHopTime(Duration hopTime) { - this.hopTime = (int) hopTime.toSeconds(); + public VehicleWalkingPreferences.Builder withMountDismountTime(Duration mountDismountTime) { + this.mountDismountTime = (int) mountDismountTime.toSeconds(); return this; } - public VehicleWalkingPreferences.Builder withHopTime(int hopTime) { - this.hopTime = hopTime; + public VehicleWalkingPreferences.Builder withMountDismountTime(int mountDismountTime) { + this.mountDismountTime = mountDismountTime; return this; } - public VehicleWalkingPreferences.Builder withHopCost(int hopCost) { - this.hopCost = hopCost; + public VehicleWalkingPreferences.Builder withMountDismountCost(int mountDismountCost) { + this.mountDismountCost = mountDismountCost; return this; } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/VehicleWalkingConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/VehicleWalkingConfig.java index f2ba922c8e3..2b20e12f755 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/VehicleWalkingConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/VehicleWalkingConfig.java @@ -43,9 +43,9 @@ private static void mapVehicleWalkingPreferences( ) .asDouble(dft.reluctance()) ) - .withHopTime( + .withMountDismountTime( c - .of("hopTime") + .of("mountDismountTime") .since(V2_0) .summary("The time it takes the user to hop on or off a vehicle.") .description( @@ -54,11 +54,11 @@ private static void mapVehicleWalkingPreferences( for controlling the duration of those events. """ ) - .asDuration(dft.hopTime()) + .asDuration(dft.mountDismountTime()) ) - .withHopCost( + .withMountDismountCost( c - .of("hopCost") + .of("mountDismountCost") .since(V2_0) .summary("The cost of hopping on or off a vehicle.") .description( @@ -67,7 +67,7 @@ private static void mapVehicleWalkingPreferences( not meant for controlling the cost of those events. """ ) - .asInt(dft.hopCost().toSeconds()) + .asInt(dft.mountDismountCost().toSeconds()) ) .withStairsReluctance( c diff --git a/src/main/java/org/opentripplanner/street/model/edge/BikeWalkableEdge.java b/src/main/java/org/opentripplanner/street/model/edge/BikeWalkableEdge.java index 799a5b006e6..7f61982434d 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/BikeWalkableEdge.java +++ b/src/main/java/org/opentripplanner/street/model/edge/BikeWalkableEdge.java @@ -17,8 +17,10 @@ default void switchToWalkingBike(RoutingPreferences preferences, StateEditor edi editor.setBackWalkingBike(true); if (shouldIncludeCost) { - editor.incrementWeight(preferences.bike().walking().hopCost().toSeconds()); - editor.incrementTimeInSeconds((int) preferences.bike().walking().hopTime().toSeconds()); + editor.incrementWeight(preferences.bike().walking().mountDismountCost().toSeconds()); + editor.incrementTimeInSeconds( + (int) preferences.bike().walking().mountDismountTime().toSeconds() + ); } } @@ -28,8 +30,10 @@ default void switchToBiking(RoutingPreferences preferences, StateEditor editor) editor.setBackWalkingBike(false); if (shouldIncludeCost) { - editor.incrementWeight(preferences.bike().walking().hopCost().toSeconds()); - editor.incrementTimeInSeconds((int) preferences.bike().walking().hopTime().toSeconds()); + editor.incrementWeight(preferences.bike().walking().mountDismountCost().toSeconds()); + editor.incrementTimeInSeconds( + (int) preferences.bike().walking().mountDismountTime().toSeconds() + ); } } diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferencesTest.java index 9571eee8cc5..fdc416d7c0f 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/VehicleWalkingPreferencesTest.java @@ -11,8 +11,8 @@ class VehicleWalkingPreferencesTest { private static final double SPEED = 1.45; private static final double RELUCTANCE = 5.5; - private static final Duration HOP_TIME = Duration.ofSeconds(15); - private static final Cost HOP_COST = Cost.costOfSeconds(20); + private static final Duration MOUNT_DISMOUNT_TIME = Duration.ofSeconds(15); + private static final Cost MOUNT_DISMOUNT_COST = Cost.costOfSeconds(20); private static final double STAIRS_RELUCTANCE = 11; private final VehicleWalkingPreferences subject = createPreferences(); @@ -28,13 +28,13 @@ void reluctance() { } @Test - void hopTime() { - assertEquals(HOP_TIME, subject.hopTime()); + void mountDismountTime() { + assertEquals(MOUNT_DISMOUNT_TIME, subject.mountDismountTime()); } @Test - void hopCost() { - assertEquals(HOP_COST, subject.hopCost()); + void mountDismountCost() { + assertEquals(MOUNT_DISMOUNT_COST, subject.mountDismountCost()); } @Test @@ -57,8 +57,8 @@ void testToString() { "VehicleWalkingPreferences{" + "speed: 1.45, " + "reluctance: 5.5, " + - "hopTime: PT15S, " + - "hopCost: $20, " + + "mountDismountTime: PT15S, " + + "mountDismountCost: $20, " + "stairsReluctance: 11.0}", subject.toString() ); @@ -69,8 +69,8 @@ private VehicleWalkingPreferences createPreferences() { .of() .withSpeed(SPEED) .withReluctance(RELUCTANCE) - .withHopTime(HOP_TIME) - .withHopCost(HOP_COST.toSeconds()) + .withMountDismountTime(MOUNT_DISMOUNT_TIME) + .withMountDismountCost(MOUNT_DISMOUNT_COST.toSeconds()) .withStairsReluctance(STAIRS_RELUCTANCE) .build(); } diff --git a/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java b/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java index 417f1b87347..41ec677b3bb 100644 --- a/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java +++ b/src/test/java/org/opentripplanner/street/integration/BikeWalkingTest.java @@ -375,7 +375,10 @@ private List runStreetSearchAndCreateDescriptor( preferences .withWalk(w -> w.withSpeed(10)) .withBike(it -> - it.withSpeed(20d).withWalking(w -> w.withSpeed(5d).withHopTime(100).withHopCost(1000)) + it + .withSpeed(20d) + .withWalking(w -> w.withSpeed(5d).withMountDismountTime(100).withMountDismountCost(1000) + ) ) ); request.setArriveBy(arriveBy); diff --git a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java index 42d841b9fa3..ed5768d4a1a 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/StreetEdgeTest.java @@ -221,7 +221,7 @@ public void testBikeSwitch() { StreetSearchRequestBuilder noPenalty = StreetSearchRequest.copyOf(proto); noPenalty.withPreferences(p -> - p.withBike(it -> it.withWalking(w -> w.withHopTime(0).withHopCost(0))) + p.withBike(it -> it.withWalking(w -> w.withMountDismountTime(0).withMountDismountCost(0))) ); State s0 = new State(v0, noPenalty.withMode(StreetMode.BIKE).build()); @@ -231,7 +231,7 @@ public void testBikeSwitch() { StreetSearchRequestBuilder withPenalty = StreetSearchRequest.copyOf(proto); withPenalty.withPreferences(p -> - p.withBike(it -> it.withWalking(w -> w.withHopTime(42).withHopCost(23))) + p.withBike(it -> it.withWalking(w -> w.withMountDismountTime(42).withMountDismountCost(23))) ); State s4 = new State(v0, withPenalty.withMode(StreetMode.BIKE).build()); From 961013204cbea9df1239d32bad16a1684bfe24b4 Mon Sep 17 00:00:00 2001 From: eibakke Date: Wed, 31 Jan 2024 15:46:53 +0100 Subject: [PATCH 034/101] Refactors GroupStopBuilder addLocation method. It now simply adds the geometry of the location to the geometry collection of the GroupStop. It was unclear what the large (100x100 degree) envelopes around regular stops were doing. It looked like a bug, and the geometry of GroupStops appears unused so it should be safe to change. --- .../transit/model/site/GroupStopBuilder.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java b/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java index 8873e6ede99..a8db22b1368 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java +++ b/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.function.IntSupplier; import javax.annotation.Nonnull; -import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryCollection; import org.opentripplanner.framework.geometry.GeometryUtils; @@ -69,6 +68,17 @@ public I18NString name() { } public GroupStopBuilder addLocation(StopLocation location) { + if ( + !( + location.getStopType() == StopType.REGULAR || + location.getStopType() == StopType.FLEXIBLE_AREA + ) + ) { + throw new RuntimeException( + "Unsupported location for GroupStop. Must be Regular or FlexibleArea." + ); + } + stopLocations.add(location); int numGeometries = geometry.getNumGeometries(); @@ -76,17 +86,8 @@ public GroupStopBuilder addLocation(StopLocation location) { for (int i = 0; i < numGeometries; i++) { newGeometries[i] = geometry.getGeometryN(i); } - if (location instanceof RegularStop) { - WgsCoordinate coordinate = location.getCoordinate(); - Envelope envelope = new Envelope(coordinate.asJtsCoordinate()); - double xscale = Math.cos(coordinate.latitude() * Math.PI / 180); - envelope.expandBy(100 / xscale, 100); - newGeometries[numGeometries] = GeometryUtils.getGeometryFactory().toGeometry(envelope); - } else if (location instanceof AreaStop) { - newGeometries[numGeometries] = location.getGeometry(); - } else { - throw new RuntimeException("Unknown location type"); - } + newGeometries[numGeometries] = location.getGeometry(); + geometry = new GeometryCollection(newGeometries, GeometryUtils.getGeometryFactory()); centroid = new WgsCoordinate(geometry.getCentroid()); From 195bb633401b3f400bc112303f866805b49a7d7d Mon Sep 17 00:00:00 2001 From: eibakke Date: Wed, 31 Jan 2024 15:46:53 +0100 Subject: [PATCH 035/101] Refactors GroupStopBuilder addLocation method. It now simply adds the geometry of the location to the geometry collection of the GroupStop. It was unclear what the large (100x100 degree) envelopes around regular stops were doing. It looked like a bug, and the geometry of GroupStops appears unused so it should be safe to change. --- .../transit/model/site/GroupStopBuilder.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java b/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java index 8873e6ede99..a8db22b1368 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java +++ b/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.function.IntSupplier; import javax.annotation.Nonnull; -import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryCollection; import org.opentripplanner.framework.geometry.GeometryUtils; @@ -69,6 +68,17 @@ public I18NString name() { } public GroupStopBuilder addLocation(StopLocation location) { + if ( + !( + location.getStopType() == StopType.REGULAR || + location.getStopType() == StopType.FLEXIBLE_AREA + ) + ) { + throw new RuntimeException( + "Unsupported location for GroupStop. Must be Regular or FlexibleArea." + ); + } + stopLocations.add(location); int numGeometries = geometry.getNumGeometries(); @@ -76,17 +86,8 @@ public GroupStopBuilder addLocation(StopLocation location) { for (int i = 0; i < numGeometries; i++) { newGeometries[i] = geometry.getGeometryN(i); } - if (location instanceof RegularStop) { - WgsCoordinate coordinate = location.getCoordinate(); - Envelope envelope = new Envelope(coordinate.asJtsCoordinate()); - double xscale = Math.cos(coordinate.latitude() * Math.PI / 180); - envelope.expandBy(100 / xscale, 100); - newGeometries[numGeometries] = GeometryUtils.getGeometryFactory().toGeometry(envelope); - } else if (location instanceof AreaStop) { - newGeometries[numGeometries] = location.getGeometry(); - } else { - throw new RuntimeException("Unknown location type"); - } + newGeometries[numGeometries] = location.getGeometry(); + geometry = new GeometryCollection(newGeometries, GeometryUtils.getGeometryFactory()); centroid = new WgsCoordinate(geometry.getCentroid()); From c0ebcbef4a88af8752ad3dd26bc866932edd5bf2 Mon Sep 17 00:00:00 2001 From: eibakke Date: Thu, 1 Feb 2024 13:56:49 +0100 Subject: [PATCH 036/101] Adds unit test for GroupStop's geometry and encompassingAreaGeometry. --- .../transit/model/site/GroupStopBuilder.java | 7 ++- .../transit/model/site/GroupStopTest.java | 58 ++++++++++++++++++- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java b/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java index a8db22b1368..64cad9325d1 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java +++ b/src/main/java/org/opentripplanner/transit/model/site/GroupStopBuilder.java @@ -75,7 +75,12 @@ public GroupStopBuilder addLocation(StopLocation location) { ) ) { throw new RuntimeException( - "Unsupported location for GroupStop. Must be Regular or FlexibleArea." + String.format( + "Unsupported location for %s. Must be %s or %s.", + GroupStop.class.getSimpleName(), + StopType.REGULAR, + StopType.FLEXIBLE_AREA + ) ); } diff --git a/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java b/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java index 17938131eef..dcf9bc3aeed 100644 --- a/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java +++ b/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java @@ -6,7 +6,12 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.List; +import java.util.Objects; import org.junit.jupiter.api.Test; +import org.locationtech.jts.geom.Envelope; +import org.locationtech.jts.geom.Geometry; +import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.transit.model._data.TransitModelForTest; @@ -14,7 +19,7 @@ class GroupStopTest { - private static TransitModelForTest TEST_MODEL = TransitModelForTest.of(); + private static final TransitModelForTest TEST_MODEL = TransitModelForTest.of(); private static final String ID = "1"; private static final I18NString NAME = new NonLocalizedString("name"); @@ -27,6 +32,57 @@ class GroupStopTest { .addLocation(STOP_LOCATION) .build(); + @Test + void testGroupStopGeometry() { + StopLocation stopLocation1 = TEST_MODEL.stop("1:stop", 1d, 1d).build(); + StopLocation stopLocation2 = TEST_MODEL.stop("2:stop", 2d, 2d).build(); + + GroupStop groupStop = StopModel + .of() + .groupStop(TransitModelForTest.id(ID)) + .withName(NAME) + .addLocation(stopLocation1) + .addLocation(stopLocation2) + .build(); + + Geometry groupStopGeometry1 = Objects.requireNonNull(groupStop.getGeometry()).getGeometryN(0); + assertEquals(stopLocation1.getGeometry(), groupStopGeometry1); + + Geometry groupStopGeometry2 = Objects.requireNonNull(groupStop.getGeometry()).getGeometryN(1); + assertEquals(stopLocation2.getGeometry(), groupStopGeometry2); + } + + @Test + void testGroupStopEncompassingAreaGeometry() { + Geometry encompassingAreaGeometry = GeometryUtils + .getGeometryFactory() + .toGeometry(new Envelope(1d, 2d, 1d, 2d)); + + StopLocation stopLocation = TEST_MODEL + .stop( + "1:stop", + encompassingAreaGeometry.getCentroid().getX(), + encompassingAreaGeometry.getCentroid().getY() + ) + .build(); + + GroupStop groupStop = StopModel + .of() + .groupStop(TransitModelForTest.id(ID)) + .withName(NAME) + .addLocation(stopLocation) + .withEncompassingAreaGeometries(List.of(encompassingAreaGeometry)) + .build(); + + Geometry groupStopGeometry = Objects.requireNonNull(groupStop.getGeometry()).getGeometryN(0); + assertEquals(stopLocation.getGeometry(), groupStopGeometry); + + assertEquals( + encompassingAreaGeometry, + groupStop.getEncompassingAreaGeometry().orElseThrow().getGeometryN(0) + ); + } + @Test void copy() { assertEquals(ID, subject.getId().getId()); From 34bd9bb35e1f30ba2f19be2e0ed4f11c1316039f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 28 Sep 2023 10:58:23 +0200 Subject: [PATCH 037/101] Remove VehicleToStopHeuristics --- docs/Configuration.md | 1 - docs/SandboxExtension.md | 1 - docs/examples/entur/otp-config.json | 3 +- docs/sandbox/VehicleToStopHeuristics.md | 77 ------------- mkdocs.yml | 1 - .../BikeToStopSkipEdgeStrategy.java | 58 ---------- .../VehicleToStopSkipEdgeStrategy.java | 109 ------------------ .../framework/application/OTPFeature.java | 3 +- .../module/NearbyStopFinder.java | 47 ++------ 9 files changed, 9 insertions(+), 291 deletions(-) delete mode 100644 docs/sandbox/VehicleToStopHeuristics.md delete mode 100644 src/ext/java/org/opentripplanner/ext/vehicletostopheuristics/BikeToStopSkipEdgeStrategy.java delete mode 100644 src/ext/java/org/opentripplanner/ext/vehicletostopheuristics/VehicleToStopSkipEdgeStrategy.java diff --git a/docs/Configuration.md b/docs/Configuration.md index 858edf0f9b4..93ca1fa6c1e 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -250,7 +250,6 @@ Here is a list of all features which can be toggled on/off and their default val | `SandboxAPIParkAndRideApi` | Enable park-and-ride endpoint. | | ✓️ | | `SandboxAPITravelTime` | Enable the isochrone/travel time surface API. | | ✓️ | | `TransferAnalyzer` | Analyze transfers during graph build. | | ✓️ | -| `VehicleToStopHeuristics` | Enable improved heuristic for park-and-ride queries. | | ✓️ | diff --git a/docs/SandboxExtension.md b/docs/SandboxExtension.md index 4b978313ca6..914be238da4 100644 --- a/docs/SandboxExtension.md +++ b/docs/SandboxExtension.md @@ -23,7 +23,6 @@ nearby stops generated by routing via OSM data. - [Park and Ride API](sandbox/ParkAndRideApi.md) - Park and Ride API - [Data Overlay](sandbox/DataOverlay.md) - StreetEdge grid data populating affecting the route planning - [Vehicle Parking](sandbox/VehicleParking.md) - Vehicle Parking updaters -- [Vehicle-to-stop heuristics](sandbox/VehicleToStopHeuristics.md) - Speeding up Park+Ride, Bike+Ride and Bike+Transit searches - [Travel Time (Isochrone & Surface) API](sandbox/TravelTime.md) - Travel Time API - [IBI accessibility score](sandbox/IBIAccessibilityScore.md) - IBI accessibility score - [Fares](sandbox/Fares.md) - Fare calculation diff --git a/docs/examples/entur/otp-config.json b/docs/examples/entur/otp-config.json index 1746cd186d4..a072a3d4f30 100644 --- a/docs/examples/entur/otp-config.json +++ b/docs/examples/entur/otp-config.json @@ -6,7 +6,6 @@ "OptimizeTransfers": true, "TransferConstraints": true, "ParallelRouting": false, - "ReportApi" : true, - "VehicleToStopHeuristics": true + "ReportApi" : true } } \ No newline at end of file diff --git a/docs/sandbox/VehicleToStopHeuristics.md b/docs/sandbox/VehicleToStopHeuristics.md deleted file mode 100644 index 3197bbdca9d..00000000000 --- a/docs/sandbox/VehicleToStopHeuristics.md +++ /dev/null @@ -1,77 +0,0 @@ -# Vehicle-to-Stop heuristics - OTP Sandbox Extension - -## Contact Info - -- Leonard Ehrenfried ([mail@leonard.io](mailto:mail@leonard.io)) - -## Changelog - -- Create initial - implementation [#3906](https://github.com/opentripplanner/OpenTripPlanner/pull/3906) - -## Documentation - -This feature is meant to improve the performance and result quality for routing requests where a -vehicle (car, bike, scooter) is ridden to a stop where transit is boarded. - -Before this feature existed a search for nearby stops was executed finding all candidate stops for -boarding transit. For walking this yields a low number of stops but when driving a car this can -easily mean to an entire city of stops, since the default was a drive of 45 minutes. - -Having a very long driving time has several problems: - -- the access search itself is comparatively slow -- having many candidate stops slows down the transit search as many routes have to be checked -- often the quickest route would be to drive almost all the way to the destination and board transit - for a single stop - -We did not want to lower the maximum access time since in rural regions 45 minutes might be a useful -maximum, but we want it to scale with the density of well-connected stops. - -### Vehicle-to-stop heuristic - -In order to improve the Park+Ride and Bike+Ride results we reduced the number of candidate stops -with the following heuristic: - -1. When a stop is encountered check which routes depart from it -2. Each route adds to an "importance score" -3. Modes which are fast (RAIL, SUBWAY, FERRY) have a higher score than for example BUS -4. Once a maximum score is reached, the search is complete - -The code for this is located in `VehicleToStopSkipEdgeStrategy.java`. - -### Bicycle-on-transit heuristic - -This heuristic works slightly differently in that it doesn't assign a score but simply stops the -access search when a certain number of routes were encountered that allow you to take your bike onto -transit. - -The code for this is located in `BikeToStopSkipEdgeStrategy.java`. - -### Configuration - -Enable the feature by adding it to the ```otp-config.json```: - -```json -// otp-config.json -{ - "otpFeatures": { - "VehicleToStopHeuristics": true - } -} -``` - -### Collaborators wanted - -Since the current settings, scores and weights are hardcoded in the source code we are looking for -collaborators that can help to make it more adaptable for different environments. - -These are some the goals for the future: - -- make the scores that are assigned for routes of a certain mode configurable in JSON -- pre-calculate stop importance scores during the graph build - -If you want to help making this feature more flexible, please -contact [Leonard Ehrenfried](mailto:mail@leonard.io) -or use the regular channels of communication outlined -in [CONTRIBUTING.md](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/CONTRIBUTING.md#primary-channels-of-communication) \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index e4341b296fc..c4717d4d2e0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -106,7 +106,6 @@ nav: - Park and Ride API: 'sandbox/ParkAndRideApi.md' - Data Overlay: 'sandbox/DataOverlay.md' - Vehicle Parking Updaters: 'sandbox/VehicleParking.md' - - Vehicle-to-stop Heuristics: 'sandbox/VehicleToStopHeuristics.md' - Geocoder API: 'sandbox/GeocoderAPI.md' - Travel Time Isochrones: 'sandbox/TravelTime.md' - IBI Accessibility Score: 'sandbox/IBIAccessibilityScore.md' diff --git a/src/ext/java/org/opentripplanner/ext/vehicletostopheuristics/BikeToStopSkipEdgeStrategy.java b/src/ext/java/org/opentripplanner/ext/vehicletostopheuristics/BikeToStopSkipEdgeStrategy.java deleted file mode 100644 index ad503b1212d..00000000000 --- a/src/ext/java/org/opentripplanner/ext/vehicletostopheuristics/BikeToStopSkipEdgeStrategy.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.opentripplanner.ext.vehicletostopheuristics; - -import java.util.Collection; -import java.util.function.Function; -import org.opentripplanner.astar.spi.SkipEdgeStrategy; -import org.opentripplanner.street.model.edge.Edge; -import org.opentripplanner.street.model.vertex.TransitStopVertex; -import org.opentripplanner.street.search.state.State; -import org.opentripplanner.transit.model.network.BikeAccess; -import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.model.timetable.Trip; - -/** - * When wanting to take a bike onto transit we want to improve the performance by limiting the - * number of accesses to those stops which actually have trips where you can take the bike on. Once - * we have reached enough of trips we skip all further edges. - */ -public class BikeToStopSkipEdgeStrategy implements SkipEdgeStrategy { - - private static final int LIMIT = 100; - private static final double MAX_FACTOR = 1.2; - - private final Function> getTripsForStop; - - int numberOfBikeableTripsReached = 0; - double distanceLimit = Double.MAX_VALUE; - - public BikeToStopSkipEdgeStrategy(Function> getTripsForStop) { - this.getTripsForStop = getTripsForStop; - } - - public static boolean bikeAccessForTrip(Trip trip) { - if (trip.getBikesAllowed() != BikeAccess.UNKNOWN) { - return trip.getBikesAllowed() == BikeAccess.ALLOWED; - } - - return trip.getRoute().getBikesAllowed() == BikeAccess.ALLOWED; - } - - @Override - public boolean shouldSkipEdge(State current, Edge edge) { - if ( - current.getVertex() instanceof TransitStopVertex stopVertex && - distanceLimit == Double.MAX_VALUE - ) { - numberOfBikeableTripsReached += - getTripsForStop - .apply(stopVertex.getStop()) - .stream() - .filter(BikeToStopSkipEdgeStrategy::bikeAccessForTrip) - .count(); - if (numberOfBikeableTripsReached >= LIMIT) { - distanceLimit = current.getWalkDistance() * MAX_FACTOR; - } - } - return current.getWalkDistance() > distanceLimit; - } -} diff --git a/src/ext/java/org/opentripplanner/ext/vehicletostopheuristics/VehicleToStopSkipEdgeStrategy.java b/src/ext/java/org/opentripplanner/ext/vehicletostopheuristics/VehicleToStopSkipEdgeStrategy.java deleted file mode 100644 index 3eb466f97b9..00000000000 --- a/src/ext/java/org/opentripplanner/ext/vehicletostopheuristics/VehicleToStopSkipEdgeStrategy.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.opentripplanner.ext.vehicletostopheuristics; - -import static org.opentripplanner.routing.api.request.StreetMode.BIKE_RENTAL; -import static org.opentripplanner.routing.api.request.StreetMode.BIKE_TO_PARK; -import static org.opentripplanner.routing.api.request.StreetMode.CAR_HAILING; -import static org.opentripplanner.routing.api.request.StreetMode.CAR_PICKUP; -import static org.opentripplanner.routing.api.request.StreetMode.CAR_RENTAL; -import static org.opentripplanner.routing.api.request.StreetMode.CAR_TO_PARK; -import static org.opentripplanner.routing.api.request.StreetMode.SCOOTER_RENTAL; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.Function; -import org.opentripplanner.astar.spi.SkipEdgeStrategy; -import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.api.request.request.filter.TransitFilter; -import org.opentripplanner.street.model.edge.Edge; -import org.opentripplanner.street.model.vertex.TransitStopVertex; -import org.opentripplanner.street.search.state.State; -import org.opentripplanner.transit.model.basic.TransitMode; -import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.model.network.TripPattern; -import org.opentripplanner.transit.model.site.RegularStop; - -/** - * This strategy terminates when enough "important" stops are found. - *

- * The definition of important is a stop where many routes of mode RAIL, SUBWAY or FERRY depart. - *

- * This means that the search radius scales with density of "important" stops: - *

- *

  • in a city the radius is quite small - *
  • in more rural regions the radius is bigger and stops further away are considered - *

    - * The strategy is useful when you want to limit the number of accesses of Park+Ride, Bike+Ride and - * Bike+Transit: it improves both performance the quality of results. - *

    - * {@see https://github.com/opentripplanner/OpenTripPlanner/pull/3906} - */ -public class VehicleToStopSkipEdgeStrategy implements SkipEdgeStrategy { - - public static final Set applicableModes = Set.of( - BIKE_TO_PARK, - BIKE_RENTAL, - CAR_TO_PARK, - CAR_PICKUP, - CAR_HAILING, - CAR_RENTAL, - SCOOTER_RENTAL - ); - private final Function> getPatternsForStop; - private final int maxScore; - private final List filters; - private double sumOfScores; - - private final Set stopsCounted = new HashSet<>(); - - public VehicleToStopSkipEdgeStrategy( - Function> getPatternsForStop, - Collection filters - ) { - this.filters = new ArrayList<>(filters); - this.maxScore = 300; - this.getPatternsForStop = getPatternsForStop; - } - - @Override - public boolean shouldSkipEdge(State current, Edge edge) { - if (current.currentMode().isWalking()) { - if ( - current.getVertex() instanceof TransitStopVertex stopVertex && - !stopsCounted.contains(stopVertex.getStop().getId()) - ) { - // TODO: 2022-12-05 filters: check performance on that and verify that this is right. Previously we were filtering just on modes - var stop = stopVertex.getStop(); - - // Not using streams. Performance is important here - var patterns = getPatternsForStop.apply(stop); - var score = 0; - for (var pattern : patterns) { - for (var filter : filters) { - if (filter.matchTripPattern(pattern)) { - score += VehicleToStopSkipEdgeStrategy.score(pattern.getMode()); - break; - } - } - } - - stopsCounted.add(stop.getId()); - - sumOfScores = sumOfScores + score; - } - return false; - } else { - return sumOfScores >= maxScore; - } - } - - private static int score(TransitMode mode) { - return switch (mode) { - case RAIL, FERRY, SUBWAY -> 20; - case BUS -> 1; - default -> 2; - }; - } -} diff --git a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index 4847b204077..4ae5004cf6b 100644 --- a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -105,8 +105,7 @@ public enum OTPFeature { SandboxAPIMapboxVectorTilesApi(false, true, "Enable Mapbox vector tiles API."), SandboxAPIParkAndRideApi(false, true, "Enable park-and-ride endpoint."), SandboxAPITravelTime(false, true, "Enable the isochrone/travel time surface API."), - TransferAnalyzer(false, true, "Analyze transfers during graph build."), - VehicleToStopHeuristics(false, true, "Enable improved heuristic for park-and-ride queries."); + TransferAnalyzer(false, true, "Analyze transfers during graph build."); private static final Object TEST_LOCK = new Object(); diff --git a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java index 360cdaee363..0cac2a21308 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java @@ -18,8 +18,6 @@ import org.opentripplanner.astar.strategy.MaxCountSkipEdgeStrategy; import org.opentripplanner.ext.dataoverlay.routing.DataOverlayContext; import org.opentripplanner.ext.flex.trip.FlexTrip; -import org.opentripplanner.ext.vehicletostopheuristics.BikeToStopSkipEdgeStrategy; -import org.opentripplanner.ext.vehicletostopheuristics.VehicleToStopSkipEdgeStrategy; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.routing.api.request.RouteRequest; @@ -205,7 +203,7 @@ public List findNearbyStopsViaStreets( ShortestPathTree spt = StreetSearchBuilder .of() - .setSkipEdgeStrategy(getSkipEdgeStrategy(reverseDirection, request)) + .setSkipEdgeStrategy(getSkipEdgeStrategy()) .setDominanceFunction(new DominanceFunctions.MinimumWeight()) .setRequest(request) .setArriveBy(reverseDirection) @@ -271,48 +269,17 @@ private List findNearbyStopsViaDirectTransfers(Vertex vertex) { return directGraphFinder.findClosestStops(c0, limitMeters); } - private SkipEdgeStrategy getSkipEdgeStrategy( - boolean reverseDirection, - RouteRequest routingRequest - ) { + private SkipEdgeStrategy getSkipEdgeStrategy() { var durationSkipEdgeStrategy = new DurationSkipEdgeStrategy(durationLimit); - // if we compute the accesses for Park+Ride, Bike+Ride and Bike+Transit we don't want to - // search the full durationLimit as this returns way too many stops. - // this is both slow and returns suboptimal results as it favours long drives with short - // transit legs. - // therefore, we use a heuristic based on the number of routes and their mode to determine - // what are "good" stops for those accesses. if we have reached a threshold of "good" stops - // we stop the access search. - if ( - !reverseDirection && - OTPFeature.VehicleToStopHeuristics.isOn() && - VehicleToStopSkipEdgeStrategy.applicableModes.contains( - routingRequest.journey().access().mode() - ) - ) { - var strategy = new VehicleToStopSkipEdgeStrategy( - transitService::getPatternsForStop, - routingRequest.journey().transit().filters() + if (maxStopCount > 0) { + var strategy = new MaxCountSkipEdgeStrategy<>( + maxStopCount, + NearbyStopFinder::hasReachedStop ); - - return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); - } else if ( - OTPFeature.VehicleToStopHeuristics.isOn() && - routingRequest.journey().access().mode() == StreetMode.BIKE - ) { - var strategy = new BikeToStopSkipEdgeStrategy(transitService::getTripsForStop); return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); - } else { - if (maxStopCount > 0) { - var strategy = new MaxCountSkipEdgeStrategy<>( - maxStopCount, - NearbyStopFinder::hasReachedStop - ); - return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); - } - return durationSkipEdgeStrategy; } + return durationSkipEdgeStrategy; } private static List createDirectlyConnectedStops( From fa30c9c069883a910f14933c2d89b89df79320ce Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 16 Oct 2023 18:24:27 +0200 Subject: [PATCH 038/101] Set default cost for penalty --- .../framework/TimeAndCostPenaltyForEnum.java | 7 +++++++ .../preference/AccessEgressPreferences.java | 16 ++++++++++++++-- .../config/framework/json/ParameterBuilder.java | 5 +++-- .../config/routerequest/RouteRequestConfig.java | 6 +++++- .../config/framework/json/NodeAdapterTest.java | 12 ++++++++++-- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java b/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java index 60bd4d4c769..c45fc3e33a8 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java +++ b/src/main/java/org/opentripplanner/routing/api/request/framework/TimeAndCostPenaltyForEnum.java @@ -81,6 +81,13 @@ private EnumMap copyValues() { return values.isEmpty() ? new EnumMap<>(type) : new EnumMap<>(values); } + /** + * Convert the values to an {@link EnumMap}. + */ + public EnumMap asEnumMap() { + return copyValues(); + } + private static > String toString( Class clazz, Map values diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java index db8845e7c41..54d761d1030 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java @@ -7,12 +7,12 @@ import java.util.Map; import java.util.Objects; import java.util.function.Consumer; -import org.opentripplanner.framework.model.Units; import org.opentripplanner.framework.tostring.ToStringBuilder; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.framework.DurationForEnum; import org.opentripplanner.routing.api.request.framework.TimeAndCostPenalty; import org.opentripplanner.routing.api.request.framework.TimeAndCostPenaltyForEnum; +import org.opentripplanner.routing.api.request.framework.TimePenalty; /** * Preferences for access/egress routing on street network @@ -21,14 +21,26 @@ */ public final class AccessEgressPreferences implements Serializable { + private static final TimeAndCostPenalty DEFAULT_PENALTY = TimeAndCostPenalty.of( + TimePenalty.of(ofMinutes(10), 1.5f), + 2.5 + ); + private static final TimeAndCostPenaltyForEnum DEFAULT_TIME_AND_COST = TimeAndCostPenaltyForEnum + .of(StreetMode.class) + .with(StreetMode.CAR_TO_PARK, DEFAULT_PENALTY) + .with(StreetMode.CAR_HAILING, DEFAULT_PENALTY) + .with(StreetMode.CAR_RENTAL, DEFAULT_PENALTY) + .build(); + public static final AccessEgressPreferences DEFAULT = new AccessEgressPreferences(); + private final TimeAndCostPenaltyForEnum penalty; private final DurationForEnum maxDuration; private final int maxStopCount; private AccessEgressPreferences() { this.maxDuration = durationForStreetModeOf(ofMinutes(45)); - this.penalty = TimeAndCostPenaltyForEnum.ofDefault(StreetMode.class); + this.penalty = DEFAULT_TIME_AND_COST; this.maxStopCount = 500; } diff --git a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java index f1d90d0ec40..088a7794585 100644 --- a/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java +++ b/src/main/java/org/opentripplanner/standalone/config/framework/json/ParameterBuilder.java @@ -303,14 +303,15 @@ public > Map asEnumMap(Class enumType, Class el */ public > Map asEnumMap( Class enumType, - Function typeMapper + Function typeMapper, + Map defaultValue ) { info.withOptional().withEnumMap(enumType, OBJECT); var mapNode = buildObject(); if (mapNode.isEmpty()) { - return Map.of(); + return defaultValue; } EnumMap result = new EnumMap<>(enumType); diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 4538f6de84d..264e50a6df1 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -472,7 +472,11 @@ the access legs used. In other cases where the access(CAR) is faster than transi extra cost, while 1.0 will add the same amount to both time and cost. """ ) - .asEnumMap(StreetMode.class, TimeAndCostPenaltyMapper::map) + .asEnumMap( + StreetMode.class, + TimeAndCostPenaltyMapper::map, + dftAccessEgress.penalty().asEnumMap() + ) ) .withMaxDuration( cae diff --git a/src/test/java/org/opentripplanner/standalone/config/framework/json/NodeAdapterTest.java b/src/test/java/org/opentripplanner/standalone/config/framework/json/NodeAdapterTest.java index f975579cbf5..be44d1ea86f 100644 --- a/src/test/java/org/opentripplanner/standalone/config/framework/json/NodeAdapterTest.java +++ b/src/test/java/org/opentripplanner/standalone/config/framework/json/NodeAdapterTest.java @@ -225,15 +225,23 @@ public void asEnumMapWithCustomType() { NodeAdapter subject = newNodeAdapterForTest("{ key : { A: {a:'Foo'} } }"); assertEquals( Map.of(AnEnum.A, new ARecord("Foo")), - subject.of("key").asEnumMap(AnEnum.class, ARecord::fromJson) + subject.of("key").asEnumMap(AnEnum.class, ARecord::fromJson, Map.of()) ); assertEquals( Collections.emptyMap(), - subject.of("missing-key").asEnumMap(AnEnum.class, ARecord::fromJson) + subject.of("missing-key").asEnumMap(AnEnum.class, ARecord::fromJson, Map.of()) ); assertEquals(NON_UNUSED_PARAMETERS, unusedParams(subject)); } + @Test + public void asEnumMapWithDefaultValue() { + var subject = newNodeAdapterForTest("{}"); + final Map dflt = Map.of(AnEnum.A, new ARecord("Foo")); + assertEquals(dflt, subject.of("key").asEnumMap(AnEnum.class, ARecord::fromJson, dflt)); + assertEquals(NON_UNUSED_PARAMETERS, unusedParams(subject)); + } + @Test public void asEnumMapWithUnknownKey() { NodeAdapter subject = newNodeAdapterForTest("{ enumMap : { unknown : 7 } }"); From 2a63edf8c22cc44668c8261cdd78458a5ce39012 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 16 Oct 2023 23:27:19 +0200 Subject: [PATCH 039/101] Finetune default values --- docs/RouteRequest.md | 6 +++++- .../preference/AccessEgressPreferences.java | 4 ++-- .../config/routerequest/RouteRequestConfig.java | 16 ++++++++++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 199eda8a332..791df446c89 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -406,7 +406,11 @@ since the search-window is increased with the same amount as the maximum penalty the access legs used. In other cases where the access(CAR) is faster than transit the performance will be better. -The default is no penalty, if not configured. +The default values are + +- CAR_TO_PARK = (timePenalty: 30m + 2.0 t, costFactor: 2.0) +- CAR_RENTAL = (timePenalty: 30m + 2.0 t, costFactor: 2.0) +- CAR_HAILING = (timePenalty: 30m + 2.0 t, costFactor: 2.0) Example: `"car-to-park" : { "timePenalty": "10m + 1.5t", "costFactor": 2.5 }` diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java index 54d761d1030..b967bd34f58 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java @@ -22,8 +22,8 @@ public final class AccessEgressPreferences implements Serializable { private static final TimeAndCostPenalty DEFAULT_PENALTY = TimeAndCostPenalty.of( - TimePenalty.of(ofMinutes(10), 1.5f), - 2.5 + TimePenalty.of(ofMinutes(30), 2f), + 2 ); private static final TimeAndCostPenaltyForEnum DEFAULT_TIME_AND_COST = TimeAndCostPenaltyForEnum .of(StreetMode.class) diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 264e50a6df1..49596759063 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -15,6 +15,8 @@ import static org.opentripplanner.standalone.config.routerequest.WheelchairConfig.mapWheelchairPreferences; import java.time.Duration; +import java.util.List; +import java.util.stream.Collectors; import org.opentripplanner.api.parameter.QualifiedModeSet; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.routing.api.request.RequestModes; @@ -455,7 +457,9 @@ private static void mapStreetPreferences(NodeAdapter c, StreetPreferences.Builde the access legs used. In other cases where the access(CAR) is faster than transit the performance will be better. - The default is no penalty, if not configured. + The default values are + + %s Example: `"car-to-park" : { "timePenalty": "10m + 1.5t", "costFactor": 2.5 }` @@ -470,7 +474,15 @@ the access legs used. In other cases where the access(CAR) is faster than transi The `costFactor` is used to add an additional cost to the leg´s generalized-cost. The time-penalty is multiplied with the cost-factor. A cost-factor of zero, gives no extra cost, while 1.0 will add the same amount to both time and cost. - """ + """.formatted( + dftAccessEgress + .penalty() + .asEnumMap() + .entrySet() + .stream() + .map(s -> "- %s = %s".formatted(s.getKey(), s.getValue())) + .collect(Collectors.joining("\n")) + ) ) .asEnumMap( StreetMode.class, From f5e7caef0b778c9279f29c75ca9bf7c1b4feed92 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 16 Oct 2023 23:52:57 +0200 Subject: [PATCH 040/101] Improve tests and documentation --- docs/RouteRequest.md | 6 +++--- .../org/opentripplanner/framework/lang/StringUtils.java | 9 +++++++++ .../standalone/config/framework/json/EnumMapper.java | 7 ++----- .../standalone/config/framework/json/NodeInfo.java | 3 ++- .../config/routerequest/RouteRequestConfig.java | 8 +++++++- .../api/request/preference/StreetPreferencesTest.java | 5 ++--- 6 files changed, 25 insertions(+), 13 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 791df446c89..e90ea91b549 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -408,9 +408,9 @@ performance will be better. The default values are -- CAR_TO_PARK = (timePenalty: 30m + 2.0 t, costFactor: 2.0) -- CAR_RENTAL = (timePenalty: 30m + 2.0 t, costFactor: 2.0) -- CAR_HAILING = (timePenalty: 30m + 2.0 t, costFactor: 2.0) +- `car-to-park` = (timePenalty: 30m + 2.0 t, costFactor: 2.0) +- `car-rental` = (timePenalty: 30m + 2.0 t, costFactor: 2.0) +- `car-hailing` = (timePenalty: 30m + 2.0 t, costFactor: 2.0) Example: `"car-to-park" : { "timePenalty": "10m + 1.5t", "costFactor": 2.5 }` diff --git a/src/main/java/org/opentripplanner/framework/lang/StringUtils.java b/src/main/java/org/opentripplanner/framework/lang/StringUtils.java index c726d03c66c..87613d61294 100644 --- a/src/main/java/org/opentripplanner/framework/lang/StringUtils.java +++ b/src/main/java/org/opentripplanner/framework/lang/StringUtils.java @@ -110,4 +110,13 @@ public static String padRight(String value, char ch, int width) { public static String quoteReplace(@Nonnull String text) { return text.replace('\'', '\"'); } + + /** + * Convert "HELLO_WORLD" or "Hello_World" to "hello-world". + *

    + * https://developer.mozilla.org/en-US/docs/Glossary/Kebab_case + */ + public static String kebabCase(String input) { + return input.toLowerCase().replace('_', '-'); + } } diff --git a/src/main/java/org/opentripplanner/standalone/config/framework/json/EnumMapper.java b/src/main/java/org/opentripplanner/standalone/config/framework/json/EnumMapper.java index ce880058005..0e048a2e3e7 100644 --- a/src/main/java/org/opentripplanner/standalone/config/framework/json/EnumMapper.java +++ b/src/main/java/org/opentripplanner/standalone/config/framework/json/EnumMapper.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.Optional; import org.opentripplanner.framework.doc.DocumentedEnum; +import org.opentripplanner.framework.lang.StringUtils; public class EnumMapper { @@ -23,11 +24,7 @@ public static Optional> mapToEnum2(String text, Class en) { - return kebabCase(en.name()); - } - - public static String kebabCase(String input) { - return input.toLowerCase().replace('_', '-'); + return StringUtils.kebabCase(en.name()); } /** diff --git a/src/main/java/org/opentripplanner/standalone/config/framework/json/NodeInfo.java b/src/main/java/org/opentripplanner/standalone/config/framework/json/NodeInfo.java index 296c07805f9..06675475fd1 100644 --- a/src/main/java/org/opentripplanner/standalone/config/framework/json/NodeInfo.java +++ b/src/main/java/org/opentripplanner/standalone/config/framework/json/NodeInfo.java @@ -7,6 +7,7 @@ import java.util.Objects; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.framework.tostring.ValueObjectToStringBuilder; /** @@ -137,7 +138,7 @@ public List> enumTypeValues() { */ public String toMarkdownString(Object value) { if (enumType != null) { - value = EnumMapper.kebabCase(value.toString()); + value = StringUtils.kebabCase(value.toString()); } return type.quote(value); } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 49596759063..600579f5513 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -19,6 +19,7 @@ import java.util.stream.Collectors; import org.opentripplanner.api.parameter.QualifiedModeSet; import org.opentripplanner.framework.application.OTPFeature; +import org.opentripplanner.framework.lang.StringUtils; import org.opentripplanner.routing.api.request.RequestModes; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; @@ -480,7 +481,12 @@ the access legs used. In other cases where the access(CAR) is faster than transi .asEnumMap() .entrySet() .stream() - .map(s -> "- %s = %s".formatted(s.getKey(), s.getValue())) + .map(s -> + "- `%s` = %s".formatted( + StringUtils.kebabCase(s.getKey().toString()), + s.getValue() + ) + ) .collect(Collectors.joining("\n")) ) ) diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java index 1d47337a312..08b102ea1bb 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java @@ -109,10 +109,9 @@ void testToString() { "routingTimeout: 3s, " + "elevator: ElevatorPreferences{boardTime: 2m}, " + "intersectionTraversalModel: CONSTANT, " + - "accessEgress: AccessEgressPreferences{" + - "penalty: TimeAndCostPenaltyForEnum{CAR_TO_PARK: " + + "accessEgress: AccessEgressPreferences{penalty: TimeAndCostPenaltyForEnum{CAR_TO_PARK: " + CAR_PENALTY + - "}, " + + ", CAR_RENTAL: (timePenalty: 30m + 2.0 t, costFactor: 2.0), CAR_HAILING: (timePenalty: 30m + 2.0 t, costFactor: 2.0)}, " + "maxDuration: DurationForStreetMode{default:5m}" + "}, " + "maxDirectDuration: DurationForStreetMode{default:10m}" + From 0ba3b9067b051a1e6a1ff6708acec0b186c4c587 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 18 Oct 2023 15:08:48 +0200 Subject: [PATCH 041/101] Decorate direct itineraries with accessEgressPenalty --- docs/RouteRequest.md | 7 +-- .../framework/lang/StringUtils.java | 2 +- .../DirectItineraryPenaltyDecorator.java | 54 +++++++++++++++++++ .../router/street/DirectStreetRouter.java | 7 ++- .../preference/AccessEgressPreferences.java | 5 +- .../__snapshots__/CarSnapshotTest.snap | 6 +-- 6 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectItineraryPenaltyDecorator.java diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index e90ea91b549..6e19d72564b 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -408,9 +408,10 @@ performance will be better. The default values are -- `car-to-park` = (timePenalty: 30m + 2.0 t, costFactor: 2.0) -- `car-rental` = (timePenalty: 30m + 2.0 t, costFactor: 2.0) -- `car-hailing` = (timePenalty: 30m + 2.0 t, costFactor: 2.0) +- `car-to-park` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) +- `car-rental` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) +- `car-hailing` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) +- `flexible` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) Example: `"car-to-park" : { "timePenalty": "10m + 1.5t", "costFactor": 2.5 }` diff --git a/src/main/java/org/opentripplanner/framework/lang/StringUtils.java b/src/main/java/org/opentripplanner/framework/lang/StringUtils.java index 87613d61294..cbb32b9eaca 100644 --- a/src/main/java/org/opentripplanner/framework/lang/StringUtils.java +++ b/src/main/java/org/opentripplanner/framework/lang/StringUtils.java @@ -112,7 +112,7 @@ public static String quoteReplace(@Nonnull String text) { } /** - * Convert "HELLO_WORLD" or "Hello_World" to "hello-world". + * Convert "HELLO_WORLD" or "HellO_WorlD" to "hello-world". *

    * https://developer.mozilla.org/en-US/docs/Glossary/Kebab_case */ diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectItineraryPenaltyDecorator.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectItineraryPenaltyDecorator.java new file mode 100644 index 00000000000..ec6a89ee64a --- /dev/null +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectItineraryPenaltyDecorator.java @@ -0,0 +1,54 @@ +package org.opentripplanner.routing.algorithm.raptoradapter.router.street; + +import java.util.List; +import java.util.Objects; +import org.opentripplanner.model.plan.Itinerary; +import org.opentripplanner.model.plan.Leg; +import org.opentripplanner.model.plan.StreetLegBuilder; +import org.opentripplanner.routing.api.request.StreetMode; +import org.opentripplanner.routing.api.request.framework.TimeAndCostPenaltyForEnum; + +public class DirectItineraryPenaltyDecorator { + + private final StreetMode directMode; + private final TimeAndCostPenaltyForEnum penalty; + + public DirectItineraryPenaltyDecorator( + StreetMode directMode, + TimeAndCostPenaltyForEnum penalty + ) { + Objects.requireNonNull(directMode); + Objects.requireNonNull(penalty); + this.directMode = directMode; + this.penalty = penalty; + } + + public List applyPenalty(List itineraries) { + return itineraries + .stream() + .map(itin -> { + if (itin.hasTransit()) { + throw new IllegalArgumentException( + "The itinerary %s contains transit legs. No direct penalty can be applied.".formatted( + itin + ) + ); + } + var penalty = this.penalty.valueOf(directMode); + if (!penalty.isEmpty()) { + itin.transformStreetLegs(sl -> + StreetLegBuilder + .of(sl) + .withGeneralizedCost((int) (sl.getGeneralizedCost() * penalty.costFactor())) + .build() + ); + + var cost = itin.getLegs().stream().mapToInt(Leg::getGeneralizedCost).sum(); + + itin.setGeneralizedCost(cost); + } + return itin; + }) + .toList(); + } +} diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java index 2c6b09c2fb2..af004a66b1f 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java @@ -61,7 +61,12 @@ public static List route(OtpServerRequestContext serverContext, Route directRequest.wheelchair(), directRequest.preferences().wheelchair() ); - return response; + + var decorator = new DirectItineraryPenaltyDecorator( + request.journey().modes().directMode, + request.preferences().street().accessEgress().penalty() + ); + return decorator.applyPenalty(response); } catch (PathNotFoundException e) { return Collections.emptyList(); } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java index b967bd34f58..ada495b19ba 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java @@ -22,14 +22,15 @@ public final class AccessEgressPreferences implements Serializable { private static final TimeAndCostPenalty DEFAULT_PENALTY = TimeAndCostPenalty.of( - TimePenalty.of(ofMinutes(30), 2f), - 2 + TimePenalty.of(ofMinutes(20), 2f), + 1.5 ); private static final TimeAndCostPenaltyForEnum DEFAULT_TIME_AND_COST = TimeAndCostPenaltyForEnum .of(StreetMode.class) .with(StreetMode.CAR_TO_PARK, DEFAULT_PENALTY) .with(StreetMode.CAR_HAILING, DEFAULT_PENALTY) .with(StreetMode.CAR_RENTAL, DEFAULT_PENALTY) + .with(StreetMode.FLEXIBLE, DEFAULT_PENALTY) .build(); public static final AccessEgressPreferences DEFAULT = new AccessEgressPreferences(); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarSnapshotTest.snap b/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarSnapshotTest.snap index 8f527b15bf7..0ae0e948250 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarSnapshotTest.snap +++ b/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarSnapshotTest.snap @@ -10,7 +10,7 @@ org.opentripplanner.routing.algorithm.mapping.CarSnapshotTest.directCarPark=[ "details" : { }, "fare" : { } }, - "generalizedCost" : 467, + "generalizedCost": 518, "legs" : [ { "agencyTimeZoneOffset" : -25200000, @@ -25,7 +25,7 @@ org.opentripplanner.routing.algorithm.mapping.CarSnapshotTest.directCarPark=[ "name" : "NW Pettygrove Ave. & NW 24th Ave. (P1)", "vertexType" : "NORMAL" }, - "generalizedCost" : 61, + "generalizedCost": 91, "interlineWithPreviousLeg" : false, "legGeometry" : { "length" : 5, @@ -144,7 +144,7 @@ org.opentripplanner.routing.algorithm.mapping.CarSnapshotTest.directCarPark=[ }, "vertexType" : "BIKEPARK" }, - "generalizedCost" : 285, + "generalizedCost": 427, "interlineWithPreviousLeg" : false, "legGeometry" : { "length" : 5, From 64cff4a6198d02e909e34b3681759b351d6a09ad Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 19 Oct 2023 11:30:33 +0200 Subject: [PATCH 042/101] Use correct enum value in Transmodel schema --- .../org/opentripplanner/apis/transmodel/schema.graphql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 25cf95ca2f9..dad106418fe 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -774,7 +774,7 @@ type QueryType { "Input type for executing a travel search for a trip between two locations. Returns trip patterns describing suggested alternatives for the trip." trip( "Time and cost penalty on access/egress modes." - accessEgressPenalty: [PenaltyForStreetMode!] = [], + accessEgressPenalty: [PenaltyForStreetMode!] = [{streetMode : car_park, timePenalty : "20m + 2.0 t", costFactor : 1.5}, {streetMode : flexible, timePenalty : "20m + 2.0 t", costFactor : 1.5}], "The alightSlack is the minimum extra time after exiting a public transport vehicle. This is the default value used, if not overridden by the 'alightSlackList'." alightSlackDefault: Int = 0, "List of alightSlack for a given set of modes. Defaults: []" From a4fed172e1fd507dc49c3842e6c22551be46f15f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 20 Oct 2023 10:47:05 +0200 Subject: [PATCH 043/101] Remove penalty for direct itineraries --- .../DirectItineraryPenaltyDecorator.java | 54 ------------------- .../router/street/DirectStreetRouter.java | 6 +-- 2 files changed, 1 insertion(+), 59 deletions(-) delete mode 100644 src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectItineraryPenaltyDecorator.java diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectItineraryPenaltyDecorator.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectItineraryPenaltyDecorator.java deleted file mode 100644 index ec6a89ee64a..00000000000 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectItineraryPenaltyDecorator.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.opentripplanner.routing.algorithm.raptoradapter.router.street; - -import java.util.List; -import java.util.Objects; -import org.opentripplanner.model.plan.Itinerary; -import org.opentripplanner.model.plan.Leg; -import org.opentripplanner.model.plan.StreetLegBuilder; -import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.api.request.framework.TimeAndCostPenaltyForEnum; - -public class DirectItineraryPenaltyDecorator { - - private final StreetMode directMode; - private final TimeAndCostPenaltyForEnum penalty; - - public DirectItineraryPenaltyDecorator( - StreetMode directMode, - TimeAndCostPenaltyForEnum penalty - ) { - Objects.requireNonNull(directMode); - Objects.requireNonNull(penalty); - this.directMode = directMode; - this.penalty = penalty; - } - - public List applyPenalty(List itineraries) { - return itineraries - .stream() - .map(itin -> { - if (itin.hasTransit()) { - throw new IllegalArgumentException( - "The itinerary %s contains transit legs. No direct penalty can be applied.".formatted( - itin - ) - ); - } - var penalty = this.penalty.valueOf(directMode); - if (!penalty.isEmpty()) { - itin.transformStreetLegs(sl -> - StreetLegBuilder - .of(sl) - .withGeneralizedCost((int) (sl.getGeneralizedCost() * penalty.costFactor())) - .build() - ); - - var cost = itin.getLegs().stream().mapToInt(Leg::getGeneralizedCost).sum(); - - itin.setGeneralizedCost(cost); - } - return itin; - }) - .toList(); - } -} diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java index af004a66b1f..3c51f84fda4 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java @@ -62,11 +62,7 @@ public static List route(OtpServerRequestContext serverContext, Route directRequest.preferences().wheelchair() ); - var decorator = new DirectItineraryPenaltyDecorator( - request.journey().modes().directMode, - request.preferences().street().accessEgress().penalty() - ); - return decorator.applyPenalty(response); + return response; } catch (PathNotFoundException e) { return Collections.emptyList(); } From a2d84d72176702190cf9c79426cfcd2ed761c5a2 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 20 Oct 2023 10:53:06 +0200 Subject: [PATCH 044/101] Extract method for formatting default values --- .../routerequest/RouteRequestConfig.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 600579f5513..c4b0b0bd8cb 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -24,6 +24,7 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; +import org.opentripplanner.routing.api.request.preference.AccessEgressPreferences; import org.opentripplanner.routing.api.request.preference.BikePreferences; import org.opentripplanner.routing.api.request.preference.CarPreferences; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; @@ -476,18 +477,7 @@ the access legs used. In other cases where the access(CAR) is faster than transi time-penalty is multiplied with the cost-factor. A cost-factor of zero, gives no extra cost, while 1.0 will add the same amount to both time and cost. """.formatted( - dftAccessEgress - .penalty() - .asEnumMap() - .entrySet() - .stream() - .map(s -> - "- `%s` = %s".formatted( - StringUtils.kebabCase(s.getKey().toString()), - s.getValue() - ) - ) - .collect(Collectors.joining("\n")) + formatPenaltyDefaultValues(dftAccessEgress) ) ) .asEnumMap( @@ -591,6 +581,16 @@ The street search(AStar) aborts after this duration and any paths found are retu ); } + private static String formatPenaltyDefaultValues(AccessEgressPreferences dftAccessEgress) { + return dftAccessEgress + .penalty() + .asEnumMap() + .entrySet() + .stream() + .map(s -> "- `%s` = %s".formatted(StringUtils.kebabCase(s.getKey().toString()), s.getValue())) + .collect(Collectors.joining("\n")); + } + private static void mapCarPreferences(NodeAdapter root, CarPreferences.Builder builder) { var dft = builder.original(); NodeAdapter c = root.of("car").since(V2_5).summary("Car preferences.").asObject(); From 3f909f03b37dc3757878d0c58ece31e93567e007 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 20 Oct 2023 11:06:14 +0200 Subject: [PATCH 045/101] Set penalty to zero in test --- .../org/opentripplanner/ext/flex/FlexIntegrationTest.java | 6 ++++++ .../api/request/preference/StreetPreferencesTest.java | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTest.java b/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTest.java index a0585a9e6f2..f414572ecf2 100644 --- a/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/flex/FlexIntegrationTest.java @@ -32,6 +32,7 @@ import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.routing.api.RoutingService; import org.opentripplanner.routing.api.request.RouteRequest; +import org.opentripplanner.routing.api.request.framework.TimeAndCostPenalty; import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.transit.service.TransitModel; @@ -224,6 +225,11 @@ private static List getItineraries( request.setTo(to); request.setNumItineraries(10); request.setSearchWindow(Duration.ofHours(2)); + request.withPreferences(p -> + p.withStreet(s -> + s.withAccessEgress(ae -> ae.withPenalty(Map.of(FLEXIBLE, TimeAndCostPenalty.ZERO))) + ) + ); var modes = request.journey().modes().copyOf(); modes.withEgressMode(FLEXIBLE); diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java index 08b102ea1bb..0289c24e837 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java @@ -111,7 +111,8 @@ void testToString() { "intersectionTraversalModel: CONSTANT, " + "accessEgress: AccessEgressPreferences{penalty: TimeAndCostPenaltyForEnum{CAR_TO_PARK: " + CAR_PENALTY + - ", CAR_RENTAL: (timePenalty: 30m + 2.0 t, costFactor: 2.0), CAR_HAILING: (timePenalty: 30m + 2.0 t, costFactor: 2.0)}, " + + ", CAR_RENTAL: (timePenalty: 20m + 2.0 t, costFactor: 1.50), CAR_HAILING: (timePenalty: 20m + 2.0 t, costFactor: 1.50), " + + "FLEXIBLE: (timePenalty: 20m + 2.0 t, costFactor: 1.50)}, " + "maxDuration: DurationForStreetMode{default:5m}" + "}, " + "maxDirectDuration: DurationForStreetMode{default:10m}" + From 3f2084fc0c5c0f0dd110f7e1c7a56bd116964ce4 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 1 Nov 2023 15:03:38 +0100 Subject: [PATCH 046/101] Subtract generalized cost that was previously added --- .../RemoveNonTransitItinerariesBasedOnGeneralizedCost.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java index 427084a55f6..1980838bec0 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java @@ -43,7 +43,7 @@ public List flagForRemoval(List itineraries) { // ALL itineraries are considered here. Both transit and non-transit OptionalInt minGeneralizedCost = itineraries .stream() - .mapToInt(Itinerary::getGeneralizedCost) + .mapToInt(Itinerary::getGeneralizedCostIncludingPenalty) .min(); if (minGeneralizedCost.isEmpty()) { @@ -58,7 +58,7 @@ public List flagForRemoval(List itineraries) { return itineraries .stream() - .filter(it -> !it.hasTransit() && it.getGeneralizedCost() > maxLimit) + .filter(it -> !it.hasTransit() && it.getGeneralizedCostIncludingPenalty() > maxLimit) .collect(Collectors.toList()); } } From 16f21df832748a4eba7bcc49121f7ce392eacc7f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 30 Jan 2024 22:24:11 +0100 Subject: [PATCH 047/101] Fix merge artifacts --- .../graph_builder/module/NearbyStopFinder.java | 5 +---- .../algorithm/mapping/__snapshots__/CarSnapshotTest.snap | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java index 0cac2a21308..22a00258e87 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java @@ -273,10 +273,7 @@ private SkipEdgeStrategy getSkipEdgeStrategy() { var durationSkipEdgeStrategy = new DurationSkipEdgeStrategy(durationLimit); if (maxStopCount > 0) { - var strategy = new MaxCountSkipEdgeStrategy<>( - maxStopCount, - NearbyStopFinder::hasReachedStop - ); + var strategy = new MaxCountSkipEdgeStrategy<>(maxStopCount, NearbyStopFinder::hasReachedStop); return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); } return durationSkipEdgeStrategy; diff --git a/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarSnapshotTest.snap b/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarSnapshotTest.snap index 0ae0e948250..8f527b15bf7 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarSnapshotTest.snap +++ b/src/test/java/org/opentripplanner/routing/algorithm/mapping/__snapshots__/CarSnapshotTest.snap @@ -10,7 +10,7 @@ org.opentripplanner.routing.algorithm.mapping.CarSnapshotTest.directCarPark=[ "details" : { }, "fare" : { } }, - "generalizedCost": 518, + "generalizedCost" : 467, "legs" : [ { "agencyTimeZoneOffset" : -25200000, @@ -25,7 +25,7 @@ org.opentripplanner.routing.algorithm.mapping.CarSnapshotTest.directCarPark=[ "name" : "NW Pettygrove Ave. & NW 24th Ave. (P1)", "vertexType" : "NORMAL" }, - "generalizedCost": 91, + "generalizedCost" : 61, "interlineWithPreviousLeg" : false, "legGeometry" : { "length" : 5, @@ -144,7 +144,7 @@ org.opentripplanner.routing.algorithm.mapping.CarSnapshotTest.directCarPark=[ }, "vertexType" : "BIKEPARK" }, - "generalizedCost": 427, + "generalizedCost" : 285, "interlineWithPreviousLeg" : false, "legGeometry" : { "length" : 5, From d06a4dbb6c59ad3a355269bb276750e3eb3aa0ed Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 1 Feb 2024 14:27:11 +0100 Subject: [PATCH 048/101] Revert changes, done in other PR --- .../RemoveNonTransitItinerariesBasedOnGeneralizedCost.java | 4 ++-- .../raptoradapter/router/street/DirectStreetRouter.java | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java index 1980838bec0..427084a55f6 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/filterchain/filters/street/RemoveNonTransitItinerariesBasedOnGeneralizedCost.java @@ -43,7 +43,7 @@ public List flagForRemoval(List itineraries) { // ALL itineraries are considered here. Both transit and non-transit OptionalInt minGeneralizedCost = itineraries .stream() - .mapToInt(Itinerary::getGeneralizedCostIncludingPenalty) + .mapToInt(Itinerary::getGeneralizedCost) .min(); if (minGeneralizedCost.isEmpty()) { @@ -58,7 +58,7 @@ public List flagForRemoval(List itineraries) { return itineraries .stream() - .filter(it -> !it.hasTransit() && it.getGeneralizedCostIncludingPenalty() > maxLimit) + .filter(it -> !it.hasTransit() && it.getGeneralizedCost() > maxLimit) .collect(Collectors.toList()); } } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java index 3c51f84fda4..2c6b09c2fb2 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectStreetRouter.java @@ -61,7 +61,6 @@ public static List route(OtpServerRequestContext serverContext, Route directRequest.wheelchair(), directRequest.preferences().wheelchair() ); - return response; } catch (PathNotFoundException e) { return Collections.emptyList(); From 488f34589d76a54bb307f98797330b3e0dc7eff7 Mon Sep 17 00:00:00 2001 From: eibakke Date: Thu, 1 Feb 2024 15:32:51 +0100 Subject: [PATCH 049/101] Uses BERLIN coordinates and polygon instead of non-sense ones in GroupStopTest. --- .../transit/model/site/GroupStopTest.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java b/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java index dcf9bc3aeed..b57566b68ed 100644 --- a/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java +++ b/src/test/java/org/opentripplanner/transit/model/site/GroupStopTest.java @@ -9,9 +9,9 @@ import java.util.List; import java.util.Objects; import org.junit.jupiter.api.Test; -import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.framework.geometry.GeometryUtils; +import org.opentripplanner._support.geometry.Coordinates; +import org.opentripplanner._support.geometry.Polygons; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.transit.model._data.TransitModelForTest; @@ -24,7 +24,9 @@ class GroupStopTest { private static final String ID = "1"; private static final I18NString NAME = new NonLocalizedString("name"); - private static final StopLocation STOP_LOCATION = TEST_MODEL.stop("1:stop", 1d, 1d).build(); + private static final StopLocation STOP_LOCATION = TEST_MODEL + .stop("1:stop", Coordinates.BERLIN.getX(), Coordinates.BERLIN.getY()) + .build(); private static final GroupStop subject = StopModel .of() .groupStop(TransitModelForTest.id(ID)) @@ -34,8 +36,12 @@ class GroupStopTest { @Test void testGroupStopGeometry() { - StopLocation stopLocation1 = TEST_MODEL.stop("1:stop", 1d, 1d).build(); - StopLocation stopLocation2 = TEST_MODEL.stop("2:stop", 2d, 2d).build(); + StopLocation stopLocation1 = TEST_MODEL + .stop("1:stop", Coordinates.BERLIN.getX(), Coordinates.BERLIN.getY()) + .build(); + StopLocation stopLocation2 = TEST_MODEL + .stop("2:stop", Coordinates.HAMBURG.getX(), Coordinates.HAMBURG.getY()) + .build(); GroupStop groupStop = StopModel .of() @@ -54,16 +60,8 @@ void testGroupStopGeometry() { @Test void testGroupStopEncompassingAreaGeometry() { - Geometry encompassingAreaGeometry = GeometryUtils - .getGeometryFactory() - .toGeometry(new Envelope(1d, 2d, 1d, 2d)); - StopLocation stopLocation = TEST_MODEL - .stop( - "1:stop", - encompassingAreaGeometry.getCentroid().getX(), - encompassingAreaGeometry.getCentroid().getY() - ) + .stop("1:stop", Coordinates.BERLIN.getX(), Coordinates.BERLIN.getY()) .build(); GroupStop groupStop = StopModel @@ -71,14 +69,14 @@ void testGroupStopEncompassingAreaGeometry() { .groupStop(TransitModelForTest.id(ID)) .withName(NAME) .addLocation(stopLocation) - .withEncompassingAreaGeometries(List.of(encompassingAreaGeometry)) + .withEncompassingAreaGeometries(List.of(Polygons.BERLIN)) .build(); Geometry groupStopGeometry = Objects.requireNonNull(groupStop.getGeometry()).getGeometryN(0); assertEquals(stopLocation.getGeometry(), groupStopGeometry); assertEquals( - encompassingAreaGeometry, + Polygons.BERLIN, groupStop.getEncompassingAreaGeometry().orElseThrow().getGeometryN(0) ); } From f35d8ca9b56e89c63d5414f7d3e25809f0cee364 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 31 Jan 2024 14:22:22 +0100 Subject: [PATCH 050/101] Swap out stop code --- .../DecorateConsolidatedStopNames.java | 21 +++++++++++++++++-- .../model/ConsolidatedStopLeg.java | 14 ++++++------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java index 8fcba82a357..99c56bb3622 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java @@ -5,6 +5,10 @@ import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.ScheduledTransitLeg; import org.opentripplanner.routing.algorithm.filterchain.framework.spi.ItineraryDecorator; +import org.opentripplanner.transit.model.organization.Agency; +import org.opentripplanner.transit.model.site.RegularStop; +import org.opentripplanner.transit.model.site.RegularStopBuilder; +import org.opentripplanner.transit.model.site.StopLocation; /** * A decorating filter that checks if a transit leg contains any primary stops and if it does, @@ -34,10 +38,12 @@ private void replacePrimaryNamesWithSecondary(Itinerary i) { i.transformTransitLegs(leg -> { if (leg instanceof ScheduledTransitLeg stl && needsToRenameStops(stl)) { var agency = leg.getAgency(); + var from= modify(stl.getFrom().stop, agency); + var to = modify(stl.getTo().stop, agency); return new ConsolidatedStopLeg( stl, - service.agencySpecificName(stl.getFrom().stop, agency), - service.agencySpecificName(stl.getTo().stop, agency) + from, + to ); } else { return leg; @@ -45,6 +51,17 @@ private void replacePrimaryNamesWithSecondary(Itinerary i) { }); } + private StopLocation modify(StopLocation stop, Agency agency) { + if(stop instanceof RegularStop rs){ + return rs.copy() + .withName(service.agencySpecificName(stop, agency)) + .withCode("XXXXX").build(); + } + else { + return stop; + } + } + private boolean needsToRenameStops(ScheduledTransitLeg stl) { return (service.isPrimaryStop(stl.getFrom().stop) || service.isPrimaryStop(stl.getTo().stop)); } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java index e201c7ed805..1ad12adee26 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java @@ -1,28 +1,28 @@ package org.opentripplanner.ext.stopconsolidation.model; -import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.ScheduledTransitLeg; import org.opentripplanner.model.plan.ScheduledTransitLegBuilder; +import org.opentripplanner.transit.model.site.StopLocation; public class ConsolidatedStopLeg extends ScheduledTransitLeg { - private final I18NString fromName; - private final I18NString toName; + private final StopLocation fromName; + private final StopLocation toName; - public ConsolidatedStopLeg(ScheduledTransitLeg original, I18NString fromName, I18NString toName) { + public ConsolidatedStopLeg(ScheduledTransitLeg original, StopLocation fromName, StopLocation toName) { super(new ScheduledTransitLegBuilder<>(original)); - this.fromName = fromName; + this.fromName= fromName; this.toName = toName; } @Override public Place getFrom() { - return Place.forStop(super.getFrom().stop, fromName); + return Place.forStop(fromName); } @Override public Place getTo() { - return Place.forStop(super.getTo().stop, toName); + return Place.forStop(toName); } } From 7a7b35af7085bd7f9d13f8fafce8baed9800accc Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 31 Jan 2024 18:32:17 +0100 Subject: [PATCH 051/101] Add agency-specific stop code --- .../DecorateConsolidatedStopNames.java | 20 +++++------ .../StopConsolidationService.java | 1 + .../DefaultStopConsolidationService.java | 34 +++++++++++++------ .../model/ConsolidatedStopLeg.java | 14 ++++---- .../org/opentripplanner/model/plan/Place.java | 6 +--- 5 files changed, 41 insertions(+), 34 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java index 99c56bb3622..887125697f9 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java @@ -7,7 +7,6 @@ import org.opentripplanner.routing.algorithm.filterchain.framework.spi.ItineraryDecorator; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.model.site.RegularStopBuilder; import org.opentripplanner.transit.model.site.StopLocation; /** @@ -38,13 +37,9 @@ private void replacePrimaryNamesWithSecondary(Itinerary i) { i.transformTransitLegs(leg -> { if (leg instanceof ScheduledTransitLeg stl && needsToRenameStops(stl)) { var agency = leg.getAgency(); - var from= modify(stl.getFrom().stop, agency); + var from = modify(stl.getFrom().stop, agency); var to = modify(stl.getTo().stop, agency); - return new ConsolidatedStopLeg( - stl, - from, - to - ); + return new ConsolidatedStopLeg(stl, from, to); } else { return leg; } @@ -52,12 +47,13 @@ private void replacePrimaryNamesWithSecondary(Itinerary i) { } private StopLocation modify(StopLocation stop, Agency agency) { - if(stop instanceof RegularStop rs){ - return rs.copy() + if (stop instanceof RegularStop rs) { + return rs + .copy() .withName(service.agencySpecificName(stop, agency)) - .withCode("XXXXX").build(); - } - else { + .withCode(service.agencySpecificCode(stop, agency)) + .build(); + } else { return stop; } } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java index 2418d8f5625..4f03095b0dc 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java @@ -33,4 +33,5 @@ public interface StopConsolidationService { * For a given primary stop look up the name as it was originally defined in the agency's feed. */ I18NString agencySpecificName(StopLocation stop, Agency agency); + String agencySpecificCode(StopLocation stop, Agency agency); } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java index 54bd960d078..ee395df9497 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java @@ -2,7 +2,9 @@ import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.stream.Stream; +import javax.annotation.Nonnull; import org.opentripplanner.ext.stopconsolidation.StopConsolidationRepository; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.ext.stopconsolidation.model.StopReplacement; @@ -71,16 +73,28 @@ public I18NString agencySpecificName(StopLocation stop, Agency agency) { if (agency.getId().getFeedId().equals(stop.getId().getFeedId())) { return stop.getName(); } else { - return repo - .groups() - .stream() - .filter(r -> r.primary().equals(stop.getId())) - .flatMap(g -> g.secondaries().stream()) - .filter(secondary -> secondary.getFeedId().equals(agency.getId().getFeedId())) - .findAny() - .map(id -> transitModel.getStopModel().getRegularStop(id)) - .map(RegularStop::getName) - .orElseGet(stop::getName); + return agencySpecificStop(stop, agency).map(RegularStop::getName).orElseGet(stop::getName); } } + + @Override + public String agencySpecificCode(StopLocation stop, Agency agency) { + if (agency.getId().getFeedId().equals(stop.getId().getFeedId())) { + return stop.getCode(); + } else { + return agencySpecificStop(stop, agency).map(RegularStop::getCode).orElseGet(stop::getCode); + } + } + + @Nonnull + private Optional agencySpecificStop(StopLocation stop, Agency agency) { + return repo + .groups() + .stream() + .filter(r -> r.primary().equals(stop.getId())) + .flatMap(g -> g.secondaries().stream()) + .filter(secondary -> secondary.getFeedId().equals(agency.getId().getFeedId())) + .findAny() + .map(id -> transitModel.getStopModel().getRegularStop(id)); + } } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java index 1ad12adee26..39f06bd6347 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/model/ConsolidatedStopLeg.java @@ -7,22 +7,22 @@ public class ConsolidatedStopLeg extends ScheduledTransitLeg { - private final StopLocation fromName; - private final StopLocation toName; + private final StopLocation from; + private final StopLocation to; - public ConsolidatedStopLeg(ScheduledTransitLeg original, StopLocation fromName, StopLocation toName) { + public ConsolidatedStopLeg(ScheduledTransitLeg original, StopLocation from, StopLocation to) { super(new ScheduledTransitLegBuilder<>(original)); - this.fromName= fromName; - this.toName = toName; + this.from = from; + this.to = to; } @Override public Place getFrom() { - return Place.forStop(fromName); + return Place.forStop(from); } @Override public Place getTo() { - return Place.forStop(toName); + return Place.forStop(to); } } diff --git a/src/main/java/org/opentripplanner/model/plan/Place.java b/src/main/java/org/opentripplanner/model/plan/Place.java index 71c6d9bc188..fe3a9dee420 100644 --- a/src/main/java/org/opentripplanner/model/plan/Place.java +++ b/src/main/java/org/opentripplanner/model/plan/Place.java @@ -90,11 +90,7 @@ public static Place normal(Vertex vertex, I18NString name) { } public static Place forStop(StopLocation stop) { - return forStop(stop, stop.getName()); - } - - public static Place forStop(StopLocation stop, I18NString nameOverride) { - return new Place(nameOverride, stop.getCoordinate(), VertexType.TRANSIT, stop, null, null); + return new Place(stop.getName(), stop.getCoordinate(), VertexType.TRANSIT, stop, null, null); } public static Place forFlexStop(StopLocation stop, Vertex vertex) { From 866bc90a729ec28bae8778c92077659f36a727bd Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 31 Jan 2024 21:21:00 +0100 Subject: [PATCH 052/101] Implement logic for fetching primary stop --- .../stopconsolidation/DecorateConsolidatedStopNames.java | 2 +- .../ext/stopconsolidation/StopConsolidationService.java | 2 ++ .../internal/DefaultStopConsolidationService.java | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java index 887125697f9..c05223d2fb4 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java @@ -37,7 +37,7 @@ private void replacePrimaryNamesWithSecondary(Itinerary i) { i.transformTransitLegs(leg -> { if (leg instanceof ScheduledTransitLeg stl && needsToRenameStops(stl)) { var agency = leg.getAgency(); - var from = modify(stl.getFrom().stop, agency); + var from = service.primaryStop(stl.getFrom().stop.getId()); var to = modify(stl.getTo().stop, agency); return new ConsolidatedStopLeg(stl, from, to); } else { diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java index 4f03095b0dc..7dcea13f420 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java @@ -34,4 +34,6 @@ public interface StopConsolidationService { */ I18NString agencySpecificName(StopLocation stop, Agency agency); String agencySpecificCode(StopLocation stop, Agency agency); + + StopLocation primaryStop(FeedScopedId id); } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java index ee395df9497..ea8dd5b7f99 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java @@ -7,6 +7,7 @@ import javax.annotation.Nonnull; import org.opentripplanner.ext.stopconsolidation.StopConsolidationRepository; import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; +import org.opentripplanner.ext.stopconsolidation.model.ConsolidatedStopGroup; import org.opentripplanner.ext.stopconsolidation.model.StopReplacement; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -97,4 +98,10 @@ private Optional agencySpecificStop(StopLocation stop, Agency agenc .findAny() .map(id -> transitModel.getStopModel().getRegularStop(id)); } + + @Override + public StopLocation primaryStop(FeedScopedId id) { + var primaryId = repo.groups().stream().filter(g -> g.secondaries().contains(id)).map(ConsolidatedStopGroup::primary).findAny().orElse(id); + return transitModel.getStopModel().getRegularStop(primaryId); + } } From c9ef9628b1a1a9391b5c7dac9c45c6c3f163b718 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 31 Jan 2024 21:40:36 +0100 Subject: [PATCH 053/101] Adapt check for when names should be swapped --- .../ext/stopconsolidation/DecorateConsolidatedStopNames.java | 2 +- .../ext/stopconsolidation/StopConsolidationService.java | 3 +++ .../internal/DefaultStopConsolidationService.java | 5 +++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java index c05223d2fb4..8dcb558b361 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java @@ -59,6 +59,6 @@ private StopLocation modify(StopLocation stop, Agency agency) { } private boolean needsToRenameStops(ScheduledTransitLeg stl) { - return (service.isPrimaryStop(stl.getFrom().stop) || service.isPrimaryStop(stl.getTo().stop)); + return (service.isSecondaryStop(stl.getFrom().stop) || service.isPrimaryStop(stl.getTo().stop)); } } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java index 7dcea13f420..969276c9a28 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java @@ -24,6 +24,8 @@ public interface StopConsolidationService { */ boolean isPrimaryStop(StopLocation stop); + boolean isSecondaryStop(StopLocation stop); + /** * Are any stop consolidations defined? */ @@ -36,4 +38,5 @@ public interface StopConsolidationService { String agencySpecificCode(StopLocation stop, Agency agency); StopLocation primaryStop(FeedScopedId id); + } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java index ea8dd5b7f99..7d93433ea01 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java @@ -64,6 +64,11 @@ public boolean isPrimaryStop(StopLocation stop) { return repo.groups().stream().anyMatch(r -> r.primary().equals(stop.getId())); } + @Override + public boolean isSecondaryStop(StopLocation stop) { + return repo.groups().stream().anyMatch(r -> r.secondaries().contains(stop.getId())); + } + @Override public boolean isActive() { return !repo.groups().isEmpty(); From 6e2cfffbe497c16d4be8acb8d4962e6a737b2650 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 1 Feb 2024 13:03:46 +0100 Subject: [PATCH 054/101] Use more general version of agencySpecific methods --- .../DecorateConsolidatedStopNamesTest.java | 4 +-- .../DecorateConsolidatedStopNames.java | 17 +----------- .../StopConsolidationService.java | 4 +-- .../DefaultStopConsolidationService.java | 27 ++++++++----------- 4 files changed, 15 insertions(+), 37 deletions(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java b/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java index 38af8ea7187..d823a55cc4a 100644 --- a/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNamesTest.java @@ -37,8 +37,8 @@ void changeNames() { filter.decorate(itinerary); - var updatedLeg = itinerary.getLegs().get(0); - assertEquals(STOP_D.getName(), updatedLeg.getFrom().name); + var updatedLeg = itinerary.getLegs().getFirst(); + assertEquals(STOP_C.getName(), updatedLeg.getFrom().name); assertEquals(STOP_D.getName(), updatedLeg.getTo().name); } } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java index 8dcb558b361..2a09bb64255 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java @@ -5,9 +5,6 @@ import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.ScheduledTransitLeg; import org.opentripplanner.routing.algorithm.filterchain.framework.spi.ItineraryDecorator; -import org.opentripplanner.transit.model.organization.Agency; -import org.opentripplanner.transit.model.site.RegularStop; -import org.opentripplanner.transit.model.site.StopLocation; /** * A decorating filter that checks if a transit leg contains any primary stops and if it does, @@ -38,7 +35,7 @@ private void replacePrimaryNamesWithSecondary(Itinerary i) { if (leg instanceof ScheduledTransitLeg stl && needsToRenameStops(stl)) { var agency = leg.getAgency(); var from = service.primaryStop(stl.getFrom().stop.getId()); - var to = modify(stl.getTo().stop, agency); + var to = service.agencySpecificStop(stl.getTo().stop, agency); return new ConsolidatedStopLeg(stl, from, to); } else { return leg; @@ -46,18 +43,6 @@ private void replacePrimaryNamesWithSecondary(Itinerary i) { }); } - private StopLocation modify(StopLocation stop, Agency agency) { - if (stop instanceof RegularStop rs) { - return rs - .copy() - .withName(service.agencySpecificName(stop, agency)) - .withCode(service.agencySpecificCode(stop, agency)) - .build(); - } else { - return stop; - } - } - private boolean needsToRenameStops(ScheduledTransitLeg stl) { return (service.isSecondaryStop(stl.getFrom().stop) || service.isPrimaryStop(stl.getTo().stop)); } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java index 969276c9a28..036e99610f8 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java @@ -34,9 +34,7 @@ public interface StopConsolidationService { /** * For a given primary stop look up the name as it was originally defined in the agency's feed. */ - I18NString agencySpecificName(StopLocation stop, Agency agency); - String agencySpecificCode(StopLocation stop, Agency agency); + StopLocation agencySpecificStop(StopLocation stop, Agency agency); StopLocation primaryStop(FeedScopedId id); - } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java index 7d93433ea01..5011a848210 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java @@ -9,10 +9,8 @@ import org.opentripplanner.ext.stopconsolidation.StopConsolidationService; import org.opentripplanner.ext.stopconsolidation.model.ConsolidatedStopGroup; import org.opentripplanner.ext.stopconsolidation.model.StopReplacement; -import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.organization.Agency; -import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitModel; import org.slf4j.Logger; @@ -75,25 +73,16 @@ public boolean isActive() { } @Override - public I18NString agencySpecificName(StopLocation stop, Agency agency) { + public StopLocation agencySpecificStop(StopLocation stop, Agency agency) { if (agency.getId().getFeedId().equals(stop.getId().getFeedId())) { - return stop.getName(); + return stop; } else { - return agencySpecificStop(stop, agency).map(RegularStop::getName).orElseGet(stop::getName); - } - } - - @Override - public String agencySpecificCode(StopLocation stop, Agency agency) { - if (agency.getId().getFeedId().equals(stop.getId().getFeedId())) { - return stop.getCode(); - } else { - return agencySpecificStop(stop, agency).map(RegularStop::getCode).orElseGet(stop::getCode); + return agencySpecificStopOpt(stop, agency).orElse(stop); } } @Nonnull - private Optional agencySpecificStop(StopLocation stop, Agency agency) { + private Optional agencySpecificStopOpt(StopLocation stop, Agency agency) { return repo .groups() .stream() @@ -106,7 +95,13 @@ private Optional agencySpecificStop(StopLocation stop, Agency agenc @Override public StopLocation primaryStop(FeedScopedId id) { - var primaryId = repo.groups().stream().filter(g -> g.secondaries().contains(id)).map(ConsolidatedStopGroup::primary).findAny().orElse(id); + var primaryId = repo + .groups() + .stream() + .filter(g -> g.secondaries().contains(id)) + .map(ConsolidatedStopGroup::primary) + .findAny() + .orElse(id); return transitModel.getStopModel().getRegularStop(primaryId); } } From 85d762a17b0895abd1e040369e28487401d7e991 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 1 Feb 2024 17:25:50 +0100 Subject: [PATCH 055/101] Improve documentation --- .../ext/stopconsolidation/StopConsolidationService.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java index 036e99610f8..a829a905e27 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/StopConsolidationService.java @@ -2,7 +2,6 @@ import java.util.List; import org.opentripplanner.ext.stopconsolidation.model.StopReplacement; -import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.StopLocation; @@ -24,6 +23,9 @@ public interface StopConsolidationService { */ boolean isPrimaryStop(StopLocation stop); + /** + * Is the given stop a secondary stop as defined by the stop consolidation configuration? + */ boolean isSecondaryStop(StopLocation stop); /** @@ -32,9 +34,12 @@ public interface StopConsolidationService { boolean isActive(); /** - * For a given primary stop look up the name as it was originally defined in the agency's feed. + * For a given primary stop look up secondary feed as it was originally defined in the agency's feed. */ StopLocation agencySpecificStop(StopLocation stop, Agency agency); + /** + * For a given stop id return the primary stop if it is part of a consolidated stop group. + */ StopLocation primaryStop(FeedScopedId id); } From 634b3398a033c247ac625bead890280cc3bebb60 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Mon, 5 Feb 2024 06:52:01 +0000 Subject: [PATCH 056/101] Bump serialization version id for #5640 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bc8ee82b7ec..2bbfec9490a 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 141 + 142 30.2 2.50 From 9f66f5db54ed12a6b426d50b2f7f5acb1c7db1d2 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 5 Feb 2024 09:35:30 +0100 Subject: [PATCH 057/101] Move method into sandbox --- .../ext/geocoder/LuceneIndexTest.java | 15 +++++------- .../ext/geocoder/StopClusterMapper.java | 24 +++++++++++++------ .../service/DefaultTransitService.java | 15 ------------ .../transit/service/TransitService.java | 12 ---------- .../service/DefaultTransitServiceTest.java | 7 ------ 5 files changed, 23 insertions(+), 50 deletions(-) diff --git a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java index 8dc3ff77a01..b1fb33dfdd3 100644 --- a/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/geocoder/LuceneIndexTest.java @@ -21,6 +21,7 @@ import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.FeedScopedId; +import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; @@ -131,15 +132,6 @@ public List getModesOfStopLocation(StopLocation stop) { } } - @Override - public List getAgenciesForStopLocation(StopLocation stop) { - if (stop.equals(ALEXANDERPLATZ_BUS)) { - return List.of(BVG); - } else { - return List.of(); - } - } - @Override public Agency getAgencyForId(FeedScopedId id) { if (id.equals(BVG.getId())) { @@ -148,6 +140,11 @@ public Agency getAgencyForId(FeedScopedId id) { return null; } + @Override + public Set getRoutesForStop(StopLocation stop) { + return Set.of(TransitModelForTest.route("route1").withAgency(BVG).build()); + } + @Override public FeedInfo getFeedInfo(String feedId) { return new FeedInfo( diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java index 10243665ac8..6f16d4a0cce 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/StopClusterMapper.java @@ -2,11 +2,13 @@ import com.google.common.collect.Iterables; import java.util.Collection; +import java.util.List; import java.util.Optional; import org.opentripplanner.framework.collection.ListUtils; import org.opentripplanner.framework.geometry.WgsCoordinate; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.model.FeedInfo; +import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.model.site.StopLocationsGroup; @@ -59,8 +61,7 @@ Iterable generateStopClusters( LuceneStopCluster map(StopLocationsGroup g) { var modes = transitService.getModesOfStopLocationsGroup(g).stream().map(Enum::name).toList(); - var agencies = transitService - .getAgenciesForStopLocationsGroup(g) + var agencies = agenciesForStopLocationsGroup(g) .stream() .map(s -> s.getId().toString()) .toList(); @@ -75,11 +76,7 @@ LuceneStopCluster map(StopLocationsGroup g) { } Optional map(StopLocation sl) { - var agencies = transitService - .getAgenciesForStopLocation(sl) - .stream() - .map(a -> a.getId().toString()) - .toList(); + var agencies = agenciesForStopLocation(sl).stream().map(a -> a.getId().toString()).toList(); return Optional .ofNullable(sl.getName()) .map(name -> { @@ -95,6 +92,19 @@ Optional map(StopLocation sl) { }); } + private List agenciesForStopLocation(StopLocation stop) { + return transitService.getRoutesForStop(stop).stream().map(Route::getAgency).distinct().toList(); + } + + private List agenciesForStopLocationsGroup(StopLocationsGroup group) { + return group + .getChildStops() + .stream() + .flatMap(sl -> agenciesForStopLocation(sl).stream()) + .distinct() + .toList(); + } + private static StopCluster.Coordinate toCoordinate(WgsCoordinate c) { return new StopCluster.Coordinate(c.latitude(), c.longitude()); } diff --git a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java index f38499bfd68..0d08bcf34b2 100644 --- a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -572,21 +572,6 @@ public List getModesOfStopLocation(StopLocation stop) { return sortByOccurrenceAndReduce(getPatternModesOfStop(stop)).toList(); } - @Override - public List getAgenciesForStopLocation(StopLocation stop) { - return getRoutesForStop(stop).stream().map(Route::getAgency).distinct().toList(); - } - - @Override - public List getAgenciesForStopLocationsGroup(StopLocationsGroup group) { - return group - .getChildStops() - .stream() - .flatMap(sl -> getAgenciesForStopLocation(sl).stream()) - .distinct() - .toList(); - } - /** * For each pattern visiting this {@link StopLocation} return its {@link TransitMode} */ diff --git a/src/main/java/org/opentripplanner/transit/service/TransitService.java b/src/main/java/org/opentripplanner/transit/service/TransitService.java index 156a3c8dd1a..d0664aa292d 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -215,16 +215,4 @@ List stopTimesForPatternAtStop( * So, if more patterns of mode BUS than RAIL visit the stop, the result will be [BUS,RAIL]. */ List getModesOfStopLocation(StopLocation stop); - - /** - * Iterates over all child stops, the routes that visit this stop and return a de-duplicated list - * of their agencies. - */ - List getAgenciesForStopLocationsGroup(StopLocationsGroup group); - - /** - * Iterates over all routes that visit this stop location and return a de-duplicated list - * of their agencies. - */ - List getAgenciesForStopLocation(StopLocation stop); } diff --git a/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java b/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java index ab3d5c8ae0a..f04fe782a0a 100644 --- a/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java +++ b/src/test/java/org/opentripplanner/transit/service/DefaultTransitServiceTest.java @@ -76,11 +76,4 @@ void stationModes() { var modes = service.getModesOfStopLocationsGroup(STATION); assertEquals(List.of(RAIL, FERRY, TRAM), modes); } - - @Test - void stopAgencies() { - var stop = RAIL_PATTERN.getStopPattern().getStop(0); - var agencies = service.getAgenciesForStopLocation(stop); - assertEquals("[Agency{F:A1 Agency Test}]", agencies.toString()); - } } From eaaf758208c26902f79bce952d334036b4441a5b Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 5 Feb 2024 12:05:52 +0000 Subject: [PATCH 058/101] Add changelog entry for #5651 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 37c8d26053e..05731e6fbeb 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -87,6 +87,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Introduce `generalizedCostPlusPenalty` to make cost comparsion fairer [#5483](https://github.com/opentripplanner/OpenTripPlanner/pull/5483) - Separate walk time from non-transit time [#5648](https://github.com/opentripplanner/OpenTripPlanner/pull/5648) - Remove "fare" [#5645](https://github.com/opentripplanner/OpenTripPlanner/pull/5645) +- Refactor GroupStopBuilder addLocation method [#5651](https://github.com/opentripplanner/OpenTripPlanner/pull/5651) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 190f745d089da47672814a01c10834085a0e49f7 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Mon, 5 Feb 2024 12:06:13 +0000 Subject: [PATCH 059/101] Bump serialization version id for #5651 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c0b2ca4292a..be1e49f2a16 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 142 + 143 30.2 2.50 From 4f5c5900a652c5e1e8851f234bd070940bcaeb46 Mon Sep 17 00:00:00 2001 From: eibakke Date: Mon, 5 Feb 2024 14:21:45 +0100 Subject: [PATCH 060/101] Fixes a few typos and improves documentation in the TransitService interface. --- .../parkAndRideApi/ParkAndRideResource.java | 2 +- .../ext/restapi/resources/IndexAPI.java | 4 ++-- .../layers/stops/StopsLayerBuilder.java | 2 +- .../apis/gtfs/datafetchers/QueryTypeImpl.java | 3 +-- .../transmodel/TransmodelGraphQLSchema.java | 2 +- .../transmodel/model/stop/StopPlaceType.java | 2 +- .../GraphInspectorVectorTileResource.java | 2 +- .../graph_builder/module/NearbyStopFinder.java | 2 +- .../routing/linking/FlexLocationAdder.java | 2 +- .../api/OtpServerRequestContext.java | 2 +- .../transit/service/DefaultTransitService.java | 4 ++-- .../transit/service/StopModel.java | 18 +++++++++++++++--- .../transit/service/TransitService.java | 2 +- .../gtfs/mapping/RouteRequestMapperTest.java | 2 +- 14 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java b/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java index 02dfc1bef5d..4a577433bfe 100644 --- a/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java +++ b/src/ext/java/org/opentripplanner/ext/parkAndRideApi/ParkAndRideResource.java @@ -42,7 +42,7 @@ public ParkAndRideResource( // - serverContext.graphFinder(). This needs at least a comment! // - This can be replaced with a search done with the StopModel // - if we have a radius search there. - this.graphFinder = new DirectGraphFinder(serverContext.transitService()::findRegularStop); + this.graphFinder = new DirectGraphFinder(serverContext.transitService()::findRegularStops); } /** Envelopes are in latitude, longitude format */ diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java index 5bdda8a57a2..cab2be13ad0 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java @@ -200,7 +200,7 @@ public List getStopsInRadius( radius = Math.min(radius, MAX_STOP_SEARCH_RADIUS); - return new DirectGraphFinder(serverContext.transitService()::findRegularStop) + return new DirectGraphFinder(serverContext.transitService()::findRegularStops) .findClosestStops(new Coordinate(lon, lat), radius) .stream() .map(it -> StopMapper.mapToApiShort(it.stop, it.distance)) @@ -221,7 +221,7 @@ public List getStopsInRadius( new Coordinate(maxLon, maxLat) ); - var stops = transitService().findRegularStop(envelope); + var stops = transitService().findRegularStops(envelope); return stops .stream() .filter(stop -> envelope.contains(stop.getCoordinate().asJtsCoordinate())) diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java index 6d15816669e..2ad85587fe5 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java @@ -37,7 +37,7 @@ public StopsLayerBuilder( protected List getGeometries(Envelope query) { return transitService - .findRegularStop(query) + .findRegularStops(query) .stream() .map(stop -> { Geometry point = stop.getGeometry(); diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java index d749987384c..a4f5cb00e2f 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/QueryTypeImpl.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; import org.locationtech.jts.geom.Coordinate; @@ -710,7 +709,7 @@ public DataFetcher> stopsByBbox() { ); Stream stopStream = getTransitService(environment) - .findRegularStop(envelope) + .findRegularStops(envelope) .stream() .filter(stop -> envelope.contains(stop.getCoordinate().asJtsCoordinate())); diff --git a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java index 00bf98c703f..638d7783e9a 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/TransmodelGraphQLSchema.java @@ -687,7 +687,7 @@ private GraphQLSchema create() { ); return GqlUtil .getTransitService(environment) - .findRegularStop(envelope) + .findRegularStops(envelope) .stream() .filter(stop -> envelope.contains(stop.getCoordinate().asJtsCoordinate())) .filter(stop -> diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java index accaf1e35fb..d178e5125b5 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/stop/StopPlaceType.java @@ -531,7 +531,7 @@ public static Collection fetchStopPlaces( ); Stream stations = transitService - .findRegularStop(envelope) + .findRegularStops(envelope) .stream() .filter(stop -> envelope.contains(stop.getCoordinate().asJtsCoordinate())) .map(StopLocation::getParentStation) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index 03f4357e540..dc6ba627e0e 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -179,7 +179,7 @@ private static LayerBuilder createLayerBuilder( case RegularStop -> new StopLayerBuilder<>( layerParameters, locale, - e -> context.transitService().findRegularStop(e) + e -> context.transitService().findRegularStops(e) ); case AreaStop -> new StopLayerBuilder<>( layerParameters, diff --git a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java index 360cdaee363..1fbfffcec5f 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java @@ -85,7 +85,7 @@ public NearbyStopFinder( // We need to accommodate straight line distance (in meters) but when streets are present we // use an earliest arrival search, which optimizes on time. Ideally we'd specify in meters, // but we don't have much of a choice here. Use the default walking speed to convert. - this.directGraphFinder = new DirectGraphFinder(transitService::findRegularStop); + this.directGraphFinder = new DirectGraphFinder(transitService::findRegularStops); } } diff --git a/src/main/java/org/opentripplanner/routing/linking/FlexLocationAdder.java b/src/main/java/org/opentripplanner/routing/linking/FlexLocationAdder.java index 830a80c39a5..047e44f229a 100644 --- a/src/main/java/org/opentripplanner/routing/linking/FlexLocationAdder.java +++ b/src/main/java/org/opentripplanner/routing/linking/FlexLocationAdder.java @@ -16,7 +16,7 @@ static void addFlexLocations(StreetEdge edge, IntersectionVertex v0, StopModel s if (edge.getPermission().allows(StreetTraversalPermission.PEDESTRIAN_AND_CAR)) { Point p = GeometryUtils.getGeometryFactory().createPoint(v0.getCoordinate()); Envelope env = p.getEnvelopeInternal(); - for (AreaStop areaStop : stopModel.queryLocationIndex(env)) { + for (AreaStop areaStop : stopModel.findAreaStops(env)) { if (!areaStop.getGeometry().disjoint(p)) { v0.addAreaStops(Set.of(areaStop)); } diff --git a/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java b/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java index fa3a7069e2d..bbc6733a40c 100644 --- a/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java +++ b/src/main/java/org/opentripplanner/standalone/api/OtpServerRequestContext.java @@ -114,7 +114,7 @@ public interface OtpServerRequestContext { TraverseVisitor traverseVisitor(); default GraphFinder graphFinder() { - return GraphFinder.getInstance(graph(), transitService()::findRegularStop); + return GraphFinder.getInstance(graph(), transitService()::findRegularStops); } FlexConfig flexConfig(); diff --git a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java index 0d08bcf34b2..3050fca6a3d 100644 --- a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -543,7 +543,7 @@ public ZonedDateTime getTransitServiceStarts() { } @Override - public Collection findRegularStop(Envelope envelope) { + public Collection findRegularStops(Envelope envelope) { OTPRequestTimeoutException.checkForTimeout(); return transitModel.getStopModel().findRegularStops(envelope); } @@ -551,7 +551,7 @@ public Collection findRegularStop(Envelope envelope) { @Override public Collection findAreaStops(Envelope envelope) { OTPRequestTimeoutException.checkForTimeout(); - return transitModel.getStopModel().queryLocationIndex(envelope); + return transitModel.getStopModel().findAreaStops(envelope); } @Override diff --git a/src/main/java/org/opentripplanner/transit/service/StopModel.java b/src/main/java/org/opentripplanner/transit/service/StopModel.java index dd6b65e5b33..763aa504c40 100644 --- a/src/main/java/org/opentripplanner/transit/service/StopModel.java +++ b/src/main/java/org/opentripplanner/transit/service/StopModel.java @@ -108,7 +108,7 @@ public StopModelBuilder withContext() { } /** - * Return a regular transit stop if found(not flex stops). + * Return a regular transit stop if found (not flex stops). */ public RegularStop getRegularStop(FeedScopedId id) { return regularStopById.get(id); @@ -121,6 +121,9 @@ public Collection listRegularStops() { return regularStopById.values(); } + /** + * Find regular stops within a geographical area. + */ public Collection findRegularStops(Envelope envelope) { return index.findRegularStops(envelope); } @@ -131,21 +134,30 @@ public boolean hasAreaStops() { /** * Flex locations are generated by GTFS graph builder, but consumed only after the street graph is - * built + * built. */ @Nullable public AreaStop getAreaStop(FeedScopedId id) { return areaStopById.get(id); } + /** + * Return all flex stops, not regular transit stops and flex group of stops. + */ public Collection listAreaStops() { return areaStopById.values(); } - public Collection queryLocationIndex(Envelope envelope) { + /** + * Find flex stops within a geographical area. + */ + public Collection findAreaStops(Envelope envelope) { return index.findAreaStops(envelope); } + /** + * Return all flex groups of stops. + */ public Collection listGroupStops() { return groupStopById.values(); } diff --git a/src/main/java/org/opentripplanner/transit/service/TransitService.java b/src/main/java/org/opentripplanner/transit/service/TransitService.java index d0664aa292d..fdb6dda8749 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -187,7 +187,7 @@ List stopTimesForPatternAtStop( boolean transitFeedCovers(Instant dateTime); - Collection findRegularStop(Envelope envelope); + Collection findRegularStops(Envelope envelope); Collection findAreaStops(Envelope envelope); diff --git a/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java b/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java index b05dd77e2a9..85736291ada 100644 --- a/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java +++ b/src/test/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapperTest.java @@ -55,7 +55,7 @@ class RouteRequestMapperTest implements PlanTestConstants { graph.getVehicleParkingService(), new DefaultVehicleRentalService(), new DefaultRealtimeVehicleService(transitService), - GraphFinder.getInstance(graph, transitService::findRegularStop), + GraphFinder.getInstance(graph, transitService::findRegularStops), new RouteRequest() ); } From 8a7bbc08f603a961511ec5c8a255a80927fb45c3 Mon Sep 17 00:00:00 2001 From: eibakke Date: Mon, 5 Feb 2024 14:36:26 +0100 Subject: [PATCH 061/101] Changes the GroupStop's getEncompassingAreaGeometry method to return an empty optional if the group stop is not defined as an area. This was an oversight earlier. --- .../org/opentripplanner/transit/model/site/GroupStop.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/opentripplanner/transit/model/site/GroupStop.java b/src/main/java/org/opentripplanner/transit/model/site/GroupStop.java index edee00e27e1..c674d588238 100644 --- a/src/main/java/org/opentripplanner/transit/model/site/GroupStop.java +++ b/src/main/java/org/opentripplanner/transit/model/site/GroupStop.java @@ -94,13 +94,12 @@ public Geometry getGeometry() { /** * Returns the geometry of the area that encompasses the bounds of this StopLocation group. If the - * group is defined only as a list of stops, this will return the same as getGeometry. If on the - * other hand the group is defined as an area and the stops are inferred from that area, then this - * will return the geometry of the area. + * group is defined as all the stops within an area, then this will return the geometry of the + * area. If the group is defined simply as a list of stops, this will return an empty optional. */ @Override public Optional getEncompassingAreaGeometry() { - return Optional.ofNullable(encompassingAreaGeometry).or(() -> Optional.of(geometry)); + return Optional.ofNullable(encompassingAreaGeometry); } @Override From 645d3244f51416b217aa6d13ddeb558c0c20a7d3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 22:10:26 +0000 Subject: [PATCH 062/101] Update junit5 monorepo to v5.10.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index be1e49f2a16..32b977f0efd 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ 2.50 2.16.1 3.1.5 - 5.10.1 + 5.10.2 1.12.1 5.5.3 1.4.14 From 7705301832a0edd3a62930096eaf43a22a5907f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 22:10:20 +0000 Subject: [PATCH 063/101] Update dependency org.slf4j:jul-to-slf4j to v2.0.12 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 32b977f0efd..5476adbe49c 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ 5.5.3 1.4.14 9.9.1 - 2.0.11 + 2.0.12 2.0.15 1.26 4.0.4 From 31cb93ca668022bbb65b3dcf7f9f2983c6ab9ba6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 03:28:59 +0000 Subject: [PATCH 064/101] Update dependency org.mockito:mockito-core to v5.10.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5476adbe49c..67595a4ec1e 100644 --- a/pom.xml +++ b/pom.xml @@ -713,7 +713,7 @@ org.mockito mockito-core - 5.9.0 + 5.10.0 test From 22dad32bea0ad075fbdf17d02a083d19bf5b4090 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Tue, 6 Feb 2024 09:25:34 +0000 Subject: [PATCH 065/101] Bump serialization version id for #5650 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 67595a4ec1e..844fc4e7f97 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 143 + 144 30.2 2.50 From 3ddaf01525fc2ad22439dceb2732433248265247 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 6 Feb 2024 16:55:38 +0200 Subject: [PATCH 066/101] Refactor SteetMode --- .../routing/api/request/RequestModes.java | 10 +- .../routing/api/request/StreetMode.java | 124 ++++++++++-------- 2 files changed, 71 insertions(+), 63 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java b/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java index 5253bb2018d..72b06f62979 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java +++ b/src/main/java/org/opentripplanner/routing/api/request/RequestModes.java @@ -2,12 +2,9 @@ import static org.opentripplanner.routing.api.request.StreetMode.NOT_SET; -import java.util.Collection; -import java.util.List; import java.util.Objects; import javax.annotation.Nonnull; import org.opentripplanner.framework.tostring.ToStringBuilder; -import org.opentripplanner.transit.model.basic.MainAndSubMode; public class RequestModes { @@ -39,10 +36,11 @@ private RequestModes( StreetMode directMode, StreetMode transferMode ) { - this.accessMode = (accessMode != null && accessMode.access) ? accessMode : NOT_SET; - this.egressMode = (egressMode != null && egressMode.egress) ? egressMode : NOT_SET; + this.accessMode = (accessMode != null && accessMode.accessAllowed()) ? accessMode : NOT_SET; + this.egressMode = (egressMode != null && egressMode.egressAllowed()) ? egressMode : NOT_SET; this.directMode = directMode != null ? directMode : NOT_SET; - this.transferMode = (transferMode != null && transferMode.transfer) ? transferMode : NOT_SET; + this.transferMode = + (transferMode != null && transferMode.transferAllowed()) ? transferMode : NOT_SET; } public RequestModes(RequestModesBuilder builder) { diff --git a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java index bb5dc4b7f04..041a6fbb247 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java +++ b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java @@ -1,5 +1,7 @@ package org.opentripplanner.routing.api.request; +import java.util.EnumSet; +import java.util.Set; import org.opentripplanner.framework.doc.DocumentedEnum; public enum StreetMode implements DocumentedEnum { @@ -7,134 +9,142 @@ public enum StreetMode implements DocumentedEnum { * No street mode is set. This option is used if we do not want street routing at all in this part * of the search. */ - NOT_SET(true, true, true, false, false, false, false, false, false, false), + NOT_SET(Feature.ACCESS, Feature.TRANSFER, Feature.EGRESS), /** * Walk only */ - WALK(true, true, true, true, false, false, false, false, false, false), + WALK(Feature.ACCESS, Feature.TRANSFER, Feature.EGRESS, Feature.WALKING), /** * Bike only */ - BIKE(true, true, true, false, true, false, false, false, false, false), + BIKE(Feature.ACCESS, Feature.TRANSFER, Feature.EGRESS, Feature.CYCLING), /** * Bike to a bike parking area, then walk the rest of the way. *

    * Direct mode and access mode only. */ - BIKE_TO_PARK(true, false, false, true, true, false, false, false, true, false), + BIKE_TO_PARK(Feature.ACCESS, Feature.WALKING, Feature.CYCLING, Feature.PARKING), /** * Walk to a bike rental point, bike to a bike rental drop-off point, and walk the rest of the * way. This can include bike rental at fixed locations or free-floating services. */ - BIKE_RENTAL(true, true, true, true, true, false, false, true, false, false), + BIKE_RENTAL( + Feature.ACCESS, + Feature.TRANSFER, + Feature.EGRESS, + Feature.WALKING, + Feature.CYCLING, + Feature.RENTING + ), /** * Walk to a scooter rental point, ride a scooter to a scooter rental drop-off point, and walk the * rest of the way. This can include scooter rental at fixed locations or free-floating services. */ - SCOOTER_RENTAL(true, true, true, true, false, false, true, true, false, false), + SCOOTER_RENTAL( + Feature.ACCESS, + Feature.TRANSFER, + Feature.EGRESS, + Feature.WALKING, + Feature.SCOOTER, + Feature.RENTING + ), /** * Car only *

    * Direct mode only. */ - CAR(true, false, false, false, false, true, false, false, false, false), + CAR(Feature.ACCESS, Feature.DRIVING), /** * Start in the car, drive to a parking area, and walk the rest of the way. *

    * Direct mode and access mode only. */ - CAR_TO_PARK(true, false, false, true, false, true, false, false, true, false), + CAR_TO_PARK(Feature.ACCESS, Feature.WALKING, Feature.DRIVING, Feature.PARKING), /** * Walk to a pickup point along the road, drive to a drop-off point along the road, and walk the * rest of the way. This can include various taxi-services or kiss & ride. */ - CAR_PICKUP(true, false, true, true, false, true, false, false, false, true), + CAR_PICKUP(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.DRIVING, Feature.PICKUP), /** * Walk to a car rental point, drive to a car rental drop-off point and walk the rest of the way. * This can include car rental at fixed locations or free-floating services. */ - CAR_RENTAL(true, true, true, true, false, true, false, true, false, false), + CAR_RENTAL( + Feature.ACCESS, + Feature.TRANSFER, + Feature.EGRESS, + Feature.WALKING, + Feature.DRIVING, + Feature.RENTING + ), /** * Using a car hailing app like Uber or Lyft to get to a train station or all the way to the destination. */ - CAR_HAILING(true, false, true, false, false, true, false, false, false, true), + CAR_HAILING(Feature.ACCESS, Feature.EGRESS, Feature.DRIVING, Feature.PICKUP), /** * Encompasses all types of on-demand and flexible transportation. */ - FLEXIBLE(true, false, true, true, false, false, false, false, false, false); - - final boolean access; - - final boolean transfer; - - final boolean egress; - - final boolean includesWalking; - - final boolean includesBiking; - - final boolean includesDriving; + FLEXIBLE(Feature.ACCESS, Feature.EGRESS, Feature.WALKING); + + private enum Feature { + ACCESS, + EGRESS, + TRANSFER, + WALKING, + CYCLING, + DRIVING, + SCOOTER, + RENTING, + PARKING, + PICKUP, + } - final boolean includesScooter; + private final Set features; - final boolean includesRenting; + StreetMode(Feature first, Feature... rest) { + this.features = EnumSet.of(first, rest); + } - final boolean includesParking; + public boolean accessAllowed() { + return features.contains(Feature.ACCESS); + } - final boolean includesPickup; + public boolean transferAllowed() { + return features.contains(Feature.TRANSFER); + } - StreetMode( - boolean access, - boolean transfer, - boolean egress, - boolean includesWalking, - boolean includesBiking, - boolean includesDriving, - boolean includesScooter, - boolean includesRenting, - boolean includesParking, - boolean includesPickup - ) { - this.access = access; - this.transfer = transfer; - this.egress = egress; - this.includesWalking = includesWalking; - this.includesBiking = includesBiking; - this.includesDriving = includesDriving; - this.includesScooter = includesScooter; - this.includesRenting = includesRenting; - this.includesParking = includesParking; - this.includesPickup = includesPickup; + public boolean egressAllowed() { + return features.contains(Feature.EGRESS); } public boolean includesWalking() { - return includesWalking; + return features.contains(Feature.WALKING); } public boolean includesBiking() { - return includesBiking; + return features.contains(Feature.CYCLING); } public boolean includesDriving() { - return includesDriving; + return features.contains(Feature.DRIVING); } public boolean includesScooter() { - return includesScooter; + return features.contains(Feature.SCOOTER); } public boolean includesRenting() { - return includesRenting; + return features.contains(Feature.RENTING); } public boolean includesParking() { - return includesParking; + return features.contains(Feature.PARKING); } public boolean includesPickup() { - return includesPickup; + return features.contains(Feature.PICKUP); } @Override From aa32eb753952153d4b0fc0f073487f20fc7965f1 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Tue, 6 Feb 2024 17:32:47 +0200 Subject: [PATCH 067/101] Remove transfer from rental modes as it's not possible --- .../routing/api/request/StreetMode.java | 27 +++---------------- 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java index 041a6fbb247..47073aa7eeb 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java +++ b/src/main/java/org/opentripplanner/routing/api/request/StreetMode.java @@ -28,26 +28,12 @@ public enum StreetMode implements DocumentedEnum { * Walk to a bike rental point, bike to a bike rental drop-off point, and walk the rest of the * way. This can include bike rental at fixed locations or free-floating services. */ - BIKE_RENTAL( - Feature.ACCESS, - Feature.TRANSFER, - Feature.EGRESS, - Feature.WALKING, - Feature.CYCLING, - Feature.RENTING - ), + BIKE_RENTAL(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.CYCLING, Feature.RENTING), /** * Walk to a scooter rental point, ride a scooter to a scooter rental drop-off point, and walk the * rest of the way. This can include scooter rental at fixed locations or free-floating services. */ - SCOOTER_RENTAL( - Feature.ACCESS, - Feature.TRANSFER, - Feature.EGRESS, - Feature.WALKING, - Feature.SCOOTER, - Feature.RENTING - ), + SCOOTER_RENTAL(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.SCOOTER, Feature.RENTING), /** * Car only *

    @@ -69,14 +55,7 @@ public enum StreetMode implements DocumentedEnum { * Walk to a car rental point, drive to a car rental drop-off point and walk the rest of the way. * This can include car rental at fixed locations or free-floating services. */ - CAR_RENTAL( - Feature.ACCESS, - Feature.TRANSFER, - Feature.EGRESS, - Feature.WALKING, - Feature.DRIVING, - Feature.RENTING - ), + CAR_RENTAL(Feature.ACCESS, Feature.EGRESS, Feature.WALKING, Feature.DRIVING, Feature.RENTING), /** * Using a car hailing app like Uber or Lyft to get to a train station or all the way to the destination. From 5184fa0ddedb36c8796f000158c64eed0e66e314 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 00:55:02 +0000 Subject: [PATCH 068/101] Update graphqlcodegenerator monorepo to v5.0.2 --- .../apis/gtfs/generated/package.json | 4 +- .../apis/gtfs/generated/yarn.lock | 172 ++++++++++++++---- 2 files changed, 141 insertions(+), 35 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/package.json b/src/main/java/org/opentripplanner/apis/gtfs/generated/package.json index 6a2eb3343b9..db865eaa003 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/package.json +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/package.json @@ -10,8 +10,8 @@ }, "license": "LGPL-3.0", "dependencies": { - "@graphql-codegen/add": "5.0.0", - "@graphql-codegen/cli": "5.0.0", + "@graphql-codegen/add": "5.0.2", + "@graphql-codegen/cli": "5.0.2", "@graphql-codegen/java": "4.0.0", "@graphql-codegen/java-resolvers": "3.0.0", "graphql": "16.8.1" diff --git a/src/main/java/org/opentripplanner/apis/gtfs/generated/yarn.lock b/src/main/java/org/opentripplanner/apis/gtfs/generated/yarn.lock index 7e3c815cfb1..fffe602db18 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/generated/yarn.lock +++ b/src/main/java/org/opentripplanner/apis/gtfs/generated/yarn.lock @@ -264,7 +264,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-plugin-utils@^7.22.5": +"@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== @@ -699,24 +699,25 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@graphql-codegen/add@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/add/-/add-5.0.0.tgz#578ebaf4fa87c1e934c381cd679bcedcf79feaba" - integrity sha512-ynWDOsK2yxtFHwcJTB9shoSkUd7YXd6ZE57f0nk7W5cu/nAgxZZpEsnTPEpZB/Mjf14YRGe2uJHQ7AfElHjqUQ== +"@graphql-codegen/add@5.0.2", "@graphql-codegen/add@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/add/-/add-5.0.2.tgz#71b3ae0465a4537172dddb84531b6967ca5545f2" + integrity sha512-ouBkSvMFUhda5VoKumo/ZvsZM9P5ZTyDsI8LW18VxSNWOjrTeLXBWHG8Gfaai0HwhflPtCYVABbriEcOmrRShQ== dependencies: - "@graphql-codegen/plugin-helpers" "^5.0.0" - tslib "~2.5.0" + "@graphql-codegen/plugin-helpers" "^5.0.3" + tslib "~2.6.0" -"@graphql-codegen/cli@5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-5.0.0.tgz#761dcf08cfee88bbdd9cdf8097b2343445ec6f0a" - integrity sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA== +"@graphql-codegen/cli@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-5.0.2.tgz#07ff691c16da4c3dcc0e1995d3231530379ab317" + integrity sha512-MBIaFqDiLKuO4ojN6xxG9/xL9wmfD3ZjZ7RsPjwQnSHBCUXnEkdKvX+JVpx87Pq29Ycn8wTJUguXnTZ7Di0Mlw== dependencies: "@babel/generator" "^7.18.13" "@babel/template" "^7.18.10" "@babel/types" "^7.18.13" - "@graphql-codegen/core" "^4.0.0" - "@graphql-codegen/plugin-helpers" "^5.0.1" + "@graphql-codegen/client-preset" "^4.2.2" + "@graphql-codegen/core" "^4.0.2" + "@graphql-codegen/plugin-helpers" "^5.0.3" "@graphql-tools/apollo-engine-loader" "^8.0.0" "@graphql-tools/code-file-loader" "^8.0.0" "@graphql-tools/git-loader" "^8.0.0" @@ -747,15 +748,45 @@ yaml "^2.3.1" yargs "^17.0.0" -"@graphql-codegen/core@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-4.0.0.tgz#b29c911746a532a675e33720acb4eb2119823e01" - integrity sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q== +"@graphql-codegen/client-preset@^4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/client-preset/-/client-preset-4.2.2.tgz#545c62789a5687bee5df8b4738b4911e72ea8051" + integrity sha512-DF9pNWj3TEdA90E9FH5SsUIqiZfr872vqaQOspLVuVXGsaDx8F/JLLzaN+7ucmoo0ff/bLW8munVXYXTmgwwEA== dependencies: - "@graphql-codegen/plugin-helpers" "^5.0.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" + "@graphql-codegen/add" "^5.0.2" + "@graphql-codegen/gql-tag-operations" "4.0.4" + "@graphql-codegen/plugin-helpers" "^5.0.3" + "@graphql-codegen/typed-document-node" "^5.0.4" + "@graphql-codegen/typescript" "^4.0.4" + "@graphql-codegen/typescript-operations" "^4.1.2" + "@graphql-codegen/visitor-plugin-common" "^4.1.2" + "@graphql-tools/documents" "^1.0.0" + "@graphql-tools/utils" "^10.0.0" + "@graphql-typed-document-node/core" "3.2.0" + tslib "~2.6.0" + +"@graphql-codegen/core@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-4.0.2.tgz#7e6ec266276f54bbf02f60599d9e518f4a59d85e" + integrity sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg== + dependencies: + "@graphql-codegen/plugin-helpers" "^5.0.3" "@graphql-tools/schema" "^10.0.0" "@graphql-tools/utils" "^10.0.0" - tslib "~2.5.0" + tslib "~2.6.0" + +"@graphql-codegen/gql-tag-operations@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.4.tgz#572be5db804af5efdc3ca24e4bcac815448730c5" + integrity sha512-dypul0iDLjb07yv+/cRb6qPbn42cFPcwlsJertVl9G6qkS4+3V4806WwSfUht4QVMWnvGfgDkJJqG0yUVKOHwA== + dependencies: + "@graphql-codegen/plugin-helpers" "^5.0.3" + "@graphql-codegen/visitor-plugin-common" "4.1.2" + "@graphql-tools/utils" "^10.0.0" + auto-bind "~4.0.0" + tslib "~2.6.0" "@graphql-codegen/java-common@^3.0.0": version "3.0.0" @@ -813,29 +844,59 @@ lodash "~4.17.0" tslib "~2.4.0" -"@graphql-codegen/plugin-helpers@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.0.tgz#40c18217454af5cf8317e5f46cf4d38e8cc78ae4" - integrity sha512-suL2ZMkBAU2a4YbBHaZvUPsV1z0q3cW6S96Z/eYYfkRIsJoe2vN+wNZ9Xdzmqx0JLmeeFCBSoBGC0imFyXlkDQ== +"@graphql-codegen/plugin-helpers@^5.0.3": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.3.tgz#7027b9d911d7cb594663590fcf5d63e9cf7ec2ff" + integrity sha512-yZ1rpULIWKBZqCDlvGIJRSyj1B2utkEdGmXZTBT/GVayP4hyRYlkd36AJV/LfEsVD8dnsKL5rLz2VTYmRNlJ5Q== dependencies: "@graphql-tools/utils" "^10.0.0" change-case-all "1.0.15" common-tags "1.8.2" import-from "4.0.0" lodash "~4.17.0" - tslib "~2.5.0" + tslib "~2.6.0" -"@graphql-codegen/plugin-helpers@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.1.tgz#e2429fcfba3f078d5aa18aa062d46c922bbb0d55" - integrity sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww== +"@graphql-codegen/schema-ast@^4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/schema-ast/-/schema-ast-4.0.2.tgz#aeaa104e4555cca73a058f0a9350b4b0e290b377" + integrity sha512-5mVAOQQK3Oz7EtMl/l3vOQdc2aYClUzVDHHkMvZlunc+KlGgl81j8TLa+X7ANIllqU4fUEsQU3lJmk4hXP6K7Q== dependencies: + "@graphql-codegen/plugin-helpers" "^5.0.3" "@graphql-tools/utils" "^10.0.0" + tslib "~2.6.0" + +"@graphql-codegen/typed-document-node@^5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.4.tgz#06e286caacdd66c3566f98433dcb8f1a9c9a9f1d" + integrity sha512-t66Z6erQ4Dh1j6f9pRZmc8uYtHoUI3A49tLmJAlg9/3IV0kCmwrWKJut/G8SeOefDLG8cXBTVtI/YuZOe1Te+w== + dependencies: + "@graphql-codegen/plugin-helpers" "^5.0.3" + "@graphql-codegen/visitor-plugin-common" "4.1.2" + auto-bind "~4.0.0" change-case-all "1.0.15" - common-tags "1.8.2" - import-from "4.0.0" - lodash "~4.17.0" - tslib "~2.5.0" + tslib "~2.6.0" + +"@graphql-codegen/typescript-operations@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-4.1.2.tgz#a0f455ae19e16961e5870420ca7515bbe51b5568" + integrity sha512-CtCWK+gW7hS+Ely3lohr8CL1HVLswQzMcaUk3k1sxdWCWKTNq7abMsWa31rTVwRCJ+WNEkM/7S8sIBTpEG683A== + dependencies: + "@graphql-codegen/plugin-helpers" "^5.0.3" + "@graphql-codegen/typescript" "^4.0.4" + "@graphql-codegen/visitor-plugin-common" "4.1.2" + auto-bind "~4.0.0" + tslib "~2.6.0" + +"@graphql-codegen/typescript@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript/-/typescript-4.0.4.tgz#e791c61f675ae454951ea077b0ae519ae352cc3e" + integrity sha512-x79CKLfP9UQCX+/I78qxQlMs2Mmq3pF1lKafZo7lAno0f/fvJ+qWUduzdgjRNz+YL+5blGeWcC0pWEDxniO7hw== + dependencies: + "@graphql-codegen/plugin-helpers" "^5.0.3" + "@graphql-codegen/schema-ast" "^4.0.2" + "@graphql-codegen/visitor-plugin-common" "4.1.2" + auto-bind "~4.0.0" + tslib "~2.6.0" "@graphql-codegen/visitor-plugin-common@2.13.1": version "2.13.1" @@ -853,6 +914,22 @@ parse-filepath "^1.0.2" tslib "~2.4.0" +"@graphql-codegen/visitor-plugin-common@4.1.2", "@graphql-codegen/visitor-plugin-common@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-4.1.2.tgz#674c5d5813f6c00dd65e1ee148a62536879e65e2" + integrity sha512-yk7iEAL1kYZ2Gi/pvVjdsZhul5WsYEM4Zcgh2Ev15VicMdJmPHsMhNUsZWyVJV0CaQCYpNOFlGD/11Ea3pn4GA== + dependencies: + "@graphql-codegen/plugin-helpers" "^5.0.3" + "@graphql-tools/optimize" "^2.0.0" + "@graphql-tools/relay-operation-optimizer" "^7.0.0" + "@graphql-tools/utils" "^10.0.0" + auto-bind "~4.0.0" + change-case-all "1.0.15" + dependency-graph "^0.11.0" + graphql-tag "^2.11.0" + parse-filepath "^1.0.2" + tslib "~2.6.0" + "@graphql-tools/apollo-engine-loader@^8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.0.tgz#ac1f351cbe41508411784f25757f5557b0f27489" @@ -897,6 +974,14 @@ tslib "^2.5.0" value-or-promise "^1.0.12" +"@graphql-tools/documents@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/documents/-/documents-1.0.0.tgz#e3ed97197cc22ec830ca227fd7d17e86d8424bdf" + integrity sha512-rHGjX1vg/nZ2DKqRGfDPNC55CWZBMldEVcH+91BThRa6JeT80NqXknffLLEZLRUxyikCfkwMsk6xR3UNMqG0Rg== + dependencies: + lodash.sortby "^4.7.0" + tslib "^2.4.0" + "@graphql-tools/executor-graphql-ws@^1.0.0": version "1.0.2" resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-1.0.2.tgz#29890f9370c5bebd4a2380e29904f8eaf9f013ca" @@ -1036,6 +1121,13 @@ dependencies: tslib "^2.4.0" +"@graphql-tools/optimize@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/optimize/-/optimize-2.0.0.tgz#7a9779d180824511248a50c5a241eff6e7a2d906" + integrity sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg== + dependencies: + tslib "^2.4.0" + "@graphql-tools/prisma-loader@^8.0.0": version "8.0.1" resolved "https://registry.yarnpkg.com/@graphql-tools/prisma-loader/-/prisma-loader-8.0.1.tgz#0a013c69b04e0779b5be15757173d458cdf94e35" @@ -1069,6 +1161,15 @@ "@graphql-tools/utils" "9.1.1" tslib "^2.4.0" +"@graphql-tools/relay-operation-optimizer@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.0.tgz#24367666af87bc5a81748de5e8e9b3c523fd4207" + integrity sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw== + dependencies: + "@ardatan/relay-compiler" "12.0.0" + "@graphql-tools/utils" "^10.0.0" + tslib "^2.4.0" + "@graphql-tools/schema@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-10.0.0.tgz#7b5f6b6a59f51c927de8c9069bde4ebbfefc64b3" @@ -2374,6 +2475,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + lodash@^4.17.20, lodash@^4.17.21, lodash@~4.17.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -3049,7 +3155,7 @@ ts-log@^2.2.3: resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.3.tgz#4da5640fe25a9fb52642cd32391c886721318efb" integrity sha512-XvB+OdKSJ708Dmf9ore4Uf/q62AYDTzFcAdxc8KNML1mmAWywRFVt/dn1KYJH8Agt5UJNujfM3znU5PxgAzA2w== -tslib@^2.0.0, tslib@^2.3.1, tslib@^2.4.1, tslib@~2.5.0: +tslib@^2.0.0, tslib@^2.3.1, tslib@^2.4.1: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== From 5904d2ee51aca36dca243de88b13de6237e9042b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 04:01:36 +0000 Subject: [PATCH 069/101] Update micrometer.version to v1.12.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 844fc4e7f97..aae99297d39 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ 2.16.1 3.1.5 5.10.2 - 1.12.1 + 1.12.2 5.5.3 1.4.14 9.9.1 From 1d4f70f663ee4043cb2ebc1235c25bce3f5f6255 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 06:42:15 +0000 Subject: [PATCH 070/101] Update dependency com.google.cloud:libraries-bom to v26.31.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 844fc4e7f97..db06b8eb6dc 100644 --- a/pom.xml +++ b/pom.xml @@ -545,7 +545,7 @@ com.google.cloud libraries-bom - 26.27.0 + 26.31.0 pom import From 46b00abf9028152c9c82914aaeeec0a7998c8240 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Wed, 7 Feb 2024 09:06:02 +0000 Subject: [PATCH 071/101] Add changelog entry for #5381 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 05731e6fbeb..df2ecd4b8fc 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -88,6 +88,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Separate walk time from non-transit time [#5648](https://github.com/opentripplanner/OpenTripPlanner/pull/5648) - Remove "fare" [#5645](https://github.com/opentripplanner/OpenTripPlanner/pull/5645) - Refactor GroupStopBuilder addLocation method [#5651](https://github.com/opentripplanner/OpenTripPlanner/pull/5651) +- Remove `VehicleToStopHeuristics` [#5381](https://github.com/opentripplanner/OpenTripPlanner/pull/5381) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 7692ef10fa9d8a5d51b371c7585ecbb9df4a4f2d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 7 Feb 2024 12:25:44 +0100 Subject: [PATCH 072/101] Apply review feedback --- .../DecorateConsolidatedStopNames.java | 34 ++++++++++++++----- .../DefaultStopConsolidationService.java | 4 +-- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java index 2a09bb64255..a287e6a7d66 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/DecorateConsolidatedStopNames.java @@ -7,9 +7,9 @@ import org.opentripplanner.routing.algorithm.filterchain.framework.spi.ItineraryDecorator; /** - * A decorating filter that checks if a transit leg contains any primary stops and if it does, - * then replaces it with the secondary, agency-specific stop name. This is so that the in-vehicle - * display matches what OTP returns as a board/alight stop name. + * A decorating filter that checks if a transit leg contains any consolidated stops and if it does, + * then replaces it with the appropriate, agency-specific stop name. This is so that the physical + * signage and in-vehicle display matches what OTP returns as a board/alight stop name. */ public class DecorateConsolidatedStopNames implements ItineraryDecorator { @@ -21,20 +21,28 @@ public DecorateConsolidatedStopNames(StopConsolidationService service) { @Override public void decorate(Itinerary itinerary) { - replacePrimaryNamesWithSecondary(itinerary); + replaceConsolidatedStops(itinerary); } /** - * If the itinerary has a from/to that is the primary stop of a {@link org.opentripplanner.ext.stopconsolidation.model.ConsolidatedStopGroup} - * then we replace its name with the secondary name of the agency that is - * operating the route, so that the name in the result matches the name in the in-vehicle - * display. + * If the itinerary has a "from" stop that is the secondary stop of a + * {@link org.opentripplanner.ext.stopconsolidation.model.ConsolidatedStopGroup} + * then we replace its name with the primary name of the agency that is + * operating the route, so that the name in the result matches the physical signage on the stop. + *

    + * If the leg has a "to" stop that is a primary stop, then we don't want to show the stop that's on + * the signage but what is shown _inside_ the vehicle. That's why we use the agency-specific (aka + * secondary) stop. + *

    + * This follows the somewhat idiosyncratic logic of the consolidated stops feature. */ - private void replacePrimaryNamesWithSecondary(Itinerary i) { + private void replaceConsolidatedStops(Itinerary i) { i.transformTransitLegs(leg -> { if (leg instanceof ScheduledTransitLeg stl && needsToRenameStops(stl)) { var agency = leg.getAgency(); + // to show the name on the stop signage we use the primary stop's name var from = service.primaryStop(stl.getFrom().stop.getId()); + // to show the name that's on the display inside the vehicle we use the agency-specific name var to = service.agencySpecificStop(stl.getTo().stop, agency); return new ConsolidatedStopLeg(stl, from, to); } else { @@ -43,6 +51,14 @@ private void replacePrimaryNamesWithSecondary(Itinerary i) { }); } + /** + * Figures out if the from/to stops are part of a consolidated stop group and therefore + * some stops need to be replaced. + *

    + * Please consult the Javadoc of {@link DecorateConsolidatedStopNames#replaceConsolidatedStops(Itinerary)} + * for details of this idiosyncratic business logic and in particular why the logic is not the same + * for the from/to stops. + */ private boolean needsToRenameStops(ScheduledTransitLeg stl) { return (service.isSecondaryStop(stl.getFrom().stop) || service.isPrimaryStop(stl.getTo().stop)); } diff --git a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java index 5011a848210..51a57028121 100644 --- a/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java +++ b/src/ext/java/org/opentripplanner/ext/stopconsolidation/internal/DefaultStopConsolidationService.java @@ -77,12 +77,12 @@ public StopLocation agencySpecificStop(StopLocation stop, Agency agency) { if (agency.getId().getFeedId().equals(stop.getId().getFeedId())) { return stop; } else { - return agencySpecificStopOpt(stop, agency).orElse(stop); + return findAgencySpecificStop(stop, agency).orElse(stop); } } @Nonnull - private Optional agencySpecificStopOpt(StopLocation stop, Agency agency) { + private Optional findAgencySpecificStop(StopLocation stop, Agency agency) { return repo .groups() .stream() From 056d7585fb86eebb6a6456e259fc9cf63885a646 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 7 Feb 2024 14:11:32 +0100 Subject: [PATCH 073/101] Allow configuring a custom attribution for vector tiles --- docs/sandbox/MapboxVectorTilesApi.md | 1 + .../ext/vectortiles/VectorTilesResource.java | 6 +++- .../apis/support/TileJson.java | 27 +++++++++++------ .../config/routerconfig/VectorTileConfig.java | 20 +++++++++++-- .../apis/support/TileJsonTest.java | 30 +++++++++++++++++++ 5 files changed, 71 insertions(+), 13 deletions(-) diff --git a/docs/sandbox/MapboxVectorTilesApi.md b/docs/sandbox/MapboxVectorTilesApi.md index da9fd1120e1..8e4af296155 100644 --- a/docs/sandbox/MapboxVectorTilesApi.md +++ b/docs/sandbox/MapboxVectorTilesApi.md @@ -148,6 +148,7 @@ For each layer, the configuration includes: | Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | |----------------------------------------------------------------|:----------:|--------------------------------------------------------------------------------------------|:----------:|---------------|:-----:| +| attribution | `string` | Set a custom attribution to be returned in `tilejson.json` | *Optional* | | 2.5 | | [basePath](#vectorTiles_basePath) | `string` | The path of the vector tile source URLs in `tilejson.json`. | *Optional* | | 2.5 | | [layers](#vectorTiles_layers) | `object[]` | Configuration of the individual layers for the Mapbox vector tiles. | *Optional* | | 2.0 | |       type = "stop" | `enum` | Type of the layer. | *Required* | | 2.0 | diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java index 772db7394f3..b4e59dc49e5 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java @@ -101,7 +101,11 @@ public TileJson getTileJson( TileJson.urlWithDefaultPath(uri, headers, rLayers, ignoreRouterId, "vectorTiles") ); - return new TileJson(url, envelope, feedInfos); + return serverContext + .vectorTileConfig() + .attribution() + .map(attr -> new TileJson(url, envelope, attr)) + .orElseGet(() -> new TileJson(url, envelope, feedInfos)); } private static LayerBuilder crateLayerBuilder( diff --git a/src/main/java/org/opentripplanner/apis/support/TileJson.java b/src/main/java/org/opentripplanner/apis/support/TileJson.java index 75aabb2b6c6..72fe1ac3140 100644 --- a/src/main/java/org/opentripplanner/apis/support/TileJson.java +++ b/src/main/java/org/opentripplanner/apis/support/TileJson.java @@ -6,6 +6,7 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; +import javax.annotation.Nonnull; import org.apache.commons.lang3.StringUtils; import org.opentripplanner.framework.io.HttpUtils; import org.opentripplanner.model.FeedInfo; @@ -36,15 +37,8 @@ public class TileJson implements Serializable { public final double[] bounds; public final double[] center; - public TileJson(String tileUrl, WorldEnvelope envelope, Collection feedInfos) { - attribution = - feedInfos - .stream() - .map(feedInfo -> - "" + feedInfo.getPublisherName() + "" - ) - .collect(Collectors.joining(", ")); - + public TileJson(String tileUrl, WorldEnvelope envelope, String attribution) { + this.attribution = attribution; tiles = new String[] { tileUrl }; bounds = @@ -59,6 +53,21 @@ public TileJson(String tileUrl, WorldEnvelope envelope, Collection fee center = new double[] { c.longitude(), c.latitude(), 9 }; } + public TileJson(String tileUrl, WorldEnvelope envelope, Collection feedInfos) { + this(tileUrl, envelope, attributionFromFeedInfo(feedInfos)); + } + + @Nonnull + private static String attributionFromFeedInfo(Collection feedInfos) { + var attribution = feedInfos + .stream() + .map(feedInfo -> + "" + feedInfo.getPublisherName() + "" + ) + .collect(Collectors.joining(", ")); + return attribution; + } + /** * Creates a vector source layer URL from a hard-coded path plus information from the incoming * HTTP request. diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java index 6f7d6967ce8..4afc14a4ea7 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java @@ -18,18 +18,23 @@ public class VectorTileConfig implements VectorTilesResource.LayersParameters { - public static final VectorTileConfig DEFAULT = new VectorTileConfig(List.of(), null); + public static final VectorTileConfig DEFAULT = new VectorTileConfig(List.of(), null, null); private final List> layers; @Nullable private final String basePath; + @Nullable + private final String attribution; + VectorTileConfig( Collection> layers, - @Nullable String basePath + @Nullable String basePath, + @Nullable String attribution ) { this.layers = List.copyOf(layers); this.basePath = basePath; + this.attribution = attribution; } @Override @@ -41,6 +46,10 @@ public Optional basePath() { return Optional.ofNullable(basePath); } + public Optional attribution() { + return Optional.ofNullable(attribution); + } + public static VectorTileConfig mapVectorTilesParameters(NodeAdapter node, String paramName) { var root = node.of(paramName).summary("Vector tile configuration").asObject(); return new VectorTileConfig( @@ -71,7 +80,12 @@ public static VectorTileConfig mapVectorTilesParameters(NodeAdapter node, String is expected to be handled by a proxy. """ ) - .asString(DEFAULT.basePath) + .asString(DEFAULT.basePath), + root + .of("attribution") + .since(V2_5) + .summary("Set a custom attribution to be returned in `tilejson.json`") + .asString(DEFAULT.attribution) ); } diff --git a/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java b/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java index ac3b7bca522..f5f0401cf86 100644 --- a/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java +++ b/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java @@ -2,16 +2,24 @@ import static org.junit.jupiter.api.Assertions.assertEquals; +import java.time.LocalDate; import java.util.List; import org.glassfish.jersey.server.internal.routing.UriRoutingContext; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.opentripplanner.model.FeedInfo; +import org.opentripplanner.service.worldenvelope.model.WorldEnvelope; import org.opentripplanner.test.support.HttpForTest; class TileJsonTest { private static final List LAYERS = List.of("stops", "rentalVehicles"); + private static final WorldEnvelope ENVELOPE = WorldEnvelope + .of() + .expandToIncludeStreetEntities(1, 1) + .expandToIncludeStreetEntities(2, 2) + .build(); @ParameterizedTest @ValueSource( @@ -40,4 +48,26 @@ void defaultPath() { TileJson.urlWithDefaultPath(uriInfo, req, LAYERS, "default", "vectorTiles") ); } + + @Test + void attributionFromFeedInfo() { + var feedInfo = new FeedInfo( + "1", + "Trimet", + "https://trimet.org", + "en", + LocalDate.MIN, + LocalDate.MIN, + "1" + ); + var tileJson = new TileJson("http://example.com", ENVELOPE, List.of(feedInfo)); + assertEquals("Trimet", tileJson.attribution); + } + + @Test + void attributionFromOverride() { + final String override = "OVERRIDE"; + var tileJson = new TileJson("http://example.com", ENVELOPE, override); + assertEquals(override, tileJson.attribution); + } } From c7e8e0d60e39b3cd44723f4809cfa2dae5c86fbe Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 7 Feb 2024 16:38:05 +0100 Subject: [PATCH 074/101] Refactor attribution handling --- .../ext/vectortiles/VectorTilesResource.java | 23 +++++++++------ .../apis/support/TileJson.java | 22 +++++++-------- .../apis/support/TileJsonTest.java | 28 +++++++++++-------- 3 files changed, 42 insertions(+), 31 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java index b4e59dc49e5..a1e9a83c85a 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java @@ -28,6 +28,7 @@ import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; import org.opentripplanner.inspector.vector.VectorTileResponseFactory; +import org.opentripplanner.model.FeedInfo; import org.opentripplanner.standalone.api.OtpServerRequestContext; @Path("/routers/{ignoreRouterId}/vectorTiles") @@ -81,13 +82,6 @@ public TileJson getTileJson( @PathParam("layers") String requestedLayers ) { var envelope = serverContext.worldEnvelopeService().envelope().orElseThrow(); - var feedInfos = serverContext - .transitService() - .getFeedIds() - .stream() - .map(serverContext.transitService()::getFeedInfo) - .filter(Predicate.not(Objects::isNull)) - .toList(); List rLayers = Arrays.asList(requestedLayers.split(",")); @@ -105,7 +99,20 @@ public TileJson getTileJson( .vectorTileConfig() .attribution() .map(attr -> new TileJson(url, envelope, attr)) - .orElseGet(() -> new TileJson(url, envelope, feedInfos)); + .orElseGet(() -> { + var feedInfos = getFeedInfos(); + return new TileJson(url, envelope, feedInfos); + }); + } + + private List getFeedInfos() { + return serverContext + .transitService() + .getFeedIds() + .stream() + .map(serverContext.transitService()::getFeedInfo) + .filter(Predicate.not(Objects::isNull)) + .toList(); } private static LayerBuilder crateLayerBuilder( diff --git a/src/main/java/org/opentripplanner/apis/support/TileJson.java b/src/main/java/org/opentripplanner/apis/support/TileJson.java index 72fe1ac3140..fcd6e84cc06 100644 --- a/src/main/java/org/opentripplanner/apis/support/TileJson.java +++ b/src/main/java/org/opentripplanner/apis/support/TileJson.java @@ -6,7 +6,6 @@ import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import javax.annotation.Nonnull; import org.apache.commons.lang3.StringUtils; import org.opentripplanner.framework.io.HttpUtils; import org.opentripplanner.model.FeedInfo; @@ -57,17 +56,6 @@ public TileJson(String tileUrl, WorldEnvelope envelope, Collection fee this(tileUrl, envelope, attributionFromFeedInfo(feedInfos)); } - @Nonnull - private static String attributionFromFeedInfo(Collection feedInfos) { - var attribution = feedInfos - .stream() - .map(feedInfo -> - "" + feedInfo.getPublisherName() + "" - ) - .collect(Collectors.joining(", ")); - return attribution; - } - /** * Creates a vector source layer URL from a hard-coded path plus information from the incoming * HTTP request. @@ -105,4 +93,14 @@ public static String urlFromOverriddenBasePath( String.join(",", layers) ); } + + private static String attributionFromFeedInfo(Collection feedInfos) { + return feedInfos + .stream() + .map(feedInfo -> + "" + feedInfo.getPublisherName() + "" + ) + .distinct() + .collect(Collectors.joining(", ")); + } } diff --git a/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java b/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java index f5f0401cf86..73c8cd1369e 100644 --- a/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java +++ b/src/test/java/org/opentripplanner/apis/support/TileJsonTest.java @@ -20,6 +20,15 @@ class TileJsonTest { .expandToIncludeStreetEntities(1, 1) .expandToIncludeStreetEntities(2, 2) .build(); + private static final FeedInfo FEED_INFO = new FeedInfo( + "1", + "Trimet", + "https://trimet.org", + "en", + LocalDate.MIN, + LocalDate.MIN, + "1" + ); @ParameterizedTest @ValueSource( @@ -51,22 +60,19 @@ void defaultPath() { @Test void attributionFromFeedInfo() { - var feedInfo = new FeedInfo( - "1", - "Trimet", - "https://trimet.org", - "en", - LocalDate.MIN, - LocalDate.MIN, - "1" - ); - var tileJson = new TileJson("http://example.com", ENVELOPE, List.of(feedInfo)); + var tileJson = new TileJson("http://example.com", ENVELOPE, List.of(FEED_INFO)); + assertEquals("Trimet", tileJson.attribution); + } + + @Test + void duplicateAttribution() { + var tileJson = new TileJson("http://example.com", ENVELOPE, List.of(FEED_INFO, FEED_INFO)); assertEquals("Trimet", tileJson.attribution); } @Test void attributionFromOverride() { - final String override = "OVERRIDE"; + var override = "OVERRIDE"; var tileJson = new TileJson("http://example.com", ENVELOPE, override); assertEquals(override, tileJson.attribution); } From db5eb9e915a0e463fd4593df7e111cea977a1e39 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 7 Feb 2024 16:48:43 +0100 Subject: [PATCH 075/101] Flesh out documentation --- docs/sandbox/MapboxVectorTilesApi.md | 17 ++++++++++++++++- .../config/routerconfig/VectorTileConfig.java | 12 +++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/docs/sandbox/MapboxVectorTilesApi.md b/docs/sandbox/MapboxVectorTilesApi.md index 8e4af296155..11bd195a9d8 100644 --- a/docs/sandbox/MapboxVectorTilesApi.md +++ b/docs/sandbox/MapboxVectorTilesApi.md @@ -148,7 +148,7 @@ For each layer, the configuration includes: | Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | |----------------------------------------------------------------|:----------:|--------------------------------------------------------------------------------------------|:----------:|---------------|:-----:| -| attribution | `string` | Set a custom attribution to be returned in `tilejson.json` | *Optional* | | 2.5 | +| [attribution](#vectorTiles_attribution) | `string` | Custom attribution to be returned in `tilejson.json` | *Optional* | | 2.5 | | [basePath](#vectorTiles_basePath) | `string` | The path of the vector tile source URLs in `tilejson.json`. | *Optional* | | 2.5 | | [layers](#vectorTiles_layers) | `object[]` | Configuration of the individual layers for the Mapbox vector tiles. | *Optional* | | 2.0 | |       type = "stop" | `enum` | Type of the layer. | *Required* | | 2.0 | @@ -162,6 +162,21 @@ For each layer, the configuration includes: #### Details +

    attribution

    + +**Since version:** `2.5` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` +**Path:** /vectorTiles + +Custom attribution to be returned in `tilejson.json` + +By default the `attribution` property in `tilejson.json` is computed from the names and +URLs of the feed publishers. +If the OTP deployment contains many fields, this can become very unwieldy. + +This configuration parameter allows you to set the `attribution` to any string you wish, +for example `TriMet, C-Tran, SMART and Friends`. + +

    basePath

    **Since version:** `2.5` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java index 4afc14a4ea7..f0c6cb7d9b0 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java @@ -84,7 +84,17 @@ public static VectorTileConfig mapVectorTilesParameters(NodeAdapter node, String root .of("attribution") .since(V2_5) - .summary("Set a custom attribution to be returned in `tilejson.json`") + .summary("Custom attribution to be returned in `tilejson.json`") + .description( + """ + By default the `attribution` property in `tilejson.json` is computed from the names and + URLs of the feed publishers. + If the OTP deployment contains many fields, this can become very unwieldy. + + This configuration parameter allows you to set the `attribution` to any string you wish, + for example `TriMet, C-Tran, SMART and Friends`. + """ + ) .asString(DEFAULT.attribution) ); } From 18b94fc34272724ec9619cd82952ee2f47b28487 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 8 Feb 2024 13:33:02 +0100 Subject: [PATCH 076/101] Reduce flex default penalty --- docs/RouteRequest.md | 2 +- .../api/request/preference/AccessEgressPreferences.java | 6 +++++- .../org/opentripplanner/apis/transmodel/schema.graphql | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 4ef1e17a7d8..81f4dd396f6 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -411,7 +411,7 @@ The default values are - `car-to-park` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) - `car-rental` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) - `car-hailing` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) -- `flexible` = (timePenalty: 20m + 2.0 t, costFactor: 1.50) +- `flexible` = (timePenalty: 10m + 1.30 t, costFactor: 1.30) Example: `"car-to-park" : { "timePenalty": "10m + 1.5t", "costFactor": 2.5 }` diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java index ada495b19ba..9998f0a3b1c 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/AccessEgressPreferences.java @@ -25,12 +25,16 @@ public final class AccessEgressPreferences implements Serializable { TimePenalty.of(ofMinutes(20), 2f), 1.5 ); + private static final TimeAndCostPenalty FLEX_DEFAULT_PENALTY = TimeAndCostPenalty.of( + TimePenalty.of(ofMinutes(10), 1.3f), + 1.3 + ); private static final TimeAndCostPenaltyForEnum DEFAULT_TIME_AND_COST = TimeAndCostPenaltyForEnum .of(StreetMode.class) .with(StreetMode.CAR_TO_PARK, DEFAULT_PENALTY) .with(StreetMode.CAR_HAILING, DEFAULT_PENALTY) .with(StreetMode.CAR_RENTAL, DEFAULT_PENALTY) - .with(StreetMode.FLEXIBLE, DEFAULT_PENALTY) + .with(StreetMode.FLEXIBLE, FLEX_DEFAULT_PENALTY) .build(); public static final AccessEgressPreferences DEFAULT = new AccessEgressPreferences(); diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index dad106418fe..9c0eae88fa1 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -774,7 +774,7 @@ type QueryType { "Input type for executing a travel search for a trip between two locations. Returns trip patterns describing suggested alternatives for the trip." trip( "Time and cost penalty on access/egress modes." - accessEgressPenalty: [PenaltyForStreetMode!] = [{streetMode : car_park, timePenalty : "20m + 2.0 t", costFactor : 1.5}, {streetMode : flexible, timePenalty : "20m + 2.0 t", costFactor : 1.5}], + accessEgressPenalty: [PenaltyForStreetMode!] = [{streetMode : car_park, timePenalty : "20m + 2.0 t", costFactor : 1.5}, {streetMode : flexible, timePenalty : "10m + 1.30 t", costFactor : 1.3}], "The alightSlack is the minimum extra time after exiting a public transport vehicle. This is the default value used, if not overridden by the 'alightSlackList'." alightSlackDefault: Int = 0, "List of alightSlack for a given set of modes. Defaults: []" From 6ca07cfb17e6a0a99dae5e127333932d4182ca23 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 8 Feb 2024 13:43:10 +0100 Subject: [PATCH 077/101] Fix test --- .../routing/api/request/preference/StreetPreferencesTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java index 0289c24e837..a318474eab7 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/StreetPreferencesTest.java @@ -112,7 +112,7 @@ void testToString() { "accessEgress: AccessEgressPreferences{penalty: TimeAndCostPenaltyForEnum{CAR_TO_PARK: " + CAR_PENALTY + ", CAR_RENTAL: (timePenalty: 20m + 2.0 t, costFactor: 1.50), CAR_HAILING: (timePenalty: 20m + 2.0 t, costFactor: 1.50), " + - "FLEXIBLE: (timePenalty: 20m + 2.0 t, costFactor: 1.50)}, " + + "FLEXIBLE: (timePenalty: 10m + 1.30 t, costFactor: 1.30)}, " + "maxDuration: DurationForStreetMode{default:5m}" + "}, " + "maxDirectDuration: DurationForStreetMode{default:10m}" + From b7d037ee5c6caf33ab61b2c9cd6d4d928b0382ff Mon Sep 17 00:00:00 2001 From: Eivind Morris Bakke Date: Fri, 9 Feb 2024 15:28:38 +0100 Subject: [PATCH 078/101] Set defaults of the modes WALK, even if one and not the others are set (#5675) * Sets modes only if they are set in the request. Setting them to null overrides the default of WALK, which leads to no results. * Adds comment to the RequestModesMapper explaining defaults. * Adds unittest for RequestModesMapper and removes an unneeded unchecked warning suppression. * Makes keys constants in RequestModesMapper and changes map initialization in RequestModesMapperTest. * Makes use of Map.of everywhere in RequestModesMapperTest. --- .../mapping/RequestModesMapper.java | 33 ++++++----- .../mapping/RequestModesMapperTest.java | 57 +++++++++++++++++++ 2 files changed, 77 insertions(+), 13 deletions(-) create mode 100644 src/test/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapperTest.java diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java index d02e251f4e2..59259905944 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapper.java @@ -7,23 +7,30 @@ class RequestModesMapper { + private static final String accessModeKey = "accessMode"; + private static final String egressModeKey = "egressMode"; + private static final String directModeKey = "directMode"; + /** - * Maps a GraphQL Modes input type to a RequestModes. - * - * This only maps access, egress, direct & transfer. - * Transport modes are now part of filters. - * Only in case filters are not present we will use this mapping + * Maps GraphQL Modes input type to RequestModes. + *

    + * This only maps access, egress, direct & transfer modes. Transport modes are set using filters. + * Default modes are WALK for access, egress, direct & transfer. */ - @SuppressWarnings("unchecked") static RequestModes mapRequestModes(Map modesInput) { - StreetMode accessMode = (StreetMode) modesInput.get("accessMode"); - RequestModesBuilder mBuilder = RequestModes - .of() - .withAccessMode(accessMode) - .withEgressMode((StreetMode) modesInput.get("egressMode")) - .withDirectMode((StreetMode) modesInput.get("directMode")); + RequestModesBuilder mBuilder = RequestModes.of(); - mBuilder.withTransferMode(accessMode == StreetMode.BIKE ? StreetMode.BIKE : StreetMode.WALK); + if (modesInput.containsKey(accessModeKey)) { + StreetMode accessMode = (StreetMode) modesInput.get(accessModeKey); + mBuilder.withAccessMode(accessMode); + mBuilder.withTransferMode(accessMode == StreetMode.BIKE ? StreetMode.BIKE : StreetMode.WALK); + } + if (modesInput.containsKey(egressModeKey)) { + mBuilder.withEgressMode((StreetMode) modesInput.get(egressModeKey)); + } + if (modesInput.containsKey(directModeKey)) { + mBuilder.withDirectMode((StreetMode) modesInput.get(directModeKey)); + } return mBuilder.build(); } diff --git a/src/test/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapperTest.java b/src/test/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapperTest.java new file mode 100644 index 00000000000..160014213d3 --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/transmodel/mapping/RequestModesMapperTest.java @@ -0,0 +1,57 @@ +package org.opentripplanner.apis.transmodel.mapping; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.opentripplanner.routing.api.request.RequestModes; +import org.opentripplanner.routing.api.request.StreetMode; + +class RequestModesMapperTest { + + @Test + void testMapRequestModesEmptyMapReturnsDefaults() { + Map inputModes = Map.of(); + + RequestModes mappedModes = RequestModesMapper.mapRequestModes(inputModes); + + assertEquals(RequestModes.of().build(), mappedModes); + } + + @Test + void testMapRequestModesAccessSetReturnsDefaultsForOthers() { + Map inputModes = Map.of("accessMode", StreetMode.BIKE); + + RequestModes wantModes = RequestModes + .of() + .withAccessMode(StreetMode.BIKE) + .withTransferMode(StreetMode.BIKE) + .build(); + + RequestModes mappedModes = RequestModesMapper.mapRequestModes(inputModes); + + assertEquals(wantModes, mappedModes); + } + + @Test + void testMapRequestModesEgressSetReturnsDefaultsForOthers() { + Map inputModes = Map.of("egressMode", StreetMode.CAR); + + RequestModes wantModes = RequestModes.of().withEgressMode(StreetMode.CAR).build(); + + RequestModes mappedModes = RequestModesMapper.mapRequestModes(inputModes); + + assertEquals(wantModes, mappedModes); + } + + @Test + void testMapRequestModesDirectSetReturnsDefaultsForOthers() { + Map inputModes = Map.of("directMode", StreetMode.CAR); + + RequestModes wantModes = RequestModes.of().withDirectMode(StreetMode.CAR).build(); + + RequestModes mappedModes = RequestModesMapper.mapRequestModes(inputModes); + + assertEquals(wantModes, mappedModes); + } +} From 16108a9867159bb2fb6b70370f3ea791d34ad697 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Fri, 9 Feb 2024 14:28:53 +0000 Subject: [PATCH 079/101] Add changelog entry for #5675 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index df2ecd4b8fc..5fa9a3ee0b3 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -89,6 +89,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Remove "fare" [#5645](https://github.com/opentripplanner/OpenTripPlanner/pull/5645) - Refactor GroupStopBuilder addLocation method [#5651](https://github.com/opentripplanner/OpenTripPlanner/pull/5651) - Remove `VehicleToStopHeuristics` [#5381](https://github.com/opentripplanner/OpenTripPlanner/pull/5381) +- Set defaults of the modes WALK, even if one and not the others are set [#5675](https://github.com/opentripplanner/OpenTripPlanner/pull/5675) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 151354b05e774000ed7a3ac6c9894352b7d3cd35 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Tue, 13 Feb 2024 18:42:37 +0100 Subject: [PATCH 080/101] fix: Save changes to the startup model when InteractiveOtpMain starts up. This is a regression. The bug was introduced when the controller was added. The startUpView is saved if the user start OTP, while the controller models are saved if changed. --- .../ext/interactivelauncher/InteractiveOtpMain.java | 1 + .../java/org/opentripplanner/ext/interactivelauncher/Model.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ext/java/org/opentripplanner/ext/interactivelauncher/InteractiveOtpMain.java b/src/ext/java/org/opentripplanner/ext/interactivelauncher/InteractiveOtpMain.java index 43061ee2b62..a58b8f617c2 100644 --- a/src/ext/java/org/opentripplanner/ext/interactivelauncher/InteractiveOtpMain.java +++ b/src/ext/java/org/opentripplanner/ext/interactivelauncher/InteractiveOtpMain.java @@ -31,6 +31,7 @@ private void run() { } private void startOtp() { + model.save(); startDebugControllerAndSetupRequestInterceptor(); System.out.println("Start OTP: " + model + "\n"); diff --git a/src/ext/java/org/opentripplanner/ext/interactivelauncher/Model.java b/src/ext/java/org/opentripplanner/ext/interactivelauncher/Model.java index 59682082b90..d4e55ac6992 100644 --- a/src/ext/java/org/opentripplanner/ext/interactivelauncher/Model.java +++ b/src/ext/java/org/opentripplanner/ext/interactivelauncher/Model.java @@ -55,7 +55,7 @@ private static Model readFromFile() { } } - private void save() { + void save() { try { var mapper = new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true); mapper.writeValue(MODEL_FILE, this); From 9cb7445f47330e7eb9ea511e6b325fe95f3b2b58 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Wed, 14 Feb 2024 08:43:30 +0000 Subject: [PATCH 081/101] Add changelog entry for #5674 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 5fa9a3ee0b3..86f6355f37f 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -90,6 +90,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Refactor GroupStopBuilder addLocation method [#5651](https://github.com/opentripplanner/OpenTripPlanner/pull/5651) - Remove `VehicleToStopHeuristics` [#5381](https://github.com/opentripplanner/OpenTripPlanner/pull/5381) - Set defaults of the modes WALK, even if one and not the others are set [#5675](https://github.com/opentripplanner/OpenTripPlanner/pull/5675) +- Reduce flex default access/egress penalty [#5674](https://github.com/opentripplanner/OpenTripPlanner/pull/5674) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 0f63b2fbc8e7443ea2246ecbe5121d167dc8e651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Erik=20St=C3=B8wer?= Date: Thu, 11 Jan 2024 13:57:02 +0100 Subject: [PATCH 082/101] Smoke tests wip Due to huge issues with mocking mapbox-gl, smoke tests on search bar and itinerary list. --- .github/workflows/debug-client.yml | 1 + client-next/package-lock.json | 6637 ++++++++--------- client-next/package.json | 8 +- .../ItineraryList/ItineraryList.test.tsx | 2394 ++++++ .../components/SearchBar/SearchBar.test.tsx | 14 + client-next/vite.config.ts | 4 + 6 files changed, 5737 insertions(+), 3321 deletions(-) create mode 100644 client-next/src/components/ItineraryList/ItineraryList.test.tsx create mode 100644 client-next/src/components/SearchBar/SearchBar.test.tsx diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index de92c121db7..56304db88f2 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -42,6 +42,7 @@ jobs: run: | npm install npm run build -- --base https://cdn.jsdelivr.net/gh/opentripplanner/debug-client-assets@main/${VERSION}/ + npm run coverage - name: Deploy compiled assets to repo if: github.event_name == 'push' && github.ref == 'refs/heads/dev-2.x' diff --git a/client-next/package-lock.json b/client-next/package-lock.json index 11894b5b246..b1dcfecb817 100644 --- a/client-next/package-lock.json +++ b/client-next/package-lock.json @@ -23,11 +23,13 @@ "@graphql-codegen/client-preset": "4.1.0", "@graphql-codegen/introspection": "4.0.0", "@parcel/watcher": "2.3.0", + "@testing-library/react": "14.1.2", "@types/react": "18.2.21", "@types/react-dom": "18.2.7", "@typescript-eslint/eslint-plugin": "6.5.0", "@typescript-eslint/parser": "6.5.0", "@vitejs/plugin-react": "4.0.4", + "@vitest/coverage-v8": "1.1.3", "eslint": "8.48.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-import": "2.28.1", @@ -35,25 +37,25 @@ "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.3", + "jsdom": "23.2.0", "prettier": "3.0.3", "typescript": "5.2.2", - "vite": "4.4.9" + "vite": "4.4.9", + "vitest": "1.1.3" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@ampproject/remapping": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -64,9 +66,8 @@ }, "node_modules/@ardatan/relay-compiler": { "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", - "integrity": "sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.14.0", "@babel/generator": "^7.14.0", @@ -93,71 +94,20 @@ "graphql": "*" } }, - "node_modules/@ardatan/relay-compiler/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@ardatan/relay-compiler/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@ardatan/relay-compiler/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, - "node_modules/@ardatan/relay-compiler/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@ardatan/relay-compiler/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@ardatan/relay-compiler/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -166,20 +116,10 @@ "node": ">=8" } }, - "node_modules/@ardatan/relay-compiler/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@ardatan/relay-compiler/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -189,9 +129,8 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -204,9 +143,8 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -214,29 +152,15 @@ "node": ">=8" } }, - "node_modules/@ardatan/relay-compiler/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@ardatan/relay-compiler/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@ardatan/relay-compiler/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -256,9 +180,8 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -269,9 +192,8 @@ }, "node_modules/@ardatan/sync-fetch": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", - "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", "dev": true, + "license": "MIT", "dependencies": { "node-fetch": "^2.6.1" }, @@ -279,45 +201,116 @@ "node": ">=14" } }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bidi-js": "^1.0.3", + "css-tree": "^2.3.1", + "is-potential-custom-element-name": "^1.0.1" + } + }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.23.5", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "version": "7.23.7", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -331,22 +324,12 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.23.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -357,9 +340,8 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -368,14 +350,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.23.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -383,27 +364,17 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "version": "7.23.7", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -415,32 +386,21 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -448,9 +408,8 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -459,40 +418,37 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.23.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -503,9 +459,8 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -515,21 +470,19 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.22.20", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -541,9 +494,8 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -553,9 +505,8 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -565,9 +516,8 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -576,53 +526,48 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.23.5", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.23.8", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.23.4", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -630,11 +575,74 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "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/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/parser": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.13.tgz", - "integrity": "sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==", + "version": "7.23.6", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -644,9 +652,8 @@ }, "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, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -660,9 +667,8 @@ }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", @@ -679,9 +685,8 @@ }, "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, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -690,10 +695,9 @@ } }, "node_modules/@babel/plugin-syntax-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", - "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -705,10 +709,9 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -720,10 +723,9 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -736,9 +738,8 @@ }, "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, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -747,10 +748,9 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -762,10 +762,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -777,10 +776,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "version": "7.23.4", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -792,18 +790,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.23.8", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -815,13 +811,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/template": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -831,10 +826,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -846,13 +840,12 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", - "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-flow": "^7.22.5" + "@babel/plugin-syntax-flow": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -862,12 +855,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.23.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -877,13 +870,12 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -894,10 +886,9 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -909,10 +900,9 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -924,12 +914,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", - "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -941,13 +930,12 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-replace-supers": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -957,10 +945,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -972,10 +959,9 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -987,10 +973,9 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1002,16 +987,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "version": "7.23.4", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" @@ -1021,10 +1005,9 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1036,10 +1019,9 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1051,10 +1033,9 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1066,10 +1047,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -1082,10 +1062,9 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1097,9 +1076,8 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", - "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "version": "7.23.8", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1108,34 +1086,32 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "version": "7.23.7", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", - "debug": "^4.1.0", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -1143,400 +1119,64 @@ } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.23.6", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@esbuild/android-arm64": { + "node_modules/@esbuild/darwin-x64": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", "cpu": [ - "arm64" + "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.0.tgz", - "integrity": "sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1556,10 +1196,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -1570,25 +1209,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@googlemaps/polyline-codec": { "version": "1.0.28", - "resolved": "https://registry.npmjs.org/@googlemaps/polyline-codec/-/polyline-codec-1.0.28.tgz", - "integrity": "sha512-m7rh8sbxlrHvebXEweBHX8r1uPtToPRYxWDD6p6k2YG8hyhBe0Wi6xRUVFpxpEseMNgF+OBotFQC5senj8K7TQ==" + "license": "Apache-2.0" }, "node_modules/@graphql-codegen/add": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-5.0.0.tgz", - "integrity": "sha512-ynWDOsK2yxtFHwcJTB9shoSkUd7YXd6ZE57f0nk7W5cu/nAgxZZpEsnTPEpZB/Mjf14YRGe2uJHQ7AfElHjqUQ==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "tslib": "~2.5.0" @@ -1599,15 +1246,13 @@ }, "node_modules/@graphql-codegen/add/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/cli": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-5.0.0.tgz", - "integrity": "sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/generator": "^7.18.13", "@babel/template": "^7.18.10", @@ -1660,81 +1305,10 @@ } } }, - "node_modules/@graphql-codegen/cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@graphql-codegen/cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@graphql-codegen/cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@graphql-codegen/client-preset": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.1.0.tgz", - "integrity": "sha512-/3Ymb/fjxIF1+HGmaI1YwSZbWsrZAWMSQjh3dU425eBjctjsVQ6gzGRr+l/gE5F1mtmCf+vlbTAT03heAc/QIw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/template": "^7.20.7", @@ -1756,15 +1330,13 @@ }, "node_modules/@graphql-codegen/client-preset/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/core": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-4.0.0.tgz", - "integrity": "sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-tools/schema": "^10.0.0", @@ -1777,15 +1349,13 @@ }, "node_modules/@graphql-codegen/core/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/gql-tag-operations": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.1.tgz", - "integrity": "sha512-qF6wIbBzW8BNT+wiVsBxrYOs2oYcsxQ7mRvCpfEI3HnNZMAST/uX76W8MqFEJvj4mw7NIDv7xYJAcAZIWM5LWw==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-codegen/visitor-plugin-common": "4.0.1", @@ -1799,15 +1369,13 @@ }, "node_modules/@graphql-codegen/gql-tag-operations/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/introspection": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/introspection/-/introspection-4.0.0.tgz", - "integrity": "sha512-t9g3AkK99dfHblMWtG4ynUM9+A7JrWq5110zSpNV2wlSnv0+bRKagDW8gozwgXfR5i1IIG8QDjJZ6VgXQVqCZw==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-codegen/visitor-plugin-common": "^4.0.0", @@ -1819,15 +1387,13 @@ }, "node_modules/@graphql-codegen/introspection/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/plugin-helpers": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.1.tgz", - "integrity": "sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "change-case-all": "1.0.15", @@ -1842,15 +1408,13 @@ }, "node_modules/@graphql-codegen/plugin-helpers/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/schema-ast": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.0.0.tgz", - "integrity": "sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-tools/utils": "^10.0.0", @@ -1862,15 +1426,13 @@ }, "node_modules/@graphql-codegen/schema-ast/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/typed-document-node": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.1.tgz", - "integrity": "sha512-VFkhCuJnkgtbbgzoCAwTdJe2G1H6sd3LfCrDqWUrQe53y2ukfSb5Ov1PhAIkCBStKCMQBUY9YgGz9GKR40qQ8g==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-codegen/visitor-plugin-common": "4.0.1", @@ -1884,15 +1446,13 @@ }, "node_modules/@graphql-codegen/typed-document-node/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/typescript": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.0.1.tgz", - "integrity": "sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-codegen/schema-ast": "^4.0.0", @@ -1906,9 +1466,8 @@ }, "node_modules/@graphql-codegen/typescript-operations": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.0.1.tgz", - "integrity": "sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-codegen/typescript": "^4.0.1", @@ -1922,21 +1481,18 @@ }, "node_modules/@graphql-codegen/typescript-operations/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/typescript/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-codegen/visitor-plugin-common": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-4.0.1.tgz", - "integrity": "sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-tools/optimize": "^2.0.0", @@ -1955,15 +1511,13 @@ }, "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/tslib": { "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@graphql-tools/apollo-engine-loader": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.0.tgz", - "integrity": "sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==", "dev": true, + "license": "MIT", "dependencies": { "@ardatan/sync-fetch": "^0.0.1", "@graphql-tools/utils": "^10.0.0", @@ -1979,20 +1533,18 @@ }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/events": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, + "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.15", "dev": true, + "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", + "@whatwg-node/node-fetch": "^0.5.0", "urlpattern-polyfill": "^9.0.0" }, "engines": { @@ -2000,15 +1552,14 @@ } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.4", "dev": true, + "license": "MIT", "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { @@ -2017,15 +1568,13 @@ }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/urlpattern-polyfill": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@graphql-tools/batch-execute": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-9.0.2.tgz", - "integrity": "sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.5", "dataloader": "^2.2.2", @@ -2040,12 +1589,11 @@ } }, "node_modules/@graphql-tools/code-file-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.0.2.tgz", - "integrity": "sha512-AKNpkElUL2cWocYpC4DzNEpo6qJw8Lp+L3bKQ/mIfmbsQxgLz5uve6zHBMhDaFPdlwfIox41N3iUSvi77t9e8A==", + "version": "8.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.0.2", + "@graphql-tools/graphql-tag-pluck": "8.1.0", "@graphql-tools/utils": "^10.0.0", "globby": "^11.0.3", "tslib": "^2.4.0", @@ -2059,10 +1607,9 @@ } }, "node_modules/@graphql-tools/delegate": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-10.0.2.tgz", - "integrity": "sha512-ZU7VnR2xFgHrGnsuw6+nRJkcvSucn7w5ooxb/lTKlVfrNJfTwJevNcNKMnbtPUSajG3+CaFym/nU6v44GXCmNw==", + "version": "10.0.3", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/batch-execute": "^9.0.1", "@graphql-tools/executor": "^1.0.0", @@ -2080,9 +1627,8 @@ }, "node_modules/@graphql-tools/documents": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/documents/-/documents-1.0.0.tgz", - "integrity": "sha512-rHGjX1vg/nZ2DKqRGfDPNC55CWZBMldEVcH+91BThRa6JeT80NqXknffLLEZLRUxyikCfkwMsk6xR3UNMqG0Rg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tslib": "^2.4.0" @@ -2096,9 +1642,8 @@ }, "node_modules/@graphql-tools/executor": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.0.tgz", - "integrity": "sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "@graphql-typed-document-node/core": "3.2.0", @@ -2115,9 +1660,8 @@ }, "node_modules/@graphql-tools/executor-graphql-ws": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-1.1.0.tgz", - "integrity": "sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.2", "@types/ws": "^8.0.0", @@ -2134,10 +1678,9 @@ } }, "node_modules/@graphql-tools/executor-http": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-1.0.2.tgz", - "integrity": "sha512-JKTB4E3kdQM2/1NEcyrVPyQ8057ZVthCV5dFJiKktqY9IdmF00M8gupFcW3jlbM/Udn78ickeUBsUzA3EouqpA==", + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.2", "@repeaterjs/repeater": "^3.0.4", @@ -2156,20 +1699,18 @@ }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/events": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, + "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.15", "dev": true, + "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", + "@whatwg-node/node-fetch": "^0.5.0", "urlpattern-polyfill": "^9.0.0" }, "engines": { @@ -2177,15 +1718,14 @@ } }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.4", "dev": true, + "license": "MIT", "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { @@ -2194,21 +1734,19 @@ }, "node_modules/@graphql-tools/executor-http/node_modules/urlpattern-polyfill": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@graphql-tools/executor-legacy-ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.0.1.tgz", - "integrity": "sha512-PQrTJ+ncHMEQspBARc2lhwiQFfRAX/z/CsOdZTFjIljOHgRWGAA1DAx7pEN0j6PflbLCfZ3NensNq2jCBwF46w==", + "version": "1.0.5", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "@types/ws": "^8.0.0", - "isomorphic-ws": "5.0.0", + "isomorphic-ws": "^5.0.0", "tslib": "^2.4.0", - "ws": "8.13.0" + "ws": "^8.15.0" }, "engines": { "node": ">=16.0.0" @@ -2218,12 +1756,11 @@ } }, "node_modules/@graphql-tools/git-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-8.0.2.tgz", - "integrity": "sha512-AuCB0nlPvsHh8u42zRZdlD/ZMaWP9A44yAkQUVCZir1E/LG63fsZ9svTWJ+CbusW3Hd0ZP9qpxEhlHxnd4Tlsg==", + "version": "8.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.0.2", + "@graphql-tools/graphql-tag-pluck": "8.1.0", "@graphql-tools/utils": "^10.0.0", "is-glob": "4.0.3", "micromatch": "^4.0.4", @@ -2239,9 +1776,8 @@ }, "node_modules/@graphql-tools/github-loader": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-8.0.0.tgz", - "integrity": "sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==", "dev": true, + "license": "MIT", "dependencies": { "@ardatan/sync-fetch": "^0.0.1", "@graphql-tools/executor-http": "^1.0.0", @@ -2260,20 +1796,18 @@ }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/events": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, + "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.15", "dev": true, + "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", + "@whatwg-node/node-fetch": "^0.5.0", "urlpattern-polyfill": "^9.0.0" }, "engines": { @@ -2281,15 +1815,14 @@ } }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.4", "dev": true, + "license": "MIT", "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { @@ -2298,15 +1831,13 @@ }, "node_modules/@graphql-tools/github-loader/node_modules/urlpattern-polyfill": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@graphql-tools/graphql-file-loader": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.0.0.tgz", - "integrity": "sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/import": "7.0.0", "@graphql-tools/utils": "^10.0.0", @@ -2322,10 +1853,9 @@ } }, "node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.0.2.tgz", - "integrity": "sha512-U6fE4yEHxuk/nqmPixHpw1WhqdS6aYuaV60m1bEmUmGJNbpAhaMBy01JncpvpF15yZR5LZ0UjkHg+A3Lhoc8YQ==", + "version": "8.1.0", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.22.9", "@babel/parser": "^7.16.8", @@ -2344,9 +1874,8 @@ }, "node_modules/@graphql-tools/import": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-7.0.0.tgz", - "integrity": "sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "resolve-from": "5.0.0", @@ -2359,20 +1888,10 @@ "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/import/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@graphql-tools/json-file-loader": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.0.tgz", - "integrity": "sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "globby": "^11.0.3", @@ -2387,13 +1906,12 @@ } }, "node_modules/@graphql-tools/load": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.0.0.tgz", - "integrity": "sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==", + "version": "8.0.1", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/schema": "^10.0.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^10.0.11", "p-limit": "3.1.0", "tslib": "^2.4.0" }, @@ -2405,12 +1923,11 @@ } }, "node_modules/@graphql-tools/merge": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.0.tgz", - "integrity": "sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==", + "version": "9.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^10.0.10", "tslib": "^2.4.0" }, "engines": { @@ -2422,9 +1939,8 @@ }, "node_modules/@graphql-tools/optimize": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-2.0.0.tgz", - "integrity": "sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.4.0" }, @@ -2436,13 +1952,12 @@ } }, "node_modules/@graphql-tools/prisma-loader": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-8.0.1.tgz", - "integrity": "sha512-bl6e5sAYe35Z6fEbgKXNrqRhXlCJYeWKBkarohgYA338/SD9eEhXtg3Cedj7fut3WyRLoQFpHzfiwxKs7XrgXg==", + "version": "8.0.2", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/url-loader": "^8.0.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^10.0.8", "@types/js-yaml": "^4.0.0", "@types/json-stable-stringify": "^1.0.32", "@whatwg-node/fetch": "^0.9.0", @@ -2452,7 +1967,7 @@ "graphql-request": "^6.0.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", - "jose": "^4.11.4", + "jose": "^5.0.0", "js-yaml": "^4.0.0", "json-stable-stringify": "^1.0.1", "lodash": "^4.17.20", @@ -2462,130 +1977,55 @@ }, "engines": { "node": ">=16.0.0" - }, - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/events": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", - "dev": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", - "dev": true, - "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", - "urlpattern-polyfill": "^9.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", - "dev": true, - "dependencies": { - "@whatwg-node/events": "^0.1.0", - "busboy": "^1.6.0", - "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@graphql-tools/prisma-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/events": { + "version": "0.1.1", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "MIT", "engines": { - "node": ">=7.0.0" + "node": ">=16.0.0" } }, - "node_modules/@graphql-tools/prisma-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@graphql-tools/prisma-loader/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/fetch": { + "version": "0.9.15", "dev": true, + "license": "MIT", + "dependencies": { + "@whatwg-node/node-fetch": "^0.5.0", + "urlpattern-polyfill": "^9.0.0" + }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, - "node_modules/@graphql-tools/prisma-loader/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/node-fetch": { + "version": "0.5.4", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@kamilkisiela/fast-url-parser": "^1.1.4", + "@whatwg-node/events": "^0.1.0", + "busboy": "^1.6.0", + "fast-querystring": "^1.1.1", + "tslib": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=16.0.0" } }, "node_modules/@graphql-tools/prisma-loader/node_modules/urlpattern-polyfill": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@graphql-tools/relay-operation-optimizer": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.0.tgz", - "integrity": "sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==", "dev": true, + "license": "MIT", "dependencies": { "@ardatan/relay-compiler": "12.0.0", "@graphql-tools/utils": "^10.0.0", @@ -2599,13 +2039,12 @@ } }, "node_modules/@graphql-tools/schema": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.0.tgz", - "integrity": "sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==", + "version": "10.0.2", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/merge": "^9.0.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/utils": "^10.0.10", "tslib": "^2.4.0", "value-or-promise": "^1.0.12" }, @@ -2617,15 +2056,14 @@ } }, "node_modules/@graphql-tools/url-loader": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-8.0.0.tgz", - "integrity": "sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==", + "version": "8.0.1", "dev": true, + "license": "MIT", "dependencies": { "@ardatan/sync-fetch": "^0.0.1", "@graphql-tools/delegate": "^10.0.0", "@graphql-tools/executor-graphql-ws": "^1.0.0", - "@graphql-tools/executor-http": "^1.0.0", + "@graphql-tools/executor-http": "^1.0.5", "@graphql-tools/executor-legacy-ws": "^1.0.0", "@graphql-tools/utils": "^10.0.0", "@graphql-tools/wrap": "^10.0.0", @@ -2645,20 +2083,18 @@ }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/events": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", - "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, + "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.9", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.9.tgz", - "integrity": "sha512-OTVoDm039CNyAWSRc2WBimMl/N9J4Fk2le21Xzcf+3OiWPNNSIbMnpWKBUyraPh2d9SAEgoBdQxTfVNihXgiUw==", + "version": "0.9.15", "dev": true, + "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.4.8", + "@whatwg-node/node-fetch": "^0.5.0", "urlpattern-polyfill": "^9.0.0" }, "engines": { @@ -2666,15 +2102,14 @@ } }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.4.14.tgz", - "integrity": "sha512-ii/eZz2PcjLGj9D6WfsmfzlTzZV1Kz6MxYpq2Vc5P21J8vkKfENWC9B2ISsFCKovxElLukIwPg8HTrHFsLNflg==", + "version": "0.5.4", "dev": true, + "license": "MIT", "dependencies": { + "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", "busboy": "^1.6.0", "fast-querystring": "^1.1.1", - "fast-url-parser": "^1.1.3", "tslib": "^2.3.1" }, "engines": { @@ -2683,17 +2118,16 @@ }, "node_modules/@graphql-tools/url-loader/node_modules/urlpattern-polyfill": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz", - "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@graphql-tools/utils": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.5.tgz", - "integrity": "sha512-ZTioQqg9z9eCG3j+KDy54k1gp6wRIsLqkx5yi163KVvXVkfjsrdErCyZjrEug21QnKE9piP4tyxMpMMOT1RuRw==", + "version": "10.0.12", "dev": true, + "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", "dset": "^3.1.2", "tslib": "^2.4.0" }, @@ -2705,12 +2139,11 @@ } }, "node_modules/@graphql-tools/wrap": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-10.0.0.tgz", - "integrity": "sha512-HDOeUUh6UhpiH0WPJUQl44ODt1x5pnMUbOJZ7GjTdGQ7LK0AgVt3ftaAQ9duxLkiAtYJmu5YkULirfZGj4HzDg==", + "version": "10.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@graphql-tools/delegate": "^10.0.0", + "@graphql-tools/delegate": "^10.0.3", "@graphql-tools/schema": "^10.0.0", "@graphql-tools/utils": "^10.0.0", "tslib": "^2.4.0", @@ -2725,20 +2158,18 @@ }, "node_modules/@graphql-typed-document-node/core": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.14", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -2747,9 +2178,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2759,16 +2189,33 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "version": "2.0.2", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2780,42 +2227,42 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, + "license": "MIT", "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, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.21", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kamilkisiela/fast-url-parser": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, "node_modules/@mapbox/geojson-rewind": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", - "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", "dependencies": { "get-stream": "^6.0.1", "minimist": "^1.2.6" @@ -2826,47 +2273,39 @@ }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", - "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", "engines": { "node": ">= 0.6" } }, "node_modules/@mapbox/point-geometry": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + "license": "ISC" }, "node_modules/@mapbox/tiny-sdf": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", - "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + "license": "BSD-2-Clause" }, "node_modules/@mapbox/unitbezier": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + "license": "BSD-2-Clause" }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", - "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", "dependencies": { "@mapbox/point-geometry": "~0.1.0" } }, "node_modules/@mapbox/whoots-js": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", - "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", "engines": { "node": ">=6.0.0" } }, "node_modules/@maplibre/maplibre-gl-style-spec": { "version": "19.3.3", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz", - "integrity": "sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==", + "license": "ISC", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.1", @@ -2883,9 +2322,8 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2896,18 +2334,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2918,10 +2354,8 @@ }, "node_modules/@parcel/watcher": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.3.0.tgz", - "integrity": "sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -2950,54 +2384,13 @@ "@parcel/watcher-win32-x64": "2.3.0" } }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz", - "integrity": "sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz", - "integrity": "sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-darwin-x64": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz", - "integrity": "sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3010,202 +2403,20 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz", - "integrity": "sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz", - "integrity": "sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz", - "integrity": "sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz", - "integrity": "sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz", - "integrity": "sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz", - "integrity": "sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz", - "integrity": "sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz", - "integrity": "sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz", - "integrity": "sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@peculiar/asn1-schema": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz", - "integrity": "sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==", + "version": "2.3.8", "dev": true, + "license": "MIT", "dependencies": { "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" } }, "node_modules/@peculiar/json-schema": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", - "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -3215,9 +2426,8 @@ }, "node_modules/@peculiar/webcrypto": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz", - "integrity": "sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==", "dev": true, + "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.6", "@peculiar/json-schema": "^1.1.12", @@ -3231,17 +2441,15 @@ }, "node_modules/@popperjs/core": { "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@react-aria/ssr": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.7.1.tgz", - "integrity": "sha512-ovVPSD1WlRpZHt7GI9DqJrWG3OIYS+NXQ9y5HIewMJpSe+jPQmMQfyRmgX4EnvmxSlp0u04Wg/7oItcoSIb/RA==", + "version": "3.9.1", + "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" }, @@ -3253,15 +2461,13 @@ } }, "node_modules/@repeaterjs/repeater": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.4.tgz", - "integrity": "sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==", - "dev": true + "version": "3.0.5", + "dev": true, + "license": "MIT" }, "node_modules/@restart/hooks": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.11.tgz", - "integrity": "sha512-Ft/ncTULZN6ldGHiF/k5qt72O8JyRMOeg0tApvCni8LkoiEahO+z3TNxfXIVGy890YtWVDvJAl662dVJSJXvMw==", + "version": "0.4.15", + "license": "MIT", "dependencies": { "dequal": "^2.0.3" }, @@ -3271,8 +2477,7 @@ }, "node_modules/@restart/ui": { "version": "1.6.6", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.6.tgz", - "integrity": "sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.21.0", "@popperjs/core": "^2.11.6", @@ -3289,60 +2494,118 @@ "react-dom": ">=16.14.0" } }, - "node_modules/@restart/ui/node_modules/uncontrollable": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", - "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", - "peerDependencies": { - "react": ">=16.14.0" + "node_modules/@restart/ui/node_modules/uncontrollable": { + "version": "8.0.4", + "license": "MIT", + "peerDependencies": { + "react": ">=16.14.0" + } + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.5", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.3", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@testing-library/dom": { + "version": "9.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "node_modules/@testing-library/react": { + "version": "14.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.4.0" + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, "node_modules/@types/geojson": { "version": "7946.0.13", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", - "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==" + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "dev": true, + "license": "MIT" }, "node_modules/@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", - "dev": true + "version": "4.0.9", + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true + "version": "7.0.15", + "dev": true, + "license": "MIT" }, "node_modules/@types/json-stable-stringify": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.34.tgz", - "integrity": "sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==", - "dev": true + "version": "1.0.36", + "dev": true, + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mapbox__point-geometry": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", - "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==" + "license": "MIT" }, "node_modules/@types/mapbox__vector-tile": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", - "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "license": "MIT", "dependencies": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", @@ -3350,33 +2613,31 @@ } }, "node_modules/@types/mapbox-gl": { - "version": "2.7.13", - "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-2.7.13.tgz", - "integrity": "sha512-qNffhTdYkeFl8QG9Q1zPPJmcs8PvHgmLa1PcwP1rxvcfMsIgcFr/FnrCttG0ZnH7Kzdd7xfECSRNTWSr4jC3PQ==", + "version": "2.7.19", + "license": "MIT", "dependencies": { "@types/geojson": "*" } }, "node_modules/@types/node": { - "version": "20.5.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", - "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==", - "dev": true + "version": "20.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/pbf": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", - "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" + "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "version": "15.7.11", + "license": "MIT" }, "node_modules/@types/react": { "version": "18.2.21", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", - "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", + "license": "MIT", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -3385,59 +2646,51 @@ }, "node_modules/@types/react-dom": { "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", - "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-transition-group": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "version": "4.4.10", + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + "version": "0.16.8", + "license": "MIT" }, "node_modules/@types/semver": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.1.tgz", - "integrity": "sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==", - "dev": true + "version": "7.5.6", + "dev": true, + "license": "MIT" }, "node_modules/@types/supercluster": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", - "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "license": "MIT", "dependencies": { "@types/geojson": "*" } }, "node_modules/@types/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", - "integrity": "sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA==" + "version": "3.0.3", + "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.10", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz", - "integrity": "sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.5.0", @@ -3468,11 +2721,40 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, "node_modules/@typescript-eslint/parser": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.5.0.tgz", - "integrity": "sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.5.0", "@typescript-eslint/types": "6.5.0", @@ -3490,167 +2772,391 @@ "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.5.0", + "@typescript-eslint/visitor-keys": "6.5.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.5.0", + "@typescript-eslint/utils": "6.5.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.5.0", + "@typescript-eslint/visitor-keys": "6.5.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.5.0", + "@typescript-eslint/types": "6.5.0", + "@typescript-eslint/typescript-estree": "6.5.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.5.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.4", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.1.6", + "magic-string": "^0.30.5", + "magicast": "^0.3.2", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "^1.0.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz", - "integrity": "sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==", + "node_modules/@vitest/expect": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0" + "@vitest/spy": "1.1.3", + "@vitest/utils": "1.1.3", + "chai": "^4.3.10" }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.1.3", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz", - "integrity": "sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A==", + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "5.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.5.0", - "@typescript-eslint/utils": "6.5.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "yocto-queue": "^1.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.5.0.tgz", - "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=12.20" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz", - "integrity": "sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==", + "node_modules/@vitest/snapshot": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.5.0.tgz", - "integrity": "sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ==", + "node_modules/@vitest/snapshot/node_modules/pretty-format": { + "version": "29.7.0", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.5.0", - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/typescript-estree": "6.5.0", - "semver": "^7.5.4" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@vitest/snapshot/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/spy": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", - "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", + "node_modules/@vitest/utils": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.5.0", - "eslint-visitor-keys": "^3.4.1" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@vitejs/plugin-react": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", - "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==", + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.22.9", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@vitest/utils/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, "node_modules/@whatwg-node/events": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.3.tgz", - "integrity": "sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@whatwg-node/fetch": { "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.8.tgz", - "integrity": "sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==", "dev": true, + "license": "MIT", "dependencies": { "@peculiar/webcrypto": "^1.4.0", "@whatwg-node/node-fetch": "^0.3.6", @@ -3661,9 +3167,8 @@ }, "node_modules/@whatwg-node/node-fetch": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz", - "integrity": "sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==", "dev": true, + "license": "MIT", "dependencies": { "@whatwg-node/events": "^0.0.3", "busboy": "^1.6.0", @@ -3673,10 +3178,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3686,18 +3190,24 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -3707,9 +3217,8 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3720,9 +3229,8 @@ }, "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, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3736,9 +3244,8 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -3749,67 +3256,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "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==", + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.1.3", "dev": true, + "license": "Apache-2.0", "dependencies": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "node_modules/arr-union": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-array-buffer": "^3.0.1" @@ -3819,15 +3311,14 @@ } }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -3839,18 +3330,16 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3866,14 +3355,13 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3884,14 +3372,13 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3902,27 +3389,26 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" @@ -3936,15 +3422,13 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/asn1js": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", - "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "pvtsutils": "^1.3.2", "pvutils": "^1.1.3", @@ -3954,43 +3438,51 @@ "node": ">=12.0.0" } }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/ast-types-flow": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/asynciterator.prototype": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, "node_modules/auto-bind": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", - "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -4000,9 +3492,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4011,34 +3502,30 @@ } }, "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.8.3", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axobject-query": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" } }, "node_modules/babel-plugin-syntax-trailing-function-commas": { "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/babel-preset-fbjs": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.0.0", @@ -4074,14 +3561,11 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "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": [ { @@ -4096,13 +3580,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } }, "node_modules/bl": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4111,8 +3603,6 @@ }, "node_modules/bootstrap": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.1.tgz", - "integrity": "sha512-jzwza3Yagduci2x0rr9MeFSORjcHpt0lRZukZPZQJT1Dth5qzV7XcgGqYzi39KGAVYR8QEDVoO0ubFKOxzMG+g==", "funding": [ { "type": "github", @@ -4123,15 +3613,15 @@ "url": "https://opencollective.com/bootstrap" } ], + "license": "MIT", "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4139,9 +3629,8 @@ }, "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, + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -4150,9 +3639,7 @@ } }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.2", "dev": true, "funding": [ { @@ -4168,11 +3655,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4183,17 +3671,14 @@ }, "node_modules/bser": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -4209,6 +3694,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -4216,8 +3702,6 @@ }, "node_modules/busboy": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, "dependencies": { "streamsearch": "^1.1.0" @@ -4228,8 +3712,7 @@ }, "node_modules/bytewise": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", - "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", + "license": "MIT", "dependencies": { "bytewise-core": "^1.2.2", "typewise": "^1.0.3" @@ -4237,20 +3720,27 @@ }, "node_modules/bytewise-core": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", - "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", + "license": "MIT", "dependencies": { "typewise-core": "^1.2" } }, + "node_modules/cac": { + "version": "6.7.14", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "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==", + "version": "1.0.5", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4258,18 +3748,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, + "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -4277,17 +3765,14 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001576", "dev": true, "funding": [ { @@ -4302,38 +3787,55 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/capital-case": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", "upper-case-first": "^2.0.2" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/chai": { + "version": "4.4.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" } }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/change-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", "dev": true, + "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "capital-case": "^1.0.4", @@ -4351,9 +3853,8 @@ }, "node_modules/change-case-all": { "version": "1.0.15", - "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", - "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", "dev": true, + "license": "MIT", "dependencies": { "change-case": "^4.1.2", "is-lower-case": "^2.0.2", @@ -4369,29 +3870,36 @@ }, "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 + "dev": true, + "license": "MIT" + }, + "node_modules/check-error": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } }, "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + "version": "2.5.1", + "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -4400,10 +3908,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "version": "2.9.2", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -4413,9 +3920,8 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -4429,65 +3935,29 @@ }, "node_modules/cli-width": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/cliui": { + "version": "8.0.1", "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" } }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4502,54 +3972,61 @@ }, "node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "dev": true, + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } }, "node_modules/common-tags": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/constant-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -4557,20 +4034,18 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true + "version": "2.0.0", + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.6", "dev": true, + "license": "MIT", "dependencies": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { @@ -4578,21 +4053,38 @@ }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cross-fetch": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, + "node_modules/cross-inspect": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4602,34 +4094,64 @@ "node": ">= 8" } }, + "node_modules/css-tree": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssstyle": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "license": "MIT" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } }, "node_modules/dataloader": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", - "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/debounce": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -4644,24 +4166,68 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/defaults": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -4669,12 +4235,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/define-data-property": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -4685,37 +4264,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/dependency-graph": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, + "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -4723,11 +4306,18 @@ "node": ">=0.10" } }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -4737,9 +4327,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4747,10 +4336,14 @@ "node": ">=6.0.0" } }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "dev": true, + "license": "MIT" + }, "node_modules/dom-helpers": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -4758,9 +4351,8 @@ }, "node_modules/dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -4768,9 +4360,8 @@ }, "node_modules/dotenv": { "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -4779,61 +4370,66 @@ } }, "node_modules/dset": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", - "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "version": "3.1.3", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/earcut": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + "license": "ISC" }, "node_modules/electron-to-chromium": { - "version": "1.4.504", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.504.tgz", - "integrity": "sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==", - "dev": true + "version": "1.4.629", + "dev": true, + "license": "ISC" }, "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==", - "dev": true + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "version": "1.22.3", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", + "hasown": "^2.0.0", "internal-slot": "^1.0.5", "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", @@ -4841,23 +4437,23 @@ "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.0", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -4866,15 +4462,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-iterator-helpers": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.14.tgz", - "integrity": "sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==", + "version": "1.0.15", "dev": true, + "license": "MIT", "dependencies": { "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", - "define-properties": "^1.2.0", + "define-properties": "^1.2.1", "es-abstract": "^1.22.1", "es-set-tostringtag": "^2.0.1", "function-bind": "^1.1.1", @@ -4884,38 +4498,35 @@ "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.0.1" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "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, + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4930,10 +4541,9 @@ }, "node_modules/esbuild": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -4967,27 +4577,27 @@ }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, + "license": "MIT", "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -5039,9 +4649,8 @@ }, "node_modules/eslint-config-prettier": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -5051,9 +4660,8 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -5062,18 +4670,16 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -5088,18 +4694,16 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.findlastindex": "^1.2.2", @@ -5128,18 +4732,16 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5147,20 +4749,10 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.7", "aria-query": "^5.1.3", @@ -5186,26 +4778,10 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-react": { "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -5233,9 +4809,8 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5245,18 +4820,16 @@ }, "node_modules/eslint-plugin-react-refresh": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.3.tgz", - "integrity": "sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==", "dev": true, + "license": "MIT", "peerDependencies": { "eslint": ">=7" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -5265,12 +4838,11 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5281,20 +4853,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -5308,9 +4870,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -5318,72 +4879,10 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -5394,32 +4893,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -5434,9 +4922,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -5446,9 +4933,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5458,26 +4944,100 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5487,9 +5047,8 @@ }, "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, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -5501,9 +5060,8 @@ }, "node_modules/extract-files": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", - "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20 || >= 14.13" }, @@ -5513,21 +5071,18 @@ }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", - "dev": true + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5541,9 +5096,8 @@ }, "node_modules/fast-glob/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, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -5553,63 +5107,50 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-querystring": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", - "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", "dev": true, + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "node_modules/fast-url-parser": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^1.3.2" } }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.16.0", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fbjs": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "dev": true, + "license": "MIT", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -5622,15 +5163,13 @@ }, "node_modules/fbjs-css-vars": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -5641,11 +5180,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -5655,9 +5201,8 @@ }, "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, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5667,9 +5212,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5682,46 +5226,53 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.2.0", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true + "version": "3.2.9", + "dev": true, + "license": "ISC" }, "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, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, + "node_modules/form-data": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -5731,16 +5282,17 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -5756,46 +5308,49 @@ }, "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, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/geojson-vt": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + "license": "ISC" }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5803,8 +5358,7 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -5814,9 +5368,8 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -5830,22 +5383,19 @@ }, "node_modules/get-value": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gl-matrix": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + "license": "MIT" }, "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, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5863,9 +5413,8 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -5875,8 +5424,7 @@ }, "node_modules/global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -5888,8 +5436,7 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -5899,18 +5446,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/globalthis": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -5923,9 +5468,8 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -5943,9 +5487,8 @@ }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -5955,23 +5498,20 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/graphql": { "version": "16.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.0.tgz", - "integrity": "sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==", + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, "node_modules/graphql-config": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.0.2.tgz", - "integrity": "sha512-7TPxOrlbiG0JplSZYCyxn2XQtqVhXomEjXUmWJVSS5ET1nPhOJSsIb/WTwqWhcYX6G0RlHXSj9PLtGTKmxLNGg==", + "version": "5.0.3", "dev": true, + "license": "MIT", "dependencies": { "@graphql-tools/graphql-file-loader": "^8.0.0", "@graphql-tools/json-file-loader": "^8.0.0", @@ -6000,9 +5540,8 @@ }, "node_modules/graphql-config/node_modules/minimatch": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", - "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6012,8 +5551,7 @@ }, "node_modules/graphql-request": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz", - "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", + "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", "cross-fetch": "^3.1.5" @@ -6024,9 +5562,8 @@ }, "node_modules/graphql-tag": { "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.1.0" }, @@ -6038,10 +5575,9 @@ } }, "node_modules/graphql-ws": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.14.0.tgz", - "integrity": "sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==", + "version": "5.14.3", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6050,42 +5586,35 @@ } }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "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==", + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6093,9 +5622,8 @@ }, "node_modules/has-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6105,9 +5633,8 @@ }, "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, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6117,9 +5644,8 @@ }, "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, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -6130,21 +5656,46 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/header-case": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", "dev": true, + "license": "MIT", "dependencies": { "capital-case": "^1.0.4", "tslib": "^2.0.3" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, "node_modules/http-proxy-agent": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -6154,10 +5705,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -6166,11 +5716,18 @@ "node": ">= 14" } }, + "node_modules/human-signals": { + "version": "5.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6180,8 +5737,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -6195,31 +5750,29 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immutable": { "version": "3.7.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.8.0" } }, "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, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -6231,11 +5784,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/import-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.2" }, @@ -6245,27 +5805,24 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6273,20 +5830,17 @@ }, "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 + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "license": "ISC" }, "node_modules/inquirer": { "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -6308,84 +5862,13 @@ "node": ">=12.0.0" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.6", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -6394,17 +5877,15 @@ }, "node_modules/invariant": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", "dependencies": { "loose-envify": "^1.0.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, + "license": "MIT", "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" @@ -6413,11 +5894,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.0", @@ -6429,15 +5924,13 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6450,9 +5943,8 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -6462,9 +5954,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6478,9 +5969,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6489,12 +5979,11 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.13.1", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6502,9 +5991,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6517,26 +6005,23 @@ }, "node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", "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": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -6546,18 +6031,16 @@ }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6570,9 +6053,8 @@ }, "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, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -6582,36 +6064,32 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", - "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/is-map": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6621,18 +6099,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6645,17 +6121,15 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "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==", + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -6663,11 +6137,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6681,9 +6159,8 @@ }, "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, + "license": "MIT", "dependencies": { "is-unc-path": "^1.0.0" }, @@ -6693,18 +6170,16 @@ }, "node_modules/is-set": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -6712,11 +6187,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "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, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6729,9 +6214,8 @@ }, "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, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -6744,9 +6228,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.11" }, @@ -6759,9 +6242,8 @@ }, "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, + "license": "MIT", "dependencies": { "unc-path-regex": "^0.1.2" }, @@ -6771,9 +6253,8 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6783,27 +6264,24 @@ }, "node_modules/is-upper-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", - "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/is-weakmap": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -6813,9 +6291,8 @@ }, "node_modules/is-weakset": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -6826,82 +6303,118 @@ }, "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, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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 + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isomorphic-ws": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", "dev": true, - "peerDependencies": { - "ws": "*" + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/iterator.prototype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", - "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.1.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "has-tostringtag": "^1.0.0", - "reflect.getprototypeof": "^1.0.3" + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" } }, "node_modules/jiti": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", - "integrity": "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==", + "version": "1.21.0", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", + "version": "5.2.0", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } }, "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==" + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -6909,11 +6422,49 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "23.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/dom-selector": "^2.0.1", + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -6923,29 +6474,31 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "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 + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "jsonify": "^0.0.1" + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6953,20 +6506,17 @@ }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-pretty-compact": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", - "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==" + "license": "MIT" }, "node_modules/json-to-pretty-yaml": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", - "integrity": "sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "remedial": "^1.0.7", "remove-trailing-spaces": "^1.0.6" @@ -6977,9 +6527,8 @@ }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -6987,20 +6536,23 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "dev": true, + "license": "MIT" + }, "node_modules/jsonify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", "dev": true, + "license": "Public Domain", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/jsx-ast-utils": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -7013,46 +6565,40 @@ }, "node_modules/kdbush": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", - "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + "license": "ISC" }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "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==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/language-subtag-registry": { "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, + "license": "MIT", "dependencies": { "language-subtag-registry": "~0.3.2" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -7063,15 +6609,13 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/listr2": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -7094,61 +6638,41 @@ } } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/local-pkg": { + "version": "0.5.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/antfu" } }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -7161,27 +6685,23 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -7193,187 +6713,158 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/log-update": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=7.0.0" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/loupe": { + "version": "2.3.7", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/lower-case": { + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "tslib": "^2.0.3" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "node_modules/lower-case-first": { + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "tslib": "^2.0.3" } }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/lru-cache": { + "version": "5.1.1", "dev": true, + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "yallist": "^3.0.2" } }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/lz-string": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" } }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/magicast": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", + "source-map-js": "^1.0.2" + } }, - "node_modules/log-update/node_modules/slice-ansi": { + "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "semver": "^7.5.3" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, + "license": "ISC", "dependencies": { - "tslib": "^2.0.3" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/lower-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", - "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", "dev": true, + "license": "ISC", "dependencies": { - "tslib": "^2.0.3" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } + "license": "ISC" }, "node_modules/map-cache": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7417,20 +6908,28 @@ "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" } }, + "node_modules/mdn-data": { + "version": "2.0.30", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/meros": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", - "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=13" }, @@ -7445,9 +6944,8 @@ }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -7456,20 +6954,37 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "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, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7479,33 +6994,38 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mlly": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, "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 + "dev": true, + "license": "MIT" }, "node_modules/murmurhash-js": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" + "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", "dev": true, "funding": [ { @@ -7513,6 +7033,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -7522,15 +7043,13 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -7538,14 +7057,12 @@ }, "node_modules/node-addon-api": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", - "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -7561,70 +7078,118 @@ } } }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true + "version": "2.0.14", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, - "engines": { - "node": ">=0.10.0" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/nullthrows": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", "dev": true, + "license": "MIT", + "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, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -7637,9 +7202,8 @@ }, "node_modules/object.entries": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7651,9 +7215,8 @@ }, "node_modules/object.fromentries": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7668,9 +7231,8 @@ }, "node_modules/object.groupby": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7680,9 +7242,8 @@ }, "node_modules/object.hasown": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.0", "es-abstract": "^1.22.1" @@ -7693,9 +7254,8 @@ }, "node_modules/object.values": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7710,18 +7270,16 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -7734,9 +7292,8 @@ }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -7751,9 +7308,8 @@ }, "node_modules/ora": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -7772,90 +7328,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7868,9 +7352,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -7883,9 +7366,8 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -7898,18 +7380,16 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/param-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -7917,9 +7397,8 @@ }, "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, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -7929,9 +7408,8 @@ }, "node_modules/parse-filepath": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -7943,9 +7421,8 @@ }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -7959,11 +7436,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/pascal-case": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -7971,9 +7458,8 @@ }, "node_modules/path-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -7981,42 +7467,37 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-root": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, + "license": "MIT", "dependencies": { "path-root-regex": "^0.1.0" }, @@ -8026,26 +7507,36 @@ }, "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": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/pathe": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/pbf": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", - "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "license": "BSD-3-Clause", "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -8056,15 +7547,13 @@ }, "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 + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -8072,10 +7561,18 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.33", "dev": true, "funding": [ { @@ -8091,8 +7588,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -8102,23 +7600,20 @@ }, "node_modules/potpack": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", - "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==" + "license": "ISC" }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -8129,19 +7624,41 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-format": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "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, + "license": "MIT", "dependencies": { "asap": "~2.0.3" } }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -8150,8 +7667,7 @@ }, "node_modules/prop-types-extra": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", - "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", + "license": "MIT", "dependencies": { "react-is": "^16.3.2", "warning": "^4.0.0" @@ -8160,42 +7676,51 @@ "react": ">=0.14.0" } }, + "node_modules/prop-types-extra/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, "node_modules/protocol-buffers-schema": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "1.4.1", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, "node_modules/pvtsutils": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", - "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.6.1" } }, "node_modules/pvutils": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", - "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -8210,17 +7735,16 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quickselect": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + "license": "ISC" }, "node_modules/react": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -8230,8 +7754,7 @@ }, "node_modules/react-bootstrap": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.8.0.tgz", - "integrity": "sha512-e/aNtxl0Z2ozrIaR82jr6Zz7ss9GSoaXpQaxmvtDUsTZIq/XalkduR/ZXP6vbQHz2T4syvjA+4FbtwELxxmpww==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.21.0", "@restart/hooks": "^0.4.9", @@ -8259,8 +7782,7 @@ }, "node_modules/react-dom": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -8270,19 +7792,17 @@ } }, "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==" + "version": "17.0.2", + "dev": true, + "license": "MIT" }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + "license": "MIT" }, "node_modules/react-map-gl": { "version": "7.1.5", - "resolved": "https://registry.npmjs.org/react-map-gl/-/react-map-gl-7.1.5.tgz", - "integrity": "sha512-YS2u2cSLlZVGjfa394f0snO6f6ZwZVTKqQwjbq/jj0w7fHU01Mn+Xqvm/Qr7nZChoT3OG7kh8JluDcXeBrDG/g==", + "license": "MIT", "dependencies": { "@maplibre/maplibre-gl-style-spec": "^19.2.1", "@types/mapbox-gl": ">=1.0.0" @@ -8304,17 +7824,15 @@ }, "node_modules/react-refresh": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-transition-group": { "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -8328,9 +7846,8 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8341,15 +7858,14 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", - "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -8361,19 +7877,17 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.1", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -8384,9 +7898,8 @@ }, "node_modules/relay-runtime": { "version": "12.0.0", - "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", - "integrity": "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", "fbjs": "^3.0.0", @@ -8395,45 +7908,52 @@ }, "node_modules/remedial": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", - "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==", "dev": true, + "license": "(MIT OR Apache-2.0)", "engines": { "node": "*" } }, "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": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/remove-trailing-spaces": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", - "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", - "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "version": "1.22.8", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -8447,27 +7967,24 @@ } }, "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==", + "version": "5.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/resolve-protobuf-schema": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", "dependencies": { "protocol-buffers-schema": "^3.3.1" } }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -8478,9 +7995,8 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -8488,15 +8004,13 @@ }, "node_modules/rfdc": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -8508,10 +8022,9 @@ } }, "node_modules/rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "version": "3.29.4", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -8523,19 +8036,21 @@ "fsevents": "~2.3.2" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, "node_modules/run-async": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -8551,32 +8066,30 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rw": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + "license": "BSD-3-Clause" }, "node_modules/rxjs": { "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -8589,8 +8102,6 @@ }, "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": [ { @@ -8605,80 +8116,65 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } }, "node_modules/scheduler": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/scuid": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz", - "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "6.3.1", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/sentence-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -8687,14 +8183,39 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, "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==", + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -8707,15 +8228,13 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -8725,27 +8244,24 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -8755,32 +8271,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/signedsource": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", - "integrity": "sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -8790,44 +8307,10 @@ "node": ">=8" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/snake-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -8835,24 +8318,21 @@ }, "node_modules/sort-asc": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", - "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/sort-desc": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", - "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/sort-object": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", - "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", + "license": "MIT", "dependencies": { "bytewise": "^1.1.0", "get-value": "^2.0.2", @@ -8865,19 +8345,25 @@ "node": ">=0.10.0" } }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "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==", + "license": "MIT", "dependencies": { "extend-shallow": "^3.0.0" }, @@ -8887,8 +8373,7 @@ }, "node_modules/split-string/node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "license": "MIT", "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -8899,8 +8384,7 @@ }, "node_modules/split-string/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==", + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -8910,17 +8394,35 @@ }, "node_modules/sponge-case": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", - "integrity": "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, + "node_modules/stackback": { + "version": "0.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamsearch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -8928,24 +8430,21 @@ }, "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, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-env-interpolation": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", - "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8955,11 +8454,15 @@ "node": ">=8" } }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, "node_modules/string.prototype.matchall": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.9.tgz", - "integrity": "sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==", + "version": "4.0.10", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8968,6 +8471,7 @@ "has-symbols": "^1.0.3", "internal-slot": "^1.0.5", "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", "side-channel": "^1.0.4" }, "funding": { @@ -8975,14 +8479,13 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.8", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -8992,28 +8495,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9021,9 +8522,8 @@ }, "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==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -9033,18 +8533,27 @@ }, "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -9052,31 +8561,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-literal": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/supercluster": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", - "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", "dependencies": { "kdbush": "^4.0.2" } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "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, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9086,44 +8603,77 @@ }, "node_modules/swap-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz", - "integrity": "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, "node_modules/tinyqueue": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + "license": "ISC" + }, + "node_modules/tinyspy": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } }, "node_modules/title-case": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", - "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -9133,18 +8683,16 @@ }, "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, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -9152,16 +8700,51 @@ "node": ">=8.0" } }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "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==" + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/ts-api-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", - "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", + "version": "1.0.3", "dev": true, + "license": "MIT", "engines": { "node": ">=16.13.0" }, @@ -9171,15 +8754,13 @@ }, "node_modules/ts-log": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.5.tgz", - "integrity": "sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", "dev": true, + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -9189,9 +8770,8 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -9201,14 +8781,12 @@ }, "node_modules/tslib": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -9216,11 +8794,18 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.21.3", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -9230,9 +8815,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1", @@ -9244,9 +8828,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -9262,9 +8845,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -9281,9 +8863,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -9295,9 +8876,8 @@ }, "node_modules/typescript": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -9308,21 +8888,17 @@ }, "node_modules/typewise": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", - "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", + "license": "MIT", "dependencies": { "typewise-core": "^1.2.0" } }, "node_modules/typewise-core": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", - "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==" + "license": "MIT" }, "node_modules/ua-parser-js": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", - "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "version": "1.0.37", "dev": true, "funding": [ { @@ -9332,17 +8908,26 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "engines": { "node": "*" } }, + "node_modules/ufo": { + "version": "1.3.2", + "dev": true, + "license": "MIT" + }, "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -9355,17 +8940,15 @@ }, "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": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/uncontrollable": { "version": "7.2.1", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", - "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.6.3", "@types/react": ">=16.9.11", @@ -9376,10 +8959,14 @@ "react": ">=15.0.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "dev": true, + "license": "MIT" + }, "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==", + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -9390,120 +8977,509 @@ "node": ">=0.10.0" } }, - "node_modules/unixify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", - "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "node_modules/universalify": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unixify": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "8.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/vite": { + "version": "4.4.9", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "normalize-path": "^2.1.1" + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=0.10.0" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.19.11", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "license": "MIT", + "optional": true, + "os": [ + "darwin" ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/esbuild": { + "version": "0.19.11", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" + } + }, + "node_modules/vite-node/node_modules/rollup": { + "version": "4.9.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" }, "bin": { - "update-browserslist-db": "cli.js" + "rollup": "dist/bin/rollup" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.5", + "@rollup/rollup-android-arm64": "4.9.5", + "@rollup/rollup-darwin-arm64": "4.9.5", + "@rollup/rollup-darwin-x64": "4.9.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", + "@rollup/rollup-linux-arm64-gnu": "4.9.5", + "@rollup/rollup-linux-arm64-musl": "4.9.5", + "@rollup/rollup-linux-riscv64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-musl": "4.9.5", + "@rollup/rollup-win32-arm64-msvc": "4.9.5", + "@rollup/rollup-win32-ia32-msvc": "4.9.5", + "@rollup/rollup-win32-x64-msvc": "4.9.5", + "fsevents": "~2.3.2" } }, - "node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "node_modules/vite-node/node_modules/vite": { + "version": "5.0.11", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.0.3" + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "node_modules/vitest": { + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.0.3" + "@vitest/expect": "1.1.3", + "@vitest/runner": "1.1.3", + "@vitest/snapshot": "1.1.3", + "@vitest/spy": "1.1.3", + "@vitest/utils": "1.1.3", + "acorn-walk": "^8.3.1", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.1", + "vite": "^5.0.0", + "vite-node": "1.1.3", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "^1.0.0", + "@vitest/ui": "^1.0.0", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": 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==", + "node_modules/vitest/node_modules/@esbuild/darwin-x64": { + "version": "0.19.11", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/urlpattern-polyfill": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", - "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/value-or-promise": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", - "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "node_modules/vitest/node_modules/esbuild": { + "version": "0.19.11", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" + } + }, + "node_modules/vitest/node_modules/rollup": { + "version": "4.9.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.5", + "@rollup/rollup-android-arm64": "4.9.5", + "@rollup/rollup-darwin-arm64": "4.9.5", + "@rollup/rollup-darwin-x64": "4.9.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", + "@rollup/rollup-linux-arm64-gnu": "4.9.5", + "@rollup/rollup-linux-arm64-musl": "4.9.5", + "@rollup/rollup-linux-riscv64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-gnu": "4.9.5", + "@rollup/rollup-linux-x64-musl": "4.9.5", + "@rollup/rollup-win32-arm64-msvc": "4.9.5", + "@rollup/rollup-win32-ia32-msvc": "4.9.5", + "@rollup/rollup-win32-x64-msvc": "4.9.5", + "fsevents": "~2.3.2" } }, - "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "node_modules/vitest/node_modules/vite": { + "version": "5.0.11", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", @@ -9537,45 +9513,51 @@ }, "node_modules/vt-pbf": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", - "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", "dependencies": { "@mapbox/point-geometry": "0.1.0", "@mapbox/vector-tile": "^1.3.1", "pbf": "^3.2.1" } }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/warning": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "version": "3.3.2", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webcrypto-core": { "version": "1.7.7", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.7.tgz", - "integrity": "sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==", "dev": true, + "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.6", "@peculiar/json-schema": "^1.1.12", @@ -9585,24 +9567,59 @@ } }, "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==" + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "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==", + "version": "14.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -9615,9 +9632,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -9631,9 +9647,8 @@ }, "node_modules/which-builtin-type": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, + "license": "MIT", "dependencies": { "function.prototype.name": "^1.1.5", "has-tostringtag": "^1.0.0", @@ -9657,9 +9672,8 @@ }, "node_modules/which-collection": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -9672,18 +9686,16 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.13", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" @@ -9695,64 +9707,43 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/why-is-node-running": { + "version": "2.2.2", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "siginfo": "^2.0.0", + "stackback": "0.0.2" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "why-is-node-running": "cli.js" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/wrap-ansi": { + "version": "6.2.0", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.16.0", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -9769,41 +9760,49 @@ } } }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", - "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "version": "2.3.4", "dev": true, + "license": "ISC", "engines": { "node": ">= 14" } }, "node_modules/yaml-ast-parser": { "version": "0.0.43", - "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", - "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -9819,18 +9818,16 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/client-next/package.json b/client-next/package.json index 6388122befc..3f8f303cc79 100644 --- a/client-next/package.json +++ b/client-next/package.json @@ -6,6 +6,8 @@ "scripts": { "dev": "vite", "build": "tsc && vite build", + "test": "vitest --root src/", + "coverage": "vitest run --root src/ --coverage", "lint": "eslint . --report-unused-disable-directives --max-warnings 0", "check-format": "prettier --check \"**/*.{js,jsx,ts,tsx,json,css,scss,md}\"", "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,scss,md}\"", @@ -30,11 +32,13 @@ "@graphql-codegen/client-preset": "4.1.0", "@graphql-codegen/introspection": "4.0.0", "@parcel/watcher": "2.3.0", + "@testing-library/react": "14.1.2", "@types/react": "18.2.21", "@types/react-dom": "18.2.7", "@typescript-eslint/eslint-plugin": "6.5.0", "@typescript-eslint/parser": "6.5.0", "@vitejs/plugin-react": "4.0.4", + "@vitest/coverage-v8": "1.1.3", "eslint": "8.48.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-import": "2.28.1", @@ -42,8 +46,10 @@ "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.3", + "jsdom": "23.2.0", "prettier": "3.0.3", "typescript": "5.2.2", - "vite": "4.4.9" + "vite": "4.4.9", + "vitest": "1.1.3" } } diff --git a/client-next/src/components/ItineraryList/ItineraryList.test.tsx b/client-next/src/components/ItineraryList/ItineraryList.test.tsx new file mode 100644 index 00000000000..d1d13b36bf3 --- /dev/null +++ b/client-next/src/components/ItineraryList/ItineraryList.test.tsx @@ -0,0 +1,2394 @@ +import { it } from 'vitest'; +import { ItineraryListContainer } from './ItineraryListContainer'; +import { render } from '@testing-library/react'; +import { QueryType } from '../../gql/graphql.ts'; + +const tripQueryResult = { + trip: { + previousPageCursor: + 'MXxQUkVWSU9VU19QQUdFfDIwMjQtMDEtMTJUMTA6MzI6MThafHwxaHxTVFJFRVRfQU5EX0FSUklWQUxfVElNRXxmYWxzZXwyMDI0LTAxLTEyVDExOjQxOjAwWnwyMDI0LTAxLTEyVDEzOjE4OjUwWnwzfDExMTM0fA==', + nextPageCursor: + 'MXxORVhUX1BBR0V8MjAyNC0wMS0xMlQxMTozOTowN1p8fDFofFNUUkVFVF9BTkRfQVJSSVZBTF9USU1FfGZhbHNlfDIwMjQtMDEtMTJUMTE6NDE6MDBafDIwMjQtMDEtMTJUMTM6MTg6NTBafDN8MTExMzR8', + tripPatterns: [ + { + aimedStartTime: '2024-01-12T12:39:07+01:00', + aimedEndTime: '2024-01-12T13:54:09+01:00', + expectedEndTime: '2024-01-12T13:54:09+01:00', + expectedStartTime: '2024-01-12T12:39:07+01:00', + duration: 4502, + distance: 26616.219999999998, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:39:07+01:00', + aimedEndTime: '2024-01-12T12:50:00+01:00', + expectedEndTime: '2024-01-12T12:50:00+01:00', + expectedStartTime: '2024-01-12T12:39:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAB0AAAAmABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ODIyMzhhN2VmZmNhMzY2YzAwZmNkYmJjMWU2MWQ2N2E=', + mode: 'bus', + aimedStartTime: '2024-01-12T12:50:00+01:00', + aimedEndTime: '2024-01-12T13:13:00+01:00', + expectedEndTime: '2024-01-12T13:13:00+01:00', + expectedStartTime: '2024-01-12T12:50:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:13:00+01:00', + aimedEndTime: '2024-01-12T13:16:42+01:00', + expectedEndTime: '2024-01-12T13:16:42+01:00', + expectedStartTime: '2024-01-12T13:13:00+01:00', + realtime: false, + distance: 213.19, + duration: 222, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A??LoAB[@EPqB@MBa@JD@@FQ??D@HDJsA@@B@DBB@DBDB@@Fu@LwAHwA??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAANABFSQjpOU1I6UXVheToxMTk2MAARUkI6TlNSOlF1YXk6MTE0NDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmY0M2E3ZDUxNmY5ZDljMzUyMDFlYzU2ZDk4NjM5M2Jh', + mode: 'bus', + aimedStartTime: '2024-01-12T13:20:00+01:00', + aimedEndTime: '2024-01-12T13:39:00+01:00', + expectedEndTime: '2024-01-12T13:39:00+01:00', + expectedStartTime: '2024-01-12T13:20:00+01:00', + realtime: false, + distance: 6755.19, + duration: 1140, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Alfaset', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Kjeller', + }, + }, + line: { + publicCode: '100', + name: 'Kjeller - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '}ktlJynt`ADi@BQBSBQHk@BEBG@I?I?G?IAG@QBQBKH_@Ji@BNBN?DDUBGJm@BM?ARy@d@{Bt@mDZ{ANo@H[@E`@oBt@mDFUBM?CJe@DSFU@KHc@?GDe@Nq@TgAj@mC@A@KBMFa@x@wE@E??F_@l@iDXcB`@eCV_BDYV_@BE??LUBM?OOaBBa@VuC`@}D@KZwCb@iEZgDFk@BUKa@CKGWWqAe@{BOu@EMIc@C_@G[YwAAGM[EQI]EQMm@ScAG[Mq@??OaAKo@Ik@Is@Io@MqAQ_BC]YeCs@}GEi@Gi@KeAEY??E[Iu@Gc@Ga@G]Ic@Kc@i@aCa@aBMk@Kc@[sAIa@Kc@S_A?C??I[C_@AKAa@?W@G@E?GHSBMFYN_@Rm@FUDUBOBQ@O@Q@O?MD]@g@?_@BG@I@KAIAICIEEEAE?EDADADO?I?E?C?E@C@CBEFCBCDSd@EHEFCDEDCBE@E@A@C?I?EAIEECs@q@Uw@WcAe@qBeD_OS{ASgAOiAEy@Ca@?U?O@I@G?IAKCICECCCAA?C?CBEIKUKc@COG[Ge@OkAEU??AIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGBUGk@Ce@Ao@Ao@AWA[AQC]CWIe@COOgAMo@OaAGWcA}FCMUgA??AESaASu@WaA[gAUu@]cAWy@W{@K]wAsEIYKWMa@Qo@K_@I[CIAMCKAQ@M?Q@Y@QA]KKEGEEEIEOM_@AOK_AKaAIw@Ek@??CSGgAEy@Cs@AaAAs@Ay@As@?q@@yA@gDBsD@wD@_C?oDByD?_@@iB@gB@i@@m@@[@Y?EHg@@U@A@E@E?EAEAEACAAA?A?IIECGCOBG?C?[@[BYB_@FSDy@J??C@OBSEE?KAI?AEACCEEACAC@A@KIGKEGUa@KYQ_@o@oAeAuBiAyBS[MW]o@Wc@[c@[c@i@q@EG??c@i@[_@[]s@w@GIIIYc@EIGKIMGMAAAKAGCEEEEAC@A@KIGEEGQOYk@]s@[w@Um@Sk@IYIUESIYEWGYEYEWE_@Ge@Gk@Ec@C]C_@C_@A]GcBC_@A[Ca@EWCWE]G[G]Qy@Qy@e@yBS_AMq@GSCOEQCMKe@S_AAC', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:39:00+01:00', + aimedEndTime: '2024-01-12T13:54:09+01:00', + expectedEndTime: '2024-01-12T13:54:09+01:00', + expectedStartTime: '2024-01-12T13:39:00+01:00', + realtime: false, + distance: 1074.54, + duration: 909, + fromPlace: { + name: 'Alfaset', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'egxlJeigaA@A?BRz@DZA@ILEDA@}@aEAECIACCGAE?IUiA?CAEMaA_Br@KBI?GBGHKNW^w@jA]f@ORSRQLMHMBAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:39:07+01:00', + aimedEndTime: '2024-01-12T14:03:50+01:00', + expectedEndTime: '2024-01-12T14:03:50+01:00', + expectedStartTime: '2024-01-12T12:39:07+01:00', + duration: 5083, + distance: 30479.82, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:39:07+01:00', + aimedEndTime: '2024-01-12T12:50:00+01:00', + expectedEndTime: '2024-01-12T12:50:00+01:00', + expectedStartTime: '2024-01-12T12:39:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAB0AAAAmABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ODIyMzhhN2VmZmNhMzY2YzAwZmNkYmJjMWU2MWQ2N2E=', + mode: 'bus', + aimedStartTime: '2024-01-12T12:50:00+01:00', + aimedEndTime: '2024-01-12T13:13:00+01:00', + expectedEndTime: '2024-01-12T13:13:00+01:00', + expectedStartTime: '2024-01-12T12:50:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:13:00+01:00', + aimedEndTime: '2024-01-12T13:13:39+01:00', + expectedEndTime: '2024-01-12T13:13:39+01:00', + expectedStartTime: '2024-01-12T13:13:00+01:00', + realtime: false, + distance: 30.41, + duration: 39, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A@@@SAAGCGC?ACACACA@W@K', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAANABFSQjpOU1I6UXVheToxMTk3OQARUkI6TlNSOlF1YXk6MTA2NDMAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjY3YzVkMTllZmMyOWI1MDdmMzkxYmYzY2Q3NDRiZDY1', + mode: 'bus', + aimedStartTime: '2024-01-12T13:25:00+01:00', + aimedEndTime: '2024-01-12T13:44:00+01:00', + expectedEndTime: '2024-01-12T13:44:00+01:00', + expectedStartTime: '2024-01-12T13:25:00+01:00', + realtime: false, + distance: 8619.48, + duration: 1140, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Rødtvet T', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Hellerudhaugen', + }, + }, + line: { + publicCode: '390', + name: 'Kongskog/Hellerudhaugen - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'qqtlJu~s`A??Be@AKIMCWJwA@UBUBW@SBWBW@WBU@UBUBW@WBU@I@M@UBUBW@UBUDE^W@AZUNDH@D?@?D?FAB?BABBB@B?@?BABCBEBG@I?I?G?IAGCIACCAECA?C?C@C@ADGAE?MEc@UEAGAIBIFGBC@EDEDEHCLENCLCTYpDSfCId@ENELELGJEBCFKAI?KCGCIEKIYUWSmBaB_BuA]YYYSSY[QSGGOQEE??EEKMACEIEIKSAKCIEGECEAGKCGGKGQI]K[W_AyAiFGUQo@_@wAc@cBKUIUEOEOE_@I]Su@Wo@GSCMCOEW]sAQ_@CICMIY_AjAI@G?EACAECIGW_@cAiBqCeF}C}FOe@EIGIIOGIEGKOSO{BoCKWGKSYMKGEKISK{@gAGIGO??KSIOGKIOOUGK]]IOyAwC_@s@mAcCMc@GQEI_AgBGKCGIQEIAIAOAOAK?IAC?I?Wc@G{AKyBQIAWAOCYIIAiAIMCCAEC@]AKAGACACG?YCC?C@ABADAB?BIKIGKKc@[MK??m@c@[UIIQKYUeAq@eAm@YOYQYOIEKCEAICKAMAyEe@[EgAKm@G??[C_@EoAKg@Cm@CoAK_@Ce@E]CWCWEMAIAGCAEAIAIAIEIEIEEEEGAE@G@EBCBCFQEg@UiAo@gAk@}@q@SQa@a@UUm@y@_@q@g@aAEGo@yBs@{BIS??IS_@iAyAkEw@}BG[Ie@?OAQCOEUIQIOKGGCI?A?S[OYK[m@iBWu@??Ma@_@oAY}@q@sBm@cDSoAUsAWaBQiAYqBYsBK{BQ{AUcCCu@C}@Gs@MqAUeBYqCQgBSkBGk@??AIGm@QkAGa@a@qB{@{IyBeTUaCMyAY_DIiDCaBI}CIyCCyA?k@?_@@c@Fo@@C@E?E?I?ICGAEECAAC?C?EEGKK[I_@OiAKw@OiA??SeBs@{DqAgKgAiIk@qEKq@??Ge@MiAI{@GcAE}@CaAA{@AcA@cAB}@BmAHgAJkANsAJu@N_AVgA~@mDXgAR{@Lo@PmALkAHiAFeABoA@oA?yAAoAAo@C_@??A]KoBK}AMaBWyBi@aFIy@Iw@IcAG{AGuACcBByB?}B?cA??AcAEyCGoBI_BCi@AQIw@SeBQkAO{@SeA[sAu@{FeB}Mm@mEUmBGc@??c@gD_@sCQcAMs@WkAQu@Sy@y@sCcAwDcCaJi@kBUu@Sq@Wm@Wi@We@U]_@e@[]a@g@Y]W]SWUa@S_@Q]Qe@Wq@So@Qo@Og@Ou@Os@O_AMs@K{@KaAIu@IaAGkAEy@C}@GqA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:44:00+01:00', + aimedEndTime: '2024-01-12T13:49:09+01:00', + expectedEndTime: '2024-01-12T13:49:09+01:00', + expectedStartTime: '2024-01-12T13:44:00+01:00', + realtime: false, + distance: 367.92, + duration: 309, + fromPlace: { + name: 'Rødtvet T', + }, + toPlace: { + name: 'Kalbakkstubben', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'cd|lJ}ghaA??DWGw@Cm@Co@MsDAs@?m@AcA?e@Ci@Cs@E}@GaAGo@Ei@K{@SgBAQ@IBIDKFEFAJ?D?N@J@d@F??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAMAAAAIABFSQjpOU1I6UXVheToxMDY2OAARUkI6TlNSOlF1YXk6MTAyNTkAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmQ5OTFhMTk1NGQzYjkyNjRhMTk5ZGY1OTA5YTBlMmE5', + mode: 'bus', + aimedStartTime: '2024-01-12T13:55:00+01:00', + aimedEndTime: '2024-01-12T13:59:00+01:00', + expectedEndTime: '2024-01-12T13:59:00+01:00', + expectedStartTime: '2024-01-12T13:55:00+01:00', + realtime: false, + distance: 2578.69, + duration: 240, + fromPlace: { + name: 'Kalbakkstubben', + }, + toPlace: { + name: 'Postnord', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Helsfyr', + }, + }, + line: { + publicCode: '68', + name: 'Helsfyr T - Grorud T via Alfaset', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'sc|lJijiaA@?HBPNHBHBDBFBJBDBFBXDHFf@b@JLHHNPTXRZXd@`@r@^l@`@r@T`@PXPVTXNRVTZTVPTLZLXJVFVDVDz@JNBx@H^DRHH@l@B??J@X@RBH?LBHBT@`@TVN\\VVRXVTTLNNPX`@\\f@T`@Zn@Rd@lCnGR`@P^PZR\\PVJLNPNN??B@LLFDNF\\JXRFBFBFDDHDFLR?FBD@DBDD@DABC@C`@[TIH@ZErAL|@Jp@FlAHh@BH@RJHFHHJLDJBFFFD@FADCDEDKBKHIHGHCNMF?PARANANAPCd@Ib@Gh@K^Il@@PCjA[TG??`A[JALCH?RBBDBBBVBT@HBPDb@?TBbABlBFvBBf@Fr@Dh@Ht@Jr@Np@Lj@Nd@N`@Rb@Td@PZh@x@NP~@nAzAjBHLVZRVNVI\\Sd@Q^GN??KTcApBmA`CIPKREREX@XBXDPdAxCJ\\l@bB', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:59:00+01:00', + aimedEndTime: '2024-01-12T14:03:50+01:00', + expectedEndTime: '2024-01-12T14:03:50+01:00', + expectedStartTime: '2024-01-12T13:59:00+01:00', + realtime: false, + distance: 310.02, + duration: 290, + fromPlace: { + name: 'Postnord', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'q|xlJmweaACFA?m@aBBEDKK]eAyCEQSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:03:50+01:00', + expectedEndTime: '2024-01-12T14:03:50+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4183, + distance: 27503.719999999998, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA7ABBSQjpOU1I6UXVheTo3OTQ0ABBSQjpOU1I6UXVheTo3MzczADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leTplNjBjM2M1ODE2ZjUxNGExZjk2NTdiZjEwYmQ3ZmJhNw==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:21:00+01:00', + expectedEndTime: '2024-01-12T13:21:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 15329.9, + duration: 960, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:21:00+01:00', + aimedEndTime: '2024-01-12T13:24:57+01:00', + expectedEndTime: '2024-01-12T13:24:57+01:00', + expectedStartTime: '2024-01-12T13:21:00+01:00', + realtime: false, + distance: 234.7, + duration: 237, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'u~tlJ{}n`A??GYEKIS[w@GKMSOUGKAEAE?G?G@EAECGCGACAAACCGAC?AAECECGAEFOTo@ISEKAFKl@IJO^GRCAIRGRc@p@??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABAAAAAWABBSQjpOU1I6UXVheTo3MzMzABFSQjpOU1I6UXVheToxMTEzNAA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6YzRjM2QwMjI1YWI5OGFhYjQ4NWNmZjAwZDExM2E0NzA=', + mode: 'metro', + aimedStartTime: '2024-01-12T13:27:00+01:00', + aimedEndTime: '2024-01-12T13:37:00+01:00', + expectedEndTime: '2024-01-12T13:37:00+01:00', + expectedStartTime: '2024-01-12T13:27:00+01:00', + realtime: true, + distance: 4410.74, + duration: 600, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Helsfyr', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Mortensrud', + }, + }, + line: { + publicCode: '3', + name: 'Kolsås - Mortensrud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'seulJ{co`AHMTm@FKBa@@KJu@NuAL{@Jw@Lu@Ls@Hk@Lo@?AVyAf@oCLs@Lw@Ho@Js@Fs@Hu@HwADaADkAD}@?WP{EDo@Fm@LiELeD??By@NmEBy@Du@Bk@JgAJcAL_APeAX{A\\aBd@iCL_AJ{@H{@Bi@@g@@e@FgCBcA?OHuD??@[JyE@uA@oAAiAGaAGy@Iy@M{@{@sEOeAIo@IiAEkAAeA?qAH}H??@i@D}DDqC@y@@e@B{@Be@H_ArAeMR}BFuA@yAEwAIsAO{ASqAWgAa@mAe@_Ag@m@mByB]k@[q@Yy@YkASkAQsAYkCKy@Ko@Ms@Ka@Me@Ma@O_@O_@Sa@Yi@uAeCa@u@??w@yAQc@Oa@K[K_@Ma@Mg@g@uBOk@Oi@Mc@Oa@O[Q[QYEc@Cs@Am@Am@@o@@g@@g@Bi@Di@De@Fc@Fc@Hg@Nm@Ja@La@N_@N]R_@RYPYVUTSRMPIPIl@WRITKNKNMLKNQPSRYLULUHSJUHUJYHUNc@Lg@Pk@Lg@Lg@P{@Ha@n@{CH]R}@??`@mBH_@Lq@DYDYD]Da@B]Dg@@_@Bi@@g@?c@?c@Ae@A_@Ck@Eo@?AWwCEq@Eq@Cu@Cw@Cc@Ao@?m@?k@?q@?y@@k@B{@j@oOD}@FgAHw@LuANgAn@uFHw@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:37:00+01:00', + aimedEndTime: '2024-01-12T13:37:32+01:00', + expectedEndTime: '2024-01-12T13:37:32+01:00', + expectedStartTime: '2024-01-12T13:37:00+01:00', + realtime: false, + distance: 33.93, + duration: 32, + fromPlace: { + name: 'Helsfyr', + }, + toPlace: { + name: 'Helsfyr T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_utlJws|`ABBAb@i@G??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAIAAAAFABFSQjpOU1I6UXVheToxMTE0MgARUkI6TlNSOlF1YXk6MTA0MDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmIzNDRjZDFmM2FjZWU2MTE5ZGE2N2M3MDNjMTViYmQ1', + mode: 'bus', + aimedStartTime: '2024-01-12T13:40:00+01:00', + aimedEndTime: '2024-01-12T13:44:00+01:00', + expectedEndTime: '2024-01-12T13:44:00+01:00', + expectedStartTime: '2024-01-12T13:40:00+01:00', + realtime: false, + distance: 4040.73, + duration: 240, + fromPlace: { + name: 'Helsfyr T', + }, + toPlace: { + name: 'Trosterud', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Blystadlia', + }, + }, + line: { + publicCode: '300', + name: 'Blystadlia - Ahus - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'wvtlJsr|`AAIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGo@{CWiAYiAcAmDqBeHgBiGqBcHc@cBc@eBUgASiAQoAIi@Gi@ScCKaBKmBMuBCw@CiB?{BAiBAuA?yA?sA@yB@gC@{D?{A?{A?qA?sAAuAAqACuACqAEwAEkACiAGmAGqAI{AKkBKsAKoAKqAMmAMqAGm@K{@MgAM{@UeBWaBSsAc@oCa@kCSwAYsBQqAQ}AQ{AMqAMkAQuBm@yGOcB]cDMoAYwBWmBc@mC_@qB_@mBi@sDSiAe@}BOu@Oq@YeAOk@Qg@Wu@Oe@Q[M[Wk@We@EI', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:44:00+01:00', + aimedEndTime: '2024-01-12T13:47:21+01:00', + expectedEndTime: '2024-01-12T13:47:21+01:00', + expectedStartTime: '2024-01-12T13:44:00+01:00', + realtime: false, + distance: 178.32, + duration: 201, + fromPlace: { + name: 'Trosterud', + }, + toPlace: { + name: 'Trosterudkrysset', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sywlJw}haA?A?ECOAM@K?G@E@I@EBCBEFCPEBABCBC@E@G@K@YBSBSDKJQ`@y@HMVv@DPBJ@LBXU[??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAIAAAAFABFSQjpOU1I6UXVheToxMDM3NQARUkI6TlNSOlF1YXk6MTAzOTYAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjliZTdhODEwN2RjMGEyODQ5NGVkNTRhNzQ3ZThjYzZi', + mode: 'bus', + aimedStartTime: '2024-01-12T13:51:00+01:00', + aimedEndTime: '2024-01-12T13:53:00+01:00', + expectedEndTime: '2024-01-12T13:53:00+01:00', + expectedStartTime: '2024-01-12T13:51:00+01:00', + realtime: false, + distance: 1203.14, + duration: 120, + fromPlace: { + name: 'Trosterudkrysset', + }, + toPlace: { + name: 'Alfasetveien', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Majorstuen', + }, + }, + line: { + publicCode: '25', + name: 'Majorstuen-Haugerud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'iuwlJ_diaAEIOg@Us@EKIWOi@IQKIKIIEMCCGCECACAE?C@C@ABCDADADAFORQTKNKNMVMZ??MXO\\qAbDGLMXGNKLKPE@CBCDCDAHAFAF?HGRGVGTMZqBbFm@vASh@A???Sf@OZMVKTMVQVKJKJMHQHE?E@GBCFEHAJAD?DGPGHGHKH]TIFSH[LQDWDc@HwCh@uB^qDz@i@JM@MAQ?GKGCGAGBGFEJCNKNIHIFMDODo@RcAZE@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:53:00+01:00', + aimedEndTime: '2024-01-12T13:55:31+01:00', + expectedEndTime: '2024-01-12T13:55:31+01:00', + expectedStartTime: '2024-01-12T13:53:00+01:00', + realtime: false, + distance: 162.35, + duration: 151, + fromPlace: { + name: 'Alfasetveien', + }, + toPlace: { + name: 'Alfasetveien', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'wnylJqygaA??^QTIHAPGTG@?f@S@P?B@FAJ?J?LAFADEHCHUFk@RAEJO??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAYAAAAIABFSQjpOU1I6UXVheToxMDM5NAARUkI6TlNSOlF1YXk6MTAyNTkAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmQ5OTFhMTk1NGQzYjkyNjRhMTk5ZGY1OTA5YTBlMmE5', + mode: 'bus', + aimedStartTime: '2024-01-12T13:58:00+01:00', + aimedEndTime: '2024-01-12T13:59:00+01:00', + expectedEndTime: '2024-01-12T13:59:00+01:00', + expectedStartTime: '2024-01-12T13:58:00+01:00', + realtime: false, + distance: 872.68, + duration: 60, + fromPlace: { + name: 'Alfasetveien', + }, + toPlace: { + name: 'Postnord', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Helsfyr', + }, + }, + line: { + publicCode: '68', + name: 'Helsfyr T - Grorud T via Alfaset', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'elylJaygaA`A[JALCH?RBBDBBBVBT@HBPDb@?TBbABlBFvBBf@Fr@Dh@Ht@Jr@Np@Lj@Nd@N`@Rb@Td@PZh@x@NP~@nAzAjBHLVZRVNVI\\Sd@Q^GN??KTcApBmA`CIPKREREX@XBXDPdAxCJ\\l@bB', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:59:00+01:00', + aimedEndTime: '2024-01-12T14:03:50+01:00', + expectedEndTime: '2024-01-12T14:03:50+01:00', + expectedStartTime: '2024-01-12T13:59:00+01:00', + realtime: false, + distance: 310.02, + duration: 290, + fromPlace: { + name: 'Postnord', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'q|xlJmweaACFA?m@aBBEDKK]eAyCEQSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:07:28+01:00', + expectedEndTime: '2024-01-12T14:07:28+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4401, + distance: 26472.179999999997, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA7ABBSQjpOU1I6UXVheTo3OTQ0ABBSQjpOU1I6UXVheTo3MzczADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leTplNjBjM2M1ODE2ZjUxNGExZjk2NTdiZjEwYmQ3ZmJhNw==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:21:00+01:00', + expectedEndTime: '2024-01-12T13:21:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 15329.9, + duration: 960, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:21:00+01:00', + aimedEndTime: '2024-01-12T13:24:57+01:00', + expectedEndTime: '2024-01-12T13:24:57+01:00', + expectedStartTime: '2024-01-12T13:21:00+01:00', + realtime: false, + distance: 234.7, + duration: 237, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'u~tlJ{}n`A??GYEKIS[w@GKMSOUGKAEAE?G?G@EAECGCGACAAACCGAC?AAECECGAEFOTo@ISEKAFKl@IJO^GRCAIRGRc@p@??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABAAAAAWABBSQjpOU1I6UXVheTo3MzMzABFSQjpOU1I6UXVheToxMTEzNAA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6YzRjM2QwMjI1YWI5OGFhYjQ4NWNmZjAwZDExM2E0NzA=', + mode: 'metro', + aimedStartTime: '2024-01-12T13:27:00+01:00', + aimedEndTime: '2024-01-12T13:37:00+01:00', + expectedEndTime: '2024-01-12T13:37:00+01:00', + expectedStartTime: '2024-01-12T13:27:00+01:00', + realtime: true, + distance: 4410.74, + duration: 600, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Helsfyr', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Mortensrud', + }, + }, + line: { + publicCode: '3', + name: 'Kolsås - Mortensrud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'seulJ{co`AHMTm@FKBa@@KJu@NuAL{@Jw@Lu@Ls@Hk@Lo@?AVyAf@oCLs@Lw@Ho@Js@Fs@Hu@HwADaADkAD}@?WP{EDo@Fm@LiELeD??By@NmEBy@Du@Bk@JgAJcAL_APeAX{A\\aBd@iCL_AJ{@H{@Bi@@g@@e@FgCBcA?OHuD??@[JyE@uA@oAAiAGaAGy@Iy@M{@{@sEOeAIo@IiAEkAAeA?qAH}H??@i@D}DDqC@y@@e@B{@Be@H_ArAeMR}BFuA@yAEwAIsAO{ASqAWgAa@mAe@_Ag@m@mByB]k@[q@Yy@YkASkAQsAYkCKy@Ko@Ms@Ka@Me@Ma@O_@O_@Sa@Yi@uAeCa@u@??w@yAQc@Oa@K[K_@Ma@Mg@g@uBOk@Oi@Mc@Oa@O[Q[QYEc@Cs@Am@Am@@o@@g@@g@Bi@Di@De@Fc@Fc@Hg@Nm@Ja@La@N_@N]R_@RYPYVUTSRMPIPIl@WRITKNKNMLKNQPSRYLULUHSJUHUJYHUNc@Lg@Pk@Lg@Lg@P{@Ha@n@{CH]R}@??`@mBH_@Lq@DYDYD]Da@B]Dg@@_@Bi@@g@?c@?c@Ae@A_@Ck@Eo@?AWwCEq@Eq@Cu@Cw@Cc@Ao@?m@?k@?q@?y@@k@B{@j@oOD}@FgAHw@LuANgAn@uFHw@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:37:00+01:00', + aimedEndTime: '2024-01-12T13:37:32+01:00', + expectedEndTime: '2024-01-12T13:37:32+01:00', + expectedStartTime: '2024-01-12T13:37:00+01:00', + realtime: false, + distance: 33.93, + duration: 32, + fromPlace: { + name: 'Helsfyr', + }, + toPlace: { + name: 'Helsfyr T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_utlJws|`ABBAb@i@G??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAIAAAAFABFSQjpOU1I6UXVheToxMTE0MgARUkI6TlNSOlF1YXk6MTA0MDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmIzNDRjZDFmM2FjZWU2MTE5ZGE2N2M3MDNjMTViYmQ1', + mode: 'bus', + aimedStartTime: '2024-01-12T13:40:00+01:00', + aimedEndTime: '2024-01-12T13:44:00+01:00', + expectedEndTime: '2024-01-12T13:44:00+01:00', + expectedStartTime: '2024-01-12T13:40:00+01:00', + realtime: false, + distance: 4040.73, + duration: 240, + fromPlace: { + name: 'Helsfyr T', + }, + toPlace: { + name: 'Trosterud', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Blystadlia', + }, + }, + line: { + publicCode: '300', + name: 'Blystadlia - Ahus - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'wvtlJsr|`AAIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGo@{CWiAYiAcAmDqBeHgBiGqBcHc@cBc@eBUgASiAQoAIi@Gi@ScCKaBKmBMuBCw@CiB?{BAiBAuA?yA?sA@yB@gC@{D?{A?{A?qA?sAAuAAqACuACqAEwAEkACiAGmAGqAI{AKkBKsAKoAKqAMmAMqAGm@K{@MgAM{@UeBWaBSsAc@oCa@kCSwAYsBQqAQ}AQ{AMqAMkAQuBm@yGOcB]cDMoAYwBWmBc@mC_@qB_@mBi@sDSiAe@}BOu@Oq@YeAOk@Qg@Wu@Oe@Q[M[Wk@We@EI', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:44:00+01:00', + aimedEndTime: '2024-01-12T14:07:28+01:00', + expectedEndTime: '2024-01-12T14:07:28+01:00', + expectedStartTime: '2024-01-12T13:44:00+01:00', + realtime: false, + distance: 1694.97, + duration: 1408, + fromPlace: { + name: 'Trosterud', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'sywlJw}haA?A?ECOAM@K?G@E@I@EBCBEFCPEBABCBC@E@G@K@YBSBSDKJQIMCCCCCAE?G@k@JG?IAKESMGCK?I?GDGFGLYt@_@|@Ul@c@bAOZCFAFAFAFAPAVCZAF?HCNGAI@IFIHILKTUh@iA`Cc@dAw@rBQd@M^Od@Mh@Mh@Mb@GPGNINGDI@i@b@YPC@OHQFUHUHu@TBz@BlALADAD?DBFBJHHPCHIx@ABK`AIh@CNIb@Ir@Y~CO~BAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:42:00+01:00', + aimedEndTime: '2024-01-12T14:09:19+01:00', + expectedEndTime: '2024-01-12T14:09:19+01:00', + expectedStartTime: '2024-01-12T12:42:00+01:00', + duration: 5239, + distance: 28576.019999999997, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:42:00+01:00', + aimedEndTime: '2024-01-12T12:59:00+01:00', + expectedEndTime: '2024-01-12T12:59:00+01:00', + expectedStartTime: '2024-01-12T12:42:00+01:00', + realtime: false, + distance: 1019.02, + duration: 1020, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'Slependen stasjon', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@REDCDMLAFERQSy@a@_@IM@sAHkDJcADa@B]Hg@Va@Zc@b@u@n@_ChCcA|@_@h@w@rAA@CICIu@jAq@bAQX_@d@QVMFWFG?GAGCIGCQAI?ICO[iDCQCSEe@AEQHKD_@@??', + }, + }, + { + id: 'rO0ABXeFABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAUAAAAQABBSQjpOU1I6UXVheToxMDYxAA9SQjpOU1I6UXVheTo1MDQAMFJCOk5TQjpEYXRlZFNlcnZpY2VKb3VybmV5OjIxMzRfQVNSLUxMU18yNC0wMS0xMg==', + mode: 'rail', + aimedStartTime: '2024-01-12T12:59:00+01:00', + aimedEndTime: '2024-01-12T13:36:00+01:00', + expectedEndTime: '2024-01-12T13:35:30+01:00', + expectedStartTime: '2024-01-12T12:59:00+01:00', + realtime: true, + distance: 25116.17, + duration: 2190, + fromPlace: { + name: 'Slependen stasjon', + }, + toPlace: { + name: 'Nyland stasjon', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillestrøm', + }, + }, + line: { + publicCode: 'L1', + name: 'Spikkestad-Oslo S-Lillestrøm', + }, + authority: { + name: 'Vy', + }, + pointsOnLink: { + points: + 'glolJ}ib_AC@aA^IBUJUHWFYHUFWBUBY?Y?YA[CYGg@K[IWIm@M]K[M[OYQYSYW[_@Y]U_@Ua@[m@Um@Yu@Oe@Me@Mk@Me@Ki@Ms@Ks@Gk@Im@Gw@Em@G_AEu@Co@QcEC]??Q}DEiACw@C}@AmAA_AAqAAcH?mHAoB?uCAiA?m@Am@As@C}@Cw@EcAEgAIkAG}@Gs@Gw@Iu@Gq@McAKu@Ku@Kk@Kk@Ik@Mm@Os@Mo@Ki@??[yAYqA[sAc@mBaAgE????kBeIi@_C]yAYmAc@kBWgAYoAaBkH{@oDmAmFUcAu@_D_@}A??u@gDi@yBEWOq@YkAUaA{@iDc@eBU{@WcAOo@Mm@Mq@Kk@Ig@Ii@Im@Io@I{@I_AEs@Es@Ew@CeACgAAy@?s@@w@@y@@o@By@B}@F}@F}@F{@Hy@J{@Ju@RqAz@iFRkAJm@Js@De@Fc@De@Dc@Dm@Fo@Bo@Ds@@k@Bk@@m@@k@?i@?m@?i@Ak@Au@Cq@Cq@Cu@Es@Gw@AI????Iy@Gi@Gg@Gi@Ig@Ig@Ie@Kg@G]Ka@K]W_AQm@Qi@c@qAQk@M]Ka@K_@Ke@Mg@I_@Ki@Kk@Ik@Im@Gi@Gm@Gm@Ek@Cm@Eo@Cy@Cw@Aq@Am@?_A?q@?{@HeTFyO@i@F}L?_A?o@?o@Ai@Ak@Ck@Ag@Ce@Ck@Cg@Ek@Gi@Ei@Iq@M_AO_AIg@SuAO{@CUw@gFa@mCm@kEMy@mByM????q@mEk@}DQkAQgA]qBUuAWsAUuAIc@g@uCQgAQiAk@aE??a@wC]gCSoASoAMy@Q}@UoAQw@Qy@Sw@U{@W}@Sq@Og@Qk@Oc@Wq@Si@Uk@i@sAUk@Ys@Um@Qe@Oe@Sm@Om@Sq@Oi@Qu@Oo@Ou@Mq@Mo@Kq@Ms@Ks@K{@[{Bo@aFWkBSaBUgBMy@My@Ku@Ku@Mw@O_AO}@Ms@Q}@UkACK????ESOm@Qq@Mi@Og@_@mASs@Uw@a@wAUy@]kAs@cC]kAQs@]oAYeAWiAyA{F}AgGwAuFYmAUy@Sw@a@aB{AcGuAqFyA}F[kAWaAS{@Qq@U{@GYQq@[mAMe@I]Kc@Ka@Ig@Ke@Gc@Ii@Gg@Io@Ee@Gw@Ek@Cm@Ag@Ak@As@As@?s@@s@Bu@@m@Dm@Bq@Fu@Do@Fq@Fo@Fg@Hq@Z{B??JaAFk@Dg@??Jg@DWHc@Jm@??Js@Hq@RsAPsAJu@NiALgAHmAHoADkABeA@iA?E?????u@?aAAs@Cs@Cm@Ce@A_@Ce@Ei@IaAKgAG{@YmDK_AI}@Is@Iu@IcAYcDEo@KiAKcAIs@Kq@MaAQgASoAO{@SeAWkAc@qBm@eC[iAQs@Oo@Om@Mm@Kg@Mo@Ko@Ku@Ks@Iu@I}@I_AGeAEw@GiAEcAIyBEs@Eq@GcAIy@Ek@Iw@Ii@Im@Ig@O{@Km@S_AUaAU}@[aAY{@Ww@u@yBQi@Wo@k@cBe@wAYy@Y{@sAwD{@eCSm@??Sm@I_@Ka@IYMc@Si@??Mi@IYI[EU??Oc@GQMa@i@{AmEoMe@qA[}@Qo@Oc@Oo@Ka@Mk@Kg@Mk@G[E[M_A??Ig@Ic@CO??AOCYC]Kw@OsAE_@Ec@Eo@Ac@Cg@Ao@A}@A_A@cA?}@Bw@@o@??D}@Dy@H_AHy@H{@Hk@Ju@L}@x@cFJq@????BMDQj@eD|@kFX}AZgBXcBf@qCVuAN}@Nu@Nu@R{@XqA`@iBLo@Lm@??VsANu@RgAJm@Jq@NaANmAR_BN_BNeBL_BHqADeAD}@DgABu@B{@@_A@y@@y@@cA?iAA{AAeAA_AAy@C_ACy@C_AMsDKkCGiB??KyCKiDE_BC{AAkA?eAAeA@oA@kA@gABwADoAD_BH{AFaAFiAHgAFaAl@}Jn@}JPoCLuBPeCLuALsALoALkANkATaBn@oE|@_GfAqH@KVcBNaAP}@f@kCTmAVsA??XyAb@aCLo@NcALw@Ho@Hq@Hw@HgAHaADu@Dw@H}Ab@_K????d@gKF_BBs@Dw@DaBBaABs@Bm@Bm@@_@B[B_@Bg@Do@B_@D]Fu@??Fs@Fq@J_AJw@Fk@Hk@Jo@Jq@F_@Lu@Nw@??ZcBPeA\\gBN_ANu@Lu@L{@Jm@Ly@L_ANkAHw@Hs@H_AL}AHqAHkAFsAF{ADoABmAHgDDuABgADcAFy@F_AF}@H_AH{@LqAJ{@??@[B]@]??F[DUFa@Fe@Hs@He@L{@Ny@??RuALw@Jk@Jg@Ji@\\{AR}@Ns@N{@L_AVcB??^gCf@cD????p@qE|@eGh@iD??j@uDb@yCn@aE`@oCNaANgALiAJiADi@Fo@Dw@LwBFiA??Fm@Hu@PcBLsARoB??Z}CH}@`@wDXcDb@}DH_A??Dc@B_@Dq@@]Fk@H}@??Z{C??Ba@D_@@WB]@WDm@??TqBViCTgCL{ALyANiBLaBJqAHuAD_AHkADgADgADeAFqB@[Bu@BoA@y@BcA@mA@uA@}A?aA?_A?{A?}HAsF?mJA_F?qH?qBAsC?aB?oC?{BAoC?eH?mD?sD?gBAoB?kA?qB?qA?}@?k@Ak@?m@Aq@Ai@Ag@As@Cw@Cs@Cs@Ew@Eu@Ci@Gq@Eu@G{@KmAQmBYkDO_BOkBQuBw@aJScCQqBS_CS{BKwAOyAa@eFEe@??C_@C[Cq@AUCY??I_AGu@KmAGq@Gw@KaAIy@Go@Io@Im@ES????G_@Ko@Ke@[sAMg@Mk@Ok@Og@Qi@Sm@Oc@Oc@O]O_@Qa@Sa@Qa@k@kAQ_@u@{A??]o@Uc@S_@]m@Wc@OWEGYe@QW[c@W]QWSUMQSSUYOOo@o@c@a@[W[UWS]U[SUM_@Ue@Wq@][QYQYM_Ag@}BoAsEaCwC}AcAi@s@_@c@Wc@Uk@Yk@[u@a@w@a@cFkCyEgC??gCsA_B{@w@_@e@S]O]OWKWKSGsBs@SGWI[K[I[I_@GUEWE[C[C[C[AU?[@Y?W@a@BWD]DUBwATy@NoB\\a@F[Fa@F_@DO@I@W@[@Y?YAUAYCWE]G_@IYK]Ma@O_@Sa@Si@[MIQKu@c@yD}B????]S}D_Ci@]c@Y_@Wa@[_@Y[[_@[e@g@WYSUSYW]W]U_@Wa@Yc@Yg@Yi@Wi@Wi@Uk@Ug@Qe@Si@Um@Qi@Qk@So@Qo@Mc@Kc@EQKa@Mk@Sy@Qw@ScASaAOu@Qy@QaAO{@O_AOaAMy@MgAM_AKgAMkAIaAI_AIeAIcAImAIwAs@iL_BoXMuBK}AG{@Em@Gs@Gq@I_AIu@E_@Gi@Kw@Iq@Iq@M}@M}@Oy@QgAQcAk@yCWoA]gBI_@??u@}DmDwQcEkTMm@QaA_@iBSaAOw@CI??', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:35:30+01:00', + aimedEndTime: '2024-01-12T14:09:19+01:00', + expectedEndTime: '2024-01-12T14:09:19+01:00', + expectedStartTime: '2024-01-12T13:35:30+01:00', + realtime: false, + distance: 2440.83, + duration: 2029, + fromPlace: { + name: 'Nyland stasjon', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'kxzlJakjaA??~@`EPfAJf@BNUDA?K?GCIGMXIXc@tACNBLFJNZJNFFHHD@FBFANd@Pb@Ph@Lf@Pr@Pt@Nt@VrAhGp[DXL|@BPBPp@hDDVDZ?H@JA`@@D@DBDANEJCHEHEDGFWRIFGHGJGLENENCLCRUhBCPB@@?r@LB?xBZ|@Ll@FlAH^@R@J?BABCBCDIDN?D?H?H?B?DAF?FAHETDBJJBDBDDDBDD@B@B@B?B?B?B?BABCBABEBCBCDCBADA?E?C@C@CBCDEBAFAFAb@APAPAPCb@Id@Ih@MRGLCF?RBJ?N?LAPEt@Uj@STGPAFTLf@HVHRJTMp@ITAX@ZLlAJhA?rA\\bDVrAXlAh@r@Tl@Zb@f@d@^LnAzAj@|@h@jAd@jAEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:10:09+01:00', + expectedEndTime: '2024-01-12T14:10:09+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4562, + distance: 26424.149999999998, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA7ABBSQjpOU1I6UXVheTo3OTQ0ABBSQjpOU1I6UXVheTo3MzczADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leTplNjBjM2M1ODE2ZjUxNGExZjk2NTdiZjEwYmQ3ZmJhNw==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:21:00+01:00', + expectedEndTime: '2024-01-12T13:21:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 15329.9, + duration: 960, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:21:00+01:00', + aimedEndTime: '2024-01-12T13:24:57+01:00', + expectedEndTime: '2024-01-12T13:24:57+01:00', + expectedStartTime: '2024-01-12T13:21:00+01:00', + realtime: false, + distance: 234.7, + duration: 237, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'u~tlJ{}n`A??GYEKIS[w@GKMSOUGKAEAE?G?G@EAECGCGACAAACCGAC?AAECECGAEFOTo@ISEKAFKl@IJO^GRCAIRGRc@p@??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABAAAAAWABBSQjpOU1I6UXVheTo3MzMzABFSQjpOU1I6UXVheToxMTEzNAA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6YzRjM2QwMjI1YWI5OGFhYjQ4NWNmZjAwZDExM2E0NzA=', + mode: 'metro', + aimedStartTime: '2024-01-12T13:27:00+01:00', + aimedEndTime: '2024-01-12T13:37:00+01:00', + expectedEndTime: '2024-01-12T13:37:00+01:00', + expectedStartTime: '2024-01-12T13:27:00+01:00', + realtime: true, + distance: 4410.74, + duration: 600, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Helsfyr', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Mortensrud', + }, + }, + line: { + publicCode: '3', + name: 'Kolsås - Mortensrud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'seulJ{co`AHMTm@FKBa@@KJu@NuAL{@Jw@Lu@Ls@Hk@Lo@?AVyAf@oCLs@Lw@Ho@Js@Fs@Hu@HwADaADkAD}@?WP{EDo@Fm@LiELeD??By@NmEBy@Du@Bk@JgAJcAL_APeAX{A\\aBd@iCL_AJ{@H{@Bi@@g@@e@FgCBcA?OHuD??@[JyE@uA@oAAiAGaAGy@Iy@M{@{@sEOeAIo@IiAEkAAeA?qAH}H??@i@D}DDqC@y@@e@B{@Be@H_ArAeMR}BFuA@yAEwAIsAO{ASqAWgAa@mAe@_Ag@m@mByB]k@[q@Yy@YkASkAQsAYkCKy@Ko@Ms@Ka@Me@Ma@O_@O_@Sa@Yi@uAeCa@u@??w@yAQc@Oa@K[K_@Ma@Mg@g@uBOk@Oi@Mc@Oa@O[Q[QYEc@Cs@Am@Am@@o@@g@@g@Bi@Di@De@Fc@Fc@Hg@Nm@Ja@La@N_@N]R_@RYPYVUTSRMPIPIl@WRITKNKNMLKNQPSRYLULUHSJUHUJYHUNc@Lg@Pk@Lg@Lg@P{@Ha@n@{CH]R}@??`@mBH_@Lq@DYDYD]Da@B]Dg@@_@Bi@@g@?c@?c@Ae@A_@Ck@Eo@?AWwCEq@Eq@Cu@Cw@Cc@Ao@?m@?k@?q@?y@@k@B{@j@oOD}@FgAHw@LuANgAn@uFHw@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:37:00+01:00', + aimedEndTime: '2024-01-12T13:37:47+01:00', + expectedEndTime: '2024-01-12T13:37:47+01:00', + expectedStartTime: '2024-01-12T13:37:00+01:00', + realtime: false, + distance: 57.17, + duration: 47, + fromPlace: { + name: 'Helsfyr', + }, + toPlace: { + name: 'Helsfyr T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_utlJws|`ABBOtBPhA??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAAJABFSQjpOU1I6UXVheToxMTE0OAARUkI6TlNSOlF1YXk6MTE0NDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmM4MzJiNGVkODUyYmE0ZDQwMTc0YmM3ODRkNWZkZGVm', + mode: 'bus', + aimedStartTime: '2024-01-12T13:45:00+01:00', + aimedEndTime: '2024-01-12T13:55:00+01:00', + expectedEndTime: '2024-01-12T13:55:00+01:00', + expectedStartTime: '2024-01-12T13:45:00+01:00', + realtime: false, + distance: 4589.89, + duration: 600, + fromPlace: { + name: 'Helsfyr T', + }, + toPlace: { + name: 'Alfaset', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Grorud T via Ikea', + }, + }, + line: { + publicCode: '66', + name: 'Helsfyr T - Grorud T', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'yttlJun|`A?@Jn@DZ?N?J?JC?CBCDCHAL?J@JBFDFD@DADCBG@I@GDUFWFs@?AFk@Bi@Bi@@W@S?]?e@CeA?c@Ci@Ae@C]CYKiAGe@CMEa@Cc@AEl@yGDq@Be@B_@Di@Bc@DM@O?OAQEKGGEAC?E@GGEGCICKCMAQiAsNIoA?AG{@Co@Am@Ai@@e@?g@@[Bi@\\eH??HcB@_@D{@DaA@m@@]@cABi@@Q@IFa@@ADEBK?K?KAGCECCCAG_@AQASA[Aa@CiDA]AqA?KA}@EuC?Q????As@?ACg@Ae@C}@GsAGeAMoCMoCC_@?g@@W?Q?CBa@BK@M?K?MAMEKGIGEA?E?GDEFCHI?GEECECCAAEEEGKGOQe@EKQSM_@ISK]M[GO??IQIMEMQWSYUW[YYSWO[KSEUEm@EaAGOCQCQEMEQIQMOMMOMQ[i@iAyB??CC]m@MSQWYa@QSY_@]a@A?Y[g@e@SQeAy@kAcAwAeAa@_@QMe@_@????UOUMQK[MQGECWGe@Ia@G}AOKA}C]k@Ii@GUC[EKKEGEEEIEOM_@AOK_AKaAIw@Ek@??CSGgAEy@Cs@AaAAs@Ay@As@?q@@yA@gDBsD@wD@_C?oDByD?_@@iB@gB@i@@m@@[@Y?EHg@@U@A@E@E?EAEAEACAAA?A?IIECGCOBG?C?[@[BYB_@FSDy@J??C@OBSEE?KAI?AEACCEEACAC@A@KIGKEGUa@KYQ_@o@oAeAuBiAyBS[MW]o@Wc@[c@[c@i@q@EG??c@i@[_@[]s@w@GIIIYc@EIGKIMGMAAAKAGCEEEEAC@A@KIGEEGQOYk@]s@[w@Um@Sk@IYIUESIYEWGYEYEWE_@Ge@Gk@Ec@C]C_@C_@A]GcBC_@A[Ca@EWCWE]G[G]Qy@Qy@e@yBS_AMq@GSCOEQCMKe@S_AAC', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:55:00+01:00', + aimedEndTime: '2024-01-12T14:10:09+01:00', + expectedEndTime: '2024-01-12T14:10:09+01:00', + expectedStartTime: '2024-01-12T13:55:00+01:00', + realtime: false, + distance: 1074.54, + duration: 909, + fromPlace: { + name: 'Alfaset', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'egxlJeigaA@A?BRz@DZA@ILEDA@}@aEAECIACCGAE?IUiA?CAEMaA_Br@KBI?GBGHKNW^w@jA]f@ORSRQLMHMBAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:13:28+01:00', + expectedEndTime: '2024-01-12T14:13:28+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4761, + distance: 27352.32, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA-ABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ZTYwYzNjNTgxNmY1MTRhMWY5NjU3YmYxMGJkN2ZiYTc=', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:28:00+01:00', + expectedEndTime: '2024-01-12T13:28:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:28:00+01:00', + aimedEndTime: '2024-01-12T13:31:42+01:00', + expectedEndTime: '2024-01-12T13:31:42+01:00', + expectedStartTime: '2024-01-12T13:28:00+01:00', + realtime: false, + distance: 213.19, + duration: 222, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A??LoAB[@EPqB@MBa@JD@@FQ??D@HDJsA@@B@DBB@DBDB@@Fu@LwAHwA??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAAJABFSQjpOU1I6UXVheToxMTk2MAARUkI6TlNSOlF1YXk6MTA0MDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmY4MDE0ZDY1OWI3ZWY3ODNhZTdjYjU4NjBiMWMyNzg3', + mode: 'bus', + aimedStartTime: '2024-01-12T13:35:00+01:00', + aimedEndTime: '2024-01-12T13:50:00+01:00', + expectedEndTime: '2024-01-12T13:50:00+01:00', + expectedStartTime: '2024-01-12T13:35:00+01:00', + realtime: false, + distance: 6870.86, + duration: 900, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Trosterud', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillestrøm', + }, + }, + line: { + publicCode: '110', + name: 'Lillestrøm - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '}ktlJynt`ADi@BQBSBQHk@BEBG@I?I?G?IAG@QBQBKH_@Ji@BNBN?DDUBGJm@BM?ARy@d@{Bt@mDZ{ANo@H[@E`@oBt@mDFUBM?CJe@DSFU@KHc@?GDe@Nq@TgAj@mC@A@KBMFa@x@wE@E??F_@l@iDXcB`@eCV_BDYV_@BE??LUBM?OOaBBa@VuC`@}D@KZwCb@iEZgDFk@BUKa@CKGWWqAe@{BOu@EMIc@C_@G[YwAAGM[EQI]EQMm@ScAG[Mq@??OaAKo@Ik@Is@Io@MqAQ_BC]YeCs@}GEi@Gi@KeAEY??E[Iu@Gc@Ga@G]Ic@Kc@i@aCa@aBMk@Kc@[sAIa@Kc@S_A?C??I[C_@AKAa@?W@G@E?GHSBMFYN_@Rm@FUDUBOBQ@O@Q@O?MD]@g@?_@BG@I@KAIAICIEEEAE?EDADADO?I?E?C?E@C@CBEFCBCDSd@EHEFCDEDCBE@E@A@C?I?EAIEECs@q@Uw@WcAe@qBeD_OS{ASgAOiAEy@Ca@?U?O@I@G?IAKCICECCCAA?C?CBEIKUKc@COG[Ge@OkAEU??AIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGo@{CWiAYiAcAmDqBeHgBiGqBcHc@cBc@eBUgASiAQoAIi@Gi@ScCKaBKmBMuBCw@CiB?{BAiBAuA?yA?sA@yB@gC@{D?{A?{A?qA?sAAuAAqACuACqAEwAEkACiAGmAGqAI{AKkBKsAKoAKqAMmAMqAGm@K{@MgAM{@UeBWaBSsAc@oCa@kCSwAYsBQqAQ}AQ{AMqAMkAQuBm@yGOcB]cDMoAYwBWmBc@mC_@qB_@mBi@sDSiAe@}BOu@Oq@YeAOk@Qg@Wu@Oe@Q[M[Wk@We@EI', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:50:00+01:00', + aimedEndTime: '2024-01-12T14:13:28+01:00', + expectedEndTime: '2024-01-12T14:13:28+01:00', + expectedStartTime: '2024-01-12T13:50:00+01:00', + realtime: false, + distance: 1694.97, + duration: 1408, + fromPlace: { + name: 'Trosterud', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'sywlJw}haA?A?ECOAM@K?G@E@I@EBCBEFCPEBABCBC@E@G@K@YBSBSDKJQIMCCCCCAE?G@k@JG?IAKESMGCK?I?GDGFGLYt@_@|@Ul@c@bAOZCFAFAFAFAPAVCZAF?HCNGAI@IFIHILKTUh@iA`Cc@dAw@rBQd@M^Od@Mh@Mh@Mb@GPGNINGDI@i@b@YPC@OHQFUHUHu@TBz@BlALADAD?DBFBJHHPCHIx@ABK`AIh@CNIb@Ir@Y~CO~BAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:13:45+01:00', + expectedEndTime: '2024-01-12T14:13:45+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4778, + distance: 30258.55, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA-ABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ZTYwYzNjNTgxNmY1MTRhMWY5NjU3YmYxMGJkN2ZiYTc=', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:28:00+01:00', + expectedEndTime: '2024-01-12T13:28:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:28:00+01:00', + aimedEndTime: '2024-01-12T13:28:32+01:00', + expectedEndTime: '2024-01-12T13:28:32+01:00', + expectedStartTime: '2024-01-12T13:28:00+01:00', + realtime: false, + distance: 24.25, + duration: 32, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A@@@SAAGCGC?A?W@A??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAAMABFSQjpOU1I6UXVheToxMTk4NQARUkI6TlNSOlF1YXk6MTA5NDMAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjU0ZTUxNjljOTBiOTVlZTA0Y2JkMTliOTkzNTA2MGMz', + mode: 'bus', + aimedStartTime: '2024-01-12T13:36:00+01:00', + aimedEndTime: '2024-01-12T13:54:00+01:00', + expectedEndTime: '2024-01-12T13:54:00+01:00', + expectedStartTime: '2024-01-12T13:36:00+01:00', + realtime: false, + distance: 7593.08, + duration: 1080, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Veitvet', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillestrøm', + }, + }, + line: { + publicCode: '380', + name: 'Lillestrøm - Rv4 - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'gqtlJg~s`A@[CMCIAKIMCWJwA@UBUBW@SBWBW@WBU@UBUBW@WBU@I@M@UBUBW@UBUDE^W@AZUNDH@D?@?D?FAB?BABBB@B?@?BABCBEBG@I?I?G?IAGCIACCAECA?C?C@C@ADGAE?MEc@UEAGAIBIFGBC@EDEDEHCLENCLCTYpDSfCId@ENELELGJEBCFKAI?KCGCIEKIYUWSmBaB_BuA]YYYSSY[QSGGOQEE??EEKMACEIEIKSAKCIEGECEAGKCGGKGQI]K[W_AyAiFGUQo@_@wAc@cBKUIUEOEOE_@I]Su@Wo@GSCMCOEW]sAQ_@CICMIY_AjAI@G?EACAECIGW_@cAiBqCeF}C}FOe@EIGIIOGIEGKOSO{BoCKWGKSYMKGEKISK{@gAGIGO??KSIOGKIOOUGK]]IOyAwC_@s@mAcCMc@GQEI_AgBGKCGIQEIAIAOAOAK?IAC?I?Wc@G{AKyBQIAWAOCYIIAiAIMCCAEC@]AKAGACACG?YCC?C@ABADAB?BIKIGKKc@[MK??m@c@[UIIQKYUeAq@eAm@YOYQYOIEKCEAICKAMAyEe@[EgAKm@G??[C_@EoAKg@Cm@CoAK_@Ce@E]CWCWEMAIAGCAEAIAIAIEIEIEEEEGAE@G@EBCBCFQEg@UiAo@gAk@}@q@SQa@a@UUm@y@_@q@g@aAEGo@yBs@{BIS??IS_@iAyAkEw@}BG[Ie@?OAQCOEUIQIOKGGCI?A?S[OYK[m@iBWu@??Ma@_@oAY}@q@sBm@cDSoAUsAWaBQiAYqBYsBK{BQ{AUcCCu@C}@Gs@MqAUeBYqCQgBSkBGk@??AIGm@QkAGa@a@qB{@{IyBeTUaCMyAY_DIiDCaBI}CIyCCyA?k@?_@@c@Fo@@C@E?E?I?ICGAEECAAC?C?EEGKK[I_@OiAKw@OiA??SeBs@{DqAgKgAiIk@qEKq@??Ge@MiAI{@GcAE}@CaAA{@AcA@cAB}@BmAHgAJkANsAJu@N_AVgA~@mDXgAR{@Lo@PmALkAHiAFeABoA@oA?yAAoAAo@C_@??A]KoBK}AMaBWyBi@aFIy@Iw@IcAG{AGuACcBByB?}B?cA??AcAEyCGoBI_BCi@AQIw@SeBQkAO{@SeA[sAu@{FeB}Mm@mEUmBGc@', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAACMAAAAoABFSQjpOU1I6UXVheToxMDk0MwARUkI6TlNSOlF1YXk6MTAzOTQAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjQyM2U4OWFhYjNjOTM2MzUwOTlkNzJkOWFiYmVkY2M0', + mode: 'bus', + aimedStartTime: '2024-01-12T13:56:00+01:00', + aimedEndTime: '2024-01-12T14:01:00+01:00', + expectedEndTime: '2024-01-12T14:01:00+01:00', + expectedStartTime: '2024-01-12T13:56:00+01:00', + realtime: false, + distance: 3132.07, + duration: 300, + fromPlace: { + name: 'Veitvet', + }, + toPlace: { + name: 'Alfasetveien', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Haugerud T', + }, + }, + line: { + publicCode: '25', + name: 'Majorstuen-Haugerud', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'uc{lJmkeaAc@gD_@sCQcAMs@WkAQu@Sy@y@sCcAwDcCaJi@kBUu@Sq@Wm@Wi@We@U]_@e@[]a@g@Y]W]SWUa@S_@Q]Qe@Wq@So@Qo@Og@Ou@Os@O_AMs@K{@KaAIu@IaAGkAEy@C}@GqA????]{J@gCAcAC{@Cq@Co@Gu@Iq@OqAGi@Is@AMAMAOAS?Y@E@E?E@EFCDCF?PBF@HCFAd@LRD??@?HBPNHBHBDBFBJBDBFBXDHFf@b@JLHHNPTXRZXd@`@r@^l@`@r@T`@PXPVTXNRVTZTVPTLZLXJVFVDVDz@JNBx@H^DRHH@l@B??J@X@RBH?LBHBT@`@TVN\\VVRXVTTLNNPX`@\\f@T`@Zn@Rd@lCnGR`@P^PZR\\PVJLNPNN??B@LLFDNF\\JXRFBFBFDDHDFLR?FBD@DBDD@DABC@C`@[TIH@ZErAL|@Jp@FlAHh@BH@RJHFHHJLDJBFFFD@FADCDEDKBKHIHGHCNMF?PARANANAPCd@Ib@Gh@K^Il@@PCjA[TG', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T14:01:00+01:00', + aimedEndTime: '2024-01-12T14:13:45+01:00', + expectedEndTime: '2024-01-12T14:13:45+01:00', + expectedStartTime: '2024-01-12T14:01:00+01:00', + realtime: false, + distance: 935.85, + duration: 765, + fromPlace: { + name: 'Alfasetveien', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'ilylJgxgaA??KN@Dj@STGPAFTLf@HVHRJTMp@ITAX@ZLlAJhA?rA\\bDVrAXlAh@r@Tl@Zb@f@d@^LnAzAj@|@h@jAd@jAEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T14:14:09+01:00', + expectedEndTime: '2024-01-12T14:14:09+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + duration: 4802, + distance: 26616.219999999998, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:54:07+01:00', + aimedEndTime: '2024-01-12T13:05:00+01:00', + expectedEndTime: '2024-01-12T13:05:00+01:00', + expectedStartTime: '2024-01-12T12:54:07+01:00', + realtime: false, + distance: 727.21, + duration: 653, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'IKEA Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA\\b@JTAHGVCJ@LBHDPP`@Tb@Xp@f@zAj@nBLd@Hj@@`ACz@@J?JDR@H?D?BAD?BEPAF?D?D@HBCNQDA@BBLDEHKd@a@BAD??O?M@KBKBGBIFGdAeA@?HIZ[??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADUAAAA-ABBSQjpOU1I6UXVheTo3OTQ0ABFSQjpOU1I6UXVheToxMTk2OQA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6ZTYwYzNjNTgxNmY1MTRhMWY5NjU3YmYxMGJkN2ZiYTc=', + mode: 'bus', + aimedStartTime: '2024-01-12T13:05:00+01:00', + aimedEndTime: '2024-01-12T13:28:00+01:00', + expectedEndTime: '2024-01-12T13:28:00+01:00', + expectedStartTime: '2024-01-12T13:05:00+01:00', + realtime: true, + distance: 17846.09, + duration: 1380, + fromPlace: { + name: 'IKEA Slependen', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Oslo bussterminal', + }, + }, + line: { + publicCode: '250', + name: 'Sætre - Slemmestad - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '{lmlJa|a_AFEJKHEFEH?FEFKBM@MASDSLe@@KFSHWFYH[F[Nw@JSHWFMDKDIDABABEL@F@FBDBHHDJFPBP?P@RARERCNGNGFIFI@K@KAw@Sg@o@c@k@m@q@o@m@aA_Aq@o@s@s@k@m@c@e@e@i@]c@]g@U_@S_@Q_@Ue@Uc@]y@[{@_@gA[gA_@qAa@{A[sAmAyEs@uCaAgDwAmEqC{G}DaIgGkKmBiDcAcBcBqCqFeJc@q@U_@mAwB{@wA}@cBO[mA_CcAqB[q@Ys@k@uAQa@GOYs@o@iBe@wAg@{AY_Ag@iBYeAYeAS_A]}A_@_BYyAWqAQeAQcAO}@{@_GaAeIgAiKmAwLaAgJ{@qGmA{H]kBc@_CaAgFYgBMeAIk@Io@Gs@Gy@Gy@Ey@Cw@Ey@A}@Cu@C_BCkDAiACgAAaAE_AC{@Ew@Gy@G{@MsACQUaCuB}SmAoLOyAcBuP}@eIk@mEmA}Iy@_Iu@wLKaBKmAK_AK_AM_AS}ASmASkAMm@ScAq@_DY}A[_BKs@My@Iq@QkAOqAKcAE_@KiAIiAIiAGcAOaCa@sHS_DIwAGsAImAG{@Gu@KgAIcAK}@I_AK{@WsBaAuGcA}GaBaLwBwN{@gGKmAAk@CeCAoACs@E}@MiASsASwA_@yC]}B_@aCEc@Im@SuAM_AKq@CQEWOmAUwBOeBc@qFO_CKkBa@gFo@gFiBsL}A_KoBwMg@iFMuA[}FCY??Iu@QaASe@AGo@oBq@iBg@qBe@yCw@wEm@}Dq@mE_@eCO_A[uBO{@QaAUcAk@}BSw@Uw@e@cB}@sCeB_G}@yCWy@]wAI[[gAK]SaAOs@McAMyA_AyMSiCKyA??OsBKwAG}@Ea@UsBWuBUqBm@qES{AoAsJS}ASmASmAUkA_@mBg@_CYsAYyAYkBQkAMkAKcAKeAWcCIcA??EYKiAYyCUaCUoCSoBUuBKeAQyAW}BYyBc@gDa@_D[wBeC}PSqAMaAIg@Iy@Gm@Ei@Ek@EaAEcAG_BGoAEm@Ec@I{@Ee@EYE_@Mu@Kk@Ki@Mm@Qk@I[Sq@aAsDSm@W{@W}@U{@Sy@Qy@Mq@Ii@Ee@Ge@C_@Ea@Ce@Ci@K_BGwAOkCA[AO?Q@U@U@E@E?G?G?GAEAEAO@K?MBk@JsBFsA???KB]Ba@Dq@Dq@D]D{@LaBr@yFLy@PcAReAVaAPa@Pe@P[n@gAh@}@`@s@Tc@Vm@DOHUZqALq@PgAJ}@D}@DeABeA?eA?iA?q@Ay@Cm@Ew@GqAM}AEo@Aa@Ac@@c@Bk@Fk@D]DYLg@LYJYLSRWd@c@~@gA`AgAPUNSPYP]\\u@Rk@Pe@Le@Pu@Nw@Hc@Jy@LgAHsAF{@H}BF_AFy@NqAPkAVqA^mAf@{AVm@Zm@fB_DpJcP\\k@Tc@d@aAh@}AV{@d@uBZqAXsAJm@Lq@Hm@LaANsAJkAP}BRwCr@iL^eGT_DNmCHsADgA@i@@i@@y@?s@HwADgA?yA?i@Ac@A[A[Ca@E]Ky@_@iCG]EQESKUu@aBGMM[EQGYKc@CSESAO@M?O?MCKCKEGEEAAC?E[EYCY?Y?q@Ac@D{A@o@????Be@BaA@_A?a@?u@Ae@AUAKASCSEa@Ge@G]Ic@GWI[Uq@a@gAcAmCCGGEECCAGOACGOKUQKY{@EIu@kBUq@Oc@KWCEKUMWO_@KWAGGMiA}CiAwCEMGOUo@KWWq@Sk@AA??EMIU]{@MYKOMOEIIKIGAK?GCGCGGIECM?GIEIGOWy@EKEKCGIKCCCCOQCCAA[a@QSQU_@c@QU[_@i@o@KMCEOQIKkAyAMQY]KMAAAAACKKCEcAmAUU?M?IAOGyGAg@AQHQDK`AuBx@gB@Eh@cAh@gA??`@y@JSHSHWFOHWJ_@Lg@Pw@Lu@H_@De@Dg@Ba@@s@?s@Eq@GuAEs@MsBGqAEm@E}@C}@AcBAgA?e@?]?Q?U@_@@k@HoANiAT}B@SHu@F]D[J_@H[j@uBBK@EDOFe@@EDYH[VaAJ]@CFODIFG`AwAZa@??@AHKLOFC?A@?DA@?FA@?B?H@??D@F@NBF?D?FADCFCHGl@m@\\[LOFGFEBEDCDE@APMFChC_ALCNEDDB@F?BADEBIBK@OAOJy@VwCBWL_BD[DEBI@I?IAKB]Fi@JsAD{@HiALoAJ_AFg@@G??LeBLyANkBBSBQHk@BEBG@I?I?G?IAGCIACCAECA?C?C@C@ADCDAHAH?H?H@HBF?F?NAL?RMRILEHABINATKhAIbAIbAO`BALE`@ABGt@KlAKvAAL', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:28:00+01:00', + aimedEndTime: '2024-01-12T13:31:42+01:00', + expectedEndTime: '2024-01-12T13:31:42+01:00', + expectedStartTime: '2024-01-12T13:28:00+01:00', + realtime: false, + distance: 213.19, + duration: 222, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Oslo bussterminal', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'sptlJm|s`A??LoAB[@EPqB@MBa@JD@@FQ??D@HDJsA@@B@DBB@DBDB@@Fu@LwAHwA??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAANABFSQjpOU1I6UXVheToxMTk2MAARUkI6TlNSOlF1YXk6MTE0NDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjZlMjFkOWY5OGIyYmQ4MDg4YjlhN2M4ZjUzNGExOTg2', + mode: 'bus', + aimedStartTime: '2024-01-12T13:40:00+01:00', + aimedEndTime: '2024-01-12T13:59:00+01:00', + expectedEndTime: '2024-01-12T13:59:00+01:00', + expectedStartTime: '2024-01-12T13:40:00+01:00', + realtime: false, + distance: 6755.19, + duration: 1140, + fromPlace: { + name: 'Oslo bussterminal', + }, + toPlace: { + name: 'Alfaset', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Kjeller', + }, + }, + line: { + publicCode: '100', + name: 'Kjeller - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + '}ktlJynt`ADi@BQBSBQHk@BEBG@I?I?G?IAG@QBQBKH_@Ji@BNBN?DDUBGJm@BM?ARy@d@{Bt@mDZ{ANo@H[@E`@oBt@mDFUBM?CJe@DSFU@KHc@?GDe@Nq@TgAj@mC@A@KBMFa@x@wE@E??F_@l@iDXcB`@eCV_BDYV_@BE??LUBM?OOaBBa@VuC`@}D@KZwCb@iEZgDFk@BUKa@CKGWWqAe@{BOu@EMIc@C_@G[YwAAGM[EQI]EQMm@ScAG[Mq@??OaAKo@Ik@Is@Io@MqAQ_BC]YeCs@}GEi@Gi@KeAEY??E[Iu@Gc@Ga@G]Ic@Kc@i@aCa@aBMk@Kc@[sAIa@Kc@S_A?C??I[C_@AKAa@?W@G@E?GHSBMFYN_@Rm@FUDUBOBQ@O@Q@O?MD]@g@?_@BG@I@KAIAICIEEEAE?EDADADO?I?E?C?E@C@CBEFCBCDSd@EHEFCDEDCBE@E@A@C?I?EAIEECs@q@Uw@WcAe@qBeD_OS{ASgAOiAEy@Ca@?U?O@I@G?IAKCICECCCAA?C?CBEIKUKc@COG[Ge@OkAEU??AIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGBUGk@Ce@Ao@Ao@AWA[AQC]CWIe@COOgAMo@OaAGWcA}FCMUgA??AESaASu@WaA[gAUu@]cAWy@W{@K]wAsEIYKWMa@Qo@K_@I[CIAMCKAQ@M?Q@Y@QA]KKEGEEEIEOM_@AOK_AKaAIw@Ek@??CSGgAEy@Cs@AaAAs@Ay@As@?q@@yA@gDBsD@wD@_C?oDByD?_@@iB@gB@i@@m@@[@Y?EHg@@U@A@E@E?EAEAEACAAA?A?IIECGCOBG?C?[@[BYB_@FSDy@J??C@OBSEE?KAI?AEACCEEACAC@A@KIGKEGUa@KYQ_@o@oAeAuBiAyBS[MW]o@Wc@[c@[c@i@q@EG??c@i@[_@[]s@w@GIIIYc@EIGKIMGMAAAKAGCEEEEAC@A@KIGEEGQOYk@]s@[w@Um@Sk@IYIUESIYEWGYEYEWE_@Ge@Gk@Ec@C]C_@C_@A]GcBC_@A[Ca@EWCWE]G[G]Qy@Qy@e@yBS_AMq@GSCOEQCMKe@S_AAC', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:59:00+01:00', + aimedEndTime: '2024-01-12T14:14:09+01:00', + expectedEndTime: '2024-01-12T14:14:09+01:00', + expectedStartTime: '2024-01-12T13:59:00+01:00', + realtime: false, + distance: 1074.54, + duration: 909, + fromPlace: { + name: 'Alfaset', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'egxlJeigaA@A?BRz@DZA@ILEDA@}@aEAECIACCGAE?IUiA?CAEMaA_Br@KBI?GBGHKNW^w@jA]f@ORSRQLMHMBAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:56:02+01:00', + aimedEndTime: '2024-01-12T14:14:09+01:00', + expectedEndTime: '2024-01-12T14:14:09+01:00', + expectedStartTime: '2024-01-12T12:56:02+01:00', + duration: 4687, + distance: 26193.91, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:56:02+01:00', + aimedEndTime: '2024-01-12T13:00:09+01:00', + expectedEndTime: '2024-01-12T13:00:09+01:00', + expectedStartTime: '2024-01-12T12:56:02+01:00', + realtime: false, + distance: 291.84, + duration: 247, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABkAAAAeABBSQjpOU1I6UXVheTo3OTI4ABBSQjpOU1I6UXVheTo3MjYzADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leToyOWIyODMyMDdlZDg3YmRmZjJlYWM4ODdiMTNlZGE2OA==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:00:00+01:00', + aimedEndTime: '2024-01-12T13:07:00+01:00', + expectedEndTime: '2024-01-12T13:07:09+01:00', + expectedStartTime: '2024-01-12T13:00:09+01:00', + realtime: true, + distance: 3475.48, + duration: 420, + fromPlace: { + name: 'Slependen', + }, + toPlace: { + name: 'Sandvika bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Sandvika', + }, + }, + line: { + publicCode: '265', + name: 'Sandvika - Nesøya - Sandvika', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'yzmlJelb_A[a@QUo@y@WYIKIKQUGKCCEIIOQ]GKEKAGCEAEAICQMi@@I@MAOCKGIK_@E[AYCY?[?_@Dc@Di@LaAJs@B_@BYBY@k@AgAAa@Gi@CUEWG_@EOCMe@{ASq@GUGUMk@EUCSKs@G_@Ek@K_BGiAGg@G_@E[IYEWISO_@KQGKIIMQMKQOWSYSe@]WQOQIKQSOSU]Yg@QYOW??S[]m@y@wAq@mAa@s@Ua@Q_@MUQ[Wo@Yo@M[Ug@Q[CGCCCECEOQOSCKYWMIECCAKEMAIAOAS?I?KBM@]LWLCHe@PODMDQDG@G?K@M?I?IAMAMAKEKCICIE[MCKYOIEECCC?IAGAGCECECCA?C?A?EKCICGCICKIWEKCIUa@??aEaI[k@S]EKEKCIAGGMGK?GAOCMGKGEG?GBGHCHAJAJKLML}@jAe@\\EMGGGAEk@AS?S@QBOFO~AoDzAoDz@wBP]HBHCFIDM@Q?QAOEMGIICIBOOOSSQQ_@Q_@???AO[O]o@eBWu@Ws@k@iBe@aBMYEIIMGEEAEAG@GDIFUV??UZKHSHKBO?SCQGKGKMOQKYK_@E]C[ASA[A}BB[@_@@]?M?MAKEKEECAE?EBCFCFALMPU\\WLUPYV[\\e@l@s@lAq@nAmAnBY\\_@Zc@^[V]@WJCCEAE?C@EFCHCL?F?D@F@F@FBFBBD@D?PX\\l@b@nBRDFDFNd@hB^xALb@d@nBBL?LALCJCFEBE@E?EGEIi@_CI_@[kA]uA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:07:09+01:00', + aimedEndTime: '2024-01-12T13:09:59+01:00', + expectedEndTime: '2024-01-12T13:09:59+01:00', + expectedStartTime: '2024-01-12T13:07:09+01:00', + realtime: false, + distance: 189.05, + duration: 170, + fromPlace: { + name: 'Sandvika bussterminal', + }, + toPlace: { + name: 'Sandvika stasjon', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'm{plJ}uf_A??nAbD@DB?@DH?L?LOVYS_As@_E@?', + }, + }, + { + id: 'rO0ABXeDABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAEAAAAEAA9SQjpOU1I6UXVheTo5OTMAD1JCOk5TUjpRdWF5OjQ3NwAvUkI6TlNCOkRhdGVkU2VydmljZUpvdXJuZXk6MzE5X0FTUi1MSE1fMjQtMDEtMTI=', + mode: 'rail', + aimedStartTime: '2024-01-12T13:15:00+01:00', + aimedEndTime: '2024-01-12T13:27:00+01:00', + expectedEndTime: '2024-01-12T13:27:10+01:00', + expectedStartTime: '2024-01-12T13:15:00+01:00', + realtime: true, + distance: 12466.92, + duration: 730, + fromPlace: { + name: 'Sandvika stasjon', + }, + toPlace: { + name: 'Nationaltheatret stasjon', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillehammer', + }, + }, + line: { + publicCode: 'RE10', + name: 'Drammen-Oslo S-Lillehammer', + }, + authority: { + name: 'Vy', + }, + pointsOnLink: { + points: + '{xplJ{yf_AAEo@kC_@yA]uAo@aC_@wAYgAc@gBWiAWmAa@aBGYQu@q@uCe@oB??e@sB[yAUeAOs@UkA]cBQcAOw@O}@My@o@}Dk@sDuA{I{B{NqAoIe@yCq@{DcAoFs@aDq@iCs@mCw@eCi@cBs@qByAsD}DqI}CgGiAyB}@gB{@kBu@cBs@_By@qBu@kBm@_B{@cCo@kBs@wBq@uBcAiDq@aCe@iBe@kBg@qBe@oBk@iCe@wBc@wB_@sBY{Ae@iCm@qDi@oD_@eCi@}De@uDi@aFi@gF_@eEi@_Hq@wJeCy]k@iIqNarBc@yGWaFUqEMuCMeDIeDI}CGiCGkCCcCEwDGcGs@ax@EsGCwBAqB@_A?w@@o@B{@Bk@@o@Du@Do@Fw@Fq@Fs@Fm@Fi@Ju@Z{B\\iC`@{CJq@Js@NmAPsAHw@JeAHmALgBF}ABsABsA?G?????u@?_AAuAAy@Ai@Ac@Cq@A_@Ci@Ck@Ei@G{@IgAOgBOqB[}D??YcDEo@KiAKcAIs@Kq@MaAQgASoAO{@SeAWkAc@qBm@eC[iAQs@Oo@Om@Mm@Kg@Mo@Ko@Ku@Ks@Iu@I}@I_AGeAEw@GiAEcAIyBEs@Eq@GcAIy@Ek@Iw@Ii@Im@Ig@O{@Km@S_AUaAU}@[aAY{@Ww@u@yBQi@Wo@k@cBe@wAYy@Y{@??a@sAOg@uA_F_@oAYeAi@mBi@iBi@gBe@wA[}@qDoKc@qAY_Aa@sASw@Qu@Oo@Om@Ms@O{@Mq@Ii@MaAKw@Gk@Ee@C]Ee@Cc@Ci@Co@Cs@?[Aa@??AaA?o@?i@@]@q@@m@D}@F{@H}@Hy@Ju@PeARmA~@cFLo@????BMp@wD^uBN}@PcARmARwAZ_CPuAPiAPcARgAVuATmAHa@Lq@Lo@ReALo@Lm@??VsANu@RgAJm@Jq@NaANmAR_BN_BNeBL_BHqADeAD}@DgABu@B{@@_A@y@@y@@cA?iAA{AAeAA_AAy@C_ACy@C_AMsDKkCGiB??KyCKiDE_BC{AAkA?eAAeA@oA@kA@gABwADoAD_BH{AFaAFiAHgAFaAl@}Jn@}JPoCLuBPeCLuALsALoALkANkATaBn@oE|@_GfAqH@KVcBNaAP}@f@kCTmAVsA??XyAb@aCLo@NcALw@Ho@Hq@Hw@HgAHaADu@Dw@H}Ab@_K??', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:27:10+01:00', + aimedEndTime: '2024-01-12T13:32:00+01:00', + expectedEndTime: '2024-01-12T13:32:00+01:00', + expectedStartTime: '2024-01-12T13:27:10+01:00', + realtime: false, + distance: 326.35, + duration: 290, + fromPlace: { + name: 'Nationaltheatret stasjon', + }, + toPlace: { + name: 'Nationaltheatret', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_fulJefn`A??l@yJNqD@OCSCWWeCCQKcAEOEQ]f@SCt@cB??', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAsAAAARABBSQjpOU1I6UXVheTo3MzMzABFSQjpOU1I6UXVheToxMTEzNAA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6NzQzMTQyMWUzM2FlNDU2YmMzOTQ5OWEyMTAyN2M2Mzg=', + mode: 'metro', + aimedStartTime: '2024-01-12T13:34:00+01:00', + aimedEndTime: '2024-01-12T13:44:00+01:00', + expectedEndTime: '2024-01-12T13:44:00+01:00', + expectedStartTime: '2024-01-12T13:34:00+01:00', + realtime: true, + distance: 4410.74, + duration: 600, + fromPlace: { + name: 'Nationaltheatret', + }, + toPlace: { + name: 'Helsfyr', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Ellingsrudåsen', + }, + }, + line: { + publicCode: '2', + name: 'Østerås - Ellingsrudåsen', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'seulJ{co`AHMTm@FKBa@@KJu@NuAL{@Jw@Lu@Ls@Hk@Lo@?AVyAf@oCLs@Lw@Ho@Js@Fs@Hu@HwADaADkAD}@?WP{EDo@Fm@LiELeD??By@NmEBy@Du@Bk@JgAJcAL_APeAX{A\\aBd@iCL_AJ{@H{@Bi@@g@@e@FgCBcA?OHuD??@[JyE@uA@oAAiAGaAGy@Iy@M{@{@sEOeAIo@IiAEkAAeA?qAH}H??@i@D}DDqC@y@@e@B{@Be@H_ArAeMR}BFuA@yAEwAIsAO{ASqAWgAa@mAe@_Ag@m@mByB]k@[q@Yy@YkASkAQsAYkCKy@Ko@Ms@Ka@Me@Ma@O_@O_@Sa@Yi@uAeCa@u@??w@yAQc@Oa@K[K_@Ma@Mg@g@uBOk@Oi@Mc@Oa@O[Q[QYEc@Cs@Am@Am@@o@@g@@g@Bi@Di@De@Fc@Fc@Hg@Nm@Ja@La@N_@N]R_@RYPYVUTSRMPIPIl@WRITKNKNMLKNQPSRYLULUHSJUHUJYHUNc@Lg@Pk@Lg@Lg@P{@Ha@n@{CH]R}@??`@mBH_@Lq@DYDYD]Da@B]Dg@@_@Bi@@g@?c@?c@Ae@A_@Ck@Eo@?AWwCEq@Eq@Cu@Cw@Cc@Ao@?m@?k@?q@?y@@k@B{@j@oOD}@FgAHw@LuANgAn@uFHw@', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:44:00+01:00', + aimedEndTime: '2024-01-12T13:44:32+01:00', + expectedEndTime: '2024-01-12T13:44:32+01:00', + expectedStartTime: '2024-01-12T13:44:00+01:00', + realtime: false, + distance: 33.93, + duration: 32, + fromPlace: { + name: 'Helsfyr', + }, + toPlace: { + name: 'Helsfyr T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '_utlJws|`ABBAb@i@G??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAYAAAANABFSQjpOU1I6UXVheToxMTE0MgARUkI6TlNSOlF1YXk6MTE0NDIAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjZlMjFkOWY5OGIyYmQ4MDg4YjlhN2M4ZjUzNGExOTg2', + mode: 'bus', + aimedStartTime: '2024-01-12T13:49:00+01:00', + aimedEndTime: '2024-01-12T13:59:00+01:00', + expectedEndTime: '2024-01-12T13:59:00+01:00', + expectedStartTime: '2024-01-12T13:49:00+01:00', + realtime: false, + distance: 3925.06, + duration: 600, + fromPlace: { + name: 'Helsfyr T', + }, + toPlace: { + name: 'Alfaset', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Kjeller', + }, + }, + line: { + publicCode: '100', + name: 'Kjeller - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'wvtlJsr|`AAIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGBUGk@Ce@Ao@Ao@AWA[AQC]CWIe@COOgAMo@OaAGWcA}FCMUgA??AESaASu@WaA[gAUu@]cAWy@W{@K]wAsEIYKWMa@Qo@K_@I[CIAMCKAQ@M?Q@Y@QA]KKEGEEEIEOM_@AOK_AKaAIw@Ek@??CSGgAEy@Cs@AaAAs@Ay@As@?q@@yA@gDBsD@wD@_C?oDByD?_@@iB@gB@i@@m@@[@Y?EHg@@U@A@E@E?EAEAEACAAA?A?IIECGCOBG?C?[@[BYB_@FSDy@J??C@OBSEE?KAI?AEACCEEACAC@A@KIGKEGUa@KYQ_@o@oAeAuBiAyBS[MW]o@Wc@[c@[c@i@q@EG??c@i@[_@[]s@w@GIIIYc@EIGKIMGMAAAKAGCEEEEAC@A@KIGEEGQOYk@]s@[w@Um@Sk@IYIUESIYEWGYEYEWE_@Ge@Gk@Ec@C]C_@C_@A]GcBC_@A[Ca@EWCWE]G[G]Qy@Qy@e@yBS_AMq@GSCOEQCMKe@S_AAC', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:59:00+01:00', + aimedEndTime: '2024-01-12T14:14:09+01:00', + expectedEndTime: '2024-01-12T14:14:09+01:00', + expectedStartTime: '2024-01-12T13:59:00+01:00', + realtime: false, + distance: 1074.54, + duration: 909, + fromPlace: { + name: 'Alfaset', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'egxlJeigaA@A?BRz@DZA@ILEDA@}@aEAECIACCGAE?IUiA?CAEMaA_Br@KBI?GBGHKNW^w@jA]f@ORSRQLMHMBAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:56:02+01:00', + aimedEndTime: '2024-01-12T14:17:28+01:00', + expectedEndTime: '2024-01-12T14:17:28+01:00', + expectedStartTime: '2024-01-12T12:56:02+01:00', + duration: 4886, + distance: 28471.820000000003, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:56:02+01:00', + aimedEndTime: '2024-01-12T13:00:09+01:00', + expectedEndTime: '2024-01-12T13:00:09+01:00', + expectedStartTime: '2024-01-12T12:56:02+01:00', + realtime: false, + distance: 291.84, + duration: 247, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAABkAAAAeABBSQjpOU1I6UXVheTo3OTI4ABBSQjpOU1I6UXVheTo3MjYzADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leToyOWIyODMyMDdlZDg3YmRmZjJlYWM4ODdiMTNlZGE2OA==', + mode: 'bus', + aimedStartTime: '2024-01-12T13:00:00+01:00', + aimedEndTime: '2024-01-12T13:07:00+01:00', + expectedEndTime: '2024-01-12T13:07:09+01:00', + expectedStartTime: '2024-01-12T13:00:09+01:00', + realtime: true, + distance: 3475.48, + duration: 420, + fromPlace: { + name: 'Slependen', + }, + toPlace: { + name: 'Sandvika bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Sandvika', + }, + }, + line: { + publicCode: '265', + name: 'Sandvika - Nesøya - Sandvika', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'yzmlJelb_A[a@QUo@y@WYIKIKQUGKCCEIIOQ]GKEKAGCEAEAICQMi@@I@MAOCKGIK_@E[AYCY?[?_@Dc@Di@LaAJs@B_@BYBY@k@AgAAa@Gi@CUEWG_@EOCMe@{ASq@GUGUMk@EUCSKs@G_@Ek@K_BGiAGg@G_@E[IYEWISO_@KQGKIIMQMKQOWSYSe@]WQOQIKQSOSU]Yg@QYOW??S[]m@y@wAq@mAa@s@Ua@Q_@MUQ[Wo@Yo@M[Ug@Q[CGCCCECEOQOSCKYWMIECCAKEMAIAOAS?I?KBM@]LWLCHe@PODMDQDG@G?K@M?I?IAMAMAKEKCICIE[MCKYOIEECCC?IAGAGCECECCA?C?A?EKCICGCICKIWEKCIUa@??aEaI[k@S]EKEKCIAGGMGK?GAOCMGKGEG?GBGHCHAJAJKLML}@jAe@\\EMGGGAEk@AS?S@QBOFO~AoDzAoDz@wBP]HBHCFIDM@Q?QAOEMGIICIBOOOSSQQ_@Q_@???AO[O]o@eBWu@Ws@k@iBe@aBMYEIIMGEEAEAG@GDIFUV??UZKHSHKBO?SCQGKGKMOQKYK_@E]C[ASA[A}BB[@_@@]?M?MAKEKEECAE?EBCFCFALMPU\\WLUPYV[\\e@l@s@lAq@nAmAnBY\\_@Zc@^[V]@WJCCEAE?C@EFCHCL?F?D@F@F@FBFBBD@D?PX\\l@b@nBRDFDFNd@hB^xALb@d@nBBL?LALCJCFEBE@E?EGEIi@_CI_@[kA]uA', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:07:09+01:00', + aimedEndTime: '2024-01-12T13:09:59+01:00', + expectedEndTime: '2024-01-12T13:09:59+01:00', + expectedStartTime: '2024-01-12T13:07:09+01:00', + realtime: false, + distance: 189.05, + duration: 170, + fromPlace: { + name: 'Sandvika bussterminal', + }, + toPlace: { + name: 'Sandvika stasjon', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'm{plJ}uf_A??nAbD@DB?@DH?L?LOVYS_As@_E@?', + }, + }, + { + id: 'rO0ABXeDABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAEAAAAFAA9SQjpOU1I6UXVheTo5OTMAD1JCOk5TUjpRdWF5OjU3MQAvUkI6TlNCOkRhdGVkU2VydmljZUpvdXJuZXk6MzE5X0FTUi1MSE1fMjQtMDEtMTI=', + mode: 'rail', + aimedStartTime: '2024-01-12T13:15:00+01:00', + aimedEndTime: '2024-01-12T13:31:00+01:00', + expectedEndTime: '2024-01-12T13:31:00+01:00', + expectedStartTime: '2024-01-12T13:15:00+01:00', + realtime: true, + distance: 14113.62, + duration: 960, + fromPlace: { + name: 'Sandvika stasjon', + }, + toPlace: { + name: 'Oslo S', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillehammer', + }, + }, + line: { + publicCode: 'RE10', + name: 'Drammen-Oslo S-Lillehammer', + }, + authority: { + name: 'Vy', + }, + pointsOnLink: { + points: + '{xplJ{yf_AAEo@kC_@yA]uAo@aC_@wAYgAc@gBWiAWmAa@aBGYQu@q@uCe@oB??e@sB[yAUeAOs@UkA]cBQcAOw@O}@My@o@}Dk@sDuA{I{B{NqAoIe@yCq@{DcAoFs@aDq@iCs@mCw@eCi@cBs@qByAsD}DqI}CgGiAyB}@gB{@kBu@cBs@_By@qBu@kBm@_B{@cCo@kBs@wBq@uBcAiDq@aCe@iBe@kBg@qBe@oBk@iCe@wBc@wB_@sBY{Ae@iCm@qDi@oD_@eCi@}De@uDi@aFi@gF_@eEi@_Hq@wJeCy]k@iIqNarBc@yGWaFUqEMuCMeDIeDI}CGiCGkCCcCEwDGcGs@ax@EsGCwBAqB@_A?w@@o@B{@Bk@@o@Du@Do@Fw@Fq@Fs@Fm@Fi@Ju@Z{B\\iC`@{CJq@Js@NmAPsAHw@JeAHmALgBF}ABsABsA?G?????u@?_AAuAAy@Ai@Ac@Cq@A_@Ci@Ck@Ei@G{@IgAOgBOqB[}D??YcDEo@KiAKcAIs@Kq@MaAQgASoAO{@SeAWkAc@qBm@eC[iAQs@Oo@Om@Mm@Kg@Mo@Ko@Ku@Ks@Iu@I}@I_AGeAEw@GiAEcAIyBEs@Eq@GcAIy@Ek@Iw@Ii@Im@Ig@O{@Km@S_AUaAU}@[aAY{@Ww@u@yBQi@Wo@k@cBe@wAYy@Y{@??a@sAOg@uA_F_@oAYeAi@mBi@iBi@gBe@wA[}@qDoKc@qAY_Aa@sASw@Qu@Oo@Om@Ms@O{@Mq@Ii@MaAKw@Gk@Ee@C]Ee@Cc@Ci@Co@Cs@?[Aa@??AaA?o@?i@@]@q@@m@D}@F{@H}@Hy@Ju@PeARmA~@cFLo@????BMp@wD^uBN}@PcARmARwAZ_CPuAPiAPcARgAVuATmAHa@Lq@Lo@ReALo@Lm@??VsANu@RgAJm@Jq@NaANmAR_BN_BNeBL_BHqADeAD}@DgABu@B{@@_A@y@@y@@cA?iAA{AAeAA_AAy@C_ACy@C_AMsDKkCGiB??KyCKiDE_BC{AAkA?eAAeA@oA@kA@gABwADoAD_BH{AFaAFiAHgAFaAl@}Jn@}JPoCLuBPeCLuALsALoALkANkATaBn@oE|@_GfAqH@KVcBNaAP}@f@kCTmAVsA??XyAb@aCLo@NcALw@Ho@Hq@Hw@HgAHaADu@Dw@H}Ab@_K????d@gKF_BBs@Dw@DaBBaABs@Bm@Bm@@_@B[B_@Bg@Do@B_@D]Fu@??Fs@Fq@J_AJw@Fk@Hk@Jo@Jq@F_@Lu@Nw@??ZcBPeA\\gBN_ANu@Lu@L{@Jm@Ly@L_ANkAHw@Hs@H_AL}AHqAHkAFsAF{ADoABmAHgDDuABgADcAFy@F_AF}@H_AH{@LqAJ{@??@[B]@]??F[DUFa@Fe@Hs@He@L{@Ny@??P_AJg@Lk@Lk@Rs@Po@J_@H[J]Nk@Lo@Pq@Jm@Lm@Lw@??^iCf@_D??', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:31:00+01:00', + aimedEndTime: '2024-01-12T13:38:59+01:00', + expectedEndTime: '2024-01-12T13:38:59+01:00', + expectedStartTime: '2024-01-12T13:31:00+01:00', + realtime: false, + distance: 436.66, + duration: 479, + fromPlace: { + name: 'Oslo S', + }, + toPlace: { + name: 'Bjørvika', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + '_gtlJuqs`A??FHER?BCH\\ZZXZXXXBG?EDSb@{B@@@OB@D?F?B?b@yCBMDSXqALFP@BAD?DCDEBGBKBKBIB?@?NJHHLNHH@@@@?@?@BB?BAFADNJp@`@NJ@K?CFc@?G??CC?A?A@A@A?A?ACC????AAAAFc@FYF]AA', + }, + }, + { + id: 'rO0ABXeSABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAEAAAAFABBSQjpOU1I6UXVheTo3MTY5ABFSQjpOU1I6UXVheToxMDQwMgA7UkI6UlVUOkRhdGVkU2VydmljZUpvdXJuZXk6YzA3MTEwYjI3YjM5N2VmZmUwMTRjZDgxYTEzNzhhODI=', + mode: 'bus', + aimedStartTime: '2024-01-12T13:43:00+01:00', + aimedEndTime: '2024-01-12T13:54:00+01:00', + expectedEndTime: '2024-01-12T13:54:00+01:00', + expectedStartTime: '2024-01-12T13:43:00+01:00', + realtime: false, + distance: 8270.2, + duration: 660, + fromPlace: { + name: 'Bjørvika', + }, + toPlace: { + name: 'Trosterud', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Blystadlia', + }, + }, + line: { + publicCode: '300', + name: 'Blystadlia - Ahus - Oslo bussterminal', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'wwslJe~s`ADU`@oCF[`@mCRuAFa@Hg@XeBPiAFc@Fc@ZsBPgAHk@PJr@`@lHhEJFxEnCLHPHPJNFNDHBH@PBP@ZCPCNEPEFANGPIRKZQv@a@pCyAVMHCDABAB?BAD?DFDBD@DADCDGBK@KXQ\\ID?Z?VGBGDI\\s@b@gAl@oB^yAXwARkAPuAL_AJaALwBHwBBmBAoBEuCKmBWcDMoAKqA}BeToAsLg@mEi@wFm@iF[wBi@cCi@sBg@yAe@eAKQk@cAeDyD[]IKSU_BgBs@y@{@cAe@k@k@m@a@e@a@g@uAkB]e@_@m@a@w@Wq@So@WaAM{@QkAM{AKeBMwCQiGGuBG_BKyAMiAOw@Os@Ws@[q@_@i@]]]UYMWEYCW?UDSDUJSLULWT}AtA[VWPYLUFG@]DUCMCMG[SWWSYUa@Qc@Uw@WcAe@qBeD_OS{ASgAOiAEy@Ca@?U?O@I@G?IAKCICECCCAA?C?CBEIKUKc@COG[Ge@OkAEU??AIGg@M_AIc@K]GUMc@Uo@q@gBo@yA{B_G_BeEeCyGiBaFeAqC]_Ae@qAY_AMa@??IWSu@Mi@Ke@Mk@Oq@Ki@[iB[cBk@iDqAyHc@eCMs@??Ii@i@wCKi@Ke@COMk@Ou@YsAk@oCoAcGo@{CWiAYiAcAmDqBeHgBiGqBcHc@cBc@eBUgASiAQoAIi@Gi@ScCKaBKmBMuBCw@CiB?{BAiBAuA?yA?sA@yB@gC@{D?{A?{A?qA?sAAuAAqACuACqAEwAEkACiAGmAGqAI{AKkBKsAKoAKqAMmAMqAGm@K{@MgAM{@UeBWaBSsAc@oCa@kCSwAYsBQqAQ}AQ{AMqAMkAQuBm@yGOcB]cDMoAYwBWmBc@mC_@qB_@mBi@sDSiAe@}BOu@Oq@YeAOk@Qg@Wu@Oe@Q[M[Wk@We@EI', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:54:00+01:00', + aimedEndTime: '2024-01-12T14:17:28+01:00', + expectedEndTime: '2024-01-12T14:17:28+01:00', + expectedStartTime: '2024-01-12T13:54:00+01:00', + realtime: false, + distance: 1694.97, + duration: 1408, + fromPlace: { + name: 'Trosterud', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: + 'sywlJw}haA?A?ECOAM@K?G@E@I@EBCBEFCPEBABCBC@E@G@K@YBSBSDKJQIMCCCCCAE?G@k@JG?IAKESMGCK?I?GDGFGLYt@_@|@Ul@c@bAOZCFAFAFAFAPAVCZAF?HCNGAI@IFIHILKTUh@iA`Cc@dAw@rBQd@M^Od@Mh@Mh@Mb@GPGNINGDI@i@b@YPC@OHQFUHUHu@TBz@BlALADAD?DBFBJHHPCHIx@ABK`AIh@CNIb@Ir@Y~CO~BAbD@fA@`ADtADv@s@?ODm@l@SPGJENGNEPI\\GGC?C?ORGZHLCJ?BV\\BDBH@J@NANAJEJEJUf@IN@@DLcApBmA`CIPKREREX@XBXSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + { + aimedStartTime: '2024-01-12T12:41:00+01:00', + aimedEndTime: '2024-01-12T14:18:50+01:00', + expectedEndTime: '2024-01-12T14:18:50+01:00', + expectedStartTime: '2024-01-12T12:41:00+01:00', + duration: 5870, + distance: 35115.93, + legs: [ + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:41:00+01:00', + aimedEndTime: '2024-01-12T12:45:07+01:00', + expectedEndTime: '2024-01-12T12:45:07+01:00', + expectedStartTime: '2024-01-12T12:41:00+01:00', + realtime: false, + distance: 291.84, + duration: 247, + fromPlace: { + name: 'Origin', + }, + toPlace: { + name: 'Slependen', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'o`nlJaac_AZ|@\\z@On@MAk@~@UZ@J@HEX@RLv@@DJVVd@LRNR\\^p@t@|@fA??', + }, + }, + { + id: 'rO0ABXeRABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAA8AAAAUABBSQjpOU1I6UXVheTo3OTI4ABBSQjpOU1I6UXVheTo3MjY1ADtSQjpSVVQ6RGF0ZWRTZXJ2aWNlSm91cm5leTpiYzAwOGYwN2YxYzRhMDQ1YzE5ZjEwY2Q3MTQyZDliMQ==', + mode: 'bus', + aimedStartTime: '2024-01-12T12:43:00+01:00', + aimedEndTime: '2024-01-12T12:48:00+01:00', + expectedEndTime: '2024-01-12T12:50:07+01:00', + expectedStartTime: '2024-01-12T12:45:07+01:00', + realtime: true, + distance: 3232.21, + duration: 300, + fromPlace: { + name: 'Slependen', + }, + toPlace: { + name: 'Sandvika bussterminal', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Sandvika', + }, + }, + line: { + publicCode: '270', + name: 'Asker - Sandvika (- Fornebu)', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'yzmlJelb_A[a@QUo@y@WYIKIKQUGKCCEIIOQ]GKEKAGCEAEAICQMi@@I@MAOCKGIK_@E[AYCY?[?_@Dc@Di@LaAJs@B_@BYBY@k@AgAAa@Gi@CUEWG_@EOCMe@{ASq@GUGUMk@EUCSKs@G_@Ek@K_BGiAGg@G_@E[IYEWISO_@KQGKIIMQMKQOWSYSe@]WQOQIKQSOSU]Yg@QYOW??S[]m@y@wAq@mAa@s@Ua@Q_@MUQ[Wo@Yo@M[Ug@Q[CGCCCECEOQOSCKYWMIECCAKEMAIAOAS?I?KBM@]LWLCHe@PODMDQDG@G?K@M?I?IAMAMAKEKCICIE[MCKYOIEECCC?IAGAGCECECCA?C?A?EKCICGCICKIWEKCIUa@??aEaI[k@S]EKEKCIAGGMGK?GAOCMGKGEG?GBGHCHAJAJKLML}@jAe@\\EMGGGAMDEJEPAPBV[jAYzA]nB]bBs@lCYv@E@EBEHCJCL?L@F?D@DEVCNEP{@jCm@|A??O\\MZKRIRCDKGMKOQ?A?AAAAC?AAECUCUAM?A??C_@AIASCY]}E?MC]AKEm@AOCa@ASAKAUCUCQCQAMAKIk@_@cCMy@Eg@?C@C?GAEAEAAEOM_AU{ASuAKi@K_@IUUUMOI?{@aBWi@M_@I[GSK]Qw@UcAYuAQy@IYIUKUGq@EY@MLWnA_BNQBBD@D?PX\\l@b@nBRDFDFNd@hB^xABJ', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T12:50:07+01:00', + aimedEndTime: '2024-01-12T12:52:07+01:00', + expectedEndTime: '2024-01-12T12:52:07+01:00', + expectedStartTime: '2024-01-12T12:50:07+01:00', + realtime: false, + distance: 125.59, + duration: 120, + fromPlace: { + name: 'Sandvika bussterminal', + }, + toPlace: { + name: 'Sandvika stasjon', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '}xplJ{pf_A?@@DB?@DH?L?LOVYS_A_AqD??', + }, + }, + { + id: 'rO0ABXeEABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAYAAAARAA9SQjpOU1I6UXVheTo5OTAAD1JCOk5TUjpRdWF5OjYwNAAwUkI6TlNCOkRhdGVkU2VydmljZUpvdXJuZXk6MjEzNF9BU1ItTExTXzI0LTAxLTEy', + mode: 'rail', + aimedStartTime: '2024-01-12T13:02:00+01:00', + aimedEndTime: '2024-01-12T13:37:00+01:00', + expectedEndTime: '2024-01-12T13:37:20+01:00', + expectedStartTime: '2024-01-12T13:02:00+01:00', + realtime: true, + distance: 24463.5, + duration: 2120, + fromPlace: { + name: 'Sandvika stasjon', + }, + toPlace: { + name: 'Grorud stasjon', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Lillestrøm', + }, + }, + line: { + publicCode: 'L1', + name: 'Spikkestad-Oslo S-Lillestrøm', + }, + authority: { + name: 'Vy', + }, + pointsOnLink: { + points: + 'qyplJcyf_AkBeIi@_C]yAYmAc@kBWgAYoAaBkH{@oDmAmFUcAu@_D_@}A??u@gDi@yBEWOq@YkAUaA{@iDc@eBU{@WcAOo@Mm@Mq@Kk@Ig@Ii@Im@Io@I{@I_AEs@Es@Ew@CeACgAAy@?s@@w@@y@@o@By@B}@F}@F}@F{@Hy@J{@Ju@RqAz@iFRkAJm@Js@De@Fc@De@Dc@Dm@Fo@Bo@Ds@@k@Bk@@m@@k@?i@?m@?i@Ak@Au@Cq@Cq@Cu@Es@Gw@AI????Iy@Gi@Gg@Gi@Ig@Ig@Ie@Kg@G]Ka@K]W_AQm@Qi@c@qAQk@M]Ka@K_@Ke@Mg@I_@Ki@Kk@Ik@Im@Gi@Gm@Gm@Ek@Cm@Eo@Cy@Cw@Aq@Am@?_A?q@?{@HeTFyO@i@F}L?_A?o@?o@Ai@Ak@Ck@Ag@Ce@Ck@Cg@Ek@Gi@Ei@Iq@M_AO_AIg@SuAO{@CUw@gFa@mCm@kEMy@mByM????q@mEk@}DQkAQgA]qBUuAWsAUuAIc@g@uCQgAQiAk@aE??a@wC]gCSoASoAMy@Q}@UoAQw@Qy@Sw@U{@W}@Sq@Og@Qk@Oc@Wq@Si@Uk@i@sAUk@Ys@Um@Qe@Oe@Sm@Om@Sq@Oi@Qu@Oo@Ou@Mq@Mo@Kq@Ms@Ks@K{@[{Bo@aFWkBSaBUgBMy@My@Ku@Ku@Mw@O_AO}@Ms@Q}@UkACK????ESOm@Qq@Mi@Og@_@mASs@Uw@a@wAUy@]kAs@cC]kAQs@]oAYeAWiAyA{F}AgGwAuFYmAUy@Sw@a@aB{AcGuAqFyA}F[kAWaAS{@Qq@U{@GYQq@[mAMe@I]Kc@Ka@Ig@Ke@Gc@Ii@Gg@Io@Ee@Gw@Ek@Cm@Ag@Ak@As@As@?s@@s@Bu@@m@Dm@Bq@Fu@Do@Fq@Fo@Fg@Hq@Z{B??JaAFk@Dg@??Jg@DWHc@Jm@??Js@Hq@RsAPsAJu@NiALgAHmAHoADkABeA@iA?E?????u@?aAAs@Cs@Cm@Ce@A_@Ce@Ei@IaAKgAG{@YmDK_AI}@Is@Iu@IcAYcDEo@KiAKcAIs@Kq@MaAQgASoAO{@SeAWkAc@qBm@eC[iAQs@Oo@Om@Mm@Kg@Mo@Ko@Ku@Ks@Iu@I}@I_AGeAEw@GiAEcAIyBEs@Eq@GcAIy@Ek@Iw@Ii@Im@Ig@O{@Km@S_AUaAU}@[aAY{@Ww@u@yBQi@Wo@k@cBe@wAYy@Y{@sAwD{@eCSm@??Sm@I_@Ka@IYMc@Si@??Mi@IYI[EU??Oc@GQMa@i@{AmEoMe@qA[}@Qo@Oc@Oo@Ka@Mk@Kg@Mk@G[E[M_A??Ig@Ic@CO??AOCYC]Kw@OsAE_@Ec@Eo@Ac@Cg@Ao@A}@A_A@cA?}@Bw@@o@??D}@Dy@H_AHy@H{@Hk@Ju@L}@x@cFJq@????BMDQj@eD|@kFX}AZgBXcBf@qCVuAN}@Nu@Nu@R{@XqA`@iBLo@Lm@??VsANu@RgAJm@Jq@NaANmAR_BN_BNeBL_BHqADeAD}@DgABu@B{@@_A@y@@y@@cA?iAA{AAeAA_AAy@C_ACy@C_AMsDKkCGiB??KyCKiDE_BC{AAkA?eAAeA@oA@kA@gABwADoAD_BH{AFaAFiAHgAFaAl@}Jn@}JPoCLuBPeCLuALsALoALkANkATaBn@oE|@_GfAqH@KVcBNaAP}@f@kCTmAVsA??XyAb@aCLo@NcALw@Ho@Hq@Hw@HgAHaADu@Dw@H}Ab@_K????d@gKF_BBs@Dw@DaBBaABs@Bm@Bm@@_@B[B_@Bg@Do@B_@D]Fu@??Fs@Fq@J_AJw@Fk@Hk@Jo@Jq@F_@Lu@Nw@??ZcBPeA\\gBN_ANu@Lu@L{@Jm@Ly@L_ANkAHw@Hs@H_AL}AHqAHkAFsAF{ADoABmAHgDDuABgADcAFy@F_AF}@H_AH{@LqAJ{@??@[B]@]??F[DUFa@Fe@Hs@He@L{@Ny@??RuALw@Jk@Jg@Ji@\\{AR}@Ns@N{@L_AVcB??^gCf@cD????p@qE|@eGh@iD??j@uDb@yCn@aE`@oCNaANgALiAJiADi@Fo@Dw@LwBFiA??Fm@Hu@PcBLsARoB??Z}CH}@`@wDXcDb@}DH_A??Dc@B_@Dq@@]Fk@H}@??Z{C??Ba@D_@@WB]@WDm@??TqBViCTgCL{ALyANiBLaBJqAHuAD_AHkADgADgADeAFqB@[Bu@BoA@y@BcA@mA@uA@}A?aA?_A?{A?}HAsF?mJA_F?qH?qBAsC?aB?oC?{BAoC?eH?mD?sD?gBAoB?kA?qB?qA?}@?k@Ak@?m@Aq@Ai@Ag@As@Cw@Cs@Cs@Ew@Eu@Ci@Gq@Eu@G{@KmAQmBYkDO_BOkBQuBw@aJScCQqBS_CS{BKwAOyAa@eFEe@??C_@C[Cq@AUCY??I_AGu@KmAGq@Gw@KaAIy@Go@Io@Im@ES????G_@Ko@Ke@[sAMg@Mk@Ok@Og@Qi@Sm@Oc@Oc@O]O_@Qa@Sa@Qa@k@kAQ_@u@{A??]o@Uc@S_@]m@Wc@OWEGYe@QW[c@W]QWSUMQSSUYOOo@o@c@a@[W[UWS]U[SUM_@Ue@Wq@][QYQYM_Ag@}BoAsEaCwC}AcAi@s@_@c@Wc@Uk@Yk@[u@a@w@a@cFkCyEgC??gCsA_B{@w@_@e@S]O]OWKWKSGsBs@SGWI[K[I[I_@GUEWE[C[C[C[AU?[@Y?W@a@BWD]DUBwATy@NoB\\a@F[Fa@F_@DO@I@W@[@Y?YAUAYCWE]G_@IYK]Ma@O_@Sa@Si@[MIQKu@c@yD}B????]S}D_Ci@]c@Y_@Wa@[_@Y[[_@[e@g@WYSUSYW]W]U_@Wa@Yc@Yg@Yi@Wi@Wi@Uk@Ug@Qe@Si@Um@Qi@Qk@So@Qo@Mc@Kc@EQKa@Mk@Sy@Qw@ScASaAOu@Qy@QaAO{@O_AOaAMy@MgAM_AKgAMkAIaAI_AIeAIcAImAIwAs@iL_BoXMuBK}AG{@Em@Gs@Gq@I_AIu@E_@Gi@Kw@Iq@Iq@M}@M}@Oy@QgAQcAk@yCWoA]gBI_@??u@}DmDwQcEkTMm@QaA_@iBSaAOw@CI????Kg@]aBQs@Qs@Oo@Oi@Ok@Mi@Sq@Qm@Sw@]iAgBeGe@_Be@aBW{@Qs@Qk@Ok@Mi@Kc@Mk@Qu@Mk@Ow@Mm@Kq@Kg@Mu@Kq@Ik@Ks@Ky@EWGe@YuBOeAKw@UuAEY??I]ESGSK_@EOK]Mc@GWOg@Kc@GQ??So@ESGQGYIUUo@??IQ[q@Q_@Sa@U_@w@oAY_@UYMQ??', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:37:20+01:00', + aimedEndTime: '2024-01-12T13:39:50+01:00', + expectedEndTime: '2024-01-12T13:39:50+01:00', + expectedStartTime: '2024-01-12T13:37:20+01:00', + realtime: false, + distance: 144.57, + duration: 150, + fromPlace: { + name: 'Grorud stasjon', + }, + toPlace: { + name: 'Stjerneblokkveien', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '}|{lJaomaA??c@m@Y[He@ACEEEEACFSHSLUR[V[DGBEBE@G@E@I?I?I?K?C??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAADYAAAA7ABFSQjpOU1I6UXVheToxMDMyNgARUkI6TlNSOlF1YXk6MTA3MjcAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OjZiZjc4NDcxYThmNmMxZTA3YzUyZmM0MmU1NmM5YmI0', + mode: 'bus', + aimedStartTime: '2024-01-12T13:45:00+01:00', + aimedEndTime: '2024-01-12T13:50:00+01:00', + expectedEndTime: '2024-01-12T13:50:00+01:00', + expectedStartTime: '2024-01-12T13:45:00+01:00', + realtime: false, + distance: 2078.2, + duration: 300, + fromPlace: { + name: 'Stjerneblokkveien', + }, + toPlace: { + name: 'Grorud T', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Grorud T', + }, + }, + line: { + publicCode: '79', + name: 'Grorud T - Åsbråten', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'w{{lJ_zmaA?FCd@@N?J@RA?KNKHKJKJQVMTGNGTERERc@dCKXEPGTINCBCDAFMZQZINQZKHMFQHQF??A?QDS?Y@gBFsBH]BO@G?O@K@A?m@B??M?e@BI@G@IDGFGJIPGPETGVEVY~AE\\APCR?N?T@TBJDLDNDJ`@v@NXDLHRJZJ\\d@lBH\\DZB^?V?ZAVEXEPIXGNIPKRKNORONKHGBCBMFSJMDQHIB??GDEBIFMJKJOTGFGLMVK\\CJAFEVEVC\\?JARGAA?E@MBMFLGLCDAH@?`@?v@E^CRADCHCFCDCBEDEBGFG?GCKGMIKKIKIKKSIQGQGWEOAGEWAUE]IsAG_AAUCYCUCOCKEKGGGGGGKEMAcACM?IAGCCAGEIGGKGMEOEQEUC[MaCC[CYEWESIQGMIIIEKCK?M@w@JOBI@G@o@FUB????C?WBi@BS?SGGAIAGAA?C?_@D[BS@S@W?S@MAG@I@I@mA?U??]Ag@?kA?a@M@QBK@I@BrB?V@R', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T13:50:00+01:00', + aimedEndTime: '2024-01-12T13:50:20+01:00', + expectedEndTime: '2024-01-12T13:50:20+01:00', + expectedStartTime: '2024-01-12T13:50:00+01:00', + realtime: false, + distance: 12.76, + duration: 20, + fromPlace: { + name: 'Grorud T', + }, + toPlace: { + name: 'Grorud T', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: '}a~lJ_qlaA??CDC?A?C@A?C??E??', + }, + }, + { + id: 'rO0ABXeTABhTQ0hFRFVMRURfVFJBTlNJVF9MRUdfVjMAAAAKMjAyNC0wMS0xMgAAAAAAAAAIABFSQjpOU1I6UXVheToxMDcyNAARUkI6TlNSOlF1YXk6MTAyNTkAO1JCOlJVVDpEYXRlZFNlcnZpY2VKb3VybmV5OmVhYzk2YWEyZjg0ZmY1ZTdmNDEzYTk5YjRmY2RlMzBk', + mode: 'bus', + aimedStartTime: '2024-01-12T14:07:00+01:00', + aimedEndTime: '2024-01-12T14:14:00+01:00', + expectedEndTime: '2024-01-12T14:14:00+01:00', + expectedStartTime: '2024-01-12T14:07:00+01:00', + realtime: false, + distance: 4457.24, + duration: 420, + fromPlace: { + name: 'Grorud T', + }, + toPlace: { + name: 'Postnord', + }, + toEstimatedCall: { + destinationDisplay: { + frontText: 'Helsfyr', + }, + }, + line: { + publicCode: '68', + name: 'Helsfyr T - Grorud T via Alfaset', + }, + authority: { + name: 'Ruter', + }, + pointsOnLink: { + points: + 'mb~lJcplaA???TH?H?F?DAH?JHL@?W?]Ag@?kA?a@?_C?OAS?O?}@?O@K@IBEBG@IHEFALENCHAFAH?F?HBDDDFDFBHFZBJBTBb@NrHHlDF|BBx@D|@Dp@D~@HvAJzAFt@Fz@LrALpAPxARdBRxAVzAPbAN~@XtAR~@Pv@Pt@Nl@ZjATx@Ph@FPPjALp@BJ??Jd@HNFNd@nAJVNTRTRRb@\\b@t@^n@x@tAr@dApAnBhA`BT\\PVRXRZ^b@NN??XZb@\\`@ZVLX`@\\XTNd@Vt@\\\\L\\NRJPFVFR@R@TAZCTCH?HB@BBD@BDBD@DADCDG@E@E?E@EFCDC@?D?PBF@HCFAd@LRD??@?HBPNHBHBDBFBJBDBFBXDHFf@b@JLHHNPTXRZXd@`@r@^l@`@r@T`@PXPVTXNRVTZTVPTLZLXJVFVDVDz@JNBx@H^DRHH@l@B??J@X@RBH?LBHBT@`@TVN\\VVRXVTTLNNPX`@\\f@T`@Zn@Rd@lCnGR`@P^PZR\\PVJLNPNN??B@LLFDNF\\JXRFBFBFDDHDFLR?FBD@DBDD@DABC@C`@[TIH@ZErAL|@Jp@FlAHh@BH@RJHFHHJLDJBFFFD@FADCDEDKBKHIHGHCNMF?PARANANAPCd@Ib@Gh@K^Il@@PCjA[TG??`A[JALCH?RBBDBBBVBT@HBPDb@?TBbABlBFvBBf@Fr@Dh@Ht@Jr@Np@Lj@Nd@N`@Rb@Td@PZh@x@NP~@nAzAjBHLVZRVNVI\\Sd@Q^GN??KTcApBmA`CIPKREREX@XBXDPdAxCJ\\l@bB', + }, + }, + { + id: null, + mode: 'foot', + aimedStartTime: '2024-01-12T14:14:00+01:00', + aimedEndTime: '2024-01-12T14:18:50+01:00', + expectedEndTime: '2024-01-12T14:18:50+01:00', + expectedStartTime: '2024-01-12T14:14:00+01:00', + realtime: false, + distance: 310.02, + duration: 290, + fromPlace: { + name: 'Postnord', + }, + toPlace: { + name: 'Destination', + }, + toEstimatedCall: null, + line: null, + authority: null, + pointsOnLink: { + points: 'q|xlJmweaACFA?m@aBBEDKK]eAyCEQSm@}@iCaAmCgAaE', + }, + }, + ], + systemNotices: [], + }, + ], + }, +}; + +it('renders without crashing', () => { + render( + {}} + pageResults={() => {}} + loading={false} + />, + ); +}); diff --git a/client-next/src/components/SearchBar/SearchBar.test.tsx b/client-next/src/components/SearchBar/SearchBar.test.tsx new file mode 100644 index 00000000000..88932190288 --- /dev/null +++ b/client-next/src/components/SearchBar/SearchBar.test.tsx @@ -0,0 +1,14 @@ +import { it } from 'vitest'; +import { render } from '@testing-library/react'; +import { SearchBar } from './SearchBar.tsx'; +import { TripQueryVariables } from '../../gql/graphql.ts'; + +const variables: TripQueryVariables = { + from: { coordinates: { longitude: 9.795206, latitude: 60.13776 } }, + to: { coordinates: { longitude: 11.50907, latitude: 59.85208 } }, + dateTime: new Date().toISOString(), +}; + +it('renders without crashing', () => { + render( {}} setTripQueryVariables={() => {}} tripQueryVariables={variables} />); +}); diff --git a/client-next/vite.config.ts b/client-next/vite.config.ts index 8d3ba8000c7..69bfec7f396 100644 --- a/client-next/vite.config.ts +++ b/client-next/vite.config.ts @@ -9,4 +9,8 @@ export default defineConfig({ outDir: 'output', emptyOutDir: true, }, + // @ts-ignore + test: { + environment: 'jsdom', + }, }); From 840ab9ce823acfda7529f3ec1f2898b48560bc74 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 14 Feb 2024 10:10:03 +0100 Subject: [PATCH 083/101] Account for a comma-separated list of X-Forwarded-Host --- .../framework/io/HttpUtils.java | 11 +++++- .../framework/io/HttpUtilsTest.java | 38 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/opentripplanner/framework/io/HttpUtilsTest.java diff --git a/src/main/java/org/opentripplanner/framework/io/HttpUtils.java b/src/main/java/org/opentripplanner/framework/io/HttpUtils.java index 4981a8ab91b..d8b3dc542a6 100644 --- a/src/main/java/org/opentripplanner/framework/io/HttpUtils.java +++ b/src/main/java/org/opentripplanner/framework/io/HttpUtils.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.UriInfo; import java.nio.charset.StandardCharsets; +import java.util.Arrays; import org.apache.hc.core5.http.ContentType; public final class HttpUtils { @@ -31,7 +32,7 @@ public static String getBaseAddress(UriInfo uri, HttpHeaders headers) { String host; if (headers.getRequestHeader(HEADER_X_FORWARDED_HOST) != null) { - host = headers.getRequestHeader(HEADER_X_FORWARDED_HOST).getFirst(); + host = extractHost(headers.getRequestHeader(HEADER_X_FORWARDED_HOST).getFirst()); } else if (headers.getRequestHeader(HEADER_HOST) != null) { host = headers.getRequestHeader(HEADER_HOST).getFirst(); } else { @@ -40,4 +41,12 @@ public static String getBaseAddress(UriInfo uri, HttpHeaders headers) { return protocol + "://" + host; } + + /** + * The X-Forwarded-Host header can contain a comma-separated list so we account for that. + * https://stackoverflow.com/questions/66042952/http-proxy-behavior-for-x-forwarded-host-header + */ + private static String extractHost(String xForwardedFor) { + return Arrays.stream(xForwardedFor.split(",")).map(String::strip).toList().getFirst(); + } } diff --git a/src/test/java/org/opentripplanner/framework/io/HttpUtilsTest.java b/src/test/java/org/opentripplanner/framework/io/HttpUtilsTest.java new file mode 100644 index 00000000000..ac8ae52848c --- /dev/null +++ b/src/test/java/org/opentripplanner/framework/io/HttpUtilsTest.java @@ -0,0 +1,38 @@ +package org.opentripplanner.framework.io; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.List; +import java.util.Map; +import org.glassfish.jersey.server.internal.routing.UriRoutingContext; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.opentripplanner.test.support.HttpForTest; + +class HttpUtilsTest { + + private static final String HOSTNAME = "example.com"; + + static List testCases() { + return List.of( + HOSTNAME, + "example.com,", + " example.com ,", + "example.com,example.com", + "example.com, example.com", + "example.com, example.net", + "example.com, example.net, example.com", + " example.com, example.net, example.com" + ); + } + + @ParameterizedTest + @MethodSource("testCases") + void extractHost(String headerValue) { + var req = HttpForTest.containerRequest(); + req.headers(Map.of("X-Forwarded-Host", List.of(headerValue))); + var uriInfo = new UriRoutingContext(req); + var baseAddress = HttpUtils.getBaseAddress(uriInfo, req); + assertEquals("https://" + HOSTNAME, baseAddress); + } +} From da66cb11497395a5c99c13b3f3b33e16a8a6abf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Erik=20St=C3=B8wer?= Date: Wed, 14 Feb 2024 10:21:39 +0100 Subject: [PATCH 084/101] Fix package-lock --- client-next/package-lock.json | 5386 +++++++++++++++++++++++---------- 1 file changed, 3851 insertions(+), 1535 deletions(-) diff --git a/client-next/package-lock.json b/client-next/package-lock.json index b1dcfecb817..a6c92c55374 100644 --- a/client-next/package-lock.json +++ b/client-next/package-lock.json @@ -46,16 +46,18 @@ }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@ampproject/remapping": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -66,8 +68,9 @@ }, "node_modules/@ardatan/relay-compiler": { "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@ardatan/relay-compiler/-/relay-compiler-12.0.0.tgz", + "integrity": "sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.14.0", "@babel/generator": "^7.14.0", @@ -96,8 +99,9 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -106,8 +110,9 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -118,8 +123,9 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -129,8 +135,9 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -143,8 +150,9 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -154,13 +162,15 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/y18n": { "version": "4.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/@ardatan/relay-compiler/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -180,8 +190,9 @@ }, "node_modules/@ardatan/relay-compiler/node_modules/yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -192,8 +203,9 @@ }, "node_modules/@ardatan/sync-fetch": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz", + "integrity": "sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==", "dev": true, - "license": "MIT", "dependencies": { "node-fetch": "^2.6.1" }, @@ -203,8 +215,9 @@ }, "node_modules/@asamuzakjp/dom-selector": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz", + "integrity": "sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==", "dev": true, - "license": "MIT", "dependencies": { "bidi-js": "^1.0.3", "css-tree": "^2.3.1", @@ -213,8 +226,9 @@ }, "node_modules/@babel/code-frame": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" @@ -225,8 +239,9 @@ }, "node_modules/@babel/code-frame/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, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -236,8 +251,9 @@ }, "node_modules/@babel/code-frame/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, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -249,37 +265,42 @@ }, "node_modules/@babel/code-frame/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/code-frame/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/code-frame/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/code-frame/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, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -289,27 +310,29 @@ }, "node_modules/@babel/compat-data": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.7", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.7", - "@babel/parser": "^7.23.6", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -326,8 +349,9 @@ }, "node_modules/@babel/generator": { "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", @@ -340,8 +364,9 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -351,8 +376,9 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -365,9 +391,10 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.7", + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", + "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -388,16 +415,18 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -408,8 +437,9 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -419,8 +449,9 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.23.0" }, @@ -430,8 +461,9 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.15" }, @@ -441,8 +473,9 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -459,8 +492,9 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -470,16 +504,18 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.22.15", @@ -494,8 +530,9 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -505,8 +542,9 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -516,8 +554,9 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -527,36 +566,40 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.8", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.7", - "@babel/types": "^7.23.6" + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" @@ -564,8 +607,9 @@ }, "node_modules/@babel/highlight": { "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -577,8 +621,9 @@ }, "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, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -588,8 +633,9 @@ }, "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, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -601,37 +647,42 @@ }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "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, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -640,9 +691,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, - "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -652,8 +704,10 @@ }, "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==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -667,8 +721,10 @@ }, "node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.5", "@babel/helper-compilation-targets": "^7.20.7", @@ -685,8 +741,9 @@ }, "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, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -696,8 +753,9 @@ }, "node_modules/@babel/plugin-syntax-flow": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz", + "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -710,8 +768,9 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -724,8 +783,9 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -738,8 +798,9 @@ }, "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, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -749,8 +810,9 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -763,8 +825,9 @@ }, "node_modules/@babel/plugin-transform-block-scoped-functions": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -777,8 +840,9 @@ }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -791,8 +855,9 @@ }, "node_modules/@babel/plugin-transform-classes": { "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", @@ -812,8 +877,9 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.15" @@ -827,8 +893,9 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -841,8 +908,9 @@ }, "node_modules/@babel/plugin-transform-flow-strip-types": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz", + "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-flow": "^7.23.3" @@ -856,8 +924,9 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -871,8 +940,9 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-function-name": "^7.23.0", @@ -887,8 +957,9 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -901,8 +972,9 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -915,8 +987,9 @@ }, "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", @@ -931,8 +1004,9 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20" @@ -946,8 +1020,9 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -960,8 +1035,9 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -974,8 +1050,9 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -988,8 +1065,9 @@ }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-module-imports": "^7.22.15", @@ -1006,8 +1084,9 @@ }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz", + "integrity": "sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1020,8 +1099,9 @@ }, "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz", + "integrity": "sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1034,8 +1114,9 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1048,8 +1129,9 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -1063,8 +1145,9 @@ }, "node_modules/@babel/plugin-transform-template-literals": { "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1076,8 +1159,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.8", - "license": "MIT", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1086,22 +1170,24 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -1109,8 +1195,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1119,9 +1205,10 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -1133,229 +1220,586 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT" + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@esbuild/darwin-x64": { + "node_modules/@esbuild/android-arm": { "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ - "x64" + "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "darwin" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=12" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "(MIT OR CC0-1.0)", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/@eslint/js": { - "version": "8.48.0", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@googlemaps/polyline-codec": { - "version": "1.0.28", - "license": "Apache-2.0" - }, - "node_modules/@graphql-codegen/add": { - "version": "5.0.0", + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", - "tslib": "~2.5.0" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@graphql-codegen/add/node_modules/tslib": { - "version": "2.5.3", + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "0BSD" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@graphql-codegen/cli": { - "version": "5.0.0", + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/generator": "^7.18.13", - "@babel/template": "^7.18.10", - "@babel/types": "^7.18.13", - "@graphql-codegen/core": "^4.0.0", - "@graphql-codegen/plugin-helpers": "^5.0.1", - "@graphql-tools/apollo-engine-loader": "^8.0.0", - "@graphql-tools/code-file-loader": "^8.0.0", - "@graphql-tools/git-loader": "^8.0.0", - "@graphql-tools/github-loader": "^8.0.0", - "@graphql-tools/graphql-file-loader": "^8.0.0", - "@graphql-tools/json-file-loader": "^8.0.0", - "@graphql-tools/load": "^8.0.0", - "@graphql-tools/prisma-loader": "^8.0.0", - "@graphql-tools/url-loader": "^8.0.0", - "@graphql-tools/utils": "^10.0.0", - "@whatwg-node/fetch": "^0.8.0", - "chalk": "^4.1.0", - "cosmiconfig": "^8.1.3", - "debounce": "^1.2.0", - "detect-indent": "^6.0.0", - "graphql-config": "^5.0.2", - "inquirer": "^8.0.0", - "is-glob": "^4.0.1", - "jiti": "^1.17.1", - "json-to-pretty-yaml": "^1.2.2", - "listr2": "^4.0.5", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.5", - "shell-quote": "^1.7.3", - "string-env-interpolation": "^1.0.1", - "ts-log": "^2.2.3", - "tslib": "^2.4.0", - "yaml": "^2.3.1", - "yargs": "^17.0.0" - }, - "bin": { - "gql-gen": "cjs/bin.js", - "graphql-code-generator": "cjs/bin.js", - "graphql-codegen": "cjs/bin.js", - "graphql-codegen-esm": "esm/bin.js" - }, - "peerDependencies": { - "@parcel/watcher": "^2.1.0", - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - }, - "peerDependenciesMeta": { - "@parcel/watcher": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@graphql-codegen/client-preset": { - "version": "4.1.0", + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7", - "@graphql-codegen/add": "^5.0.0", - "@graphql-codegen/gql-tag-operations": "4.0.1", - "@graphql-codegen/plugin-helpers": "^5.0.1", - "@graphql-codegen/typed-document-node": "^5.0.1", - "@graphql-codegen/typescript": "^4.0.1", - "@graphql-codegen/typescript-operations": "^4.0.1", - "@graphql-codegen/visitor-plugin-common": "^4.0.1", - "@graphql-tools/documents": "^1.0.0", - "@graphql-tools/utils": "^10.0.0", - "@graphql-typed-document-node/core": "3.2.0", - "tslib": "~2.5.0" - }, - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@graphql-codegen/client-preset/node_modules/tslib": { - "version": "2.5.3", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "0BSD" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@graphql-codegen/core": { - "version": "4.0.0", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", + "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@googlemaps/polyline-codec": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/@googlemaps/polyline-codec/-/polyline-codec-1.0.28.tgz", + "integrity": "sha512-m7rh8sbxlrHvebXEweBHX8r1uPtToPRYxWDD6p6k2YG8hyhBe0Wi6xRUVFpxpEseMNgF+OBotFQC5senj8K7TQ==" + }, + "node_modules/@graphql-codegen/add": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/add/-/add-5.0.2.tgz", + "integrity": "sha512-ouBkSvMFUhda5VoKumo/ZvsZM9P5ZTyDsI8LW18VxSNWOjrTeLXBWHG8Gfaai0HwhflPtCYVABbriEcOmrRShQ==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.3", + "tslib": "~2.6.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/cli": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-5.0.0.tgz", + "integrity": "sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.18.13", + "@babel/template": "^7.18.10", + "@babel/types": "^7.18.13", + "@graphql-codegen/core": "^4.0.0", + "@graphql-codegen/plugin-helpers": "^5.0.1", + "@graphql-tools/apollo-engine-loader": "^8.0.0", + "@graphql-tools/code-file-loader": "^8.0.0", + "@graphql-tools/git-loader": "^8.0.0", + "@graphql-tools/github-loader": "^8.0.0", + "@graphql-tools/graphql-file-loader": "^8.0.0", + "@graphql-tools/json-file-loader": "^8.0.0", + "@graphql-tools/load": "^8.0.0", + "@graphql-tools/prisma-loader": "^8.0.0", + "@graphql-tools/url-loader": "^8.0.0", + "@graphql-tools/utils": "^10.0.0", + "@whatwg-node/fetch": "^0.8.0", + "chalk": "^4.1.0", + "cosmiconfig": "^8.1.3", + "debounce": "^1.2.0", + "detect-indent": "^6.0.0", + "graphql-config": "^5.0.2", + "inquirer": "^8.0.0", + "is-glob": "^4.0.1", + "jiti": "^1.17.1", + "json-to-pretty-yaml": "^1.2.2", + "listr2": "^4.0.5", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.5", + "shell-quote": "^1.7.3", + "string-env-interpolation": "^1.0.1", + "ts-log": "^2.2.3", + "tslib": "^2.4.0", + "yaml": "^2.3.1", + "yargs": "^17.0.0" + }, + "bin": { + "gql-gen": "cjs/bin.js", + "graphql-code-generator": "cjs/bin.js", + "graphql-codegen": "cjs/bin.js", + "graphql-codegen-esm": "esm/bin.js" + }, + "peerDependencies": { + "@parcel/watcher": "^2.1.0", + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + }, + "peerDependenciesMeta": { + "@parcel/watcher": { + "optional": true + } + } + }, + "node_modules/@graphql-codegen/client-preset": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-4.1.0.tgz", + "integrity": "sha512-/3Ymb/fjxIF1+HGmaI1YwSZbWsrZAWMSQjh3dU425eBjctjsVQ6gzGRr+l/gE5F1mtmCf+vlbTAT03heAc/QIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7", + "@graphql-codegen/add": "^5.0.0", + "@graphql-codegen/gql-tag-operations": "4.0.1", + "@graphql-codegen/plugin-helpers": "^5.0.1", + "@graphql-codegen/typed-document-node": "^5.0.1", + "@graphql-codegen/typescript": "^4.0.1", + "@graphql-codegen/typescript-operations": "^4.0.1", + "@graphql-codegen/visitor-plugin-common": "^4.0.1", + "@graphql-tools/documents": "^1.0.0", + "@graphql-tools/utils": "^10.0.0", + "@graphql-typed-document-node/core": "3.2.0", + "tslib": "~2.5.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@graphql-codegen/client-preset/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "dev": true + }, + "node_modules/@graphql-codegen/core": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/core/-/core-4.0.2.tgz", + "integrity": "sha512-IZbpkhwVqgizcjNiaVzNAzm/xbWT6YnGgeOLwVjm4KbJn3V2jchVtuzHH09G5/WkkLSk2wgbXNdwjM41JxO6Eg==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.3", "@graphql-tools/schema": "^10.0.0", "@graphql-tools/utils": "^10.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/core/node_modules/tslib": { - "version": "2.5.3", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/gql-tag-operations": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-4.0.1.tgz", + "integrity": "sha512-qF6wIbBzW8BNT+wiVsBxrYOs2oYcsxQ7mRvCpfEI3HnNZMAST/uX76W8MqFEJvj4mw7NIDv7xYJAcAZIWM5LWw==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-codegen/visitor-plugin-common": "4.0.1", @@ -1367,15 +1811,38 @@ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, + "node_modules/@graphql-codegen/gql-tag-operations/node_modules/@graphql-codegen/visitor-plugin-common": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-4.0.1.tgz", + "integrity": "sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==", + "dev": true, + "dependencies": { + "@graphql-codegen/plugin-helpers": "^5.0.0", + "@graphql-tools/optimize": "^2.0.0", + "@graphql-tools/relay-operation-optimizer": "^7.0.0", + "@graphql-tools/utils": "^10.0.0", + "auto-bind": "~4.0.0", + "change-case-all": "1.0.15", + "dependency-graph": "^0.11.0", + "graphql-tag": "^2.11.0", + "parse-filepath": "^1.0.2", + "tslib": "~2.5.0" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, "node_modules/@graphql-codegen/gql-tag-operations/node_modules/tslib": { "version": "2.5.3", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "dev": true }, "node_modules/@graphql-codegen/introspection": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@graphql-codegen/introspection/-/introspection-4.0.0.tgz", + "integrity": "sha512-t9g3AkK99dfHblMWtG4ynUM9+A7JrWq5110zSpNV2wlSnv0+bRKagDW8gozwgXfR5i1IIG8QDjJZ6VgXQVqCZw==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", "@graphql-codegen/visitor-plugin-common": "^4.0.0", @@ -1387,114 +1854,96 @@ }, "node_modules/@graphql-codegen/introspection/node_modules/tslib": { "version": "2.5.3", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "dev": true }, "node_modules/@graphql-codegen/plugin-helpers": { - "version": "5.0.1", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.0.3.tgz", + "integrity": "sha512-yZ1rpULIWKBZqCDlvGIJRSyj1B2utkEdGmXZTBT/GVayP4hyRYlkd36AJV/LfEsVD8dnsKL5rLz2VTYmRNlJ5Q==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "change-case-all": "1.0.15", "common-tags": "1.8.2", "import-from": "4.0.0", "lodash": "~4.17.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/plugin-helpers/node_modules/tslib": { - "version": "2.5.3", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/schema-ast": { - "version": "4.0.0", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.0.2.tgz", + "integrity": "sha512-5mVAOQQK3Oz7EtMl/l3vOQdc2aYClUzVDHHkMvZlunc+KlGgl81j8TLa+X7ANIllqU4fUEsQU3lJmk4hXP6K7Q==", "dev": true, - "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", + "@graphql-codegen/plugin-helpers": "^5.0.3", "@graphql-tools/utils": "^10.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/schema-ast/node_modules/tslib": { - "version": "2.5.3", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/typed-document-node": { - "version": "5.0.1", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-5.0.4.tgz", + "integrity": "sha512-t66Z6erQ4Dh1j6f9pRZmc8uYtHoUI3A49tLmJAlg9/3IV0kCmwrWKJut/G8SeOefDLG8cXBTVtI/YuZOe1Te+w==", "dev": true, - "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", - "@graphql-codegen/visitor-plugin-common": "4.0.1", + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-codegen/visitor-plugin-common": "4.1.2", "auto-bind": "~4.0.0", "change-case-all": "1.0.15", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/typed-document-node/node_modules/tslib": { - "version": "2.5.3", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/typescript": { - "version": "4.0.1", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.0.4.tgz", + "integrity": "sha512-x79CKLfP9UQCX+/I78qxQlMs2Mmq3pF1lKafZo7lAno0f/fvJ+qWUduzdgjRNz+YL+5blGeWcC0pWEDxniO7hw==", "dev": true, - "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", - "@graphql-codegen/schema-ast": "^4.0.0", - "@graphql-codegen/visitor-plugin-common": "4.0.1", + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-codegen/schema-ast": "^4.0.2", + "@graphql-codegen/visitor-plugin-common": "4.1.2", "auto-bind": "~4.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, "node_modules/@graphql-codegen/typescript-operations": { - "version": "4.0.1", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-4.1.2.tgz", + "integrity": "sha512-CtCWK+gW7hS+Ely3lohr8CL1HVLswQzMcaUk3k1sxdWCWKTNq7abMsWa31rTVwRCJ+WNEkM/7S8sIBTpEG683A==", "dev": true, - "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", - "@graphql-codegen/typescript": "^4.0.1", - "@graphql-codegen/visitor-plugin-common": "4.0.1", + "@graphql-codegen/plugin-helpers": "^5.0.3", + "@graphql-codegen/typescript": "^4.0.4", + "@graphql-codegen/visitor-plugin-common": "4.1.2", "auto-bind": "~4.0.0", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/typescript-operations/node_modules/tslib": { - "version": "2.5.3", - "dev": true, - "license": "0BSD" - }, - "node_modules/@graphql-codegen/typescript/node_modules/tslib": { - "version": "2.5.3", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-codegen/visitor-plugin-common": { - "version": "4.0.1", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-4.1.2.tgz", + "integrity": "sha512-yk7iEAL1kYZ2Gi/pvVjdsZhul5WsYEM4Zcgh2Ev15VicMdJmPHsMhNUsZWyVJV0CaQCYpNOFlGD/11Ea3pn4GA==", "dev": true, - "license": "MIT", "dependencies": { - "@graphql-codegen/plugin-helpers": "^5.0.0", + "@graphql-codegen/plugin-helpers": "^5.0.3", "@graphql-tools/optimize": "^2.0.0", "@graphql-tools/relay-operation-optimizer": "^7.0.0", "@graphql-tools/utils": "^10.0.0", @@ -1503,21 +1952,17 @@ "dependency-graph": "^0.11.0", "graphql-tag": "^2.11.0", "parse-filepath": "^1.0.2", - "tslib": "~2.5.0" + "tslib": "~2.6.0" }, "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" } }, - "node_modules/@graphql-codegen/visitor-plugin-common/node_modules/tslib": { - "version": "2.5.3", - "dev": true, - "license": "0BSD" - }, "node_modules/@graphql-tools/apollo-engine-loader": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.0.tgz", + "integrity": "sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==", "dev": true, - "license": "MIT", "dependencies": { "@ardatan/sync-fetch": "^0.0.1", "@graphql-tools/utils": "^10.0.0", @@ -1533,28 +1978,31 @@ }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/events": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", + "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.15", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, - "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.4", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, - "license": "MIT", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -1567,14 +2015,16 @@ } }, "node_modules/@graphql-tools/apollo-engine-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "dev": true, - "license": "MIT" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true }, "node_modules/@graphql-tools/batch-execute": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-9.0.2.tgz", + "integrity": "sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.5", "dataloader": "^2.2.2", @@ -1589,12 +2039,13 @@ } }, "node_modules/@graphql-tools/code-file-loader": { - "version": "8.0.3", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.1.0.tgz", + "integrity": "sha512-HKWW/B2z15ves8N9+xnVbGmFEVGyHEK80a4ghrjeTa6nwNZaKDVfq5CoYFfF0xpfjtH6gOVUExo2XCOEz4B8mQ==", "dev": true, - "license": "MIT", "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.1.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/graphql-tag-pluck": "8.2.0", + "@graphql-tools/utils": "^10.0.13", "globby": "^11.0.3", "tslib": "^2.4.0", "unixify": "^1.0.0" @@ -1608,8 +2059,9 @@ }, "node_modules/@graphql-tools/delegate": { "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-10.0.3.tgz", + "integrity": "sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/batch-execute": "^9.0.1", "@graphql-tools/executor": "^1.0.0", @@ -1627,8 +2079,9 @@ }, "node_modules/@graphql-tools/documents": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/documents/-/documents-1.0.0.tgz", + "integrity": "sha512-rHGjX1vg/nZ2DKqRGfDPNC55CWZBMldEVcH+91BThRa6JeT80NqXknffLLEZLRUxyikCfkwMsk6xR3UNMqG0Rg==", "dev": true, - "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tslib": "^2.4.0" @@ -1642,8 +2095,9 @@ }, "node_modules/@graphql-tools/executor": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.0.tgz", + "integrity": "sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "@graphql-typed-document-node/core": "3.2.0", @@ -1660,8 +2114,9 @@ }, "node_modules/@graphql-tools/executor-graphql-ws": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-1.1.0.tgz", + "integrity": "sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.2", "@types/ws": "^8.0.0", @@ -1679,8 +2134,9 @@ }, "node_modules/@graphql-tools/executor-http": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-1.0.7.tgz", + "integrity": "sha512-/MoRYzQS50Tz5mxRfq3ZmeZ2SOins9wGZAGetsJ55F3PxL0PmHdSGlCq12KzffZDbwHV5YMlwigBsSGWq4y9Iw==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.2", "@repeaterjs/repeater": "^3.0.4", @@ -1699,28 +2155,31 @@ }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/events": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", + "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/fetch": { - "version": "0.9.15", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, - "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/executor-http/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.4", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, - "license": "MIT", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -1733,14 +2192,16 @@ } }, "node_modules/@graphql-tools/executor-http/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "dev": true, - "license": "MIT" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true }, "node_modules/@graphql-tools/executor-legacy-ws": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.0.5.tgz", + "integrity": "sha512-w54AZ7zkNuvpyV09FH+eGHnnAmaxhBVHg4Yh2ICcsMfRg0brkLt77PlbjBuxZ4HY8XZnKJaYWf+tKazQZtkQtg==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "@types/ws": "^8.0.0", @@ -1756,12 +2217,13 @@ } }, "node_modules/@graphql-tools/git-loader": { - "version": "8.0.3", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-8.0.4.tgz", + "integrity": "sha512-fBmKtnOVqzMT2N8L6nggM4skPq3y2t0eBITZJXCOuxeIlIRAeCOdjNLPKgyGb0rezIyGsn55DKMua5101VN0Sg==", "dev": true, - "license": "MIT", "dependencies": { - "@graphql-tools/graphql-tag-pluck": "8.1.0", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/graphql-tag-pluck": "8.2.0", + "@graphql-tools/utils": "^10.0.13", "is-glob": "4.0.3", "micromatch": "^4.0.4", "tslib": "^2.4.0", @@ -1776,8 +2238,9 @@ }, "node_modules/@graphql-tools/github-loader": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-8.0.0.tgz", + "integrity": "sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==", "dev": true, - "license": "MIT", "dependencies": { "@ardatan/sync-fetch": "^0.0.1", "@graphql-tools/executor-http": "^1.0.0", @@ -1796,28 +2259,31 @@ }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/events": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", + "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.15", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, - "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/github-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.4", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, - "license": "MIT", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -1830,14 +2296,16 @@ } }, "node_modules/@graphql-tools/github-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "dev": true, - "license": "MIT" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true }, "node_modules/@graphql-tools/graphql-file-loader": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.0.0.tgz", + "integrity": "sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/import": "7.0.0", "@graphql-tools/utils": "^10.0.0", @@ -1853,16 +2321,17 @@ } }, "node_modules/@graphql-tools/graphql-tag-pluck": { - "version": "8.1.0", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.2.0.tgz", + "integrity": "sha512-aGIuHxyrJB+LlUfXrH73NVlQTA6LkFbLKQzHojFuwXZJpf7wPkxceN2yp7VjMedARkLJg589IoXgZeMb1EztGQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.22.9", "@babel/parser": "^7.16.8", "@babel/plugin-syntax-import-assertions": "^7.20.0", "@babel/traverse": "^7.16.8", "@babel/types": "^7.16.8", - "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/utils": "^10.0.13", "tslib": "^2.4.0" }, "engines": { @@ -1874,8 +2343,9 @@ }, "node_modules/@graphql-tools/import": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/import/-/import-7.0.0.tgz", + "integrity": "sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "resolve-from": "5.0.0", @@ -1890,8 +2360,9 @@ }, "node_modules/@graphql-tools/json-file-loader": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.0.tgz", + "integrity": "sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.0", "globby": "^11.0.3", @@ -1907,8 +2378,9 @@ }, "node_modules/@graphql-tools/load": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/load/-/load-8.0.1.tgz", + "integrity": "sha512-qSMsKngJhDqRbuWyo3NvakEFqFL6+eSjy8ooJ1o5qYD26N7dqXkKzIMycQsX7rBK19hOuINAUSaRcVWH6hTccw==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/schema": "^10.0.0", "@graphql-tools/utils": "^10.0.11", @@ -1924,8 +2396,9 @@ }, "node_modules/@graphql-tools/merge": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.1.tgz", + "integrity": "sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/utils": "^10.0.10", "tslib": "^2.4.0" @@ -1939,8 +2412,9 @@ }, "node_modules/@graphql-tools/optimize": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-2.0.0.tgz", + "integrity": "sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.4.0" }, @@ -1953,8 +2427,9 @@ }, "node_modules/@graphql-tools/prisma-loader": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-8.0.2.tgz", + "integrity": "sha512-8d28bIB0bZ9Bj0UOz9sHagVPW+6AHeqvGljjERtwCnWl8OCQw2c2pNboYXISLYUG5ub76r4lDciLLTU+Ks7Q0w==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/url-loader": "^8.0.0", "@graphql-tools/utils": "^10.0.8", @@ -1984,28 +2459,31 @@ }, "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/events": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", + "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.15", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, - "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/prisma-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.4", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, - "license": "MIT", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -2018,14 +2496,16 @@ } }, "node_modules/@graphql-tools/prisma-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "dev": true, - "license": "MIT" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true }, "node_modules/@graphql-tools/relay-operation-optimizer": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.0.tgz", + "integrity": "sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==", "dev": true, - "license": "MIT", "dependencies": { "@ardatan/relay-compiler": "12.0.0", "@graphql-tools/utils": "^10.0.0", @@ -2040,8 +2520,9 @@ }, "node_modules/@graphql-tools/schema": { "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.2.tgz", + "integrity": "sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/merge": "^9.0.1", "@graphql-tools/utils": "^10.0.10", @@ -2057,8 +2538,9 @@ }, "node_modules/@graphql-tools/url-loader": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-8.0.1.tgz", + "integrity": "sha512-B2k8KQEkEQmfV1zhurT5GLoXo8jbXP+YQHUayhCSxKYlRV7j/1Fhp1b21PDM8LXIDGlDRXaZ0FbWKOs7eYXDuQ==", "dev": true, - "license": "MIT", "dependencies": { "@ardatan/sync-fetch": "^0.0.1", "@graphql-tools/delegate": "^10.0.0", @@ -2083,28 +2565,31 @@ }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/events": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.1.1.tgz", + "integrity": "sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/fetch": { - "version": "0.9.15", + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.9.16.tgz", + "integrity": "sha512-mqasZiUNquRe3ea9+aCAuo81BR6vq5opUKprPilIHTnrg8a21Z1T1OrI+KiMFX8OmwO5HUJe/vro47lpj2JPWQ==", "dev": true, - "license": "MIT", "dependencies": { - "@whatwg-node/node-fetch": "^0.5.0", - "urlpattern-polyfill": "^9.0.0" + "@whatwg-node/node-fetch": "^0.5.5", + "urlpattern-polyfill": "^10.0.0" }, "engines": { "node": ">=16.0.0" } }, "node_modules/@graphql-tools/url-loader/node_modules/@whatwg-node/node-fetch": { - "version": "0.5.4", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.5.6.tgz", + "integrity": "sha512-cmAsGMHoI0S3AHi3CmD3ma1Q234ZI2JNmXyDyM9rLtbXejBKxU3ZWdhS+mzRIAyUxZCMGlFW1tHmROv0MDdxpw==", "dev": true, - "license": "MIT", "dependencies": { "@kamilkisiela/fast-url-parser": "^1.1.4", "@whatwg-node/events": "^0.1.0", @@ -2117,14 +2602,16 @@ } }, "node_modules/@graphql-tools/url-loader/node_modules/urlpattern-polyfill": { - "version": "9.0.0", - "dev": true, - "license": "MIT" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "dev": true }, "node_modules/@graphql-tools/utils": { - "version": "10.0.12", + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.13.tgz", + "integrity": "sha512-fMILwGr5Dm2zefNItjQ6C2rauigklv69LIwppccICuGTnGaOp3DspLt/6Lxj72cbg5d9z60Sr+Egco3CJKLsNg==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-typed-document-node/core": "^3.1.1", "cross-inspect": "1.0.0", @@ -2140,8 +2627,9 @@ }, "node_modules/@graphql-tools/wrap": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-10.0.1.tgz", + "integrity": "sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/delegate": "^10.0.3", "@graphql-tools/schema": "^10.0.0", @@ -2158,15 +2646,17 @@ }, "node_modules/@graphql-typed-document-node/core": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -2178,8 +2668,9 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2190,21 +2681,24 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.2", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/schemas": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -2214,8 +2708,9 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2227,29 +2722,33 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, - "license": "MIT", "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, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.21", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -2257,12 +2756,14 @@ }, "node_modules/@kamilkisiela/fast-url-parser": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@kamilkisiela/fast-url-parser/-/fast-url-parser-1.1.4.tgz", + "integrity": "sha512-gbkePEBupNydxCelHCESvFSFM8XPh1Zs/OAVRW/rKpEqPAl5PbOM90Si8mv9bvnR53uPD2s/FiRxdvSejpRJew==", + "dev": true }, "node_modules/@mapbox/geojson-rewind": { "version": "0.5.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", "dependencies": { "get-stream": "^6.0.1", "minimist": "^1.2.6" @@ -2273,127 +2774,361 @@ }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", "engines": { "node": ">= 0.6" } }, "node_modules/@mapbox/point-geometry": { "version": "0.1.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" }, "node_modules/@mapbox/tiny-sdf": { "version": "2.0.6", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" }, "node_modules/@mapbox/unitbezier": { "version": "0.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", "dependencies": { "@mapbox/point-geometry": "~0.1.0" } }, "node_modules/@mapbox/whoots-js": { "version": "3.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "19.3.3", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz", + "integrity": "sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^3.0.0", + "minimist": "^1.2.8", + "rw": "^1.3.3", + "sort-object": "^3.0.3" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.3.0.tgz", + "integrity": "sha512-pW7QaFiL11O0BphO+bq3MgqeX/INAk9jgBldVDYjlQPO4VddoZnF22TcF9onMhnLVHuNqBJeRf+Fj7eezi/+rQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.3.0", + "@parcel/watcher-darwin-arm64": "2.3.0", + "@parcel/watcher-darwin-x64": "2.3.0", + "@parcel/watcher-freebsd-x64": "2.3.0", + "@parcel/watcher-linux-arm-glibc": "2.3.0", + "@parcel/watcher-linux-arm64-glibc": "2.3.0", + "@parcel/watcher-linux-arm64-musl": "2.3.0", + "@parcel/watcher-linux-x64-glibc": "2.3.0", + "@parcel/watcher-linux-x64-musl": "2.3.0", + "@parcel/watcher-win32-arm64": "2.3.0", + "@parcel/watcher-win32-ia32": "2.3.0", + "@parcel/watcher-win32-x64": "2.3.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz", + "integrity": "sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz", + "integrity": "sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz", + "integrity": "sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz", + "integrity": "sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz", + "integrity": "sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz", + "integrity": "sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@maplibre/maplibre-gl-style-spec": { - "version": "19.3.3", - "license": "ISC", - "dependencies": { - "@mapbox/jsonlint-lines-primitives": "~2.0.2", - "@mapbox/unitbezier": "^0.0.1", - "json-stringify-pretty-compact": "^3.0.0", - "minimist": "^1.2.8", - "rw": "^1.3.3", - "sort-object": "^3.0.3" + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz", + "integrity": "sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" }, - "bin": { - "gl-style-format": "dist/gl-style-format.mjs", - "gl-style-migrate": "dist/gl-style-migrate.mjs", - "gl-style-validate": "dist/gl-style-validate.mjs" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz", + "integrity": "sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz", + "integrity": "sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz", + "integrity": "sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher": { + "node_modules/@parcel/watcher-win32-ia32": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz", + "integrity": "sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">= 10.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.3.0", - "@parcel/watcher-darwin-arm64": "2.3.0", - "@parcel/watcher-darwin-x64": "2.3.0", - "@parcel/watcher-freebsd-x64": "2.3.0", - "@parcel/watcher-linux-arm-glibc": "2.3.0", - "@parcel/watcher-linux-arm64-glibc": "2.3.0", - "@parcel/watcher-linux-arm64-musl": "2.3.0", - "@parcel/watcher-linux-x64-glibc": "2.3.0", - "@parcel/watcher-linux-x64-musl": "2.3.0", - "@parcel/watcher-win32-arm64": "2.3.0", - "@parcel/watcher-win32-ia32": "2.3.0", - "@parcel/watcher-win32-x64": "2.3.0" } }, - "node_modules/@parcel/watcher-darwin-x64": { + "node_modules/@parcel/watcher-win32-x64": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz", + "integrity": "sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">= 10.0.0" @@ -2405,8 +3140,9 @@ }, "node_modules/@peculiar/asn1-schema": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz", + "integrity": "sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==", "dev": true, - "license": "MIT", "dependencies": { "asn1js": "^3.0.5", "pvtsutils": "^1.3.5", @@ -2415,8 +3151,9 @@ }, "node_modules/@peculiar/json-schema": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -2425,15 +3162,16 @@ } }, "node_modules/@peculiar/webcrypto": { - "version": "1.4.3", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.5.tgz", + "integrity": "sha512-oDk93QCDGdxFRM8382Zdminzs44dg3M2+E5Np+JWkpqLDyJC9DviMh8F8mEJkYuUcUOGA5jHO5AJJ10MFWdbZw==", "dev": true, - "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", + "@peculiar/asn1-schema": "^2.3.8", "@peculiar/json-schema": "^1.1.12", - "pvtsutils": "^1.3.2", - "tslib": "^2.5.0", - "webcrypto-core": "^1.7.7" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.7.8" }, "engines": { "node": ">=10.12.0" @@ -2441,7 +3179,8 @@ }, "node_modules/@popperjs/core": { "version": "2.11.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -2449,7 +3188,8 @@ }, "node_modules/@react-aria/ssr": { "version": "3.9.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.1.tgz", + "integrity": "sha512-NqzkLFP8ZVI4GSorS0AYljC13QW2sc8bDqJOkBvkAt3M8gbcAXJWVRGtZBCRscki9RZF+rNlnPdg0G0jYkhJcg==", "dependencies": { "@swc/helpers": "^0.5.0" }, @@ -2462,12 +3202,14 @@ }, "node_modules/@repeaterjs/repeater": { "version": "3.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.5.tgz", + "integrity": "sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==", + "dev": true }, "node_modules/@restart/hooks": { - "version": "0.4.15", - "license": "MIT", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", + "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", "dependencies": { "dequal": "^2.0.3" }, @@ -2477,7 +3219,8 @@ }, "node_modules/@restart/ui": { "version": "1.6.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.6.tgz", + "integrity": "sha512-eC3puKuWE1SRYbojWHXnvCNHGgf3uzHCb6JOhnF4OXPibOIPEkR1sqDSkL643ydigxwh+ruCa1CmYHlzk7ikKA==", "dependencies": { "@babel/runtime": "^7.21.0", "@popperjs/core": "^2.11.6", @@ -2496,39 +3239,200 @@ }, "node_modules/@restart/ui/node_modules/uncontrollable": { "version": "8.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", + "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", "peerDependencies": { "react": ">=16.14.0" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.10.0.tgz", + "integrity": "sha512-/MeDQmcD96nVoRumKUljsYOLqfv1YFJps+0pTrb2Z9Nl/w5qNUysMaWQsrd1mvAlNT4yza1iVyIu4Q4AgF6V3A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.10.0.tgz", + "integrity": "sha512-lvu0jK97mZDJdpZKDnZI93I0Om8lSDaiPx3OiCk0RXn3E8CMPJNS/wxjAvSJJzhhZpfjXsjLWL8LnS6qET4VNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.10.0.tgz", + "integrity": "sha512-uFpayx8I8tyOvDkD7X6n0PriDRWxcqEjqgtlxnUA/G9oS93ur9aZ8c8BEpzFmsed1TH5WZNG5IONB8IiW90TQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.5", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.10.0.tgz", + "integrity": "sha512-nIdCX03qFKoR/MwQegQBK+qZoSpO3LESurVAC6s6jazLA1Mpmgzo3Nj3H1vydXp/JM29bkCiuF7tDuToj4+U9Q==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.10.0.tgz", + "integrity": "sha512-Fz7a+y5sYhYZMQFRkOyCs4PLhICAnxRX/GnWYReaAoruUzuRtcf+Qnw+T0CoAWbHCuz2gBUwmWnUgQ67fb3FYw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.10.0.tgz", + "integrity": "sha512-yPtF9jIix88orwfTi0lJiqINnlWo6p93MtZEoaehZnmCzEmLL0eqjA3eGVeyQhMtxdV+Mlsgfwhh0+M/k1/V7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.10.0.tgz", + "integrity": "sha512-9GW9yA30ib+vfFiwjX+N7PnjTnCMiUffhWj4vkG4ukYv1kJ4T9gHNg8zw+ChsOccM27G9yXrEtMScf1LaCuoWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.10.0.tgz", + "integrity": "sha512-X1ES+V4bMq2ws5fF4zHornxebNxMXye0ZZjUrzOrf7UMx1d6wMQtfcchZ8SqUnQPPHdOyOLW6fTcUiFgHFadRA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.10.0.tgz", + "integrity": "sha512-w/5OpT2EnI/Xvypw4FIhV34jmNqU5PZjZue2l2Y3ty1Ootm3SqhI+AmfhlUYGBTd9JnpneZCDnt3uNOiOBkMyw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.10.0.tgz", + "integrity": "sha512-q/meftEe3QlwQiGYxD9rWwB21DoKQ9Q8wA40of/of6yGHhZuGfZO0c3WYkN9dNlopHlNT3mf5BPsUSxoPuVQaw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.10.0.tgz", + "integrity": "sha512-NrR6667wlUfP0BHaEIKgYM/2va+Oj+RjZSASbBMnszM9k+1AmliRjHc3lJIiOehtSSjqYiO7R6KLNrWOX+YNSQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.10.0.tgz", + "integrity": "sha512-FV0Tpt84LPYDduIDcXvEC7HKtyXxdvhdAOvOeWMWbQNulxViH2O07QXkT/FffX4FqEI02jEbCJbr+YcuKdyyMg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.10.0.tgz", + "integrity": "sha512-OZoJd+o5TaTSQeFFQ6WjFCiltiYVjIdsXxwu/XZ8qRpsvMQr4UsVrE5UyT9RIvsnuF47DqkJKhhVZ2Q9YW9IpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true }, "node_modules/@swc/helpers": { - "version": "0.5.3", - "license": "Apache-2.0", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.6.tgz", + "integrity": "sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA==", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@testing-library/dom": { "version": "9.3.4", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.4.tgz", + "integrity": "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -2545,8 +3449,9 @@ }, "node_modules/@testing-library/react": { "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz", + "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^9.0.0", @@ -2562,50 +3467,60 @@ }, "node_modules/@types/aria-query": { "version": "5.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true }, "node_modules/@types/estree": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/@types/geojson": { - "version": "7946.0.13", - "license": "MIT" + "version": "7946.0.14", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, "node_modules/@types/js-yaml": { "version": "4.0.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true }, "node_modules/@types/json-schema": { "version": "7.0.15", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/json-stable-stringify": { "version": "1.0.36", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.36.tgz", + "integrity": "sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw==", + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/mapbox__point-geometry": { "version": "0.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==" }, "node_modules/@types/mapbox__vector-tile": { "version": "1.3.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", "dependencies": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", @@ -2613,31 +3528,36 @@ } }, "node_modules/@types/mapbox-gl": { - "version": "2.7.19", - "license": "MIT", + "version": "2.7.21", + "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-2.7.21.tgz", + "integrity": "sha512-Dx9MuF2kKgT/N22LsMUB4b3acFZh9clVqz9zv1fomoiPoBrJolwYxpWA/9LPO/2N0xWbKi4V+pkjTaFkkx/4wA==", "dependencies": { "@types/geojson": "*" } }, "node_modules/@types/node": { - "version": "20.11.0", + "version": "20.11.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz", + "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/pbf": { "version": "3.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" }, "node_modules/@types/prop-types": { "version": "15.7.11", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { "version": "18.2.21", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", + "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -2646,51 +3566,59 @@ }, "node_modules/@types/react-dom": { "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", "dev": true, - "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-transition-group": { "version": "4.4.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { "version": "0.16.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, "node_modules/@types/semver": { - "version": "7.5.6", - "dev": true, - "license": "MIT" + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", + "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "dev": true }, "node_modules/@types/supercluster": { "version": "7.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", "dependencies": { "@types/geojson": "*" } }, "node_modules/@types/warning": { "version": "3.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", + "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" }, "node_modules/@types/ws": { "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.5.0.tgz", + "integrity": "sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.5.0", @@ -2723,8 +3651,9 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2733,9 +3662,10 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2748,13 +3678,15 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/@typescript-eslint/parser": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.5.0.tgz", + "integrity": "sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.5.0", "@typescript-eslint/types": "6.5.0", @@ -2780,8 +3712,9 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz", + "integrity": "sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.5.0", "@typescript-eslint/visitor-keys": "6.5.0" @@ -2796,8 +3729,9 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.5.0.tgz", + "integrity": "sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "6.5.0", "@typescript-eslint/utils": "6.5.0", @@ -2822,8 +3756,9 @@ }, "node_modules/@typescript-eslint/types": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.5.0.tgz", + "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", "dev": true, - "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2834,8 +3769,9 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz", + "integrity": "sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.5.0", "@typescript-eslint/visitor-keys": "6.5.0", @@ -2860,8 +3796,9 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2870,9 +3807,10 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2885,13 +3823,15 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/@typescript-eslint/utils": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.5.0.tgz", + "integrity": "sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -2914,8 +3854,9 @@ }, "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -2924,9 +3865,10 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2939,13 +3881,15 @@ }, "node_modules/@typescript-eslint/utils/node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", + "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.5.0", "eslint-visitor-keys": "^3.4.1" @@ -2960,8 +3904,9 @@ }, "node_modules/@vitejs/plugin-react": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.4.tgz", + "integrity": "sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.22.9", "@babel/plugin-transform-react-jsx-self": "^7.22.5", @@ -2977,8 +3922,9 @@ }, "node_modules/@vitest/coverage-v8": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.1.3.tgz", + "integrity": "sha512-Uput7t3eIcbSTOTQBzGtS+0kah96bX+szW9qQrLeGe3UmgL2Akn8POnyC2lH7XsnREZOds9aCUTxgXf+4HX5RA==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.1", "@bcoe/v8-coverage": "^0.2.3", @@ -3003,8 +3949,9 @@ }, "node_modules/@vitest/expect": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.1.3.tgz", + "integrity": "sha512-MnJqsKc1Ko04lksF9XoRJza0bGGwTtqfbyrsYv5on4rcEkdo+QgUdITenBQBUltKzdxW7K3rWh+nXRULwsdaVg==", "dev": true, - "license": "MIT", "dependencies": { "@vitest/spy": "1.1.3", "@vitest/utils": "1.1.3", @@ -3016,8 +3963,9 @@ }, "node_modules/@vitest/runner": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.1.3.tgz", + "integrity": "sha512-Va2XbWMnhSdDEh/OFxyUltgQuuDRxnarK1hW5QNN4URpQrqq6jtt8cfww/pQQ4i0LjoYxh/3bYWvDFlR9tU73g==", "dev": true, - "license": "MIT", "dependencies": { "@vitest/utils": "1.1.3", "p-limit": "^5.0.0", @@ -3029,8 +3977,9 @@ }, "node_modules/@vitest/runner/node_modules/p-limit": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -3043,8 +3992,9 @@ }, "node_modules/@vitest/runner/node_modules/yocto-queue": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.20" }, @@ -3054,8 +4004,9 @@ }, "node_modules/@vitest/snapshot": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.1.3.tgz", + "integrity": "sha512-U0r8pRXsLAdxSVAyGNcqOU2H3Z4Y2dAAGGelL50O0QRMdi1WWeYHdrH/QWpN1e8juWfVKsb8B+pyJwTC+4Gy9w==", "dev": true, - "license": "MIT", "dependencies": { "magic-string": "^0.30.5", "pathe": "^1.1.1", @@ -3067,8 +4018,9 @@ }, "node_modules/@vitest/snapshot/node_modules/ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -3078,8 +4030,9 @@ }, "node_modules/@vitest/snapshot/node_modules/pretty-format": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -3091,13 +4044,15 @@ }, "node_modules/@vitest/snapshot/node_modules/react-is": { "version": "18.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, "node_modules/@vitest/spy": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.1.3.tgz", + "integrity": "sha512-Ec0qWyGS5LhATFQtldvChPTAHv08yHIOZfiNcjwRQbFPHpkih0md9KAbs7TfeIfL7OFKoe7B/6ukBTqByubXkQ==", "dev": true, - "license": "MIT", "dependencies": { "tinyspy": "^2.2.0" }, @@ -3107,8 +4062,9 @@ }, "node_modules/@vitest/utils": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.1.3.tgz", + "integrity": "sha512-Dyt3UMcdElTll2H75vhxfpZu03uFpXRCHxWnzcrFjZxT1kTbq8ALUYIeBgGolo1gldVdI0YSlQRacsqxTwNqwg==", "dev": true, - "license": "MIT", "dependencies": { "diff-sequences": "^29.6.3", "estree-walker": "^3.0.3", @@ -3121,8 +4077,9 @@ }, "node_modules/@vitest/utils/node_modules/ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -3132,8 +4089,9 @@ }, "node_modules/@vitest/utils/node_modules/pretty-format": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -3145,18 +4103,21 @@ }, "node_modules/@vitest/utils/node_modules/react-is": { "version": "18.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, "node_modules/@whatwg-node/events": { "version": "0.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@whatwg-node/events/-/events-0.0.3.tgz", + "integrity": "sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==", + "dev": true }, "node_modules/@whatwg-node/fetch": { "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.8.8.tgz", + "integrity": "sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==", "dev": true, - "license": "MIT", "dependencies": { "@peculiar/webcrypto": "^1.4.0", "@whatwg-node/node-fetch": "^0.3.6", @@ -3167,8 +4128,9 @@ }, "node_modules/@whatwg-node/node-fetch": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz", + "integrity": "sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==", "dev": true, - "license": "MIT", "dependencies": { "@whatwg-node/events": "^0.0.3", "busboy": "^1.6.0", @@ -3179,8 +4141,9 @@ }, "node_modules/acorn": { "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3190,24 +4153,27 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -3217,8 +4183,9 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -3229,8 +4196,9 @@ }, "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, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3244,8 +4212,9 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -3258,16 +4227,18 @@ }, "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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3280,31 +4251,38 @@ }, "node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/aria-query": { "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "deep-equal": "^2.0.5" } }, "node_modules/arr-union": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3312,8 +4290,9 @@ }, "node_modules/array-includes": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3330,22 +4309,43 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", + "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3356,8 +4356,9 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3373,8 +4374,9 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3389,28 +4391,31 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.2", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -3422,13 +4427,15 @@ }, "node_modules/asap": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true }, "node_modules/asn1js": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", + "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "pvtsutils": "^1.3.2", "pvutils": "^1.1.3", @@ -3440,49 +4447,56 @@ }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/assign-symbols": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "engines": { "node": ">=0.10.0" } }, "node_modules/ast-types-flow": { "version": "0.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/asynciterator.prototype": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" } }, "node_modules/asynckit": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/auto-bind": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz", + "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -3491,9 +4505,10 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3502,30 +4517,34 @@ } }, "node_modules/axe-core": { - "version": "4.8.3", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.4.tgz", + "integrity": "sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==", "dev": true, - "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axobject-query": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" } }, "node_modules/babel-plugin-syntax-trailing-function-commas": { "version": "7.0.0-beta.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "dev": true }, "node_modules/babel-preset-fbjs": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.0.0", @@ -3561,11 +4580,14 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -3580,21 +4602,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/bidi-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", "dev": true, - "license": "MIT", "dependencies": { "require-from-string": "^2.0.2" } }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -3603,6 +4626,8 @@ }, "node_modules/bootstrap": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.1.tgz", + "integrity": "sha512-jzwza3Yagduci2x0rr9MeFSORjcHpt0lRZukZPZQJT1Dth5qzV7XcgGqYzi39KGAVYR8QEDVoO0ubFKOxzMG+g==", "funding": [ { "type": "github", @@ -3613,15 +4638,15 @@ "url": "https://opencollective.com/bootstrap" } ], - "license": "MIT", "peerDependencies": { "@popperjs/core": "^2.11.8" } }, "node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3629,8 +4654,9 @@ }, "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, - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -3639,7 +4665,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.2", + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", "dev": true, "funding": [ { @@ -3655,10 +4683,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -3671,14 +4698,17 @@ }, "node_modules/bser": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -3694,7 +4724,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -3702,6 +4731,8 @@ }, "node_modules/busboy": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, "dependencies": { "streamsearch": "^1.1.0" @@ -3712,7 +4743,8 @@ }, "node_modules/bytewise": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", + "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", "dependencies": { "bytewise-core": "^1.2.2", "typewise": "^1.0.3" @@ -3720,27 +4752,35 @@ }, "node_modules/bytewise-core": { "version": "1.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", + "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", "dependencies": { "typewise-core": "^1.2" } }, "node_modules/cac": { "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/call-bind": { - "version": "1.0.5", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "license": "MIT", "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3748,16 +4788,18 @@ }, "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, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camel-case": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, - "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -3765,14 +4807,17 @@ }, "node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001576", + "version": "1.0.30001587", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", + "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", "dev": true, "funding": [ { @@ -3787,13 +4832,13 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/capital-case": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -3801,9 +4846,10 @@ } }, "node_modules/chai": { - "version": "4.4.0", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -3819,8 +4865,9 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3834,8 +4881,9 @@ }, "node_modules/change-case": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", "dev": true, - "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "capital-case": "^1.0.4", @@ -3853,8 +4901,9 @@ }, "node_modules/change-case-all": { "version": "1.0.15", + "resolved": "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.15.tgz", + "integrity": "sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==", "dev": true, - "license": "MIT", "dependencies": { "change-case": "^4.1.2", "is-lower-case": "^2.0.2", @@ -3870,13 +4919,15 @@ }, "node_modules/chardet": { "version": "0.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "node_modules/check-error": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -3886,20 +4937,23 @@ }, "node_modules/classnames": { "version": "2.5.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -3909,8 +4963,9 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -3920,8 +4975,9 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, - "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -3935,16 +4991,18 @@ }, "node_modules/cli-width": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, - "license": "ISC", "engines": { "node": ">= 10" } }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3956,8 +5014,9 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3972,16 +5031,18 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3991,18 +5052,21 @@ }, "node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/colorette": { "version": "2.0.20", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "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, - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -4012,21 +5076,24 @@ }, "node_modules/common-tags": { "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/constant-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -4035,13 +5102,15 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cosmiconfig": { "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, - "license": "MIT", "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -4065,15 +5134,17 @@ }, "node_modules/cross-fetch": { "version": "3.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-inspect": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.4.0" }, @@ -4083,8 +5154,9 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4096,8 +5168,9 @@ }, "node_modules/css-tree": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, - "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -4108,8 +5181,9 @@ }, "node_modules/cssstyle": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", "dev": true, - "license": "MIT", "dependencies": { "rrweb-cssom": "^0.6.0" }, @@ -4119,17 +5193,20 @@ }, "node_modules/csstype": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true }, "node_modules/data-urls": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" @@ -4140,18 +5217,21 @@ }, "node_modules/dataloader": { "version": "2.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==", + "dev": true }, "node_modules/debounce": { "version": "1.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true }, "node_modules/debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -4166,21 +5246,24 @@ }, "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decimal.js": { "version": "10.4.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true }, "node_modules/deep-eql": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -4190,8 +5273,9 @@ }, "node_modules/deep-equal": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", @@ -4221,13 +5305,15 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -4236,22 +5322,27 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -4266,39 +5357,44 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/dependency-graph": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/dequal": { "version": "2.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "engines": { "node": ">=6" } }, "node_modules/detect-indent": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/detect-libc": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, - "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -4308,16 +5404,18 @@ }, "node_modules/diff-sequences": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -4327,8 +5425,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4338,12 +5437,14 @@ }, "node_modules/dom-accessibility-api": { "version": "0.5.16", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true }, "node_modules/dom-helpers": { "version": "5.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -4351,50 +5452,57 @@ }, "node_modules/dot-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "node_modules/dotenv": { - "version": "16.3.1", + "version": "16.4.4", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", + "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/dset": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/earcut": { "version": "2.2.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, "node_modules/electron-to-chromium": { - "version": "1.4.629", - "dev": true, - "license": "ISC" + "version": "1.4.668", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.668.tgz", + "integrity": "sha512-ZOBocMYCehr9W31+GpMclR+KBaDZOoAEabLdhpZ8oU1JFDwIaFY0UDbpXVEUFc0BIP2O2Qn3rkfCjQmMR4T/bQ==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/entities": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -4404,56 +5512,60 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.22.3", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", + "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", + "typed-array-buffer": "^1.0.1", "typed-array-byte-length": "^1.0.0", "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4462,10 +5574,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -4482,30 +5622,36 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", + "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", "dev": true, - "license": "MIT", "dependencies": { "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.22.4", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.2", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", + "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.2", "has-tostringtag": "^1.0.0", @@ -4517,16 +5663,18 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "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, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4541,9 +5689,10 @@ }, "node_modules/esbuild": { "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -4576,17 +5725,19 @@ } }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4596,8 +5747,9 @@ }, "node_modules/eslint": { "version": "8.48.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", + "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -4649,8 +5801,9 @@ }, "node_modules/eslint-config-prettier": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, - "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -4660,8 +5813,9 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -4670,16 +5824,18 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -4694,16 +5850,18 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.findlastindex": "^1.2.2", @@ -4732,16 +5890,18 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4751,8 +5911,9 @@ }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.7", "aria-query": "^5.1.3", @@ -4780,8 +5941,9 @@ }, "node_modules/eslint-plugin-react": { "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -4809,8 +5971,9 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4820,16 +5983,18 @@ }, "node_modules/eslint-plugin-react-refresh": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.3.tgz", + "integrity": "sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==", "dev": true, - "license": "MIT", "peerDependencies": { "eslint": ">=7" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4839,8 +6004,9 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -4855,8 +6021,9 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -4870,8 +6037,9 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4881,8 +6049,9 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -4895,8 +6064,9 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4906,8 +6076,9 @@ }, "node_modules/espree": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -4922,8 +6093,9 @@ }, "node_modules/esquery": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -4933,8 +6105,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -4944,32 +6117,36 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/execa": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -4990,8 +6167,9 @@ }, "node_modules/execa/node_modules/get-stream": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "license": "MIT", "engines": { "node": ">=16" }, @@ -5001,8 +6179,9 @@ }, "node_modules/execa/node_modules/mimic-fn": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -5012,8 +6191,9 @@ }, "node_modules/execa/node_modules/onetime": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -5026,8 +6206,9 @@ }, "node_modules/execa/node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", "engines": { "node": ">=14" }, @@ -5037,7 +6218,8 @@ }, "node_modules/extend-shallow": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5047,8 +6229,9 @@ }, "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, - "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -5060,8 +6243,9 @@ }, "node_modules/extract-files": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/extract-files/-/extract-files-11.0.0.tgz", + "integrity": "sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20 || >= 14.13" }, @@ -5071,18 +6255,21 @@ }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "dev": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "dev": true, - "license": "MIT" + "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/fast-glob": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5096,8 +6283,9 @@ }, "node_modules/fast-glob/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, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -5107,50 +6295,57 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fast-querystring": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", "dev": true, - "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "node_modules/fast-url-parser": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^1.3.2" } }, "node_modules/fastq": { - "version": "1.16.0", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fb-watchman": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fbjs": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", "dev": true, - "license": "MIT", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -5163,13 +6358,15 @@ }, "node_modules/fbjs-css-vars": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "dev": true }, "node_modules/figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -5182,16 +6379,18 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -5201,8 +6400,9 @@ }, "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, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5212,8 +6412,9 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -5227,8 +6428,9 @@ }, "node_modules/flat-cache": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -5240,21 +6442,24 @@ }, "node_modules/flatted": { "version": "3.2.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "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, - "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/form-data": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -5266,13 +6471,16 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -5283,16 +6491,18 @@ }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -5308,57 +6518,68 @@ }, "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, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/geojson-vt": { "version": "3.2.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { - "version": "1.2.2", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" }, @@ -5367,12 +6588,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -5383,19 +6606,22 @@ }, "node_modules/get-value": { "version": "2.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "engines": { "node": ">=0.10.0" } }, "node_modules/gl-matrix": { "version": "3.4.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, "node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5413,8 +6639,9 @@ }, "node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -5424,7 +6651,8 @@ }, "node_modules/global-prefix": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -5436,7 +6664,8 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { "isexe": "^2.0.0" }, @@ -5446,16 +6675,18 @@ }, "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, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/globalthis": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.1.3" }, @@ -5468,8 +6699,9 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -5487,8 +6719,9 @@ }, "node_modules/gopd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -5498,20 +6731,23 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/graphql": { "version": "16.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.0.tgz", + "integrity": "sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, "node_modules/graphql-config": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/graphql-config/-/graphql-config-5.0.3.tgz", + "integrity": "sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==", "dev": true, - "license": "MIT", "dependencies": { "@graphql-tools/graphql-file-loader": "^8.0.0", "@graphql-tools/json-file-loader": "^8.0.0", @@ -5540,8 +6776,9 @@ }, "node_modules/graphql-config/node_modules/minimatch": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.3.tgz", + "integrity": "sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5551,7 +6788,8 @@ }, "node_modules/graphql-request": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-6.1.0.tgz", + "integrity": "sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==", "dependencies": { "@graphql-typed-document-node/core": "^3.2.0", "cross-fetch": "^3.1.5" @@ -5562,8 +6800,9 @@ }, "node_modules/graphql-tag": { "version": "2.12.6", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", + "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.1.0" }, @@ -5575,9 +6814,10 @@ } }, "node_modules/graphql-ws": { - "version": "5.14.3", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.15.0.tgz", + "integrity": "sha512-xWGAtm3fig9TIhSaNsg0FaDZ8Pyn/3re3RFlP4rhQcmjRDIPpk1EhRuNB+YSJtLzttyuToaDiNhwT1OMoGnJnw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5587,34 +6827,38 @@ }, "node_modules/has": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/has-bigints": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5622,8 +6866,9 @@ }, "node_modules/has-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5633,8 +6878,9 @@ }, "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, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5643,11 +6889,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -5657,9 +6904,10 @@ } }, "node_modules/hasown": { - "version": "2.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", + "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -5669,8 +6917,9 @@ }, "node_modules/header-case": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", "dev": true, - "license": "MIT", "dependencies": { "capital-case": "^1.0.4", "tslib": "^2.0.3" @@ -5678,8 +6927,9 @@ }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-encoding": "^3.1.1" }, @@ -5689,13 +6939,15 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/http-proxy-agent": { - "version": "7.0.0", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.1.tgz", + "integrity": "sha512-My1KCEPs6A0hb4qCVzYp8iEvA8j8YqcvXLZZH8C9OFuTYpYjHE7N2dtG3mRl1HMD4+VGXpF3XcDVcxGBT7yDZQ==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -5705,9 +6957,10 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.2", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.3.tgz", + "integrity": "sha512-kCnwztfX0KZJSLOBrcL0emLeFako55NWMovvyPP2AjsghNk9RB1yjSI+jVumPHYZsNXegNoqupSW9IY3afSH8w==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -5718,16 +6971,18 @@ }, "node_modules/human-signals": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } }, "node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -5737,6 +6992,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -5750,29 +7007,31 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { - "version": "5.3.0", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immutable": { "version": "3.7.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", + "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.8.0" } }, "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, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -5786,16 +7045,18 @@ }, "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, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/import-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.2" }, @@ -5805,24 +7066,27 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -5830,17 +7094,20 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/inquirer": { "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -5863,11 +7130,12 @@ } }, "node_modules/internal-slot": { - "version": "1.0.6", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -5877,15 +7145,17 @@ }, "node_modules/invariant": { "version": "2.2.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dependencies": { "loose-envify": "^1.0.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, - "license": "MIT", "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" @@ -5896,8 +7166,9 @@ }, "node_modules/is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -5910,13 +7181,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5924,13 +7198,15 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-async-function": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5943,8 +7219,9 @@ }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -5954,8 +7231,9 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -5969,8 +7247,9 @@ }, "node_modules/is-callable": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5980,8 +7259,9 @@ }, "node_modules/is-core-module": { "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.0" }, @@ -5991,8 +7271,9 @@ }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6005,23 +7286,26 @@ }, "node_modules/is-extendable": { "version": "0.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "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": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -6031,16 +7315,18 @@ }, "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==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6053,8 +7339,9 @@ }, "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, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -6064,32 +7351,36 @@ }, "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-lower-case": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz", + "integrity": "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/is-map": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6099,16 +7390,18 @@ }, "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, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6121,15 +7414,17 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-object": { "version": "2.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { "isobject": "^3.0.1" }, @@ -6139,13 +7434,15 @@ }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true }, "node_modules/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, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6159,8 +7456,9 @@ }, "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, - "license": "MIT", "dependencies": { "is-unc-path": "^1.0.0" }, @@ -6170,16 +7468,18 @@ }, "node_modules/is-set": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -6189,8 +7489,9 @@ }, "node_modules/is-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -6200,8 +7501,9 @@ }, "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, - "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6214,8 +7516,9 @@ }, "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, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -6227,11 +7530,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, - "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -6242,8 +7546,9 @@ }, "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, - "license": "MIT", "dependencies": { "unc-path-regex": "^0.1.2" }, @@ -6253,8 +7558,9 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -6264,24 +7570,27 @@ }, "node_modules/is-upper-case": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz", + "integrity": "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/is-weakmap": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -6291,8 +7600,9 @@ }, "node_modules/is-weakset": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -6303,48 +7613,55 @@ }, "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, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { "node": ">=0.10.0" } }, "node_modules/isomorphic-ws": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", "dev": true, - "license": "MIT", "peerDependencies": { "ws": "*" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -6356,8 +7673,9 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -6369,8 +7687,9 @@ }, "node_modules/istanbul-reports": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -6381,8 +7700,9 @@ }, "node_modules/iterator.prototype": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", @@ -6393,28 +7713,32 @@ }, "node_modules/jiti": { "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "dev": true, - "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/jose": { - "version": "5.2.0", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.2.2.tgz", + "integrity": "sha512-/WByRr4jDcsKlvMd1dRJnPfS1GVO3WuKyaurJ/vvXcOaUQO8rnNObCQMlv/5uCceVQIq5Q4WLF44ohsdiTohdg==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } }, "node_modules/js-tokens": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -6424,8 +7748,9 @@ }, "node_modules/jsdom": { "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz", + "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==", "dev": true, - "license": "MIT", "dependencies": { "@asamuzakjp/dom-selector": "^2.0.1", "cssstyle": "^4.0.1", @@ -6463,8 +7788,9 @@ }, "node_modules/jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -6474,23 +7800,27 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "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/json-stable-stringify": { - "version": "1.1.0", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "isarray": "^2.0.5", @@ -6506,17 +7836,20 @@ }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json-stringify-pretty-compact": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", + "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==" }, "node_modules/json-to-pretty-yaml": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz", + "integrity": "sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==", "dev": true, - "license": "Apache-2.0", "dependencies": { "remedial": "^1.0.7", "remove-trailing-spaces": "^1.0.6" @@ -6527,8 +7860,9 @@ }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -6537,22 +7871,25 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "dev": true, - "license": "MIT" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true }, "node_modules/jsonify": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", "dev": true, - "license": "Public Domain", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/jsx-ast-utils": { "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -6565,40 +7902,46 @@ }, "node_modules/kdbush": { "version": "4.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" } }, "node_modules/language-subtag-registry": { "version": "0.3.22", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true }, "node_modules/language-tags": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, - "license": "MIT", "dependencies": { "language-subtag-registry": "~0.3.2" } }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -6609,13 +7952,15 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/listr2": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", "dev": true, - "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -6640,8 +7985,9 @@ }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6656,8 +8002,9 @@ }, "node_modules/local-pkg": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", "dev": true, - "license": "MIT", "dependencies": { "mlly": "^1.4.2", "pkg-types": "^1.0.3" @@ -6671,8 +8018,9 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -6685,23 +8033,27 @@ }, "node_modules/lodash": { "version": "4.17.21", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.sortby": { "version": "4.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -6715,8 +8067,9 @@ }, "node_modules/log-update": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -6732,8 +8085,9 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -6748,7 +8102,8 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -6758,48 +8113,54 @@ }, "node_modules/loupe": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lower-case": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/lower-case-first": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz", + "integrity": "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/lz-string": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "license": "MIT", "bin": { "lz-string": "bin/bin.js" } }, "node_modules/magic-string": { - "version": "0.30.5", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -6808,19 +8169,21 @@ } }, "node_modules/magicast": { - "version": "0.3.2", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", + "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", "source-map-js": "^1.0.2" } }, "node_modules/make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -6833,8 +8196,9 @@ }, "node_modules/make-dir/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -6843,9 +8207,10 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -6858,13 +8223,15 @@ }, "node_modules/make-dir/node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/map-cache": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6910,26 +8277,30 @@ }, "node_modules/mdn-data": { "version": "2.0.30", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true }, "node_modules/merge-stream": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/meros": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.3.0.tgz", + "integrity": "sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==", "dev": true, - "license": "MIT", "engines": { "node": ">=13" }, @@ -6944,8 +8315,9 @@ }, "node_modules/micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -6956,16 +8328,18 @@ }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -6975,16 +8349,18 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "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, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6994,15 +8370,17 @@ }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/mlly": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^8.11.3", "pathe": "^1.1.2", @@ -7012,20 +8390,25 @@ }, "node_modules/ms": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/murmurhash-js": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" }, "node_modules/mute-stream": { "version": "0.0.8", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -7033,7 +8416,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -7043,26 +8425,33 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/no-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "node_modules/node-addon-api": { - "version": "7.0.0", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", "dev": true, - "license": "MIT" + "engines": { + "node": "^16 || ^18 || >= 20" + } }, "node_modules/node-fetch": { "version": "2.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -7080,15 +8469,18 @@ }, "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", - "license": "MIT", + "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" @@ -7096,18 +8488,21 @@ }, "node_modules/node-int64": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true }, "node_modules/node-releases": { "version": "2.0.14", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true }, "node_modules/normalize-path": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, - "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -7117,8 +8512,9 @@ }, "node_modules/npm-run-path": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -7131,8 +8527,9 @@ }, "node_modules/npm-run-path/node_modules/path-key": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -7142,28 +8539,32 @@ }, "node_modules/nullthrows": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, - "license": "MIT", "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, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -7177,16 +8578,18 @@ }, "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, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -7202,8 +8605,9 @@ }, "node_modules/object.entries": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", + "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7215,8 +8619,9 @@ }, "node_modules/object.fromentries": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7230,20 +8635,23 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" } }, "node_modules/object.hasown": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.2.0", "es-abstract": "^1.22.1" @@ -7254,8 +8662,9 @@ }, "node_modules/object.values": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7270,16 +8679,18 @@ }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -7292,8 +8703,9 @@ }, "node_modules/optionator": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -7308,8 +8720,9 @@ }, "node_modules/ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -7330,16 +8743,18 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -7352,8 +8767,9 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -7366,8 +8782,9 @@ }, "node_modules/p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -7380,16 +8797,18 @@ }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/param-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, - "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -7397,8 +8816,9 @@ }, "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, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -7408,8 +8828,9 @@ }, "node_modules/parse-filepath": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, - "license": "MIT", "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -7421,8 +8842,9 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -7438,8 +8860,9 @@ }, "node_modules/parse5": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, - "license": "MIT", "dependencies": { "entities": "^4.4.0" }, @@ -7449,8 +8872,9 @@ }, "node_modules/pascal-case": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -7458,8 +8882,9 @@ }, "node_modules/path-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", "dev": true, - "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -7467,37 +8892,42 @@ }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-root": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, - "license": "MIT", "dependencies": { "path-root-regex": "^0.1.0" }, @@ -7507,36 +8937,41 @@ }, "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": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathe": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbf": { "version": "3.2.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -7547,13 +8982,15 @@ }, "node_modules/picocolors": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "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, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -7563,8 +9000,9 @@ }, "node_modules/pkg-types": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", "dev": true, - "license": "MIT", "dependencies": { "jsonc-parser": "^3.2.0", "mlly": "^1.2.0", @@ -7572,7 +9010,9 @@ } }, "node_modules/postcss": { - "version": "8.4.33", + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, "funding": [ { @@ -7588,7 +9028,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -7600,20 +9039,23 @@ }, "node_modules/potpack": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", + "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==" }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -7626,8 +9068,9 @@ }, "node_modules/pretty-format": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -7639,8 +9082,9 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7650,15 +9094,17 @@ }, "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, - "license": "MIT", "dependencies": { "asap": "~2.0.3" } }, "node_modules/prop-types": { "version": "15.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -7667,7 +9113,8 @@ }, "node_modules/prop-types-extra": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", + "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", "dependencies": { "react-is": "^16.3.2", "warning": "^4.0.0" @@ -7678,49 +9125,59 @@ }, "node_modules/prop-types-extra/node_modules/react-is": { "version": "16.13.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/protocol-buffers-schema": { "version": "3.6.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, "node_modules/psl": { "version": "1.9.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true }, "node_modules/punycode": { "version": "1.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true }, "node_modules/pvtsutils": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.5.tgz", + "integrity": "sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.6.1" } }, "node_modules/pvutils": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/querystringify": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -7735,16 +9192,17 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/quickselect": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" }, "node_modules/react": { "version": "18.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -7754,7 +9212,8 @@ }, "node_modules/react-bootstrap": { "version": "2.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.8.0.tgz", + "integrity": "sha512-e/aNtxl0Z2ozrIaR82jr6Zz7ss9GSoaXpQaxmvtDUsTZIq/XalkduR/ZXP6vbQHz2T4syvjA+4FbtwELxxmpww==", "dependencies": { "@babel/runtime": "^7.21.0", "@restart/hooks": "^0.4.9", @@ -7782,7 +9241,8 @@ }, "node_modules/react-dom": { "version": "18.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -7793,16 +9253,19 @@ }, "node_modules/react-is": { "version": "17.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "node_modules/react-lifecycles-compat": { "version": "3.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, "node_modules/react-map-gl": { "version": "7.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/react-map-gl/-/react-map-gl-7.1.5.tgz", + "integrity": "sha512-YS2u2cSLlZVGjfa394f0snO6f6ZwZVTKqQwjbq/jj0w7fHU01Mn+Xqvm/Qr7nZChoT3OG7kh8JluDcXeBrDG/g==", "dependencies": { "@maplibre/maplibre-gl-style-spec": "^19.2.1", "@types/mapbox-gl": ">=1.0.0" @@ -7824,15 +9287,17 @@ }, "node_modules/react-refresh": { "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-transition-group": { "version": "4.4.5", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -7846,8 +9311,9 @@ }, "node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -7858,14 +9324,16 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", + "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "get-intrinsic": "^1.2.3", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -7878,16 +9346,19 @@ }, "node_modules/regenerator-runtime": { "version": "0.14.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -7898,8 +9369,9 @@ }, "node_modules/relay-runtime": { "version": "12.0.0", + "resolved": "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz", + "integrity": "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", "fbjs": "^3.0.0", @@ -7908,52 +9380,60 @@ }, "node_modules/remedial": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz", + "integrity": "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==", "dev": true, - "license": "(MIT OR Apache-2.0)", "engines": { "node": "*" } }, "node_modules/remove-trailing-separator": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true }, "node_modules/remove-trailing-spaces": { "version": "1.0.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz", + "integrity": "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==", + "dev": true }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/requires-port": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "node_modules/resolve": { "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -7968,23 +9448,26 @@ }, "node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve-protobuf-schema": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", "dependencies": { "protocol-buffers-schema": "^3.3.1" } }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -7995,22 +9478,25 @@ }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rfdc": { - "version": "1.3.0", - "dev": true, - "license": "MIT" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -8023,8 +9509,9 @@ }, "node_modules/rollup": { "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, - "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -8038,19 +9525,23 @@ }, "node_modules/rrweb-cssom": { "version": "0.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true }, "node_modules/run-async": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -8066,30 +9557,32 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rw": { "version": "1.3.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/rxjs": { "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.0.1", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -8102,6 +9595,8 @@ }, "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": [ { @@ -8116,16 +9611,16 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-regex-test": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, "engines": { @@ -8137,13 +9632,15 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/saxes": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -8153,28 +9650,32 @@ }, "node_modules/scheduler": { "version": "0.23.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/scuid": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz", + "integrity": "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==", + "dev": true }, "node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/sentence-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -8183,18 +9684,22 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/set-function-length": { - "version": "1.1.1", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", "dev": true, - "license": "MIT", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -8202,8 +9707,9 @@ }, "node_modules/set-function-name": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "functions-have-names": "^1.2.3", @@ -8215,7 +9721,8 @@ }, "node_modules/set-value": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -8228,13 +9735,15 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -8244,28 +9753,35 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel": { - "version": "1.0.4", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8273,31 +9789,36 @@ }, "node_modules/siginfo": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true }, "node_modules/signal-exit": { "version": "3.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/signedsource": { "version": "1.0.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", + "integrity": "sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==", + "dev": true }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -8309,8 +9830,9 @@ }, "node_modules/snake-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, - "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -8318,21 +9840,24 @@ }, "node_modules/sort-asc": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", + "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", "engines": { "node": ">=0.10.0" } }, "node_modules/sort-desc": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", + "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", "engines": { "node": ">=0.10.0" } }, "node_modules/sort-object": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", + "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", "dependencies": { "bytewise": "^1.1.0", "get-value": "^2.0.2", @@ -8347,23 +9872,26 @@ }, "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, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/split-string": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dependencies": { "extend-shallow": "^3.0.0" }, @@ -8373,7 +9901,8 @@ }, "node_modules/split-string/node_modules/extend-shallow": { "version": "3.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -8384,7 +9913,8 @@ }, "node_modules/split-string/node_modules/is-extendable": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -8394,26 +9924,30 @@ }, "node_modules/sponge-case": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz", + "integrity": "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/stackback": { "version": "0.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true }, "node_modules/std-env": { "version": "3.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, - "license": "MIT", "dependencies": { "internal-slot": "^1.0.4" }, @@ -8423,6 +9957,8 @@ }, "node_modules/streamsearch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -8430,21 +9966,24 @@ }, "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, - "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-env-interpolation": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz", + "integrity": "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==", + "dev": true }, "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==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8456,13 +9995,15 @@ }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string.prototype.matchall": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8480,8 +10021,9 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8496,8 +10038,9 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8509,8 +10052,9 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8522,8 +10066,9 @@ }, "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==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8533,16 +10078,18 @@ }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-final-newline": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -8552,8 +10099,9 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -8563,8 +10111,9 @@ }, "node_modules/strip-literal": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^8.10.0" }, @@ -8574,15 +10123,17 @@ }, "node_modules/supercluster": { "version": "8.0.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", "dependencies": { "kdbush": "^4.0.2" } }, "node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8592,8 +10143,9 @@ }, "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, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8603,21 +10155,24 @@ }, "node_modules/swap-case": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz", + "integrity": "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/symbol-tree": { "version": "3.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -8629,51 +10184,59 @@ }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/through": { "version": "2.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/tinybench": { - "version": "2.5.1", - "dev": true, - "license": "MIT" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", + "dev": true }, "node_modules/tinypool": { - "version": "0.8.1", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/tinyqueue": { "version": "2.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" }, "node_modules/tinyspy": { - "version": "2.2.0", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/title-case": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", + "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -8683,16 +10246,18 @@ }, "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, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -8702,8 +10267,9 @@ }, "node_modules/tough-cookie": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -8716,16 +10282,18 @@ }, "node_modules/tough-cookie/node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tr46": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -8735,18 +10303,20 @@ }, "node_modules/tr46/node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ts-api-utils": { - "version": "1.0.3", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -8754,13 +10324,15 @@ }, "node_modules/ts-log": { "version": "2.2.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ts-log/-/ts-log-2.2.5.tgz", + "integrity": "sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==", + "dev": true }, "node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -8770,8 +10342,9 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -8781,12 +10354,14 @@ }, "node_modules/tslib": { "version": "2.6.2", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -8796,16 +10371,18 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -8814,13 +10391,14 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", + "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -8828,8 +10406,9 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -8845,8 +10424,9 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -8863,8 +10443,9 @@ }, "node_modules/typed-array-length": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "for-each": "^0.3.3", @@ -8876,8 +10457,9 @@ }, "node_modules/typescript": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8888,17 +10470,21 @@ }, "node_modules/typewise": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", + "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", "dependencies": { "typewise-core": "^1.2.0" } }, "node_modules/typewise-core": { "version": "1.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", + "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==" }, "node_modules/ua-parser-js": { "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", "dev": true, "funding": [ { @@ -8914,20 +10500,21 @@ "url": "https://github.com/sponsors/faisalman" } ], - "license": "MIT", "engines": { "node": "*" } }, "node_modules/ufo": { - "version": "1.3.2", - "dev": true, - "license": "MIT" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", + "dev": true }, "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, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -8940,15 +10527,17 @@ }, "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": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/uncontrollable": { "version": "7.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", + "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", "dependencies": { "@babel/runtime": "^7.6.3", "@types/react": ">=16.9.11", @@ -8961,12 +10550,14 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, "node_modules/union-value": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -8979,16 +10570,18 @@ }, "node_modules/universalify": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unixify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", "dev": true, - "license": "MIT", "dependencies": { "normalize-path": "^2.1.1" }, @@ -8998,6 +10591,8 @@ }, "node_modules/update-browserslist-db": { "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -9013,7 +10608,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -9027,40 +10621,45 @@ }, "node_modules/upper-case": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/upper-case-first": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "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, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uri-js/node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/url-parse": { "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -9068,18 +10667,21 @@ }, "node_modules/urlpattern-polyfill": { "version": "8.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz", + "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==", + "dev": true }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/v8-to-istanbul": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, - "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -9091,16 +10693,18 @@ }, "node_modules/value-or-promise": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/vite": { "version": "4.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", + "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -9153,45 +10757,384 @@ }, "node_modules/vite-node": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.1.3.tgz", + "integrity": "sha512-BLSO72YAkIUuNrOx+8uznYICJfTEbvBAmWClY3hpath5+h1mbPS5OMn42lrTxXuyCazVyZoDkSRnju78GiVCqA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite-node/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": ">=12" } }, - "node_modules/vite-node/node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", + "node_modules/vite-node/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=12" } }, "node_modules/vite-node/node_modules/esbuild": { - "version": "0.19.11", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -9199,35 +11142,36 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/vite-node/node_modules/rollup": { - "version": "4.9.5", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.10.0.tgz", + "integrity": "sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -9239,29 +11183,30 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.10.0", + "@rollup/rollup-android-arm64": "4.10.0", + "@rollup/rollup-darwin-arm64": "4.10.0", + "@rollup/rollup-darwin-x64": "4.10.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.10.0", + "@rollup/rollup-linux-arm64-gnu": "4.10.0", + "@rollup/rollup-linux-arm64-musl": "4.10.0", + "@rollup/rollup-linux-riscv64-gnu": "4.10.0", + "@rollup/rollup-linux-x64-gnu": "4.10.0", + "@rollup/rollup-linux-x64-musl": "4.10.0", + "@rollup/rollup-win32-arm64-msvc": "4.10.0", + "@rollup/rollup-win32-ia32-msvc": "4.10.0", + "@rollup/rollup-win32-x64-msvc": "4.10.0", "fsevents": "~2.3.2" } }, "node_modules/vite-node/node_modules/vite": { - "version": "5.0.11", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.1.tgz", + "integrity": "sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "^0.19.3", - "postcss": "^8.4.32", + "postcss": "^8.4.35", "rollup": "^4.2.0" }, "bin": { @@ -9311,8 +11256,9 @@ }, "node_modules/vitest": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.1.3.tgz", + "integrity": "sha512-2l8om1NOkiA90/Y207PsEvJLYygddsOyr81wLQ20Ra8IlLKbyQncWsGZjnbkyG2KwwuTXLQjEPOJuxGMG8qJBQ==", "dev": true, - "license": "MIT", "dependencies": { "@vitest/expect": "1.1.3", "@vitest/runner": "1.1.3", @@ -9374,13 +11320,78 @@ } } }, + "node_modules/vitest/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/vitest/node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -9389,11 +11400,284 @@ "node": ">=12" } }, + "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitest/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/vitest/node_modules/esbuild": { - "version": "0.19.11", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -9401,35 +11685,36 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/vitest/node_modules/rollup": { - "version": "4.9.5", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.10.0.tgz", + "integrity": "sha512-t2v9G2AKxcQ8yrG+WGxctBes1AomT0M4ND7jTFBCVPXQ/WFTvNSefIrNSmLKhIKBrvN8SG+CZslimJcT3W2u2g==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -9441,29 +11726,30 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.10.0", + "@rollup/rollup-android-arm64": "4.10.0", + "@rollup/rollup-darwin-arm64": "4.10.0", + "@rollup/rollup-darwin-x64": "4.10.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.10.0", + "@rollup/rollup-linux-arm64-gnu": "4.10.0", + "@rollup/rollup-linux-arm64-musl": "4.10.0", + "@rollup/rollup-linux-riscv64-gnu": "4.10.0", + "@rollup/rollup-linux-x64-gnu": "4.10.0", + "@rollup/rollup-linux-x64-musl": "4.10.0", + "@rollup/rollup-win32-arm64-msvc": "4.10.0", + "@rollup/rollup-win32-ia32-msvc": "4.10.0", + "@rollup/rollup-win32-x64-msvc": "4.10.0", "fsevents": "~2.3.2" } }, "node_modules/vitest/node_modules/vite": { - "version": "5.0.11", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.1.tgz", + "integrity": "sha512-wclpAgY3F1tR7t9LL5CcHC41YPkQIpKUGeIuT8MdNwNZr6OqOTLs7JX5vIHAtzqLWXts0T+GDrh9pN2arneKqg==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "^0.19.3", - "postcss": "^8.4.32", + "postcss": "^8.4.35", "rollup": "^4.2.0" }, "bin": { @@ -9513,7 +11799,8 @@ }, "node_modules/vt-pbf": { "version": "3.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", "dependencies": { "@mapbox/point-geometry": "0.1.0", "@mapbox/vector-tile": "^1.3.1", @@ -9522,8 +11809,9 @@ }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, - "license": "MIT", "dependencies": { "xml-name-validator": "^5.0.0" }, @@ -9533,51 +11821,57 @@ }, "node_modules/warning": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/web-streams-polyfill": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webcrypto-core": { - "version": "1.7.7", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.8.tgz", + "integrity": "sha512-eBR98r9nQXTqXt/yDRtInszPMjTaSAMJAFDg2AHsgrnczawT1asx9YNBX6k5p+MekbPF4+s/UJJrr88zsTqkSg==", "dev": true, - "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", + "@peculiar/asn1-schema": "^2.3.8", "@peculiar/json-schema": "^1.1.12", "asn1js": "^3.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2" } }, "node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/whatwg-encoding": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, - "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -9587,8 +11881,9 @@ }, "node_modules/whatwg-encoding/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -9598,16 +11893,18 @@ }, "node_modules/whatwg-mimetype": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/whatwg-url": { "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" @@ -9618,8 +11915,9 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -9632,8 +11930,9 @@ }, "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, - "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -9647,8 +11946,9 @@ }, "node_modules/which-builtin-type": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, - "license": "MIT", "dependencies": { "function.prototype.name": "^1.1.5", "has-tostringtag": "^1.0.0", @@ -9672,8 +11972,9 @@ }, "node_modules/which-collection": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, - "license": "MIT", "dependencies": { "is-map": "^2.0.1", "is-set": "^2.0.1", @@ -9686,19 +11987,21 @@ }, "node_modules/which-module": { "version": "2.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.13", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dev": true, - "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -9709,8 +12012,9 @@ }, "node_modules/why-is-node-running": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", "dev": true, - "license": "MIT", "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" @@ -9724,8 +12028,9 @@ }, "node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9737,13 +12042,15 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -9762,47 +12069,54 @@ }, "node_modules/xml-name-validator": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=18" } }, "node_modules/xmlchars": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true, - "license": "ISC", "engines": { "node": ">= 14" } }, "node_modules/yaml-ast-parser": { "version": "0.0.43", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -9818,16 +12132,18 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, From e55c2c91d234de98f15dde60401823bf051f23ff Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 14 Feb 2024 17:37:19 +0100 Subject: [PATCH 085/101] Apply review feedback --- docs/sandbox/MapboxVectorTilesApi.md | 7 ++++--- .../java/org/opentripplanner/apis/support/TileJson.java | 2 +- .../java/org/opentripplanner/framework/io/HttpUtils.java | 2 +- .../standalone/config/routerconfig/VectorTileConfig.java | 7 ++++--- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/docs/sandbox/MapboxVectorTilesApi.md b/docs/sandbox/MapboxVectorTilesApi.md index 11bd195a9d8..7183bdf8b7f 100644 --- a/docs/sandbox/MapboxVectorTilesApi.md +++ b/docs/sandbox/MapboxVectorTilesApi.md @@ -169,12 +169,13 @@ For each layer, the configuration includes: Custom attribution to be returned in `tilejson.json` -By default the `attribution` property in `tilejson.json` is computed from the names and +By default the, `attribution` property in `tilejson.json` is computed from the names and URLs of the feed publishers. If the OTP deployment contains many fields, this can become very unwieldy. -This configuration parameter allows you to set the `attribution` to any string you wish, -for example `TriMet, C-Tran, SMART and Friends`. +This configuration parameter allows you to set the `attribution` to any string you wish +including HTML tags, +for example `Regional Partners`.

    basePath

    diff --git a/src/main/java/org/opentripplanner/apis/support/TileJson.java b/src/main/java/org/opentripplanner/apis/support/TileJson.java index fcd6e84cc06..1f5c090c16d 100644 --- a/src/main/java/org/opentripplanner/apis/support/TileJson.java +++ b/src/main/java/org/opentripplanner/apis/support/TileJson.java @@ -98,7 +98,7 @@ private static String attributionFromFeedInfo(Collection feedInfos) { return feedInfos .stream() .map(feedInfo -> - "" + feedInfo.getPublisherName() + "" + "%s".formatted(feedInfo.getPublisherUrl(), feedInfo.getPublisherName()) ) .distinct() .collect(Collectors.joining(", ")); diff --git a/src/main/java/org/opentripplanner/framework/io/HttpUtils.java b/src/main/java/org/opentripplanner/framework/io/HttpUtils.java index d8b3dc542a6..672c9b9c481 100644 --- a/src/main/java/org/opentripplanner/framework/io/HttpUtils.java +++ b/src/main/java/org/opentripplanner/framework/io/HttpUtils.java @@ -47,6 +47,6 @@ public static String getBaseAddress(UriInfo uri, HttpHeaders headers) { * https://stackoverflow.com/questions/66042952/http-proxy-behavior-for-x-forwarded-host-header */ private static String extractHost(String xForwardedFor) { - return Arrays.stream(xForwardedFor.split(",")).map(String::strip).toList().getFirst(); + return Arrays.stream(xForwardedFor.split(",")).map(String::strip).findFirst().get(); } } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java index f0c6cb7d9b0..d6beac6d256 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java @@ -87,12 +87,13 @@ public static VectorTileConfig mapVectorTilesParameters(NodeAdapter node, String .summary("Custom attribution to be returned in `tilejson.json`") .description( """ - By default the `attribution` property in `tilejson.json` is computed from the names and + By default the, `attribution` property in `tilejson.json` is computed from the names and URLs of the feed publishers. If the OTP deployment contains many fields, this can become very unwieldy. - This configuration parameter allows you to set the `attribution` to any string you wish, - for example `TriMet, C-Tran, SMART and Friends`. + This configuration parameter allows you to set the `attribution` to any string you wish + including HTML tags, + for example `Regional Partners`. """ ) .asString(DEFAULT.attribution) From 6e7fbdaf5d307d7314331de7920cca38440155c7 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 15 Feb 2024 09:21:33 +0000 Subject: [PATCH 086/101] Add changelog entry for #5632 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 86f6355f37f..39aa4b8c329 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -91,6 +91,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Remove `VehicleToStopHeuristics` [#5381](https://github.com/opentripplanner/OpenTripPlanner/pull/5381) - Set defaults of the modes WALK, even if one and not the others are set [#5675](https://github.com/opentripplanner/OpenTripPlanner/pull/5675) - Reduce flex default access/egress penalty [#5674](https://github.com/opentripplanner/OpenTripPlanner/pull/5674) +- Add scooter preferences [#5632](https://github.com/opentripplanner/OpenTripPlanner/pull/5632) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 635ce6786ae71a72dcff786dfdba27cb1eebacd3 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Thu, 15 Feb 2024 09:22:00 +0000 Subject: [PATCH 087/101] Bump serialization version id for #5632 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c066d35e112..f12da275eb6 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 144 + 145 30.2 2.50 From 9163978720f51bc5b3e23a683d6885c004a02a23 Mon Sep 17 00:00:00 2001 From: Eivind Morris Bakke Date: Thu, 15 Feb 2024 10:55:26 +0100 Subject: [PATCH 088/101] Add GroupStop layer to new debug frontend (#5666) * Adds GroupStop areas to new debug UI. Done with a listing of all GroupStops for now. * Adds comment explaining why we precompute geometries in the GroupStopLayerBuilder. * Adds top level JavaDoc to GroupStopLayerBuilder. --- .../src/components/MapView/MapView.tsx | 2 +- .../apis/vectortiles/DebugStyleSpec.java | 10 ++++ .../GraphInspectorVectorTileResource.java | 15 +++++- .../apis/vectortiles/model/LayerType.java | 1 + .../vector/stop/GroupStopLayerBuilder.java | 50 +++++++++++++++++++ .../service/DefaultTransitService.java | 7 +++ .../transit/service/TransitService.java | 3 ++ .../apis/vectortiles/DebugStyleSpecTest.java | 3 +- .../apis/vectortiles/style.json | 13 +++++ 9 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/opentripplanner/inspector/vector/stop/GroupStopLayerBuilder.java diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 96b4e820bae..36d98be79b6 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -75,7 +75,7 @@ export function MapView({ }} // it's unfortunate that you have to list these layers here. // maybe there is a way around it: https://github.com/visgl/react-map-gl/discussions/2343 - interactiveLayerIds={['regular-stop', 'area-stop', 'vertex', 'edge', 'link']} + interactiveLayerIds={['regular-stop', 'area-stop', 'group-stop', 'vertex', 'edge', 'link']} onClick={showFeaturePropPopup} // put lat/long in URL and pan to it on page reload hash={true} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index f45d7d36413..8350a10d670 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -53,6 +53,7 @@ public class DebugStyleSpec { static StyleSpec build( VectorSourceLayer regularStops, VectorSourceLayer areaStops, + VectorSourceLayer groupStops, VectorSourceLayer edges, VectorSourceLayer vertices ) { @@ -122,6 +123,15 @@ static StyleSpec build( .fillOutlineColor(BLACK) .minZoom(6) .maxZoom(MAX_ZOOM), + StyleBuilder + .ofId("group-stop") + .typeFill() + .vectorSourceLayer(groupStops) + .fillColor(GREEN) + .fillOpacity(0.5f) + .fillOutlineColor(BLACK) + .minZoom(6) + .maxZoom(MAX_ZOOM), StyleBuilder .ofId("regular-stop") .typeCircle() diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index dc6ba627e0e..f97830232bd 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -3,6 +3,7 @@ import static org.opentripplanner.apis.vectortiles.model.LayerType.AreaStop; import static org.opentripplanner.apis.vectortiles.model.LayerType.Edge; import static org.opentripplanner.apis.vectortiles.model.LayerType.GeofencingZones; +import static org.opentripplanner.apis.vectortiles.model.LayerType.GroupStop; import static org.opentripplanner.apis.vectortiles.model.LayerType.RegularStop; import static org.opentripplanner.apis.vectortiles.model.LayerType.Vertex; import static org.opentripplanner.framework.io.HttpUtils.APPLICATION_X_PROTOBUF; @@ -35,6 +36,7 @@ import org.opentripplanner.inspector.vector.VectorTileResponseFactory; import org.opentripplanner.inspector.vector.edge.EdgeLayerBuilder; import org.opentripplanner.inspector.vector.geofencing.GeofencingZonesLayerBuilder; +import org.opentripplanner.inspector.vector.stop.GroupStopLayerBuilder; import org.opentripplanner.inspector.vector.stop.StopLayerBuilder; import org.opentripplanner.inspector.vector.vertex.VertexLayerBuilder; import org.opentripplanner.model.FeedInfo; @@ -49,6 +51,7 @@ public class GraphInspectorVectorTileResource { private static final LayerParams REGULAR_STOPS = new LayerParams("regularStops", RegularStop); private static final LayerParams AREA_STOPS = new LayerParams("areaStops", AreaStop); + private static final LayerParams GROUP_STOPS = new LayerParams("groupStops", GroupStop); private static final LayerParams GEOFENCING_ZONES = new LayerParams( "geofencingZones", GeofencingZones @@ -58,6 +61,7 @@ public class GraphInspectorVectorTileResource { private static final List> DEBUG_LAYERS = List.of( REGULAR_STOPS, AREA_STOPS, + GROUP_STOPS, GEOFENCING_ZONES, EDGES, VERTICES @@ -128,11 +132,11 @@ public TileJson getTileJson( public StyleSpec getTileJson(@Context UriInfo uri, @Context HttpHeaders headers) { var base = HttpUtils.getBaseAddress(uri, headers); - // these two could also be loaded together but are put into separate sources because + // these could also be loaded together but are put into separate sources because // the stops are fast and the edges are relatively slow var stopsSource = new VectorSource( "stops", - tileJsonUrl(base, List.of(REGULAR_STOPS, AREA_STOPS)) + tileJsonUrl(base, List.of(REGULAR_STOPS, AREA_STOPS, GROUP_STOPS)) ); var streetSource = new VectorSource( "street", @@ -142,6 +146,7 @@ public StyleSpec getTileJson(@Context UriInfo uri, @Context HttpHeaders headers) return DebugStyleSpec.build( REGULAR_STOPS.toVectorSourceLayer(stopsSource), AREA_STOPS.toVectorSourceLayer(stopsSource), + GROUP_STOPS.toVectorSourceLayer(stopsSource), EDGES.toVectorSourceLayer(streetSource), VERTICES.toVectorSourceLayer(streetSource) ); @@ -186,6 +191,12 @@ private static LayerBuilder createLayerBuilder( locale, e -> context.transitService().findAreaStops(e) ); + case GroupStop -> new GroupStopLayerBuilder( + layerParameters, + locale, + // There are not many GroupStops, so we can just list them all. + context.transitService().listGroupStops() + ); case GeofencingZones -> new GeofencingZonesLayerBuilder(context.graph(), layerParameters); case Edge -> new EdgeLayerBuilder(context.graph(), layerParameters); case Vertex -> new VertexLayerBuilder(context.graph(), layerParameters); diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java index ece75f29b60..585725d0707 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java @@ -3,6 +3,7 @@ public enum LayerType { RegularStop, AreaStop, + GroupStop, GeofencingZones, Edge, Vertex, diff --git a/src/main/java/org/opentripplanner/inspector/vector/stop/GroupStopLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/stop/GroupStopLayerBuilder.java new file mode 100644 index 00000000000..1e66397bc05 --- /dev/null +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/GroupStopLayerBuilder.java @@ -0,0 +1,50 @@ +package org.opentripplanner.inspector.vector.stop; + +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import org.locationtech.jts.geom.Envelope; +import org.locationtech.jts.geom.Geometry; +import org.opentripplanner.inspector.vector.LayerBuilder; +import org.opentripplanner.inspector.vector.LayerParameters; +import org.opentripplanner.transit.model.site.GroupStop; +import org.opentripplanner.transit.model.site.StopLocation; + +/** + * A vector tile layer for {@link GroupStop}s inside the vector tile bounds. The builder does not + * query for the GroupStops to draw, but instead uses the geometries of the GroupStops that are + * passed to the constructor. + */ +public class GroupStopLayerBuilder extends LayerBuilder { + + private final List geometries; + + public GroupStopLayerBuilder( + LayerParameters layerParameters, + Locale locale, + Collection groupStops + ) { + super( + new StopLocationPropertyMapper(locale), + layerParameters.name(), + layerParameters.expansionFactor() + ); + // Because there are very few GroupStops with relevant geometries, we can precompute the + // geometries and store them in a list at the time of construction. + this.geometries = + groupStops + .stream() + .filter(groupStop -> groupStop.getEncompassingAreaGeometry().isPresent()) + .map(stop -> { + Geometry geometry = stop.getEncompassingAreaGeometry().get().copy(); + geometry.setUserData(stop); + return geometry; + }) + .toList(); + } + + @Override + protected List getGeometries(Envelope query) { + return geometries; + } +} diff --git a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java index 3050fca6a3d..ca88b7d3130 100644 --- a/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/DefaultTransitService.java @@ -41,6 +41,7 @@ import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.Operator; import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.MultiModalStation; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; @@ -226,6 +227,12 @@ public Collection listRegularStops() { return transitModel.getStopModel().listRegularStops(); } + @Override + public Collection listGroupStops() { + OTPRequestTimeoutException.checkForTimeout(); + return transitModel.getStopModel().listGroupStops(); + } + @Override public StopLocation getStopLocation(FeedScopedId id) { return transitModel.getStopModel().getStopLocation(id); diff --git a/src/main/java/org/opentripplanner/transit/service/TransitService.java b/src/main/java/org/opentripplanner/transit/service/TransitService.java index fdb6dda8749..17354ec4a20 100644 --- a/src/main/java/org/opentripplanner/transit/service/TransitService.java +++ b/src/main/java/org/opentripplanner/transit/service/TransitService.java @@ -32,6 +32,7 @@ import org.opentripplanner.transit.model.organization.Agency; import org.opentripplanner.transit.model.organization.Operator; import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model.site.GroupStop; import org.opentripplanner.transit.model.site.MultiModalStation; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.Station; @@ -95,6 +96,8 @@ public interface TransitService { Collection listRegularStops(); + Collection listGroupStops(); + StopLocation getStopLocation(FeedScopedId parseId); Collection getStopOrChildStops(FeedScopedId id); diff --git a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java index f2c3ebf49de..d971cefe2e2 100644 --- a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java +++ b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java @@ -17,9 +17,10 @@ void spec() { var vectorSource = new VectorSource("vectorSource", "https://example.com"); var regularStops = new VectorSourceLayer(vectorSource, "stops"); var areaStops = new VectorSourceLayer(vectorSource, "stops"); + var groupStops = new VectorSourceLayer(vectorSource, "stops"); var edges = new VectorSourceLayer(vectorSource, "edges"); var vertices = new VectorSourceLayer(vectorSource, "vertices"); - var spec = DebugStyleSpec.build(regularStops, areaStops, edges, vertices); + var spec = DebugStyleSpec.build(regularStops, areaStops, groupStops, edges, vertices); var json = ObjectMappers.ignoringExtraFields().valueToTree(spec); var expectation = RESOURCES.fileToString("style.json"); diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index e62c3968924..7e611171409 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -154,6 +154,19 @@ "fill-outline-color" : "#140d0e" } }, + { + "id" : "group-stop", + "type" : "fill", + "source" : "vectorSource", + "source-layer" : "stops", + "minzoom" : 6, + "maxzoom" : 23, + "paint" : { + "fill-color" : "#22DD9E", + "fill-opacity" : 0.5, + "fill-outline-color" : "#140d0e" + } + }, { "id" : "regular-stop", "type" : "circle", From f104386016c2aeb6cb58f0aa1243e3a89b9c1621 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 15 Feb 2024 09:55:43 +0000 Subject: [PATCH 089/101] Add changelog entry for #5666 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 39aa4b8c329..f67b40f5a3b 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -92,6 +92,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Set defaults of the modes WALK, even if one and not the others are set [#5675](https://github.com/opentripplanner/OpenTripPlanner/pull/5675) - Reduce flex default access/egress penalty [#5674](https://github.com/opentripplanner/OpenTripPlanner/pull/5674) - Add scooter preferences [#5632](https://github.com/opentripplanner/OpenTripPlanner/pull/5632) +- Add GroupStop layer to new debug frontend [#5666](https://github.com/opentripplanner/OpenTripPlanner/pull/5666) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From ad2cf7aefc839879f4dc476b7f2ff6eea5f07d54 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 15 Feb 2024 09:56:46 +0000 Subject: [PATCH 090/101] Upgrade debug client to version 2024/02/2024-02-15T09:56 --- src/client/debug-client-preview/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html index 2653fdf36c2..d72598680fe 100644 --- a/src/client/debug-client-preview/index.html +++ b/src/client/debug-client-preview/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From 9007ad7d1eb11cc69cae54b1445ef163cb68d6e3 Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Thu, 15 Feb 2024 12:10:11 +0000 Subject: [PATCH 091/101] Bump serialization version id for #5673 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f12da275eb6..8adaaec352a 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 145 + 146 30.2 2.50 From 821a135f2be346e65080e6b73e9593ca4f4a56c1 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 15 Feb 2024 17:25:20 +0000 Subject: [PATCH 092/101] Upgrade debug client to version 2024/02/2024-02-15T17:24 --- src/client/debug-client-preview/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html index d72598680fe..7224399b258 100644 --- a/src/client/debug-client-preview/index.html +++ b/src/client/debug-client-preview/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From 787a660ce5f628df00dfdd07a240b4db492e45f3 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 15 Feb 2024 21:27:31 +0100 Subject: [PATCH 093/101] Remove outdated list of sandbox pages [ci skip] --- docs/SandboxExtension.md | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/docs/SandboxExtension.md b/docs/SandboxExtension.md index 914be238da4..0d05518fd56 100644 --- a/docs/SandboxExtension.md +++ b/docs/SandboxExtension.md @@ -4,31 +4,6 @@ - This should not be used for bug fixes and smaller changes. - Consider forking if the feature is valuable to one deployment only. -## Available extensions - -Here is a list of features implemented as OTP Sandbox Extensions. The Sandbox extensions are -provided "as is". - -- [Google Cloud Storage](sandbox/GoogleCloudStorage.md) - Enable Google Cloud Storage as a OTP Data Source -- [Actuator API](sandbox/ActuatorAPI.md) - API used to check the health status of the OTP instance. -- [Geocoder API](sandbox/GeocoderAPI.md) - Adds an API to search for stops and stations. -- [Transfer analyser](sandbox/transferanalyzer.md) - Module used for analyzing the transfers between -nearby stops generated by routing via OSM data. -- [SIRI Updater](sandbox/SiriUpdater.md) - Update OTP with real-time information from a Transmodel SIRI data source. -- [SIRI Azure Updater](sandbox/SiriAzureUpdater.md) - fetch SIRI real-time data through *Azure Service Bus* -- [VehicleRentalServiceDirectory](sandbox/VehicleRentalServiceDirectory.md) - GBFS service directory endpoint. -- [Smoove Bike Rental Updator Support](sandbox/SmooveBikeRental.md) - Smoove Bike Rental Updator(HSL) -- [Mapbox Vector Tiles API](sandbox/MapboxVectorTilesApi.md) - Mapbox Vector Tiles API -- [Flex Routing](sandbox/Flex.md) - Flexible transit routing for GTFS and Netex data sources -- [Park and Ride API](sandbox/ParkAndRideApi.md) - Park and Ride API -- [Data Overlay](sandbox/DataOverlay.md) - StreetEdge grid data populating affecting the route planning -- [Vehicle Parking](sandbox/VehicleParking.md) - Vehicle Parking updaters -- [Travel Time (Isochrone & Surface) API](sandbox/TravelTime.md) - Travel Time API -- [IBI accessibility score](sandbox/IBIAccessibilityScore.md) - IBI accessibility score -- [Fares](sandbox/Fares.md) - Fare calculation -- [Ride hailing](sandbox/RideHailing.md) - Ride hailing services like Uber - - ## Terminology **Main/core** -- All OTP code and additional files, NOT part of the sandbox. From 2616eaca0828938a1d97af53c15e224eac520da7 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 15 Feb 2024 21:31:16 +0100 Subject: [PATCH 094/101] Fix grammar, 'fields' -> 'feeds' [ci skip] --- docs/sandbox/MapboxVectorTilesApi.md | 2 +- .../standalone/config/routerconfig/VectorTileConfig.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/sandbox/MapboxVectorTilesApi.md b/docs/sandbox/MapboxVectorTilesApi.md index 7183bdf8b7f..537f1b800dd 100644 --- a/docs/sandbox/MapboxVectorTilesApi.md +++ b/docs/sandbox/MapboxVectorTilesApi.md @@ -171,7 +171,7 @@ Custom attribution to be returned in `tilejson.json` By default the, `attribution` property in `tilejson.json` is computed from the names and URLs of the feed publishers. -If the OTP deployment contains many fields, this can become very unwieldy. +If the OTP deployment contains many feeds, this can become very unwieldy. This configuration parameter allows you to set the `attribution` to any string you wish including HTML tags, diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java index d6beac6d256..96cd49b72bb 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/VectorTileConfig.java @@ -89,7 +89,7 @@ public static VectorTileConfig mapVectorTilesParameters(NodeAdapter node, String """ By default the, `attribution` property in `tilejson.json` is computed from the names and URLs of the feed publishers. - If the OTP deployment contains many fields, this can become very unwieldy. + If the OTP deployment contains many feeds, this can become very unwieldy. This configuration parameter allows you to set the `attribution` to any string you wish including HTML tags, From bcfd201dcaf222a3756183f7f28c96778a42f31d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Feb 2024 21:35:23 +0000 Subject: [PATCH 095/101] Update dependency graphql to v16.8.1 [SECURITY] --- client-next/package-lock.json | 8 ++++---- client-next/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client-next/package-lock.json b/client-next/package-lock.json index a6c92c55374..1d45cf63002 100644 --- a/client-next/package-lock.json +++ b/client-next/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@googlemaps/polyline-codec": "1.0.28", "bootstrap": "5.3.1", - "graphql": "16.8.0", + "graphql": "16.8.1", "graphql-request": "6.1.0", "maplibre-gl": "3.6.2", "react": "18.2.0", @@ -6736,9 +6736,9 @@ "dev": true }, "node_modules/graphql": { - "version": "16.8.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.0.tgz", - "integrity": "sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } diff --git a/client-next/package.json b/client-next/package.json index 3f8f303cc79..c77f54019bd 100644 --- a/client-next/package.json +++ b/client-next/package.json @@ -19,7 +19,7 @@ "dependencies": { "@googlemaps/polyline-codec": "1.0.28", "bootstrap": "5.3.1", - "graphql": "16.8.0", + "graphql": "16.8.1", "graphql-request": "6.1.0", "maplibre-gl": "3.6.2", "react": "18.2.0", From 470910e436831810f6580281afff1423f0912738 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Feb 2024 21:35:43 +0000 Subject: [PATCH 096/101] Update dependency vite to v4.5.2 [SECURITY] --- client-next/package-lock.json | 8 ++++---- client-next/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client-next/package-lock.json b/client-next/package-lock.json index a6c92c55374..44419cb3efb 100644 --- a/client-next/package-lock.json +++ b/client-next/package-lock.json @@ -40,7 +40,7 @@ "jsdom": "23.2.0", "prettier": "3.0.3", "typescript": "5.2.2", - "vite": "4.4.9", + "vite": "4.5.2", "vitest": "1.1.3" } }, @@ -10701,9 +10701,9 @@ } }, "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dev": true, "dependencies": { "esbuild": "^0.18.10", diff --git a/client-next/package.json b/client-next/package.json index 3f8f303cc79..6364c2fb7fb 100644 --- a/client-next/package.json +++ b/client-next/package.json @@ -49,7 +49,7 @@ "jsdom": "23.2.0", "prettier": "3.0.3", "typescript": "5.2.2", - "vite": "4.4.9", + "vite": "4.5.2", "vitest": "1.1.3" } } From 98d11bd90abc5af94efda9a103d6ef70b3f7cf62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Feb 2024 00:22:59 +0000 Subject: [PATCH 097/101] Update dependency jsdom to v24 --- client-next/package-lock.json | 64 ++++++----------------------------- client-next/package.json | 2 +- 2 files changed, 12 insertions(+), 54 deletions(-) diff --git a/client-next/package-lock.json b/client-next/package-lock.json index a6c92c55374..78130fd3641 100644 --- a/client-next/package-lock.json +++ b/client-next/package-lock.json @@ -37,7 +37,7 @@ "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.3", - "jsdom": "23.2.0", + "jsdom": "24.0.0", "prettier": "3.0.3", "typescript": "5.2.2", "vite": "4.4.9", @@ -213,17 +213,6 @@ "node": ">=14" } }, - "node_modules/@asamuzakjp/dom-selector": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-2.0.2.tgz", - "integrity": "sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==", - "dev": true, - "dependencies": { - "bidi-js": "^1.0.3", - "css-tree": "^2.3.1", - "is-potential-custom-element-name": "^1.0.1" - } - }, "node_modules/@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -4604,15 +4593,6 @@ } ] }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", - "dev": true, - "dependencies": { - "require-from-string": "^2.0.2" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -5166,19 +5146,6 @@ "node": ">= 8" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/cssstyle": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", @@ -7747,12 +7714,11 @@ } }, "node_modules/jsdom": { - "version": "23.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.2.0.tgz", - "integrity": "sha512-L88oL7D/8ufIES+Zjz7v0aes+oBMh2Xnh3ygWvL0OaICOomKEPKuPnIfBJekiXr+BHbbMjrWn/xqrDQuxFTeyA==", + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", "dev": true, "dependencies": { - "@asamuzakjp/dom-selector": "^2.0.1", "cssstyle": "^4.0.1", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", @@ -7761,6 +7727,7 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.2", "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", @@ -8275,12 +8242,6 @@ "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -8543,6 +8504,12 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", "dev": true }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -9408,15 +9375,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", diff --git a/client-next/package.json b/client-next/package.json index 3f8f303cc79..0f5737d9822 100644 --- a/client-next/package.json +++ b/client-next/package.json @@ -46,7 +46,7 @@ "eslint-plugin-react": "7.33.2", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.3", - "jsdom": "23.2.0", + "jsdom": "24.0.0", "prettier": "3.0.3", "typescript": "5.2.2", "vite": "4.4.9", From ea4c627f52e417cb0fded236917f459b9d1df00a Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 16 Feb 2024 07:43:18 +0100 Subject: [PATCH 098/101] Mention java client in docs [ci skip] --- docs/apis/GTFS-GraphQL-API.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/apis/GTFS-GraphQL-API.md b/docs/apis/GTFS-GraphQL-API.md index b67b2882ec9..f2cc32e2888 100644 --- a/docs/apis/GTFS-GraphQL-API.md +++ b/docs/apis/GTFS-GraphQL-API.md @@ -5,6 +5,9 @@ used heavily by [digitransit-ui](https://github.com/HSLdevcom/digitransit-ui). [otp-react-redux](https://github.com/opentripplanner/otp-react-redux) has also migrated to this API in 2023. +There is also a [Java client](https://github.com/opentripplanner/otp-java-client) available which +makes it easy to use this API in a Java application. + ## URLs - GraphQL endpoint: [`http://localhost:8080/otp/gtfs/v1`](http://localhost:8080/otp/gtfs/v1) - HTML schema documentation: [https://docs.opentripplanner.org/api/dev-2.x/graphql-gtfs/](https://docs.opentripplanner.org/api/dev-2.x/graphql-gtfs/) From 5d0994c2c4c806a14ff09579c7b5039f10be6878 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Fri, 16 Feb 2024 09:13:10 +0000 Subject: [PATCH 099/101] Upgrade debug client to version 2024/02/2024-02-16T09:12 --- src/client/debug-client-preview/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html index 7224399b258..dee8b4a8465 100644 --- a/src/client/debug-client-preview/index.html +++ b/src/client/debug-client-preview/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From 9b611daf3062304a9fa365385e0a556b54e3cffa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Feb 2024 09:13:11 +0000 Subject: [PATCH 100/101] Update dependency maplibre-gl to v4 --- client-next/package-lock.json | 44 ++++++++++++++++++++++++++++++----- client-next/package.json | 2 +- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/client-next/package-lock.json b/client-next/package-lock.json index 78130fd3641..a6ce0f1d6b0 100644 --- a/client-next/package-lock.json +++ b/client-next/package-lock.json @@ -12,7 +12,7 @@ "bootstrap": "5.3.1", "graphql": "16.8.0", "graphql-request": "6.1.0", - "maplibre-gl": "3.6.2", + "maplibre-gl": "4.0.1", "react": "18.2.0", "react-bootstrap": "2.8.0", "react-dom": "18.2.0", @@ -3471,6 +3471,14 @@ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" }, + "node_modules/@types/geojson-vt": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", + "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -8204,9 +8212,9 @@ } }, "node_modules/maplibre-gl": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-3.6.2.tgz", - "integrity": "sha512-krg2KFIdOpLPngONDhP6ixCoWl5kbdMINP0moMSJFVX7wX1Clm2M9hlNKXS8vBGlVWwR5R3ZfI6IPrYz7c+aCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.0.1.tgz", + "integrity": "sha512-UF+wI2utIciFXNg6+gYaMe7IGa9fMLzAZM3vdlGilqyWYmuibjcN40yGVgkz2r28//aOLphvtli3TbDEjEqHww==", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -8215,8 +8223,9 @@ "@mapbox/unitbezier": "^0.0.1", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", - "@maplibre/maplibre-gl-style-spec": "^19.3.3", - "@types/geojson": "^7946.0.13", + "@maplibre/maplibre-gl-style-spec": "^20.1.1", + "@types/geojson": "^7946.0.14", + "@types/geojson-vt": "3.2.5", "@types/mapbox__point-geometry": "^0.1.4", "@types/mapbox__vector-tile": "^1.3.4", "@types/pbf": "^3.0.5", @@ -8242,6 +8251,29 @@ "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" } }, + "node_modules/maplibre-gl/node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.1.1.tgz", + "integrity": "sha512-z85ARNPCBI2Cs5cPOS3DSbraTN+ue8zrcYVoSWBuNrD/mA+2SKAJ+hIzI22uN7gac6jBMnCdpPKRxS/V0KSZVQ==", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^4.0.0", + "minimist": "^1.2.8", + "rw": "^1.3.3", + "sort-object": "^3.0.3" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/maplibre-gl/node_modules/json-stringify-pretty-compact": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", diff --git a/client-next/package.json b/client-next/package.json index 0f5737d9822..5ec2019a94d 100644 --- a/client-next/package.json +++ b/client-next/package.json @@ -21,7 +21,7 @@ "bootstrap": "5.3.1", "graphql": "16.8.0", "graphql-request": "6.1.0", - "maplibre-gl": "3.6.2", + "maplibre-gl": "4.0.1", "react": "18.2.0", "react-bootstrap": "2.8.0", "react-dom": "18.2.0", From c893a8b145078dc810b4cbd00ebfba6957d4ee24 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Fri, 16 Feb 2024 10:03:59 +0000 Subject: [PATCH 101/101] Upgrade debug client to version 2024/02/2024-02-16T10:03 --- src/client/debug-client-preview/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html index dee8b4a8465..cbc31d4b96d 100644 --- a/src/client/debug-client-preview/index.html +++ b/src/client/debug-client-preview/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +