From 90f8dbe35c4b9c27ceed5f715e6c0af5d303a8a8 Mon Sep 17 00:00:00 2001 From: Michael Kaiser Date: Sat, 3 Aug 2024 17:11:05 -0500 Subject: [PATCH 1/4] Fix: Git Cloning on windows (#1060) Co-authored-by: Michael Kaiser --- .../{2024-01-19T13:40:09.json => 2024-01-19_1.json} | 0 .../{2024-01-19T13:45:09.json => 2024-01-19_2.jsonq} | 0 .../{2024-01-19T13:51:09.json => 2024-01-19_3.json} | 0 .../{2024-01-20T13:51:09.json => 2024-01-20_1.json} | 0 .../{2024-01-20T08:13:33.json => 2024-01-20_1.json} | 0 .../{2024-01-22T08:13:33.json => 2024-01-22_1.json} | 0 .../{2024-01-22T09:13:33.json => 2024-01-22_2.json} | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename python/athena-s3-glue/log-samples/products/date=2024-01-19/{2024-01-19T13:40:09.json => 2024-01-19_1.json} (100%) rename python/athena-s3-glue/log-samples/products/date=2024-01-19/{2024-01-19T13:45:09.json => 2024-01-19_2.jsonq} (100%) rename python/athena-s3-glue/log-samples/products/date=2024-01-19/{2024-01-19T13:51:09.json => 2024-01-19_3.json} (100%) rename python/athena-s3-glue/log-samples/products/date=2024-01-20/{2024-01-20T13:51:09.json => 2024-01-20_1.json} (100%) rename python/athena-s3-glue/log-samples/users/date=2024-01-20/{2024-01-20T08:13:33.json => 2024-01-20_1.json} (100%) rename python/athena-s3-glue/log-samples/users/date=2024-01-22/{2024-01-22T08:13:33.json => 2024-01-22_1.json} (100%) rename python/athena-s3-glue/log-samples/users/date=2024-01-22/{2024-01-22T09:13:33.json => 2024-01-22_2.json} (100%) diff --git a/python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19T13:40:09.json b/python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19_1.json similarity index 100% rename from python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19T13:40:09.json rename to python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19_1.json diff --git a/python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19T13:45:09.json b/python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19_2.jsonq similarity index 100% rename from python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19T13:45:09.json rename to python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19_2.jsonq diff --git a/python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19T13:51:09.json b/python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19_3.json similarity index 100% rename from python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19T13:51:09.json rename to python/athena-s3-glue/log-samples/products/date=2024-01-19/2024-01-19_3.json diff --git a/python/athena-s3-glue/log-samples/products/date=2024-01-20/2024-01-20T13:51:09.json b/python/athena-s3-glue/log-samples/products/date=2024-01-20/2024-01-20_1.json similarity index 100% rename from python/athena-s3-glue/log-samples/products/date=2024-01-20/2024-01-20T13:51:09.json rename to python/athena-s3-glue/log-samples/products/date=2024-01-20/2024-01-20_1.json diff --git a/python/athena-s3-glue/log-samples/users/date=2024-01-20/2024-01-20T08:13:33.json b/python/athena-s3-glue/log-samples/users/date=2024-01-20/2024-01-20_1.json similarity index 100% rename from python/athena-s3-glue/log-samples/users/date=2024-01-20/2024-01-20T08:13:33.json rename to python/athena-s3-glue/log-samples/users/date=2024-01-20/2024-01-20_1.json diff --git a/python/athena-s3-glue/log-samples/users/date=2024-01-22/2024-01-22T08:13:33.json b/python/athena-s3-glue/log-samples/users/date=2024-01-22/2024-01-22_1.json similarity index 100% rename from python/athena-s3-glue/log-samples/users/date=2024-01-22/2024-01-22T08:13:33.json rename to python/athena-s3-glue/log-samples/users/date=2024-01-22/2024-01-22_1.json diff --git a/python/athena-s3-glue/log-samples/users/date=2024-01-22/2024-01-22T09:13:33.json b/python/athena-s3-glue/log-samples/users/date=2024-01-22/2024-01-22_2.json similarity index 100% rename from python/athena-s3-glue/log-samples/users/date=2024-01-22/2024-01-22T09:13:33.json rename to python/athena-s3-glue/log-samples/users/date=2024-01-22/2024-01-22_2.json From 370ac79acc69b4fb4a35045dc8fdefc4656e1a5c Mon Sep 17 00:00:00 2001 From: sobrab <170367248+sobrab@users.noreply.github.com> Date: Sun, 4 Aug 2024 01:23:44 +0300 Subject: [PATCH 2/4] added java example of how to override logical name allocation of resources (#1041) Co-authored-by: Michael Kaiser <1553631+kaiz-io@users.noreply.github.com> Co-authored-by: Michael Kaiser --- java/custom-logical-names/.gitignore | 13 +++ java/custom-logical-names/README.md | 92 +++++++++++++++++++ java/custom-logical-names/cdk.json | 67 ++++++++++++++ java/custom-logical-names/pom.xml | 58 ++++++++++++ .../src/main/java/com/myorg/BaseStack.java | 37 ++++++++ .../java/com/myorg/CustomLogicalNamesApp.java | 13 +++ .../com/myorg/CustomLogicalNamesStack.java | 14 +++ .../com/myorg/CustomLogicalNamesTest.java | 52 +++++++++++ 8 files changed, 346 insertions(+) create mode 100644 java/custom-logical-names/.gitignore create mode 100644 java/custom-logical-names/README.md create mode 100644 java/custom-logical-names/cdk.json create mode 100644 java/custom-logical-names/pom.xml create mode 100644 java/custom-logical-names/src/main/java/com/myorg/BaseStack.java create mode 100644 java/custom-logical-names/src/main/java/com/myorg/CustomLogicalNamesApp.java create mode 100644 java/custom-logical-names/src/main/java/com/myorg/CustomLogicalNamesStack.java create mode 100644 java/custom-logical-names/src/test/java/com/myorg/CustomLogicalNamesTest.java diff --git a/java/custom-logical-names/.gitignore b/java/custom-logical-names/.gitignore new file mode 100644 index 000000000..1db21f162 --- /dev/null +++ b/java/custom-logical-names/.gitignore @@ -0,0 +1,13 @@ +.classpath.txt +target +.classpath +.project +.idea +.settings +.vscode +*.iml + +# CDK asset staging directory +.cdk.staging +cdk.out + diff --git a/java/custom-logical-names/README.md b/java/custom-logical-names/README.md new file mode 100644 index 000000000..a045b716b --- /dev/null +++ b/java/custom-logical-names/README.md @@ -0,0 +1,92 @@ +# Custom Logical Names + + + +--- + +![Stability: Stable](https://img.shields.io/badge/stability-Stable-success.svg?style=for-the-badge) + +> **This is a stable example. It should successfully build out of the box** +> +> This example is built on Construct Libraries marked "Stable" and does not have any infrastructure prerequisites to build. + +--- + + +This sample shows how you can override the behavior for allocating logical names to CloudFormation resources in the CDK. + +It implements a feature that allows users to specify a prefix for all logical names using the `prefix` context key. + +## Usage + +1. Extend your stacks from [`BaseStack`](src/main/java/com/myorg/BaseStack.java) instead of `Stack`. +2. Specify the context when calling the CLI through `--context prefix=PREFIX`. + +## Implementation + +The [`BaseStack`](src/main/java/com/myorg/BaseStack.java) class implements this custom behavior. Using a base stack is a +common and recommended pattern for reusing policy within an organization. + +Then, any stack that derives from [`BaseStack`](src/main/java/com/myorg/BaseStack.java) will automatically have this +behavior. + +## Build + +To build this example, you need to be in this example's root directory. Then run the following: + +```bash +npm install -g aws-cdk +npm install +cdk synth +``` + +This will install the necessary CDK, then this example's dependencies, and then build the CloudFormation template. The resulting CloudFormation template will be in the `cdk.out` directory. + +## Deploy + +Run `cdk deploy --context prefix=PREFIX`. This will deploy / redeploy your Stack to your AWS Account. + +## Example + +Without prefix: + +```shell +$ cdk synth -j +{ + "Resources": { + "MyTopic86869434": { + "Type": "AWS::SNS::Topic" + }, + "MyBucketF68F3FF0": { + "Type": "AWS::S3::Bucket" + } + } +} +``` + +With prefix: + +```shell +$ cdk synth -j -c prefix="MyTeam" +{ + "Resources": { + "MyTeamMyTopic86869434": { + "Type": "AWS::SNS::Topic" + }, + "MyTeamMyBucketF68F3FF0": { + "Type": "AWS::S3::Bucket" + } + } +} +``` + +## Useful commands + +``` +* `mvn clean package` compile and run tests +* `cdk ls` list all stacks in the app +* `cdk synth` emits the synthesized CloudFormation template +* `cdk deploy` deploy this stack to your default AWS account/region +* `cdk diff` compare deployed stack with current state +* `cdk docs` open CDK documentation +``` \ No newline at end of file diff --git a/java/custom-logical-names/cdk.json b/java/custom-logical-names/cdk.json new file mode 100644 index 000000000..d0b34b6fa --- /dev/null +++ b/java/custom-logical-names/cdk.json @@ -0,0 +1,67 @@ +{ + "app": "mvn -e -q compile exec:java", + "watch": { + "include": [ + "**" + ], + "exclude": [ + "README.md", + "cdk*.json", + "target", + "pom.xml", + "src/test" + ] + }, + "context": { + "@aws-cdk/aws-lambda:recognizeLayerVersion": true, + "@aws-cdk/core:checkSecretUsage": true, + "@aws-cdk/core:target-partitions": [ + "aws", + "aws-cn" + ], + "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, + "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, + "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, + "@aws-cdk/aws-iam:minimizePolicies": true, + "@aws-cdk/core:validateSnapshotRemovalPolicy": true, + "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, + "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, + "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, + "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, + "@aws-cdk/core:enablePartitionLiterals": true, + "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, + "@aws-cdk/aws-iam:standardizedServicePrincipals": true, + "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true, + "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true, + "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, + "@aws-cdk/aws-route53-patters:useCertificate": true, + "@aws-cdk/customresources:installLatestAwsSdkDefault": false, + "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true, + "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true, + "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true, + "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true, + "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true, + "@aws-cdk/aws-redshift:columnId": true, + "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true, + "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true, + "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true, + "@aws-cdk/aws-kms:aliasNameRef": true, + "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true, + "@aws-cdk/core:includePrefixInUniqueNameGeneration": true, + "@aws-cdk/aws-efs:denyAnonymousAccess": true, + "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true, + "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true, + "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true, + "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true, + "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true, + "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true, + "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true, + "@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true, + "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true, + "@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true, + "@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true, + "@aws-cdk/aws-eks:nodegroupNameAttribute": true, + "@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true, + "@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true + } +} \ No newline at end of file diff --git a/java/custom-logical-names/pom.xml b/java/custom-logical-names/pom.xml new file mode 100644 index 000000000..643455079 --- /dev/null +++ b/java/custom-logical-names/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + com.myorg + custom-logical-names + 0.1 + + + UTF-8 + 2.143.0 + [10.0.0,11.0.0) + 5.7.1 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + com.myorg.CustomLogicalNamesApp + + + + + + + + software.amazon.awscdk + aws-cdk-lib + ${cdk.version} + + + software.constructs + constructs + ${constructs.version} + + + + org.junit.jupiter + junit-jupiter + ${junit.version} + test + + + diff --git a/java/custom-logical-names/src/main/java/com/myorg/BaseStack.java b/java/custom-logical-names/src/main/java/com/myorg/BaseStack.java new file mode 100644 index 000000000..83274aa0a --- /dev/null +++ b/java/custom-logical-names/src/main/java/com/myorg/BaseStack.java @@ -0,0 +1,37 @@ +package com.myorg; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import software.amazon.awscdk.CfnElement; +import software.amazon.awscdk.Stack; +import software.amazon.awscdk.StackProps; +import software.constructs.Construct; + +import java.util.Optional; + +public class BaseStack extends Stack { + + public BaseStack(@Nullable Construct scope, @Nullable String id, @Nullable StackProps props) { + super(scope, id, props); + } + + @Override + protected @NotNull String allocateLogicalId(@NotNull CfnElement element) { + String originalLogicalId = super.allocateLogicalId(element); + return Optional.of(this) + .map(Stack::getNode) + .flatMap( + node -> Optional.of("prefix") + .map(node::tryGetContext) + .filter(String.class::isInstance) + .map(String.class::cast) + .map(StringBuilder::new) + ) + .flatMap( + stringBuilder -> Optional.of(originalLogicalId) + .map(stringBuilder::append) + .map(StringBuilder::toString) + ) + .orElse(originalLogicalId); + } +} \ No newline at end of file diff --git a/java/custom-logical-names/src/main/java/com/myorg/CustomLogicalNamesApp.java b/java/custom-logical-names/src/main/java/com/myorg/CustomLogicalNamesApp.java new file mode 100644 index 000000000..4b2c68b52 --- /dev/null +++ b/java/custom-logical-names/src/main/java/com/myorg/CustomLogicalNamesApp.java @@ -0,0 +1,13 @@ +package com.myorg; + +import software.amazon.awscdk.App; +import software.amazon.awscdk.StackProps; + +public class CustomLogicalNamesApp { + public static void main(final String[] args) { + App app = new App(); + StackProps stackProps = StackProps.builder().build(); + new CustomLogicalNamesStack(app, "CustomLogicalNamesStack", stackProps); + app.synth(); + } +} \ No newline at end of file diff --git a/java/custom-logical-names/src/main/java/com/myorg/CustomLogicalNamesStack.java b/java/custom-logical-names/src/main/java/com/myorg/CustomLogicalNamesStack.java new file mode 100644 index 000000000..da0bb2730 --- /dev/null +++ b/java/custom-logical-names/src/main/java/com/myorg/CustomLogicalNamesStack.java @@ -0,0 +1,14 @@ +package com.myorg; + +import software.amazon.awscdk.StackProps; +import software.amazon.awscdk.services.s3.Bucket; +import software.amazon.awscdk.services.sns.Topic; +import software.constructs.Construct; + +public class CustomLogicalNamesStack extends BaseStack { + public CustomLogicalNamesStack(final Construct scope, final String id, final StackProps props) { + super(scope, id, props); + new Topic(this, "MyTopic"); + new Bucket(this, "MyBucket"); + } +} diff --git a/java/custom-logical-names/src/test/java/com/myorg/CustomLogicalNamesTest.java b/java/custom-logical-names/src/test/java/com/myorg/CustomLogicalNamesTest.java new file mode 100644 index 000000000..cf1e9a3a1 --- /dev/null +++ b/java/custom-logical-names/src/test/java/com/myorg/CustomLogicalNamesTest.java @@ -0,0 +1,52 @@ +package com.myorg; + +import org.jetbrains.annotations.NotNull; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import software.amazon.awscdk.App; +import software.amazon.awscdk.Stack; +import software.amazon.awscdk.StackProps; +import software.amazon.awscdk.assertions.Template; + +import java.util.HashSet; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import static software.amazon.awscdk.App.Builder; + +public class CustomLogicalNamesTest { + + @Test + public void testStack() { + String prefixKey = "prefix"; + String prefixValue = "YourTeam"; + App app = Builder.create() + .context(Map.of(prefixKey, prefixValue)) + .build(); + StackProps stackProps = StackProps.builder().build(); + CustomLogicalNamesStack customLogicalNamesStack = new CustomLogicalNamesStack(app, "test", stackProps); + Set resourcesNames = extractResourcesNamesFormStack(customLogicalNamesStack); + // check if the prefix supplied on the context is used for all the resources in the stack + Assertions.assertTrue(resourcesNames.stream().allMatch(name -> name != null && name.startsWith(prefixValue))); + } + + private @NotNull Set extractResourcesNamesFormStack(Stack stack) { + var rawNamesSet = Optional.of(stack) + .map(Template::fromStack) + .map(Template::toJSON) + .map(json -> json.get("Resources")) + .filter(Map.class::isInstance) + .map(Map.class::cast) + .map(Map::keySet) + .orElseGet(Set::of); + Set resourcesNames = new HashSet<>(); + for (Object resource : rawNamesSet) { + Optional.of(resource) + .filter(String.class::isInstance) + .map(String.class::cast) + .ifPresent(resourcesNames::add); + } + return resourcesNames; + } +} From 228810aea652b37593af4b8bcf47de043f5d6532 Mon Sep 17 00:00:00 2001 From: junsjang <161156480+junsjang@users.noreply.github.com> Date: Sun, 4 Aug 2024 07:39:07 +0900 Subject: [PATCH 3/4] Add a python project about Route 53 Failover Record with Health Check that resolve #789 (#1053) * route53 failover record * Reorganized stack structure * Adding alias record based health check for failover record * Changed container image of sample workload from personal sample app to managed sample app * Changed personal information to example information * Updated README file * Added instruction to use pre-made Route 53 HostedZone * Fixed the code to be deployed without previous resources. Extracted hosted zone and pass it as parameter to health check stacks example.com is reserved. Changes domain name to different name * Updated architecture diagram Move the email icon to outside of the region Added CloudWatch metrics that make alarm --------- Co-authored-by: Kihoon Kown Co-authored-by: Junseong Jang Co-authored-by: Michael Kaiser --- python/route53-failover/README.md | 32 +++++ .../alias_healthcheck_record_stack.py | 57 +++++++++ python/route53-failover/app.py | 63 ++++++++++ python/route53-failover/cdk.json | 74 +++++++++++ python/route53-failover/fargate_app_stack.py | 44 +++++++ .../healthcheck_alarm_stack.py | 72 +++++++++++ python/route53-failover/hosted_zone_stack.py | 14 +++ python/route53-failover/images/.gitignore | 1 + .../images/architecture.drawio | 115 ++++++++++++++++++ .../route53-failover/images/architecture.png | Bin 0 -> 69895 bytes python/route53-failover/requirements.txt | 2 + 11 files changed, 474 insertions(+) create mode 100644 python/route53-failover/README.md create mode 100644 python/route53-failover/alias_healthcheck_record_stack.py create mode 100644 python/route53-failover/app.py create mode 100644 python/route53-failover/cdk.json create mode 100644 python/route53-failover/fargate_app_stack.py create mode 100644 python/route53-failover/healthcheck_alarm_stack.py create mode 100644 python/route53-failover/hosted_zone_stack.py create mode 100644 python/route53-failover/images/.gitignore create mode 100644 python/route53-failover/images/architecture.drawio create mode 100644 python/route53-failover/images/architecture.png create mode 100644 python/route53-failover/requirements.txt diff --git a/python/route53-failover/README.md b/python/route53-failover/README.md new file mode 100644 index 000000000..cbfed5410 --- /dev/null +++ b/python/route53-failover/README.md @@ -0,0 +1,32 @@ +# CDK Failover DNS with Route 53 Health Check + +This sample project demonstrates how to create a Failover DNS record in Route 53 using a CDK application. It leverages the Route 53 Health Check feature to monitor the status of endpoints and automatically fail over to a backup endpoint in case of failure. Additionally, it configures SNS notifications to alert administrators when a failover event occurs, ensuring prompt awareness and response. + +## Architecture + +The architecture of this solution is illustrated in the following diagram: + +![Architecture Diagram](images/architecture.png) + +The key components of the architecture are: + +1. **Primary Endpoint**: The main endpoint that serves traffic under normal circumstances. +2. **Secondary Endpoint**: The backup endpoint that takes over traffic when the primary endpoint fails. +3. **Route 53 Hosted Zone**: The DNS hosted zone where the Failover DNS record is created. +4. **Route 53 Health Checks**: Health checks that monitor the availability of the primary and secondary endpoints. +5. **Route 53 Failover DNS Record**: The DNS record that routes traffic to the primary endpoint by default, but automatically switches to the secondary endpoint when the primary endpoint fails the health check. +6. **SNS Topic**: The Simple Notification Service (SNS) topic that publishes notifications when a failover event occurs. +7. **SNS Subscription**: The subscription to the SNS topic, which can be configured to deliver notifications via email or other channels. + +## Getting Started + +To get started with this project, follow these steps: + +1. Clone the repository. +2. Install the required dependencies using `npm install`. +3. Configure the necessary AWS credentials and environment variables. +4. Select a Route 53 HostedZone that can be used for this project. +5. **Provide the required context values in the `cdk.json` file, including `domain` refering the HostedZone, `email` to get notifications, `primaryRegion`, and `secondaryRegion` to deploy the sample application.** +6. Deploy the CDK application using `cdk deploy`. + +Refer to the project's documentation for more detailed instructions and configuration options. diff --git a/python/route53-failover/alias_healthcheck_record_stack.py b/python/route53-failover/alias_healthcheck_record_stack.py new file mode 100644 index 000000000..79efbe7a6 --- /dev/null +++ b/python/route53-failover/alias_healthcheck_record_stack.py @@ -0,0 +1,57 @@ +from constructs import Construct +from aws_cdk import ( + Stack, + aws_route53 as route53, + aws_elasticloadbalancingv2 as elbv2, + aws_route53_targets as route53_targets, +) + +class AliasHealthcheckRecordStack(Stack): + def __init__(self, scope: Construct, construct_id: str, zone: route53.HostedZone, primaryLoadBalancer: elbv2.ILoadBalancerV2, secondaryLoadBalancer: elbv2.ILoadBalancerV2, **kwargs) -> None: + super().__init__(scope, construct_id, **kwargs) + + # primary record + primary = route53.ARecord(self, "PrimaryRecordSet", + zone = zone, + record_name="alias", + target = route53.RecordTarget.from_alias(route53_targets.LoadBalancerTarget(primaryLoadBalancer)), + ) + primaryRecordSet = primary.node.default_child + primaryRecordSet.failover = "PRIMARY" + primaryRecordSet.add_property_override('AliasTarget.EvaluateTargetHealth', True) + primaryRecordSet.set_identifier = "Primary" + + # secondary record + secondary = route53.ARecord(self, "SecondaryRecordSet", + zone = zone, + record_name="alias", + target= route53.RecordTarget.from_alias(route53_targets.LoadBalancerTarget(secondaryLoadBalancer)), + ) + secondaryRecordSet = secondary.node.default_child + secondaryRecordSet.failover = "SECONDARY" + secondaryRecordSet.add_property_override('AliasTarget.EvaluateTargetHealth', True) + secondaryRecordSet.set_identifier = "Secondary" + + # # cloudwatch metric & alarm to SNS + # snsTopic = sns.Topic(self, "AlarmNotificationTopic") + # snsTopic.add_subscription( + # EmailSubscription(email_address=email) + # ) + + # healthCheckMetric = cloudwatch.Metric( + # metric_name="HealthCheckStatus", + # namespace="AWS/Route53", + # statistic="Minimum", + # period=Duration.minutes(1), + # region="us-east-1", + # dimensions_map={ + # "HealthCheckId": primaryHealthCheck.attr_health_check_id + # } + # ) + # healthCheckAlarm = healthCheckMetric.create_alarm(self, 'HealthCheckFailureAlarm', + # evaluation_periods=1, + # threshold=1, + # comparison_operator=cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD + # ) + + # healthCheckAlarm.add_alarm_action(SnsAction(snsTopic)) diff --git a/python/route53-failover/app.py b/python/route53-failover/app.py new file mode 100644 index 000000000..b48bd3c84 --- /dev/null +++ b/python/route53-failover/app.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +import os + +import aws_cdk as cdk + +from fargate_app_stack import FargateAppStack +from hosted_zone_stack import HostedZoneStack +from healthcheck_alarm_stack import HealthcheckAlarmStack +from alias_healthcheck_record_stack import AliasHealthcheckRecordStack + +app = cdk.App() + +domain=app.node.try_get_context('domain') +email=app.node.try_get_context('email') +primaryRegion=app.node.try_get_context('primaryRegion') +secondaryRegion=app.node.try_get_context('secondaryRegion') +account=os.getenv('CDK_DEFAULT_ACCOUNT') +region=os.getenv('CDK_DEFAULT_REGION') + +# Sample app 1 +app1 = FargateAppStack(app, "PrimaryFargateApp", env=cdk.Environment( + account=account, + region=primaryRegion +)) + +# Sample app 2 +app2 = FargateAppStack(app, "SecondaryFargateApp", env=cdk.Environment( + account=account, + region=secondaryRegion +)) + +# Hosted Zone +hostedZoneStack = HostedZoneStack(app, "HostedZone", domain=domain, env=cdk.Environment( + account=account, + region="us-east-1" +)) + +HealthcheckAlarmStack( + app, "HealthCheckAlarm", + zone=hostedZoneStack.zone, + primaryLoadBalancer=app1.fargate_service.load_balancer, + secondaryLoadBalancer=app2.fargate_service.load_balancer, + email=email, + env=cdk.Environment( + account=account, + region="us-east-1" + ), + cross_region_references=True +) + +AliasHealthcheckRecordStack( + app, "AliasHealthCheckRecord", + zone=hostedZoneStack.zone, + primaryLoadBalancer=app1.fargate_service.load_balancer, + secondaryLoadBalancer=app2.fargate_service.load_balancer, + env=cdk.Environment( + account=account, + region="us-east-1" + ), + cross_region_references=True +) + +app.synth() \ No newline at end of file diff --git a/python/route53-failover/cdk.json b/python/route53-failover/cdk.json new file mode 100644 index 000000000..6884c4aee --- /dev/null +++ b/python/route53-failover/cdk.json @@ -0,0 +1,74 @@ +{ + "app": "python3 app.py", + "watch": { + "include": [ + "**" + ], + "exclude": [ + "README.md", + "cdk*.json", + "requirements*.txt", + "source.bat", + "**/__init__.py", + "**/__pycache__", + "tests" + ] + }, + "context": { + "@aws-cdk/aws-lambda:recognizeLayerVersion": true, + "@aws-cdk/core:checkSecretUsage": true, + "@aws-cdk/core:target-partitions": [ + "aws", + "aws-cn" + ], + "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, + "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, + "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, + "@aws-cdk/aws-iam:minimizePolicies": true, + "@aws-cdk/core:validateSnapshotRemovalPolicy": true, + "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, + "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, + "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, + "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, + "@aws-cdk/core:enablePartitionLiterals": true, + "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, + "@aws-cdk/aws-iam:standardizedServicePrincipals": true, + "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true, + "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true, + "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, + "@aws-cdk/aws-route53-patters:useCertificate": true, + "@aws-cdk/customresources:installLatestAwsSdkDefault": false, + "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true, + "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true, + "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true, + "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true, + "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true, + "@aws-cdk/aws-redshift:columnId": true, + "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true, + "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true, + "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true, + "@aws-cdk/aws-kms:aliasNameRef": true, + "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true, + "@aws-cdk/core:includePrefixInUniqueNameGeneration": true, + "@aws-cdk/aws-efs:denyAnonymousAccess": true, + "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true, + "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true, + "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true, + "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true, + "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true, + "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true, + "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true, + "@aws-cdk/aws-cloudwatch-actions:changeLambdaPermissionLogicalIdForLambdaAction": true, + "@aws-cdk/aws-codepipeline:crossAccountKeysDefaultValueToFalse": true, + "@aws-cdk/aws-codepipeline:defaultPipelineTypeToV2": true, + "@aws-cdk/aws-kms:reduceCrossAccountRegionPolicyScope": true, + "@aws-cdk/aws-eks:nodegroupNameAttribute": true, + "@aws-cdk/aws-ec2:ebsDefaultGp3Volume": true, + "@aws-cdk/aws-ecs:removeDefaultDeploymentAlarm": true, + "@aws-cdk/custom-resources:logApiResponseDataPropertyTrueDefault": false, + "domain": "aws-cdk-samples.com", + "email": "user@aws-cdk-samples.com", + "primaryRegion": "us-east-1", + "secondaryRegion": "us-west-2" + } +} \ No newline at end of file diff --git a/python/route53-failover/fargate_app_stack.py b/python/route53-failover/fargate_app_stack.py new file mode 100644 index 000000000..9fc25f306 --- /dev/null +++ b/python/route53-failover/fargate_app_stack.py @@ -0,0 +1,44 @@ +from aws_cdk import ( + aws_ec2 as ec2, + aws_ecs as ecs, + aws_ecs_patterns as ecs_patterns, + CfnOutput, Stack +) +from constructs import Construct + +# Need to Change different app +class FargateAppStack(Stack): + + def __init__(self, scope: Construct, id: str, **kwargs) -> None: + super().__init__(scope, id, **kwargs) + + # Create VPC and Fargate Cluster + # NOTE: Limit AZs to avoid reaching resource quotas + vpc = ec2.Vpc( + self, "MyVpc", + max_azs=2 + ) + + cluster = ecs.Cluster( + self, 'Ec2Cluster', + vpc=vpc + ) + + self.fargate_service = ecs_patterns.NetworkLoadBalancedFargateService( + self, "FargateService", + cluster=cluster, + task_image_options=ecs_patterns.NetworkLoadBalancedTaskImageOptions( + image=ecs.ContainerImage.from_registry("amazon/amazon-ecs-sample") + ) + ) + + self.fargate_service.service.connections.security_groups[0].add_ingress_rule( + peer = ec2.Peer.ipv4(vpc.vpc_cidr_block), + connection = ec2.Port.tcp(80), + description="Allow http inbound from VPC" + ) + + CfnOutput( + self, "LoadBalancerDNS", + value=self.fargate_service.load_balancer.load_balancer_dns_name + ) \ No newline at end of file diff --git a/python/route53-failover/healthcheck_alarm_stack.py b/python/route53-failover/healthcheck_alarm_stack.py new file mode 100644 index 000000000..f8a557fe5 --- /dev/null +++ b/python/route53-failover/healthcheck_alarm_stack.py @@ -0,0 +1,72 @@ +from constructs import Construct +from aws_cdk import ( + Stack, + Duration, + aws_route53 as route53, + aws_elasticloadbalancingv2 as elbv2, + aws_route53_targets as route53_targets, + aws_cloudwatch as cloudwatch, + aws_sns as sns +) +from aws_cdk.aws_cloudwatch_actions import SnsAction +from aws_cdk.aws_sns_subscriptions import EmailSubscription + +class HealthcheckAlarmStack(Stack): + def __init__(self, scope: Construct, construct_id: str, zone: route53.HostedZone, primaryLoadBalancer: elbv2.ILoadBalancerV2, secondaryLoadBalancer: elbv2.ILoadBalancerV2, email: str, **kwargs) -> None: + super().__init__(scope, construct_id, **kwargs) + + # primary record + primaryHealthCheck = route53.CfnHealthCheck(self, "DNSPrimaryHealthCheck", health_check_config=route53.CfnHealthCheck.HealthCheckConfigProperty( + fully_qualified_domain_name=primaryLoadBalancer.load_balancer_dns_name, + type="HTTP", + port=80 + )) + primary = route53.ARecord(self, "PrimaryRecordSet", + zone = zone, + record_name="failover", + target = route53.RecordTarget.from_alias(route53_targets.LoadBalancerTarget(primaryLoadBalancer)), + ) + primaryRecordSet = primary.node.default_child + primaryRecordSet.failover = "PRIMARY" + primaryRecordSet.health_check_id = primaryHealthCheck.attr_health_check_id + primaryRecordSet.set_identifier = "Primary" + + # secondary record + secondaryHealthCheck = route53.CfnHealthCheck(self, "DNSSecondaryHealthCheck", health_check_config=route53.CfnHealthCheck.HealthCheckConfigProperty( + fully_qualified_domain_name=secondaryLoadBalancer.load_balancer_dns_name, + type="HTTP", + port=80, + )) + secondary = route53.ARecord(self, "SecondaryRecordSet", + zone = zone, + record_name="failover", + target= route53.RecordTarget.from_alias(route53_targets.LoadBalancerTarget(secondaryLoadBalancer)), + ) + secondaryRecordSet = secondary.node.default_child + secondaryRecordSet.failover = "SECONDARY" + secondaryRecordSet.health_check_id = secondaryHealthCheck.attr_health_check_id + secondaryRecordSet.set_identifier = "Secondary" + + # cloudwatch metric & alarm to SNS + snsTopic = sns.Topic(self, "AlarmNotificationTopic") + snsTopic.add_subscription( + EmailSubscription(email_address=email) + ) + + healthCheckMetric = cloudwatch.Metric( + metric_name="HealthCheckStatus", + namespace="AWS/Route53", + statistic="Minimum", + period=Duration.minutes(1), + region="us-east-1", + dimensions_map={ + "HealthCheckId": primaryHealthCheck.attr_health_check_id + } + ) + healthCheckAlarm = healthCheckMetric.create_alarm(self, 'HealthCheckFailureAlarm', + evaluation_periods=1, + threshold=1, + comparison_operator=cloudwatch.ComparisonOperator.LESS_THAN_THRESHOLD + ) + + healthCheckAlarm.add_alarm_action(SnsAction(snsTopic)) diff --git a/python/route53-failover/hosted_zone_stack.py b/python/route53-failover/hosted_zone_stack.py new file mode 100644 index 000000000..4be018032 --- /dev/null +++ b/python/route53-failover/hosted_zone_stack.py @@ -0,0 +1,14 @@ +from constructs import Construct +from aws_cdk import ( + Stack, + aws_route53 as route53, +) + +class HostedZoneStack(Stack): + def __init__(self, scope: Construct, construct_id: str, domain: str, **kwargs) -> None: + super().__init__(scope, construct_id, **kwargs) + + # Test Env + self.zone = route53.PublicHostedZone(self, "HostedZone", zone_name=domain) + # use below code to use already created hosted zone + # self.hostzone = route53.HostedZone.from_lookup(self, "HostedZone", domain_name=domain) diff --git a/python/route53-failover/images/.gitignore b/python/route53-failover/images/.gitignore new file mode 100644 index 000000000..b22560a60 --- /dev/null +++ b/python/route53-failover/images/.gitignore @@ -0,0 +1 @@ +*.drawio.bkp \ No newline at end of file diff --git a/python/route53-failover/images/architecture.drawio b/python/route53-failover/images/architecture.drawio new file mode 100644 index 000000000..a762e1d97 --- /dev/null +++ b/python/route53-failover/images/architecture.drawio @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/python/route53-failover/images/architecture.png b/python/route53-failover/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..d9cf45f17cb3e3703e2367449013d39f86f325d0 GIT binary patch literal 69895 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 literal 0 HcmV?d00001 diff --git a/python/route53-failover/requirements.txt b/python/route53-failover/requirements.txt new file mode 100644 index 000000000..621c746fc --- /dev/null +++ b/python/route53-failover/requirements.txt @@ -0,0 +1,2 @@ +aws-cdk-lib==2.146.0 +constructs>=10.0.0,<11.0.0 \ No newline at end of file From 4d19f89891faba1963eacf2bb476723e45706ac8 Mon Sep 17 00:00:00 2001 From: Michael Kaiser Date: Sat, 3 Aug 2024 17:45:28 -0500 Subject: [PATCH 4/4] Fix: Security Issue Dependabot (#1061) Issues with Braces package in this lockfile --- .../package-lock.json | 4312 ----------------- 1 file changed, 4312 deletions(-) delete mode 100644 typescript/codepipeline-glue-deploy/package-lock.json diff --git a/typescript/codepipeline-glue-deploy/package-lock.json b/typescript/codepipeline-glue-deploy/package-lock.json deleted file mode 100644 index 472b169e3..000000000 --- a/typescript/codepipeline-glue-deploy/package-lock.json +++ /dev/null @@ -1,4312 +0,0 @@ -{ - "name": "typescript", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "typescript", - "version": "0.1.0", - "dependencies": { - "aws-cdk-lib": "^2.130.0", - "cdk": "^2.130.0", - "constructs": "^10.0.0", - "source-map-support": "^0.5.21" - }, - "bin": { - "typescript": "bin/typescript.js" - }, - "devDependencies": { - "@types/jest": "^29.5.3", - "@types/node": "20.4.5", - "aws-cdk": "^2.130.0", - "jest": "^29.6.2", - "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", - "typescript": "~5.1.6" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.202", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.202.tgz", - "integrity": "sha512-JqlF0D4+EVugnG5dAsNZMqhu3HW7ehOXm5SDMxMbXNDMdsF0pxtQKNHRl52z1U9igsHmaFpUgSGjbhAJ+0JONg==" - }, - "node_modules/@aws-cdk/asset-kubectl-v20": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz", - "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==" - }, - "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz", - "integrity": "sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg==" - }, - "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, - "dependencies": { - "@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", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/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, - "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", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/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 - }, - "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, - "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, - "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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", - "dev": true, - "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.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", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "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, - "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "dependencies": { - "@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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "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, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "dependencies": { - "@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.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "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, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/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, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/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 - }, - "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, - "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, - "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, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", - "dev": true, - "dependencies": { - "@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.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", - "dev": true, - "dependencies": { - "@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.23.9", - "@babel/types": "^7.23.9", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "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, - "dependencies": { - "@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/@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/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@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, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "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, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "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.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "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", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/node": { - "version": "20.4.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz", - "integrity": "sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "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, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.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, - "engines": { - "node": ">=0.4.0" - } - }, - "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, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "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, - "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, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aws-cdk": { - "version": "2.130.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.130.0.tgz", - "integrity": "sha512-MsjGzQ2kZv0FEfXvpW7FTJRnefew0GrYt9M2SMN2Yn45+yjugGl2X8to416kABeFz1OFqW56hq8Y5BiLuFDVLQ==", - "bin": { - "cdk": "bin/cdk" - }, - "engines": { - "node": ">= 14.15.0" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/aws-cdk-lib": { - "version": "2.130.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.130.0.tgz", - "integrity": "sha512-yK7ibePipdjlI4AFM94fwwtsCkmpWJ0JFZTMPahahC/3Pxe/BA/nnI/4Namvl5QPxW5QlU0xQYU7cywioq3RQg==", - "bundleDependencies": [ - "@balena/dockerignore", - "case", - "fs-extra", - "ignore", - "jsonschema", - "minimatch", - "punycode", - "semver", - "table", - "yaml", - "mime-types" - ], - "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.202", - "@aws-cdk/asset-kubectl-v20": "^2.1.2", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.1", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^11.2.0", - "ignore": "^5.3.1", - "jsonschema": "^1.4.1", - "mime-types": "^2.1.35", - "minimatch": "^3.1.2", - "punycode": "^2.3.1", - "semver": "^7.6.0", - "table": "^6.8.1", - "yaml": "1.10.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "constructs": "^10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { - "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.12.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/aws-cdk-lib/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/aws-cdk-lib/node_modules/astral-regex": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/aws-cdk-lib/node_modules/case": { - "version": "1.6.3", - "inBundle": true, - "license": "(MIT OR GPL-3.0-or-later)", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { - "version": "3.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "11.2.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/aws-cdk-lib/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.3.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/jsonfile": { - "version": "6.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/aws-cdk-lib/node_modules/jsonschema": { - "version": "1.4.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { - "version": "4.4.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aws-cdk-lib/node_modules/mime-db": { - "version": "1.52.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/aws-cdk-lib/node_modules/mime-types": { - "version": "2.1.35", - "inBundle": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/aws-cdk-lib/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/aws-cdk-lib/node_modules/punycode": { - "version": "2.3.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/aws-cdk-lib/node_modules/require-from-string": { - "version": "2.0.2", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.6.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aws-cdk-lib/node_modules/slice-ansi": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/aws-cdk-lib/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/table": { - "version": "6.8.1", - "inBundle": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/universalify": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/uri-js": { - "version": "4.4.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/aws-cdk-lib/node_modules/yaml": { - "version": "1.10.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "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" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "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, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001588", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", - "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/cdk": { - "version": "2.130.0", - "resolved": "https://registry.npmjs.org/cdk/-/cdk-2.130.0.tgz", - "integrity": "sha512-CjBcRCXW1X47dfew9bauf1MjYv68x5pR2604pmIqahrb/vyQB9lKApMl9zYhwMWcVjY2EWIco+SJkqqYhdklwg==", - "dependencies": { - "aws-cdk": "2.130.0" - }, - "bin": { - "cdk": "bin/cdk" - }, - "engines": { - "node": ">= 14.15.0" - } - }, - "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/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "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/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/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/constructs": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.3.0.tgz", - "integrity": "sha512-vbK8i3rIb/xwZxSpTjz3SagHn1qq9BChLEfy5Hf6fB3/2eFbrwt2n9kHwQcS0CPTRBesreeAcsJfMq2229FnbQ==", - "engines": { - "node": ">= 16.14.0" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "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, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "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, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.676", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.676.tgz", - "integrity": "sha512-uHt4FB8SeYdhcOsj2ix/C39S7sPSNFJpzShjxGOm1KdF4MHyGqGi389+T5cErsodsijojXilYaHIKKqJfqh7uQ==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "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 - }, - "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, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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 - }, - "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, - "dependencies": { - "bser": "2.1.1" - } - }, - "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, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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, - "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, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "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/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/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 - }, - "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, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/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/istanbul-lib-instrument/node_modules/semver": { - "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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/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/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, - "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", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "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.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/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/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/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 - }, - "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, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/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 - }, - "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, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/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, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/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/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "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 - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/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, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=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, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz", - "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/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/ts-jest/node_modules/semver": { - "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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/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/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "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": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "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, - "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/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/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, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "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, - "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 - }, - "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, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -}