From a75dcc8f9194dc4700af2eb6adb4b82a6051b8ff Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Mon, 15 Aug 2022 11:49:34 -0700 Subject: [PATCH 01/13] changed cluster config --- .../EKS/lib/config/cluster-config/clusters.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/cdk_framework/EKS/lib/config/cluster-config/clusters.yml b/cdk_framework/EKS/lib/config/cluster-config/clusters.yml index 5066d42e2..84ddc9d6d 100644 --- a/cdk_framework/EKS/lib/config/cluster-config/clusters.yml +++ b/cdk_framework/EKS/lib/config/cluster-config/clusters.yml @@ -8,9 +8,9 @@ clusters: launch_type: fargate: version: 1.21 - t4gCluster01: - launch_type: - ec2: - ec2_instance: m5 - node_size: large - version: 1.21 + # t4gCluster01: + # launch_type: + # ec2: + # ec2_instance: m5 + # node_size: large + # version: 1.21 From 77a6ebb3bf8e82ff17c84bac7c0805f1ad7fcf36 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Mon, 15 Aug 2022 11:52:40 -0700 Subject: [PATCH 02/13] New PR --- cdk_framework/EKS/lib/app.ts | 5 +- cdk_framework/EKS/lib/cluster-deployment.ts | 67 +- .../lib/config/cluster-config/clusters.yml | 22 +- cdk_framework/EKS/lib/stacks/cluster-stack.ts | 71 -- .../EKS/lib/stacks/ec2-cluster-stack.ts | 94 ++ .../EKS/lib/stacks/fargate-cluster-stack.ts | 38 + .../EKS/lib/utils/validate-cluster-config.ts | 140 --- .../EKS/lib/utils/validate-config-schema.ts | 62 ++ .../lib/utils/validate-test-case-config.ts | 7 +- cdk_framework/EKS/package-lock.json | 411 ++++++++- cdk_framework/EKS/package.json | 5 +- .../EKS/test/cluster-deployment.test.ts | 5 +- cdk_framework/EKS/test/validation.test.ts | 840 +++++++++--------- 13 files changed, 1050 insertions(+), 717 deletions(-) delete mode 100644 cdk_framework/EKS/lib/stacks/cluster-stack.ts create mode 100644 cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts create mode 100644 cdk_framework/EKS/lib/stacks/fargate-cluster-stack.ts delete mode 100644 cdk_framework/EKS/lib/utils/validate-cluster-config.ts create mode 100644 cdk_framework/EKS/lib/utils/validate-config-schema.ts diff --git a/cdk_framework/EKS/lib/app.ts b/cdk_framework/EKS/lib/app.ts index 5f08971a6..57c207305 100644 --- a/cdk_framework/EKS/lib/app.ts +++ b/cdk_framework/EKS/lib/app.ts @@ -1,12 +1,13 @@ #!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; -import { ClusterStack } from './stacks/cluster-stack'; import { deployClusters } from './cluster-deployment'; +import { FargateStack } from './stacks/fargate-cluster-stack'; +import { EC2Stack } from './stacks/ec2-cluster-stack'; const app = new cdk.App(); -let clusterMap = new Map<string, ClusterStack>() +let clusterMap = new Map<string, FargateStack | EC2Stack>() clusterMap = deployClusters(app); diff --git a/cdk_framework/EKS/lib/cluster-deployment.ts b/cdk_framework/EKS/lib/cluster-deployment.ts index 4985fed09..21325f12d 100644 --- a/cdk_framework/EKS/lib/cluster-deployment.ts +++ b/cdk_framework/EKS/lib/cluster-deployment.ts @@ -1,15 +1,16 @@ #!/usr/bin/env node import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; -import { validateClustersConfig } from './utils/validate-cluster-config'; import { VPCStack } from './stacks/vpc-stack'; import { aws_eks as eks} from 'aws-cdk-lib'; -import { ClusterStack } from './stacks/cluster-stack'; import { readFileSync} from 'fs'; +import { EC2Stack } from './stacks/ec2-cluster-stack'; +import { FargateStack } from './stacks/fargate-cluster-stack'; +import { validateFileSchema } from './utils/validate-config-schema'; const yaml = require('js-yaml') -export function deployClusters(app: cdk.App) : Map<string, ClusterStack> { +export function deployClusters(app: cdk.App) : Map<string, FargateStack | EC2Stack> { const REGION = process.env.REGION || 'us-west-2' const route = process.env.CDK_CONFIG_PATH || __dirname + '/config/cluster-config/clusters.yml'; @@ -21,31 +22,43 @@ export function deployClusters(app: cdk.App) : Map<string, ClusterStack> { const raw = readFileSync(route) const configData = yaml.load(raw) - const eksClusterMap = new Map<string, ClusterStack>(); - - const vpcStack = new VPCStack(app, 'EKSVpc', { - env: { - region: REGION - } - }) - - validateClustersConfig(configData) - for(const [key, value] of Object.entries(configData['clusters'])){ - const val = Object(value) - const versionKubernetes = eks.KubernetesVersion.of(String(val['version'])); - const newStack = new ClusterStack(app, key + 'EKSCluster', { - launchType: (val['launch_type']), - name: key, - vpc: vpcStack.vpc, - version: versionKubernetes, - env: { - region: REGION - }, - }) - + validateFileSchema(configData) + + const eksClusterMap = new Map<string, FargateStack | EC2Stack>(); - eksClusterMap.set(key, newStack) - } + // const vpcStack = new VPCStack(app, 'EKSVpc', { + // env: { + // region: REGION + // } + // }) + + // schemaValidator(configData) + // for(const cluster of configData['clusters']){ + // const versionKubernetes = eks.KubernetesVersion.of(String(cluster['version'])); + // let stack; + // if(String(cluster['launch_type']) === 'ec2'){ + // stack = new EC2Stack(app, cluster['name'] + 'EKSCluster', { + // name: String(cluster['name']), + // vpc: vpcStack.vpc, + // version: versionKubernetes, + // ec2_instance: String(cluster['ec2_instance']), + // node_size: String(cluster['node_size']), + // env: { + // region: REGION + // }, + // }) + // } else { + // stack = new FargateStack(app, cluster['name'] + 'EKSCluster', { + // name: String(cluster['name']), + // vpc: vpcStack.vpc, + // version: versionKubernetes, + // env: { + // region: REGION + // }, + // }) + // } + // eksClusterMap.set(cluster['name'], stack) + // } return eksClusterMap } diff --git a/cdk_framework/EKS/lib/config/cluster-config/clusters.yml b/cdk_framework/EKS/lib/config/cluster-config/clusters.yml index 84ddc9d6d..f47037fce 100644 --- a/cdk_framework/EKS/lib/config/cluster-config/clusters.yml +++ b/cdk_framework/EKS/lib/config/cluster-config/clusters.yml @@ -1,16 +1,10 @@ --- clusters: - amdCluster02: - launch_type: - fargate: - version: 1.21 - fargateCluster01: - launch_type: - fargate: - version: 1.21 - # t4gCluster01: - # launch_type: - # ec2: - # ec2_instance: m5 - # node_size: large - # version: 1.21 + - name: ec2Cluster + version: "1.21" + launch_type: ec2 + ec2_instance: m5 + node_size: large + - name: fargateCluster + version: "1.21" + launch_type: fargate diff --git a/cdk_framework/EKS/lib/stacks/cluster-stack.ts b/cdk_framework/EKS/lib/stacks/cluster-stack.ts deleted file mode 100644 index 7d90006cc..000000000 --- a/cdk_framework/EKS/lib/stacks/cluster-stack.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Stack, StackProps, aws_eks as eks, aws_ec2 as ec2} from 'aws-cdk-lib'; -import { Construct } from 'constructs'; -import { Vpc } from 'aws-cdk-lib/aws-ec2'; -import { KubernetesVersion} from 'aws-cdk-lib/aws-eks'; -import { ManagedPolicy, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; - - -export class ClusterStack extends Stack { - cluster : eks.Cluster | eks.FargateCluster - - constructor(scope: Construct, id: string, props: ClusterStackProps) { - super(scope, id, props); - - const logging = [ - eks.ClusterLoggingTypes.API, - eks.ClusterLoggingTypes.AUDIT, - eks.ClusterLoggingTypes.AUTHENTICATOR, - eks.ClusterLoggingTypes.CONTROLLER_MANAGER, - eks.ClusterLoggingTypes.SCHEDULER, - ] - - const workerRole = new Role(this, 'EKSWorkerRole', { - assumedBy: new ServicePrincipal('ec2.amazonaws.com'), - managedPolicies: [ - ManagedPolicy.fromAwsManagedPolicyName('AmazonPrometheusRemoteWriteAccess'), - ManagedPolicy.fromAwsManagedPolicyName('AWSXrayWriteOnlyAccess'), - ManagedPolicy.fromAwsManagedPolicyName('CloudWatchAgentAdminPolicy'), - ManagedPolicy.fromAwsManagedPolicyName('AmazonS3ReadOnlyAccess'), - ManagedPolicy.fromAwsManagedPolicyName('AWSAppMeshEnvoyAccess'), - ManagedPolicy.fromAwsManagedPolicyName('AmazonEKSWorkerNodePolicy'), - ManagedPolicy.fromAwsManagedPolicyName('AmazonEC2ContainerRegistryReadOnly'), - ManagedPolicy.fromAwsManagedPolicyName('AmazonEKS_CNI_Policy') - ] - }); - if(props.launchType['ec2'] !== undefined){ - this.cluster = new eks.Cluster(this, props.name, { - clusterName: props.name, - vpc: props.vpc, - vpcSubnets: [{subnetType: ec2.SubnetType.PUBLIC}], - defaultCapacity: 0, // we want to manage capacity our selves - version: props.version, - clusterLogging: logging, - - }); - const instanceType = props.launchType['ec2']['ec2_instance'] - const instanceSize = props.launchType['ec2']['node_size'] - this.cluster.addNodegroupCapacity('ng-' + instanceType, { - instanceTypes: [new ec2.InstanceType(instanceType + '.' + instanceSize)], - minSize: 2, - nodeRole: workerRole - }) - } else if (props.launchType['fargate'] !== undefined){ - this.cluster = new eks.FargateCluster(this, props.name, { - clusterName: props.name, - vpc: props.vpc, - version: props.version, - clusterLogging: logging - }); - } - - this.cluster.awsAuth.addMastersRole(Role.fromRoleName(this, 'eks_admin_role', 'Admin')) - - } -} - -export interface ClusterStackProps extends StackProps{ - launchType: any; - name: string; - vpc: Vpc; - version: KubernetesVersion; -} diff --git a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts new file mode 100644 index 000000000..5a74e1e83 --- /dev/null +++ b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts @@ -0,0 +1,94 @@ +import { Stack, StackProps, aws_eks as eks, aws_ec2 as ec2} from 'aws-cdk-lib'; +import { Construct } from 'constructs'; +import { Vpc } from 'aws-cdk-lib/aws-ec2'; +import { KubernetesVersion} from 'aws-cdk-lib/aws-eks'; +import { ManagedPolicy, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; + +const supportedNodeSizes = new Set(['medium', 'large', 'xlarge', '2xlarge', '4xlarge', '8xlarge', '12xlarge', '16xlarge', '24xlarge', 'metal']); +const supportedT4gInstances = new Set(['nano', 'micro', 'small', 'medium', 'large', 'xlarge', '2xlarge']) + + +export class EC2Stack extends Stack { + cluster : eks.Cluster | eks.FargateCluster + + constructor(scope: Construct, id: string, props: EC2ClusterStackProps) { + super(scope, id, props); + + const logging = [ + eks.ClusterLoggingTypes.API, + eks.ClusterLoggingTypes.AUDIT, + eks.ClusterLoggingTypes.AUTHENTICATOR, + eks.ClusterLoggingTypes.CONTROLLER_MANAGER, + eks.ClusterLoggingTypes.SCHEDULER, + ] + + const ec2Instance = props.ec2_instance.toLowerCase() + const nodeSize = validateNodeSize(props.node_size, ec2Instance) + + const workerRole = new Role(this, 'EKSWorkerRole', { + assumedBy: new ServicePrincipal('ec2.amazonaws.com'), + managedPolicies: [ + ManagedPolicy.fromAwsManagedPolicyName('AmazonPrometheusRemoteWriteAccess'), + ManagedPolicy.fromAwsManagedPolicyName('AWSXrayWriteOnlyAccess'), + ManagedPolicy.fromAwsManagedPolicyName('CloudWatchAgentAdminPolicy'), + ManagedPolicy.fromAwsManagedPolicyName('AmazonS3ReadOnlyAccess'), + ManagedPolicy.fromAwsManagedPolicyName('AWSAppMeshEnvoyAccess'), + ManagedPolicy.fromAwsManagedPolicyName('AmazonEKSWorkerNodePolicy'), + ManagedPolicy.fromAwsManagedPolicyName('AmazonEC2ContainerRegistryReadOnly'), + ManagedPolicy.fromAwsManagedPolicyName('AmazonEKS_CNI_Policy') + ] + }); + this.cluster = new eks.Cluster(this, props.name, { + clusterName: props.name, + vpc: props.vpc, + vpcSubnets: [{subnetType: ec2.SubnetType.PUBLIC}], + defaultCapacity: 0, // we want to manage capacity our selves + version: props.version, + clusterLogging: logging, + + }); + this.cluster.addNodegroupCapacity('ng-' + ec2Instance, { + instanceTypes: [new ec2.InstanceType(ec2Instance + '.' + nodeSize)], + minSize: 2, + nodeRole: workerRole + }) + this.cluster.awsAuth.addMastersRole(Role.fromRoleName(this, 'eks_admin_role', 'Admin')) + + } +} + +export interface EC2ClusterStackProps extends StackProps{ + name: string; + vpc: Vpc; + version: KubernetesVersion; + ec2_instance: string; + node_size: string +} + + +function validateNodeSize(size: string, instance: string){ + if(!size || size === null || size === 'null' || size === ''){ + return null + } + const adjustedSize = size.toLowerCase() + + if(instance === 't4g'){ + if(!supportedT4gInstances.has(adjustedSize)){ + throw new Error('Node size is not one of the options listed here https://www.amazonaws.cn/en/ec2/instance-types/') + } + } else { + if(!supportedNodeSizes.has(adjustedSize)){ + throw new Error('Node size is not one of the options listed here https://www.amazonaws.cn/en/ec2/instance-types/') + } + if(instance === 'm5' && adjustedSize === 'medium'){ + throw new Error('CPU architecture and node size are not compatible') + } + if(instance === 'm6g' && adjustedSize === '24xlarge'){ + throw new Error('CPU architecture and node size are not compatible') + } + } + + return adjustedSize + +} + diff --git a/cdk_framework/EKS/lib/stacks/fargate-cluster-stack.ts b/cdk_framework/EKS/lib/stacks/fargate-cluster-stack.ts new file mode 100644 index 000000000..b3939a2c5 --- /dev/null +++ b/cdk_framework/EKS/lib/stacks/fargate-cluster-stack.ts @@ -0,0 +1,38 @@ +import { Stack, StackProps, aws_eks as eks} from 'aws-cdk-lib'; +import { Construct } from 'constructs'; +import { Vpc } from 'aws-cdk-lib/aws-ec2'; +import { KubernetesVersion} from 'aws-cdk-lib/aws-eks'; +import { Role } from 'aws-cdk-lib/aws-iam'; + + +export class FargateStack extends Stack { + cluster : eks.Cluster | eks.FargateCluster + + constructor(scope: Construct, id: string, props: FargateClusterStackProps) { + super(scope, id, props); + + const logging = [ + eks.ClusterLoggingTypes.API, + eks.ClusterLoggingTypes.AUDIT, + eks.ClusterLoggingTypes.AUTHENTICATOR, + eks.ClusterLoggingTypes.CONTROLLER_MANAGER, + eks.ClusterLoggingTypes.SCHEDULER, + ] + + this.cluster = new eks.FargateCluster(this, props.name, { + clusterName: props.name, + vpc: props.vpc, + version: props.version, + clusterLogging: logging + }); + + this.cluster.awsAuth.addMastersRole(Role.fromRoleName(this, 'eks_admin_role', 'Admin')) + + } +} + +export interface FargateClusterStackProps extends StackProps{ + name: string; + vpc: Vpc; + version: KubernetesVersion; +} diff --git a/cdk_framework/EKS/lib/utils/validate-cluster-config.ts b/cdk_framework/EKS/lib/utils/validate-cluster-config.ts deleted file mode 100644 index ee081cb0a..000000000 --- a/cdk_framework/EKS/lib/utils/validate-cluster-config.ts +++ /dev/null @@ -1,140 +0,0 @@ -const supportedVersions = new Set(['1.18', '1.19', '1.20', '1.21']); -const supportedCPUArchitectures = new Set(['m5', 'm6g', 't4g']); -const supportedNodeSizes = new Set(['medium', 'large', 'xlarge', '2xlarge', '4xlarge', '8xlarge', '12xlarge', '16xlarge', '24xlarge', 'metal']); -const supportedT4gInstances = new Set(['nano', 'micro', 'small', 'medium', 'large', 'xlarge', '2xlarge']) -const requiredFields = new Set(['version', 'launch_type']) - - -export function validateClustersConfig(info: unknown){ - //Needs to be casted to Object to access fields in configuration file - const data = Object(info) - if(!data['clusters']){ - throw new Error('No clusters field being filed in the yaml file') - } - const clusterInfo = data['clusters'] - const clusterNamesSet = new Set() - for(const [key, value] of Object.entries(clusterInfo)){ - if(Object.keys(Object(value)).length !== 2){ - throw new Error('Did not use proper fields for cluster. You can only have launch_type and version') - } - const val = Object(value) - if(clusterNamesSet.has(key)){ - throw new Error('Cannot have multiple clusters with the same name') - } - clusterNamesSet.add(key) - validateRequiredFields(val) - for(const [k, v] of Object.entries(val)){ - switch(k){ - case 'version': - val[k] = validateVersion(String(v)) - break; - case 'launch_type': - val[k] = convertAndValidateLaunchType(val) - break - default: - throw new Error('Incompatible field type') - } - } - } -} - -function validateRequiredFields(fields: any){ - for(const expectedField of requiredFields){ - if(!fields[expectedField]){ - throw new Error('Required field - ' + expectedField + ' - not provided') - } - } -} - -function checkToSetUpDefaults(fields: any){ - if(!fields['ec2_instance']){ - fields['ec2_instance'] = 'm5' - } - if(!fields['node_size']){ - fields['node_size'] = 'large' - } -} - -function validateVersion(version: string){ - //When parsing version 1.20, it automatically is coverted to 1.2 => change back to 1.20 for cluster deployment - if(version === '1.2'){ - version = '1.20' - } - if(!supportedVersions.has(version)){ - throw new Error('Version needs to be a value of one of the following: ' + Array.from(supportedVersions).join(', ')); - } - return version -} - -function convertAndValidateEC2Instance(instance: string){ - if(instance === null || !instance || instance == 'null'){ - throw new Error('EC2 instance type was not provided for ec2 cluster') - } - const adjustedType = instance.toLowerCase() - if(!supportedCPUArchitectures.has(adjustedType)){ - throw new Error('Improper instance type or provided faulty ec2_instance/node_size for fargate cluster') - } - return adjustedType -} - -function convertAndValidateLaunchType(type: any){ - const launchType = Object(type['launch_type']) - if(Object.keys(launchType).length != 1){ - throw new Error('Must provide exactly one launch type') - } - if(launchType['fargate'] !== undefined){ - return launchType - } else if(launchType['ec2'] !== undefined){ - const launchData = Object(launchType['ec2']) - checkToSetUpDefaults(launchData) - for(const [k, v] of Object.entries(launchData)){ - switch(k){ - case 'ec2_instance': - launchData[k] = convertAndValidateEC2Instance(String(v)) - break - case 'node_size': - launchData[k] = validateNodeSize(String(v), String(launchData['ec2_instance'])) - break; - default: - throw new Error('Provided field type, ' + k + ', is not a compatible field type') - } - } - launchType['ec2'] = launchData - addedChecks(launchData) - return launchType - } else { - throw new Error('launch_type is neither ec2 nor fargate') - } -} - -function validateNodeSize(size: string, instance: string){ - if(!size || size === null || size === 'null' || size === ''){ - return null - } - const adjustedSize = size.toLowerCase() - const adjustedInstance = convertAndValidateEC2Instance(instance) - - if(adjustedInstance === 't4g'){ - if(!supportedT4gInstances.has(adjustedSize)){ - throw new Error('Node size is not one of the options listed here https://www.amazonaws.cn/en/ec2/instance-types/') - } - } else { - if(!supportedNodeSizes.has(adjustedSize)){ - throw new Error('Node size is not one of the options listed here https://www.amazonaws.cn/en/ec2/instance-types/') - } - } - - return adjustedSize - -} - -function addedChecks(val: unknown){ - const value = Object(val) - if(String([value['ec2_instance']]) === 'm5' && String([value['node_size']]) === 'medium'){ - throw new Error('CPU architecture and node size are not compatible') - } - if(String([value['ec2_instance']]) === 'm6g' && String([value['node_size']]) === '24xlarge'){ - throw new Error('CPU architecture and node size are not compatible') - } -} - diff --git a/cdk_framework/EKS/lib/utils/validate-config-schema.ts b/cdk_framework/EKS/lib/utils/validate-config-schema.ts new file mode 100644 index 000000000..640421564 --- /dev/null +++ b/cdk_framework/EKS/lib/utils/validate-config-schema.ts @@ -0,0 +1,62 @@ +//install using npm install ajv +import Ajv, {DefinedError} from "ajv" + +const ajv = new Ajv({allErrors: true}); +require("ajv-errors")(ajv /*, {singleError: true} */) + +const schema = { + type: "object", + properties: { + clusters : { + type: "array", + items: { + type: "object", + properties: { + name: { + type: "string", + errorMessage: { + type: 'Name must be a string' + } + }, + version: { + type: "string", + errorMessage: { + type: 'Version must be a string' + } + }, + launch_type: { + type: "string", + errorMessage: { + type: 'launch_type must be a string' + } + }, + ec2_instance: { + type: "string", + errorMessage: { + type: 'ec2_instance must be a string' + } + }, + node_size: { + type: "string", + errorMessage: { + type: 'Node_size must be a string' + } + }, + }, + required: ["name", "version", "launch_type"], + additionalProperties: false + }, + minItems: 1 + } + } +} + +export function validateFileSchema(configData: unknown){ + const valid = ajv.validate(schema, configData) + if (!valid){ + const errors = ajv.errors as DefinedError[] + for(const err of errors){ + throw new Error(err.message) + } + } +} \ No newline at end of file diff --git a/cdk_framework/EKS/lib/utils/validate-test-case-config.ts b/cdk_framework/EKS/lib/utils/validate-test-case-config.ts index 9260f7e75..db796d6bb 100644 --- a/cdk_framework/EKS/lib/utils/validate-test-case-config.ts +++ b/cdk_framework/EKS/lib/utils/validate-test-case-config.ts @@ -1,6 +1,7 @@ -import { ClusterStack } from '../stacks/cluster-stack'; +import { EC2Stack } from '../stacks/ec2-cluster-stack'; +import { FargateStack } from '../stacks/fargate-cluster-stack'; const configKeys = new Set(['cluster_name', 'sample_app_image_uri', 'sample_app_mode', 'collector_config']) -export function validateTestcaseConfig(info: any, clusterStackMap: Map <string, ClusterStack>){ +export function validateTestcaseConfig(info: any, clusterStackMap: Map <string, FargateStack | EC2Stack>){ const data = Object(info) if (!data['test_case']) { throw new Error('No test_case field in the yaml file') @@ -24,7 +25,7 @@ export function validateTestcaseConfig(info: any, clusterStackMap: Map <string, validateValue(key, value, clusterStackMap) } } -function validateValue(key: string, value: any, clusterStackMap: Map <string, ClusterStack>) { +function validateValue(key: string, value: any, clusterStackMap: Map <string, FargateStack | EC2Stack>) { if (value == undefined) { throw Error(`No value provided for key ${key}`) } diff --git a/cdk_framework/EKS/package-lock.json b/cdk_framework/EKS/package-lock.json index 8d599e945..59957924f 100644 --- a/cdk_framework/EKS/package-lock.json +++ b/cdk_framework/EKS/package-lock.json @@ -12,10 +12,13 @@ "@aws-cdk/aws-eks": "^1.161.0", "@aws-cdk/aws-iam": "^1.161.0", "@aws-cdk/core": "^1.161.0", + "ajv": "^8.11.0", + "ajv-errors": "^3.0.0", "aws-cdk-lib": "2.29.0", "constructs": "^10.0.0", "js-yaml": "^4.1.0", - "source-map-support": "^0.5.21" + "source-map-support": "^0.5.21", + "yaml-schema-validator": "^1.2.3" }, "bin": { "my-project": "bin/my-project.js" @@ -1936,6 +1939,22 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", @@ -1951,6 +1970,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2817,14 +2842,13 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -2832,6 +2856,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", + "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", + "peerDependencies": { + "ajv": "^8.0.1" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -3417,6 +3449,16 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/component-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", + "integrity": "sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -3623,6 +3665,12 @@ "node": ">=8" } }, + "node_modules/eivindfjeldstad-dot": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eivindfjeldstad-dot/-/eivindfjeldstad-dot-0.0.1.tgz", + "integrity": "sha512-fQc4xSFjrQ35pissb3PGf+kew7jX3zsNAPjuswujUl6gjj9rhvZoO++tlRI+KLbT7bIL3KMWYyks49EP3luMNA==", + "deprecated": "Use @eivifj/dot instead" + }, "node_modules/electron-to-chromium": { "version": "1.4.170", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz", @@ -3806,6 +3854,22 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3846,6 +3910,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/eslint/node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3927,7 +3997,6 @@ "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" @@ -4028,8 +4097,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.2.11", @@ -5334,10 +5402,9 @@ "dev": true }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -5839,7 +5906,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, "engines": { "node": ">=6" } @@ -5891,6 +5957,14 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -6081,8 +6155,7 @@ "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 + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stack-utils": { "version": "2.0.5", @@ -6467,6 +6540,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typecast": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/typecast/-/typecast-0.0.1.tgz", + "integrity": "sha512-L2f5OCLKsJdCjSyN0d5O6CkNxhiC8EQ2XlXnHpWZVNfF+mj2OTaXhAVnP0/7SY/sxO1DHZpOFMpIuGlFUZEGNA==" + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -6528,7 +6606,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -6568,6 +6645,19 @@ "node": ">= 8" } }, + "node_modules/validate": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/validate/-/validate-4.5.1.tgz", + "integrity": "sha512-ZdfYYgJDVrx4oxamyW0ynIoW8jIAoAeb8/pSu9XF+WCZueGogUMU7cGYHVUiWAJDc7RO3QR/EBhhkP46Wn9Hng==", + "dependencies": { + "component-type": "1.2.1", + "eivindfjeldstad-dot": "0.0.1", + "typecast": "0.0.1" + }, + "engines": { + "node": ">=7.6" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -6743,6 +6833,104 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml-schema-validator": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/yaml-schema-validator/-/yaml-schema-validator-1.2.3.tgz", + "integrity": "sha512-Ijr4R68EEXTM7ukKeGTcaWF5TqPous2WcsYaeKZArZXMzLp/Zvi/EzVbHkxy8vbb2TjPgQt7/tjIdkaEzeDKTw==", + "dependencies": { + "chalk": "^2.4.1", + "commander": "^2.16.0", + "js-yaml": "^3.12.0", + "validate": "^4.4.1" + }, + "bin": { + "schema": "index.js" + } + }, + "node_modules/yaml-schema-validator/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yaml-schema-validator/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/yaml-schema-validator/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yaml-schema-validator/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/yaml-schema-validator/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/yaml-schema-validator/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/yaml-schema-validator/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/yaml-schema-validator/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/yaml-schema-validator/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -8053,6 +8241,18 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "globals": { "version": "13.17.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", @@ -8062,6 +8262,12 @@ "type-fest": "^0.20.2" } }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -8729,17 +8935,22 @@ } }, "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "requires": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, + "ajv-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-3.0.0.tgz", + "integrity": "sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==", + "requires": {} + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -9149,6 +9360,16 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "component-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", + "integrity": "sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -9312,6 +9533,11 @@ } } }, + "eivindfjeldstad-dot": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eivindfjeldstad-dot/-/eivindfjeldstad-dot-0.0.1.tgz", + "integrity": "sha512-fQc4xSFjrQ35pissb3PGf+kew7jX3zsNAPjuswujUl6gjj9rhvZoO++tlRI+KLbT7bIL3KMWYyks49EP3luMNA==" + }, "electron-to-chromium": { "version": "1.4.170", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz", @@ -9407,6 +9633,18 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -9432,6 +9670,12 @@ "type-fest": "^0.20.2" } }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -9534,8 +9778,7 @@ "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 + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.4.0", @@ -9605,8 +9848,7 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { "version": "3.2.11", @@ -10612,10 +10854,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -10998,8 +11239,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "queue-microtask": { "version": "1.2.3", @@ -11025,6 +11265,11 @@ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -11158,8 +11403,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "stack-utils": { "version": "2.0.5", @@ -11415,6 +11659,11 @@ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, + "typecast": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/typecast/-/typecast-0.0.1.tgz", + "integrity": "sha512-L2f5OCLKsJdCjSyN0d5O6CkNxhiC8EQ2XlXnHpWZVNfF+mj2OTaXhAVnP0/7SY/sxO1DHZpOFMpIuGlFUZEGNA==" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -11450,7 +11699,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -11486,6 +11734,16 @@ } } }, + "validate": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/validate/-/validate-4.5.1.tgz", + "integrity": "sha512-ZdfYYgJDVrx4oxamyW0ynIoW8jIAoAeb8/pSu9XF+WCZueGogUMU7cGYHVUiWAJDc7RO3QR/EBhhkP46Wn9Hng==", + "requires": { + "component-type": "1.2.1", + "eivindfjeldstad-dot": "0.0.1", + "typecast": "0.0.1" + } + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -11620,6 +11878,85 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml-schema-validator": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/yaml-schema-validator/-/yaml-schema-validator-1.2.3.tgz", + "integrity": "sha512-Ijr4R68EEXTM7ukKeGTcaWF5TqPous2WcsYaeKZArZXMzLp/Zvi/EzVbHkxy8vbb2TjPgQt7/tjIdkaEzeDKTw==", + "requires": { + "chalk": "^2.4.1", + "commander": "^2.16.0", + "js-yaml": "^3.12.0", + "validate": "^4.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "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==" + }, + "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==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", diff --git a/cdk_framework/EKS/package.json b/cdk_framework/EKS/package.json index ab0287142..be1e0d923 100644 --- a/cdk_framework/EKS/package.json +++ b/cdk_framework/EKS/package.json @@ -30,9 +30,12 @@ "@aws-cdk/aws-eks": "^1.161.0", "@aws-cdk/aws-iam": "^1.161.0", "@aws-cdk/core": "^1.161.0", + "ajv": "^8.11.0", + "ajv-errors": "^3.0.0", "aws-cdk-lib": "2.29.0", "constructs": "^10.0.0", "js-yaml": "^4.1.0", - "source-map-support": "^0.5.21" + "source-map-support": "^0.5.21", + "yaml-schema-validator": "^1.2.3" } } diff --git a/cdk_framework/EKS/test/cluster-deployment.test.ts b/cdk_framework/EKS/test/cluster-deployment.test.ts index 292c8f0b2..1a817665d 100644 --- a/cdk_framework/EKS/test/cluster-deployment.test.ts +++ b/cdk_framework/EKS/test/cluster-deployment.test.ts @@ -2,7 +2,8 @@ import * as cdk from 'aws-cdk-lib'; import { Template } from 'aws-cdk-lib/assertions'; import { readFileSync} from 'fs'; import { deployClusters } from '../lib/cluster-deployment'; -import { ClusterStack } from '../lib/stacks/cluster-stack'; +import { EC2Stack } from '../lib/stacks/ec2-cluster-stack'; +import { FargateStack } from '../lib/stacks/fargate-cluster-stack'; const yaml = require('js-yaml') @@ -15,7 +16,7 @@ test('ClusterTest', () => { const raw = readFileSync(route) const data = yaml.load(raw) - let clusterMap = new Map<string, ClusterStack>() + let clusterMap = new Map<string, FargateStack | EC2Stack>() const versionMap = new Map<string, string>() clusterMap = deployClusters(app) diff --git a/cdk_framework/EKS/test/validation.test.ts b/cdk_framework/EKS/test/validation.test.ts index b5844f812..df56f2083 100644 --- a/cdk_framework/EKS/test/validation.test.ts +++ b/cdk_framework/EKS/test/validation.test.ts @@ -1,425 +1,425 @@ -import assert from 'assert'; -import { validateClustersConfig} from '../lib/utils/validate-cluster-config'; +// import assert from 'assert'; +// import { validateClustersConfig} from '../lib/utils/validate-cluster-config'; -const defaultSetUpTable = Object.entries({ - 'Bad kubernetes version 1.22': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : 1.22 - } - } - }, - expectedErr: Error - }, - 'Regular working deployment': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : 1.21 - } - } - }, - expectedOut: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : "1.21" - } - } - } - }, - 'Too many fields in the cluster': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : 1.21, - random_field: 'random_value' - } - } - }, - expectedErr: Error - }, - 'Missing ec2_instance field': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2: { - node_size: 'xlarge' - } - }, - version : 1.21 - } - } - }, - expectedOut: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'xlarge' - } - }, - version : "1.21" - } - } - } - }, - 'Missing node_size field': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2: { - ec2_instance: 'm5' - } - }, - version : 1.21 - } - } - }, - expectedOut: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : "1.21" - } - } - } - }, - 'Missing ec2 fields': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2: null - }, - version : 1.21 - } - } - }, - expectedOut: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : "1.21" - } - } - } - }, - 'launch_type is null': { - data: { - clusters: { - amdCluster: { - launch_type: null, - version : 1.21 - } - } - }, - expectedErr: Error - }, - 'Too many launch_types': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - }, - fargate: null - }, - version : 1.21 - } - } - }, - expectedErr: Error - }, - 'Does not have clusters category': { - data: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : 1.21 - } - }, - expectedErr: Error - }, - 'Working fargate deployment': { - data: { - clusters: { - fargateCluster: { - launch_type: { - fargate: null - }, - version : 1.21 - } - } - }, - expectedOut: { - clusters: { - fargateCluster: { - launch_type: { - fargate: null - }, - version : "1.21" - } - } - } - }, - 'Multiple deployment - fargate and ec2': { - data: { - clusters: { - fargateCluster: { - launch_type: { - fargate: null - }, - version : 1.21 - }, - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : 1.21 - } - } - }, - expectedOut: { - clusters: { - fargateCluster: { - launch_type: { - fargate: null - }, - version : "1.21" - }, - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : "1.21" - } - } - } - }, - 'Multiple deployment - two ec2s': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'xlarge' - } - }, - version : 1.19 - }, - amdCluster2: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : 1.21 - } - } - }, - expectedOut: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'xlarge' - } - }, - version : "1.19" - }, - amdCluster2: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'large' - } - }, - version : "1.21" - } - } - } - }, - 't4g size is not good': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 't4g', - node_size: '4xlarge' - } - }, - version : 1.21 - } - } - }, - expectedErr: Error - }, - 'm6g size is not good': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm6g', - node_size: '24xlarge' - } - }, - version : 1.21 - } - } - }, - expectedErr: Error - }, - 'm5 size is not good': { - data: { - cluster: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'medium' - } - }, - version : 1.21 - } - } - }, - expectedErr: Error - }, - 'ec2 instance invalid name': { - data: { - clusters: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'wrong_name', - node_size: 'large' - } - }, - version : 1.21 - } - } - }, - expectedErr: Error - }, - 'launch_type is invalid': { - data: { - clusters: { - amdCluster: { - launch_type: { - wrong_type : { - ec2_instance : 'm6g', - node_size: '24xlarge' - } - }, - version : 1.21 - } - } - }, - expectedErr: Error - }, - 'version not provided': { - data: { - cluster: { - amdCluster: { - launch_type: { - ec2 : { - ec2_instance : 'm5', - node_size: 'medium' - } - } - } - } - }, - expectedErr: Error - }, - 'launch_type not provided': { - data: { - clusters: { - amdCluster: { - version : 1.21 - } - } - }, - expectedErr: Error - }, - 'no clusters provided': { - data: { - clusters: null - }, - expectedErr: Error - }, -}) +// const defaultSetUpTable = Object.entries({ +// 'Bad kubernetes version 1.22': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : 1.22 +// } +// } +// }, +// expectedErr: Error +// }, +// 'Regular working deployment': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedOut: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : "1.21" +// } +// } +// } +// }, +// 'Too many fields in the cluster': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : 1.21, +// random_field: 'random_value' +// } +// } +// }, +// expectedErr: Error +// }, +// 'Missing ec2_instance field': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2: { +// node_size: 'xlarge' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedOut: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'xlarge' +// } +// }, +// version : "1.21" +// } +// } +// } +// }, +// 'Missing node_size field': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2: { +// ec2_instance: 'm5' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedOut: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : "1.21" +// } +// } +// } +// }, +// 'Missing ec2 fields': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2: null +// }, +// version : 1.21 +// } +// } +// }, +// expectedOut: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : "1.21" +// } +// } +// } +// }, +// 'launch_type is null': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: null, +// version : 1.21 +// } +// } +// }, +// expectedErr: Error +// }, +// 'Too many launch_types': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// }, +// fargate: null +// }, +// version : 1.21 +// } +// } +// }, +// expectedErr: Error +// }, +// 'Does not have clusters category': { +// data: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : 1.21 +// } +// }, +// expectedErr: Error +// }, +// 'Working fargate deployment': { +// data: { +// clusters: { +// fargateCluster: { +// launch_type: { +// fargate: null +// }, +// version : 1.21 +// } +// } +// }, +// expectedOut: { +// clusters: { +// fargateCluster: { +// launch_type: { +// fargate: null +// }, +// version : "1.21" +// } +// } +// } +// }, +// 'Multiple deployment - fargate and ec2': { +// data: { +// clusters: { +// fargateCluster: { +// launch_type: { +// fargate: null +// }, +// version : 1.21 +// }, +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedOut: { +// clusters: { +// fargateCluster: { +// launch_type: { +// fargate: null +// }, +// version : "1.21" +// }, +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : "1.21" +// } +// } +// } +// }, +// 'Multiple deployment - two ec2s': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'xlarge' +// } +// }, +// version : 1.19 +// }, +// amdCluster2: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedOut: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'xlarge' +// } +// }, +// version : "1.19" +// }, +// amdCluster2: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'large' +// } +// }, +// version : "1.21" +// } +// } +// } +// }, +// 't4g size is not good': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 't4g', +// node_size: '4xlarge' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedErr: Error +// }, +// 'm6g size is not good': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm6g', +// node_size: '24xlarge' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedErr: Error +// }, +// 'm5 size is not good': { +// data: { +// cluster: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'medium' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedErr: Error +// }, +// 'ec2 instance invalid name': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'wrong_name', +// node_size: 'large' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedErr: Error +// }, +// 'launch_type is invalid': { +// data: { +// clusters: { +// amdCluster: { +// launch_type: { +// wrong_type : { +// ec2_instance : 'm6g', +// node_size: '24xlarge' +// } +// }, +// version : 1.21 +// } +// } +// }, +// expectedErr: Error +// }, +// 'version not provided': { +// data: { +// cluster: { +// amdCluster: { +// launch_type: { +// ec2 : { +// ec2_instance : 'm5', +// node_size: 'medium' +// } +// } +// } +// } +// }, +// expectedErr: Error +// }, +// 'launch_type not provided': { +// data: { +// clusters: { +// amdCluster: { +// version : 1.21 +// } +// } +// }, +// expectedErr: Error +// }, +// 'no clusters provided': { +// data: { +// clusters: null +// }, +// expectedErr: Error +// }, +// }) -defaultSetUpTable.forEach(([name, fields]) => - test(name, () => { - if(fields.expectedErr){ - try{ - validateClustersConfig(fields.data) - assert(false) - } catch(error){ - expect(error).toBeInstanceOf(Error); - } - } else { - validateClustersConfig(fields.data) - expect((fields.data)).toEqual(fields.expectedOut); - } - }) -) +// defaultSetUpTable.forEach(([name, fields]) => +// test(name, () => { +// if(fields.expectedErr){ +// try{ +// validateClustersConfig(fields.data) +// assert(false) +// } catch(error){ +// expect(error).toBeInstanceOf(Error); +// } +// } else { +// validateClustersConfig(fields.data) +// expect((fields.data)).toEqual(fields.expectedOut); +// } +// }) +// ) From 0b30dfc4eebbf307eb65e5805d8c40ec7d6e530a Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Mon, 15 Aug 2022 14:03:54 -0700 Subject: [PATCH 03/13] added interfaces --- cdk_framework/EKS/lib/interfaces/cluster-interface.ts | 5 +++++ cdk_framework/EKS/lib/interfaces/ec2cluster-interface | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 cdk_framework/EKS/lib/interfaces/cluster-interface.ts create mode 100644 cdk_framework/EKS/lib/interfaces/ec2cluster-interface diff --git a/cdk_framework/EKS/lib/interfaces/cluster-interface.ts b/cdk_framework/EKS/lib/interfaces/cluster-interface.ts new file mode 100644 index 000000000..bced6689f --- /dev/null +++ b/cdk_framework/EKS/lib/interfaces/cluster-interface.ts @@ -0,0 +1,5 @@ +export interface ClusterInterface{ + name: string + launch_type: string + version: string +} \ No newline at end of file diff --git a/cdk_framework/EKS/lib/interfaces/ec2cluster-interface b/cdk_framework/EKS/lib/interfaces/ec2cluster-interface new file mode 100644 index 000000000..1a4c65143 --- /dev/null +++ b/cdk_framework/EKS/lib/interfaces/ec2cluster-interface @@ -0,0 +1,6 @@ +import {ClusterInterface} from "./cluster-interface" + +export interface ec2ClusterInterface extends ClusterInterface{ + ec2_instance: string + node_size: string +} \ No newline at end of file From f9cb088ce5fb31661459096cae8a32309fc1a6c3 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Mon, 15 Aug 2022 14:07:18 -0700 Subject: [PATCH 04/13] added end of file lines --- cdk_framework/EKS/lib/interfaces/cluster-interface.ts | 2 +- cdk_framework/EKS/lib/interfaces/ec2cluster-interface | 2 +- cdk_framework/EKS/lib/utils/validate-config-schema.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cdk_framework/EKS/lib/interfaces/cluster-interface.ts b/cdk_framework/EKS/lib/interfaces/cluster-interface.ts index bced6689f..8c39ebedd 100644 --- a/cdk_framework/EKS/lib/interfaces/cluster-interface.ts +++ b/cdk_framework/EKS/lib/interfaces/cluster-interface.ts @@ -2,4 +2,4 @@ export interface ClusterInterface{ name: string launch_type: string version: string -} \ No newline at end of file +} diff --git a/cdk_framework/EKS/lib/interfaces/ec2cluster-interface b/cdk_framework/EKS/lib/interfaces/ec2cluster-interface index 1a4c65143..d2f726c21 100644 --- a/cdk_framework/EKS/lib/interfaces/ec2cluster-interface +++ b/cdk_framework/EKS/lib/interfaces/ec2cluster-interface @@ -3,4 +3,4 @@ import {ClusterInterface} from "./cluster-interface" export interface ec2ClusterInterface extends ClusterInterface{ ec2_instance: string node_size: string -} \ No newline at end of file +} diff --git a/cdk_framework/EKS/lib/utils/validate-config-schema.ts b/cdk_framework/EKS/lib/utils/validate-config-schema.ts index 640421564..bf8c39e0a 100644 --- a/cdk_framework/EKS/lib/utils/validate-config-schema.ts +++ b/cdk_framework/EKS/lib/utils/validate-config-schema.ts @@ -59,4 +59,4 @@ export function validateFileSchema(configData: unknown){ throw new Error(err.message) } } -} \ No newline at end of file +} From f021319f1b4bd41c98ade4b9abe8147b2759edce Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Tue, 16 Aug 2022 11:29:33 -0700 Subject: [PATCH 05/13] Made fixes from PR and casted to interfaces that pass in to cluster stacks --- cdk_framework/EKS/lib/app.ts | 8 +- cdk_framework/EKS/lib/cluster-deployment.ts | 66 +- ...ster-interface => ec2cluster-interface.ts} | 0 .../EKS/lib/stacks/ec2-cluster-stack.ts | 36 +- .../EKS/lib/stacks/fargate-cluster-stack.ts | 6 +- cdk_framework/EKS/package-lock.json | 2460 +++++++++-------- cdk_framework/EKS/package.json | 14 +- cdk_framework/EKS/test/validation.test.ts | 425 --- 8 files changed, 1405 insertions(+), 1610 deletions(-) rename cdk_framework/EKS/lib/interfaces/{ec2cluster-interface => ec2cluster-interface.ts} (100%) delete mode 100644 cdk_framework/EKS/test/validation.test.ts diff --git a/cdk_framework/EKS/lib/app.ts b/cdk_framework/EKS/lib/app.ts index 57c207305..7dac5a1ca 100644 --- a/cdk_framework/EKS/lib/app.ts +++ b/cdk_framework/EKS/lib/app.ts @@ -2,13 +2,7 @@ import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { deployClusters } from './cluster-deployment'; -import { FargateStack } from './stacks/fargate-cluster-stack'; -import { EC2Stack } from './stacks/ec2-cluster-stack'; const app = new cdk.App(); -let clusterMap = new Map<string, FargateStack | EC2Stack>() - -clusterMap = deployClusters(app); - - +const clusterMap = deployClusters(app); diff --git a/cdk_framework/EKS/lib/cluster-deployment.ts b/cdk_framework/EKS/lib/cluster-deployment.ts index 21325f12d..feca487a2 100644 --- a/cdk_framework/EKS/lib/cluster-deployment.ts +++ b/cdk_framework/EKS/lib/cluster-deployment.ts @@ -7,6 +7,8 @@ import { readFileSync} from 'fs'; import { EC2Stack } from './stacks/ec2-cluster-stack'; import { FargateStack } from './stacks/fargate-cluster-stack'; import { validateFileSchema } from './utils/validate-config-schema'; +import { ClusterInterface } from './interfaces/cluster-interface'; +import { ec2ClusterInterface } from './interfaces/ec2cluster-interface'; const yaml = require('js-yaml') @@ -26,39 +28,41 @@ export function deployClusters(app: cdk.App) : Map<string, FargateStack | EC2Sta const eksClusterMap = new Map<string, FargateStack | EC2Stack>(); - // const vpcStack = new VPCStack(app, 'EKSVpc', { - // env: { - // region: REGION - // } - // }) + const vpcStack = new VPCStack(app, 'EKSVpc', { + env: { + region: REGION + } + }) // schemaValidator(configData) - // for(const cluster of configData['clusters']){ - // const versionKubernetes = eks.KubernetesVersion.of(String(cluster['version'])); - // let stack; - // if(String(cluster['launch_type']) === 'ec2'){ - // stack = new EC2Stack(app, cluster['name'] + 'EKSCluster', { - // name: String(cluster['name']), - // vpc: vpcStack.vpc, - // version: versionKubernetes, - // ec2_instance: String(cluster['ec2_instance']), - // node_size: String(cluster['node_size']), - // env: { - // region: REGION - // }, - // }) - // } else { - // stack = new FargateStack(app, cluster['name'] + 'EKSCluster', { - // name: String(cluster['name']), - // vpc: vpcStack.vpc, - // version: versionKubernetes, - // env: { - // region: REGION - // }, - // }) - // } - // eksClusterMap.set(cluster['name'], stack) - // } + for(const cluster of configData['clusters']){ + let stack; + const clusterInterface = cluster as ClusterInterface + const versionKubernetes = eks.KubernetesVersion.of(clusterInterface.version); + if(clusterInterface.launch_type === 'ec2'){ + const ec2Cluster = cluster as ec2ClusterInterface + stack = new EC2Stack(app, ec2Cluster.name + 'EKSCluster', { + name: ec2Cluster.name, + vpc: vpcStack.vpc, + version: versionKubernetes, + ec2_instance: ec2Cluster.ec2_instance, + node_size: ec2Cluster.node_size, + env: { + region: REGION + }, + }) + } else { + stack = new FargateStack(app, clusterInterface.name + 'EKSCluster', { + name: clusterInterface.name, + vpc: vpcStack.vpc, + version: versionKubernetes, + env: { + region: REGION + }, + }) + } + eksClusterMap.set(cluster['name'], stack) + } return eksClusterMap } diff --git a/cdk_framework/EKS/lib/interfaces/ec2cluster-interface b/cdk_framework/EKS/lib/interfaces/ec2cluster-interface.ts similarity index 100% rename from cdk_framework/EKS/lib/interfaces/ec2cluster-interface rename to cdk_framework/EKS/lib/interfaces/ec2cluster-interface.ts diff --git a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts index 5a74e1e83..d2c8fe534 100644 --- a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts +++ b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts @@ -4,12 +4,13 @@ import { Vpc } from 'aws-cdk-lib/aws-ec2'; import { KubernetesVersion} from 'aws-cdk-lib/aws-eks'; import { ManagedPolicy, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; +// not used right now but will be needed for when validation is done const supportedNodeSizes = new Set(['medium', 'large', 'xlarge', '2xlarge', '4xlarge', '8xlarge', '12xlarge', '16xlarge', '24xlarge', 'metal']); const supportedT4gInstances = new Set(['nano', 'micro', 'small', 'medium', 'large', 'xlarge', '2xlarge']) export class EC2Stack extends Stack { - cluster : eks.Cluster | eks.FargateCluster + cluster : eks.Cluster constructor(scope: Construct, id: string, props: EC2ClusterStackProps) { super(scope, id, props); @@ -22,8 +23,8 @@ export class EC2Stack extends Stack { eks.ClusterLoggingTypes.SCHEDULER, ] - const ec2Instance = props.ec2_instance.toLowerCase() - const nodeSize = validateNodeSize(props.node_size, ec2Instance) + const ec2Instance = props.ec2_instance + const nodeSize = props.node_size const workerRole = new Role(this, 'EKSWorkerRole', { assumedBy: new ServicePrincipal('ec2.amazonaws.com'), @@ -53,6 +54,7 @@ export class EC2Stack extends Stack { nodeRole: workerRole }) this.cluster.awsAuth.addMastersRole(Role.fromRoleName(this, 'eks_admin_role', 'Admin')) + this.cluster.awsAuth.addMastersRole(Role.fromRoleName(this, 'he', 'Admin')) } } @@ -64,31 +66,3 @@ export interface EC2ClusterStackProps extends StackProps{ ec2_instance: string; node_size: string } - - -function validateNodeSize(size: string, instance: string){ - if(!size || size === null || size === 'null' || size === ''){ - return null - } - const adjustedSize = size.toLowerCase() - - if(instance === 't4g'){ - if(!supportedT4gInstances.has(adjustedSize)){ - throw new Error('Node size is not one of the options listed here https://www.amazonaws.cn/en/ec2/instance-types/') - } - } else { - if(!supportedNodeSizes.has(adjustedSize)){ - throw new Error('Node size is not one of the options listed here https://www.amazonaws.cn/en/ec2/instance-types/') - } - if(instance === 'm5' && adjustedSize === 'medium'){ - throw new Error('CPU architecture and node size are not compatible') - } - if(instance === 'm6g' && adjustedSize === '24xlarge'){ - throw new Error('CPU architecture and node size are not compatible') - } - } - - return adjustedSize - -} - diff --git a/cdk_framework/EKS/lib/stacks/fargate-cluster-stack.ts b/cdk_framework/EKS/lib/stacks/fargate-cluster-stack.ts index b3939a2c5..5a4bdad8e 100644 --- a/cdk_framework/EKS/lib/stacks/fargate-cluster-stack.ts +++ b/cdk_framework/EKS/lib/stacks/fargate-cluster-stack.ts @@ -2,11 +2,11 @@ import { Stack, StackProps, aws_eks as eks} from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { Vpc } from 'aws-cdk-lib/aws-ec2'; import { KubernetesVersion} from 'aws-cdk-lib/aws-eks'; -import { Role } from 'aws-cdk-lib/aws-iam'; +import { ManagedPolicy, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; export class FargateStack extends Stack { - cluster : eks.Cluster | eks.FargateCluster + cluster : eks.FargateCluster constructor(scope: Construct, id: string, props: FargateClusterStackProps) { super(scope, id, props); @@ -18,6 +18,7 @@ export class FargateStack extends Stack { eks.ClusterLoggingTypes.CONTROLLER_MANAGER, eks.ClusterLoggingTypes.SCHEDULER, ] + this.cluster = new eks.FargateCluster(this, props.name, { clusterName: props.name, @@ -25,7 +26,6 @@ export class FargateStack extends Stack { version: props.version, clusterLogging: logging }); - this.cluster.awsAuth.addMastersRole(Role.fromRoleName(this, 'eks_admin_role', 'Admin')) } diff --git a/cdk_framework/EKS/package-lock.json b/cdk_framework/EKS/package-lock.json index 59957924f..5b2c4c591 100644 --- a/cdk_framework/EKS/package-lock.json +++ b/cdk_framework/EKS/package-lock.json @@ -8,14 +8,14 @@ "name": "my-project", "version": "0.1.0", "dependencies": { - "@aws-cdk/aws-ec2": "^1.161.0", - "@aws-cdk/aws-eks": "^1.161.0", - "@aws-cdk/aws-iam": "^1.161.0", - "@aws-cdk/core": "^1.161.0", - "ajv": "^8.11.0", - "ajv-errors": "^3.0.0", + "@aws-cdk/aws-ec2": "1.161.0", + "@aws-cdk/aws-eks": "1.161.0", + "@aws-cdk/aws-iam": "1.161.0", + "@aws-cdk/core": "1.161.0", + "ajv": "8.11.0", + "ajv-errors": "3.0.0", "aws-cdk-lib": "2.29.0", - "constructs": "^10.0.0", + "constructs": "10.0.0", "js-yaml": "^4.1.0", "source-map-support": "^0.5.21", "yaml-schema-validator": "^1.2.3" @@ -70,9 +70,9 @@ } }, "node_modules/@aws-cdk/assets/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -94,9 +94,9 @@ } }, "node_modules/@aws-cdk/aws-acmpca/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -124,9 +124,9 @@ } }, "node_modules/@aws-cdk/aws-applicationautoscaling/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -180,17 +180,17 @@ } }, "node_modules/@aws-cdk/aws-autoscaling-common/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } }, "node_modules/@aws-cdk/aws-autoscaling/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -222,9 +222,9 @@ } }, "node_modules/@aws-cdk/aws-certificatemanager/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -256,9 +256,9 @@ } }, "node_modules/@aws-cdk/aws-cloudformation/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -282,9 +282,9 @@ } }, "node_modules/@aws-cdk/aws-cloudwatch/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -308,9 +308,9 @@ } }, "node_modules/@aws-cdk/aws-codeguruprofiler/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -332,9 +332,9 @@ } }, "node_modules/@aws-cdk/aws-codestarnotifications/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -376,9 +376,9 @@ } }, "node_modules/@aws-cdk/aws-ec2/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -432,17 +432,17 @@ } }, "node_modules/@aws-cdk/aws-ecr-assets/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } }, "node_modules/@aws-cdk/aws-ecr/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -474,9 +474,9 @@ } }, "node_modules/@aws-cdk/aws-efs/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -524,9 +524,9 @@ } }, "node_modules/@aws-cdk/aws-eks/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -558,9 +558,9 @@ } }, "node_modules/@aws-cdk/aws-elasticloadbalancing/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -602,9 +602,9 @@ } }, "node_modules/@aws-cdk/aws-elasticloadbalancingv2/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -628,9 +628,9 @@ } }, "node_modules/@aws-cdk/aws-events/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -655,9 +655,9 @@ } }, "node_modules/@aws-cdk/aws-iam/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -685,9 +685,9 @@ } }, "node_modules/@aws-cdk/aws-kms/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -745,9 +745,9 @@ } }, "node_modules/@aws-cdk/aws-lambda/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -779,9 +779,9 @@ } }, "node_modules/@aws-cdk/aws-logs/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -813,9 +813,9 @@ } }, "node_modules/@aws-cdk/aws-route53/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -871,17 +871,17 @@ } }, "node_modules/@aws-cdk/aws-s3-assets/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } }, "node_modules/@aws-cdk/aws-s3/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -903,9 +903,9 @@ } }, "node_modules/@aws-cdk/aws-signer/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -939,9 +939,9 @@ } }, "node_modules/@aws-cdk/aws-sns/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -969,9 +969,9 @@ } }, "node_modules/@aws-cdk/aws-sqs/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -999,9 +999,9 @@ } }, "node_modules/@aws-cdk/aws-ssm/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -1123,9 +1123,9 @@ "license": "MIT" }, "node_modules/@aws-cdk/core/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -1216,9 +1216,9 @@ } }, "node_modules/@aws-cdk/custom-resources/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -1290,9 +1290,9 @@ } }, "node_modules/@aws-cdk/lambda-layer-awscli/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -1316,9 +1316,9 @@ } }, "node_modules/@aws-cdk/lambda-layer-kubectl/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -1342,9 +1342,9 @@ } }, "node_modules/@aws-cdk/lambda-layer-node-proxy-agent/node_modules/constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==", + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==", "engines": { "node": ">= 14.17.0" } @@ -1358,42 +1358,42 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", - "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", - "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.5", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.5", - "@babel/types": "^7.18.4", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1408,14 +1408,23 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, "engines": { @@ -1437,13 +1446,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.20.2", "semver": "^6.3.0" }, @@ -1454,143 +1463,161 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, "dependencies": { - "@babel/types": "^7.18.2" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", "dev": true, "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -1670,9 +1697,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1829,12 +1856,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1844,33 +1871,33 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1878,13 +1905,23 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1955,43 +1992,16 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -2002,6 +2012,16 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -2033,6 +2053,19 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -2046,6 +2079,54 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/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/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2309,9 +2390,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, "engines": { "node": ">=6.0.0" @@ -2333,9 +2414,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -2461,9 +2542,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.0.tgz", + "integrity": "sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -2558,14 +2639,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", - "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz", + "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/type-utils": "5.31.0", - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/scope-manager": "5.33.1", + "@typescript-eslint/type-utils": "5.33.1", + "@typescript-eslint/utils": "5.33.1", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -2590,30 +2671,15 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", - "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz", + "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", + "@typescript-eslint/scope-manager": "5.33.1", + "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/typescript-estree": "5.33.1", "debug": "^4.3.4" }, "engines": { @@ -2633,13 +2699,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", - "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz", + "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0" + "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/visitor-keys": "5.33.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2650,12 +2716,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", - "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz", + "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/utils": "5.33.1", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2676,9 +2742,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", - "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz", + "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2689,13 +2755,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", - "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz", + "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0", + "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/visitor-keys": "5.33.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2715,31 +2781,16 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", - "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz", + "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", + "@typescript-eslint/scope-manager": "5.33.1", + "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/typescript-estree": "5.33.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -2755,12 +2806,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", - "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz", + "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/types": "5.33.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2778,9 +2829,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2879,6 +2930,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3236,14 +3299,12 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "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" @@ -3268,9 +3329,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", - "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", "dev": true, "funding": [ { @@ -3283,10 +3344,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001358", - "electron-to-chromium": "^1.4.164", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.0" + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" }, "bin": { "browserslist": "cli.js" @@ -3340,9 +3401,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001359", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", - "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", + "version": "1.0.30001377", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001377.tgz", + "integrity": "sha512-I5XeHI1x/mRSGl96LFOaSk528LA/yZG3m3iQgImGujjO8gotd/DL8QaI1R1h1dg5ATeI2jqPblMpKq4Tr5iKfQ==", "dev": true, "funding": [ { @@ -3462,15 +3523,14 @@ "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 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/constructs": { - "version": "10.1.42", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.1.42.tgz", - "integrity": "sha512-5AELa/PFtZG+WTjn9HoXhqsDZYV6l3J7Li9xw6vREYVMasF8cnVbTZvA4crP1gIyKtBAxAlnZCmzmCbicnH6eg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.0.0.tgz", + "integrity": "sha512-MIwjmrXZpM9RtwyrSD4HotDIQl8HTdIefQhU+MU1asvtSyVN3kK8kjeUOWMFb+fdyT4RX3QvvcaaPBluLEX1SA==", "engines": { - "node": ">= 14.17.0" + "node": ">= 10.17.0" } }, "node_modules/convert-source-map": { @@ -3558,9 +3618,9 @@ } }, "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", + "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", "dev": true }, "node_modules/dedent": { @@ -3672,9 +3732,9 @@ "deprecated": "Use @eivifj/dot instead" }, "node_modules/electron-to-chromium": { - "version": "1.4.170", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz", - "integrity": "sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw==", + "version": "1.4.221", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.221.tgz", + "integrity": "sha512-aWg2mYhpxZ6Q6Xvyk7B2ziBca4YqrCDlXzmcD7wuRs65pVEVkMT1u2ifdjpAQais2O2o0rW964ZWWWYRlAL/kw==", "dev": true }, "node_modules/emittery": { @@ -3714,12 +3774,15 @@ } }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escodegen": { @@ -3744,14 +3807,75 @@ "source-map": "~0.6.1" } }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3761,14 +3885,17 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.3.3", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -3809,15 +3936,6 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", @@ -3870,18 +3988,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -3895,19 +4001,13 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, "node_modules/eslint/node_modules/json-schema-traverse": { @@ -3916,81 +4016,21 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", "dev": true, "dependencies": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -4017,6 +4057,15 @@ "node": ">=0.10" } }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -4029,7 +4078,7 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -4038,6 +4087,15 @@ "node": ">=4.0" } }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -4182,16 +4240,19 @@ } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat-cache": { @@ -4331,12 +4392,18 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globby": { @@ -4365,6 +4432,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -4456,7 +4529,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, "engines": { "node": ">= 4" } @@ -4477,15 +4549,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -4537,9 +4600,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -4651,6 +4714,15 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", @@ -4680,9 +4752,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -5212,21 +5284,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -5443,13 +5500,13 @@ } }, "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -5462,15 +5519,18 @@ "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==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { @@ -5495,7 +5555,6 @@ "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" }, @@ -5518,6 +5577,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -5595,7 +5663,6 @@ "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" }, @@ -5622,9 +5689,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, "node_modules/normalize-path": { @@ -5679,47 +5746,50 @@ } }, "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "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": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { @@ -5848,10 +5918,62 @@ "node": ">=8" } }, + "node_modules/pkg-dir/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/pkg-dir/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/pkg-dir/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/pkg-dir/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/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -5897,9 +6019,9 @@ } }, "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "node_modules/punycode": { @@ -5994,7 +6116,7 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -6003,6 +6125,15 @@ "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", @@ -6085,12 +6216,17 @@ } }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/shebang-command": { @@ -6169,6 +6305,15 @@ "node": ">=10" } }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -6419,25 +6564,10 @@ } } }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -6508,12 +6638,12 @@ } }, "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" @@ -6529,9 +6659,9 @@ } }, "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==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" @@ -6577,9 +6707,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", "dev": true, "funding": [ { @@ -6786,9 +6916,9 @@ } }, "node_modules/ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, "engines": { "node": ">=8.3.0" @@ -6830,8 +6960,7 @@ "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 + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml-schema-validator": { "version": "1.2.3", @@ -6966,6 +7095,18 @@ "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" + } } }, "dependencies": { @@ -6990,9 +7131,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7006,9 +7147,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7025,9 +7166,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7048,9 +7189,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7065,9 +7206,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7086,9 +7227,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7107,9 +7248,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7124,9 +7265,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7141,9 +7282,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7157,9 +7298,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7183,9 +7324,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7202,9 +7343,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7223,9 +7364,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7244,9 +7385,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7272,9 +7413,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" }, "yaml": { "version": "1.10.2", @@ -7293,9 +7434,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7319,9 +7460,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7336,9 +7477,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7354,9 +7495,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7373,9 +7514,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7407,9 +7548,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7428,9 +7569,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7449,9 +7590,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7469,9 +7610,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7490,9 +7631,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7506,9 +7647,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7528,9 +7669,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7547,9 +7688,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7566,9 +7707,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7645,9 +7786,9 @@ "bundled": true }, "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" }, "fs-extra": { "version": "9.1.0", @@ -7704,9 +7845,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7750,9 +7891,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7767,9 +7908,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7784,9 +7925,9 @@ }, "dependencies": { "constructs": { - "version": "3.4.39", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.39.tgz", - "integrity": "sha512-tj2m8GUD155rwQXmfHMZvMtBwexTEU4m7rxVkNWSShl1bkhyYV8gVi8hrrG8MtSiizkz4FheYPlkU+O3YIEo/w==" + "version": "3.4.70", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-3.4.70.tgz", + "integrity": "sha512-XvdTS8nx2m7H0/LOG7zx5GeNLNDtkqsAV7lSn+DKEQO7UvOynHgP2XzYP0YVjpLOh0+o1dym58XgE7q5jPoFLg==" } } }, @@ -7796,51 +7937,59 @@ "integrity": "sha512-Hk09j0T+WOS6xXxioyeI90Nv5dKCfCSFyKoyBT69dUZ4ElXfh8LkJt6bzuLVTGkieAlTlaIc+/AxsKRJfAQM4Q==" }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", - "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true }, "@babel/core": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", - "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.5", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.5", - "@babel/types": "^7.18.4", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.1", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", "dev": true, "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, "dependencies": { @@ -7858,121 +8007,135 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.20.2", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", "dev": true }, "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" } }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" } }, "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", "dev": true }, "@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, "requires": { - "@babel/types": "^7.18.2" + "@babel/types": "^7.18.6" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true }, "@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" } }, "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -8036,9 +8199,9 @@ } }, "@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -8150,50 +8313,59 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "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 + } } }, "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" } }, @@ -8253,33 +8425,18 @@ "uri-js": "^4.2.2" } }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -8287,6 +8444,12 @@ "minimatch": "^3.0.4" } }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -8315,6 +8478,16 @@ "sprintf-js": "~1.0.2" } }, + "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, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -8324,6 +8497,39 @@ "argparse": "^1.0.7", "esprima": "^4.0.0" } + }, + "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, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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, + "requires": { + "p-try": "^2.0.0" + } + }, + "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, + "requires": { + "p-limit": "^2.2.0" + } + }, + "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 } } }, @@ -8535,9 +8741,9 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", - "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true }, "@jridgewell/set-array": { @@ -8553,9 +8759,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -8669,9 +8875,9 @@ } }, "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.0.tgz", + "integrity": "sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -8766,119 +8972,97 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz", - "integrity": "sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz", + "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/type-utils": "5.31.0", - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/scope-manager": "5.33.1", + "@typescript-eslint/type-utils": "5.33.1", + "@typescript-eslint/utils": "5.33.1", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/parser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.31.0.tgz", - "integrity": "sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz", + "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", + "@typescript-eslint/scope-manager": "5.33.1", + "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/typescript-estree": "5.33.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz", - "integrity": "sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz", + "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0" + "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/visitor-keys": "5.33.1" } }, "@typescript-eslint/type-utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz", - "integrity": "sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz", + "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.31.0", + "@typescript-eslint/utils": "5.33.1", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.31.0.tgz", - "integrity": "sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz", + "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz", - "integrity": "sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz", + "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/visitor-keys": "5.31.0", + "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/visitor-keys": "5.33.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "@typescript-eslint/utils": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.31.0.tgz", - "integrity": "sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz", + "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.31.0", - "@typescript-eslint/types": "5.31.0", - "@typescript-eslint/typescript-estree": "5.31.0", + "@typescript-eslint/scope-manager": "5.33.1", + "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/typescript-estree": "5.33.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz", - "integrity": "sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg==", + "version": "5.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz", + "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.31.0", + "@typescript-eslint/types": "5.33.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -8889,9 +9073,9 @@ "dev": true }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, "acorn-globals": { @@ -8958,6 +9142,14 @@ "dev": true, "requires": { "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, "ansi-regex": { @@ -9204,14 +9396,12 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "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, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9233,15 +9423,15 @@ "dev": true }, "browserslist": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.0.tgz", - "integrity": "sha512-UQxE0DIhRB5z/zDz9iA03BOfxaN2+GQdBYH/2WrSIWEUrnpzTPJbhqt+umq6r3acaPRTW1FNTkrcp0PXgtFkvA==", + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001358", - "electron-to-chromium": "^1.4.164", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.0" + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" } }, "bs-logger": { @@ -9280,9 +9470,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001359", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001359.tgz", - "integrity": "sha512-Xln/BAsPzEuiVLgJ2/45IaqD9jShtk3Y33anKb4+yLwQzws3+v6odKfpgES/cDEaZMLzSChpIGdbOYtH9MyuHw==", + "version": "1.0.30001377", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001377.tgz", + "integrity": "sha512-I5XeHI1x/mRSGl96LFOaSk528LA/yZG3m3iQgImGujjO8gotd/DL8QaI1R1h1dg5ATeI2jqPblMpKq4Tr5iKfQ==", "dev": true }, "chalk": { @@ -9373,13 +9563,12 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "constructs": { - "version": "10.1.42", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.1.42.tgz", - "integrity": "sha512-5AELa/PFtZG+WTjn9HoXhqsDZYV6l3J7Li9xw6vREYVMasF8cnVbTZvA4crP1gIyKtBAxAlnZCmzmCbicnH6eg==" + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.0.0.tgz", + "integrity": "sha512-MIwjmrXZpM9RtwyrSD4HotDIQl8HTdIefQhU+MU1asvtSyVN3kK8kjeUOWMFb+fdyT4RX3QvvcaaPBluLEX1SA==" }, "convert-source-map": { "version": "1.8.0", @@ -9451,9 +9640,9 @@ } }, "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", + "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", "dev": true }, "dedent": { @@ -9539,9 +9728,9 @@ "integrity": "sha512-fQc4xSFjrQ35pissb3PGf+kew7jX3zsNAPjuswujUl6gjj9rhvZoO++tlRI+KLbT7bIL3KMWYyks49EP3luMNA==" }, "electron-to-chromium": { - "version": "1.4.170", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.170.tgz", - "integrity": "sha512-rZ8PZLhK4ORPjFqLp9aqC4/S1j4qWFsPPz13xmWdrbBkU/LlxMcok+f+6f8YnQ57MiZwKtOaW15biZZsY5Igvw==", + "version": "1.4.221", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.221.tgz", + "integrity": "sha512-aWg2mYhpxZ6Q6Xvyk7B2ziBca4YqrCDlXzmcD7wuRs65pVEVkMT1u2ifdjpAQais2O2o0rW964ZWWWYRlAL/kw==", "dev": true }, "emittery": { @@ -9572,9 +9761,9 @@ "dev": true }, "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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "escodegen": { @@ -9588,16 +9777,64 @@ "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } } }, "eslint": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.20.0.tgz", - "integrity": "sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -9607,14 +9844,17 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", + "espree": "^9.3.3", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -9645,12 +9885,6 @@ "uri-js": "^4.2.2" } }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, "eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -9661,65 +9895,17 @@ "estraverse": "^5.2.0" } }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true } } }, @@ -9731,14 +9917,6 @@ "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } } }, "eslint-utils": { @@ -9765,12 +9943,12 @@ "dev": true }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", "dev": true, "requires": { - "acorn": "^8.7.1", + "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.3.0" } @@ -9787,6 +9965,14 @@ "dev": true, "requires": { "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "esrecurse": { @@ -9796,12 +9982,20 @@ "dev": true, "requires": { "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -9923,12 +10117,12 @@ } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, @@ -10032,10 +10226,13 @@ } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } }, "globby": { "version": "11.1.0", @@ -10057,6 +10254,12 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -10126,8 +10329,7 @@ "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "import-fresh": { "version": "3.3.0", @@ -10137,14 +10339,6 @@ "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } } }, "import-local": { @@ -10186,9 +10380,9 @@ "dev": true }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { "has": "^1.0.3" @@ -10268,6 +10462,14 @@ "@istanbuljs/schema": "^0.1.2", "istanbul-lib-coverage": "^3.2.0", "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "istanbul-lib-report": { @@ -10293,9 +10495,9 @@ } }, "istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -10706,17 +10908,6 @@ "natural-compare": "^1.4.0", "pretty-format": "^27.5.1", "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "jest-util": { @@ -10883,13 +11074,13 @@ "dev": true }, "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, "lines-and-columns": { @@ -10899,12 +11090,12 @@ "dev": true }, "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" } }, "lodash": { @@ -10929,7 +11120,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -10941,6 +11131,14 @@ "dev": true, "requires": { "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "make-error": { @@ -11005,7 +11203,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -11029,9 +11226,9 @@ "dev": true }, "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, "normalize-path": { @@ -11074,35 +11271,35 @@ } }, "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" } }, "p-try": { @@ -11193,12 +11390,51 @@ "dev": true, "requires": { "find-up": "^4.0.0" + }, + "dependencies": { + "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, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "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, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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, + "requires": { + "p-try": "^2.0.0" + } + }, + "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, + "requires": { + "p-limit": "^2.2.0" + } + } } }, "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "pretty-format": { @@ -11231,9 +11467,9 @@ } }, "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "punycode": { @@ -11288,12 +11524,20 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" + }, + "dependencies": { + "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 + } } }, "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve.exports": { @@ -11348,10 +11592,12 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } }, "shebang-command": { "version": "2.0.0", @@ -11412,6 +11658,14 @@ "dev": true, "requires": { "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } } }, "string-length": { @@ -11581,23 +11835,12 @@ "make-error": "1.x", "semver": "7.x", "yargs-parser": "20.x" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } } }, "ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -11639,12 +11882,12 @@ } }, "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "^1.2.1" } }, "type-detect": { @@ -11654,9 +11897,9 @@ "dev": true }, "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==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "typecast": { @@ -11686,9 +11929,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -11848,9 +12091,9 @@ } }, "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, "requires": {} }, @@ -11875,8 +12118,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml-schema-validator": { "version": "1.2.3", @@ -11983,6 +12225,12 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true + }, + "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 } } } diff --git a/cdk_framework/EKS/package.json b/cdk_framework/EKS/package.json index be1e0d923..3ea1e5314 100644 --- a/cdk_framework/EKS/package.json +++ b/cdk_framework/EKS/package.json @@ -26,14 +26,14 @@ "typescript": "~3.9.7" }, "dependencies": { - "@aws-cdk/aws-ec2": "^1.161.0", - "@aws-cdk/aws-eks": "^1.161.0", - "@aws-cdk/aws-iam": "^1.161.0", - "@aws-cdk/core": "^1.161.0", - "ajv": "^8.11.0", - "ajv-errors": "^3.0.0", + "@aws-cdk/aws-ec2": "1.161.0", + "@aws-cdk/aws-eks": "1.161.0", + "@aws-cdk/aws-iam": "1.161.0", + "@aws-cdk/core": "1.161.0", + "ajv": "8.11.0", + "ajv-errors": "3.0.0", "aws-cdk-lib": "2.29.0", - "constructs": "^10.0.0", + "constructs": "10.0.0", "js-yaml": "^4.1.0", "source-map-support": "^0.5.21", "yaml-schema-validator": "^1.2.3" diff --git a/cdk_framework/EKS/test/validation.test.ts b/cdk_framework/EKS/test/validation.test.ts deleted file mode 100644 index df56f2083..000000000 --- a/cdk_framework/EKS/test/validation.test.ts +++ /dev/null @@ -1,425 +0,0 @@ -// import assert from 'assert'; -// import { validateClustersConfig} from '../lib/utils/validate-cluster-config'; - - -// const defaultSetUpTable = Object.entries({ -// 'Bad kubernetes version 1.22': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : 1.22 -// } -// } -// }, -// expectedErr: Error -// }, -// 'Regular working deployment': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedOut: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : "1.21" -// } -// } -// } -// }, -// 'Too many fields in the cluster': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : 1.21, -// random_field: 'random_value' -// } -// } -// }, -// expectedErr: Error -// }, -// 'Missing ec2_instance field': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2: { -// node_size: 'xlarge' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedOut: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'xlarge' -// } -// }, -// version : "1.21" -// } -// } -// } -// }, -// 'Missing node_size field': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2: { -// ec2_instance: 'm5' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedOut: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : "1.21" -// } -// } -// } -// }, -// 'Missing ec2 fields': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2: null -// }, -// version : 1.21 -// } -// } -// }, -// expectedOut: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : "1.21" -// } -// } -// } -// }, -// 'launch_type is null': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: null, -// version : 1.21 -// } -// } -// }, -// expectedErr: Error -// }, -// 'Too many launch_types': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// }, -// fargate: null -// }, -// version : 1.21 -// } -// } -// }, -// expectedErr: Error -// }, -// 'Does not have clusters category': { -// data: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : 1.21 -// } -// }, -// expectedErr: Error -// }, -// 'Working fargate deployment': { -// data: { -// clusters: { -// fargateCluster: { -// launch_type: { -// fargate: null -// }, -// version : 1.21 -// } -// } -// }, -// expectedOut: { -// clusters: { -// fargateCluster: { -// launch_type: { -// fargate: null -// }, -// version : "1.21" -// } -// } -// } -// }, -// 'Multiple deployment - fargate and ec2': { -// data: { -// clusters: { -// fargateCluster: { -// launch_type: { -// fargate: null -// }, -// version : 1.21 -// }, -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedOut: { -// clusters: { -// fargateCluster: { -// launch_type: { -// fargate: null -// }, -// version : "1.21" -// }, -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : "1.21" -// } -// } -// } -// }, -// 'Multiple deployment - two ec2s': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'xlarge' -// } -// }, -// version : 1.19 -// }, -// amdCluster2: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedOut: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'xlarge' -// } -// }, -// version : "1.19" -// }, -// amdCluster2: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'large' -// } -// }, -// version : "1.21" -// } -// } -// } -// }, -// 't4g size is not good': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 't4g', -// node_size: '4xlarge' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedErr: Error -// }, -// 'm6g size is not good': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm6g', -// node_size: '24xlarge' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedErr: Error -// }, -// 'm5 size is not good': { -// data: { -// cluster: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'medium' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedErr: Error -// }, -// 'ec2 instance invalid name': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'wrong_name', -// node_size: 'large' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedErr: Error -// }, -// 'launch_type is invalid': { -// data: { -// clusters: { -// amdCluster: { -// launch_type: { -// wrong_type : { -// ec2_instance : 'm6g', -// node_size: '24xlarge' -// } -// }, -// version : 1.21 -// } -// } -// }, -// expectedErr: Error -// }, -// 'version not provided': { -// data: { -// cluster: { -// amdCluster: { -// launch_type: { -// ec2 : { -// ec2_instance : 'm5', -// node_size: 'medium' -// } -// } -// } -// } -// }, -// expectedErr: Error -// }, -// 'launch_type not provided': { -// data: { -// clusters: { -// amdCluster: { -// version : 1.21 -// } -// } -// }, -// expectedErr: Error -// }, -// 'no clusters provided': { -// data: { -// clusters: null -// }, -// expectedErr: Error -// }, -// }) - -// defaultSetUpTable.forEach(([name, fields]) => -// test(name, () => { -// if(fields.expectedErr){ -// try{ -// validateClustersConfig(fields.data) -// assert(false) -// } catch(error){ -// expect(error).toBeInstanceOf(Error); -// } -// } else { -// validateClustersConfig(fields.data) -// expect((fields.data)).toEqual(fields.expectedOut); -// } -// }) -// ) - - From da74f27a62c4dfc5b617589043c38bee05ba5fee Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Wed, 17 Aug 2022 12:32:44 -0700 Subject: [PATCH 06/13] changed config format to just instance_type --- cdk_framework/EKS/lib/cluster-deployment.ts | 7 +++---- cdk_framework/EKS/lib/config/cluster-config/clusters.yml | 3 +-- cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts | 9 +++------ cdk_framework/EKS/lib/utils/validate-config-schema.ts | 8 +------- 4 files changed, 8 insertions(+), 19 deletions(-) diff --git a/cdk_framework/EKS/lib/cluster-deployment.ts b/cdk_framework/EKS/lib/cluster-deployment.ts index feca487a2..bf482759c 100644 --- a/cdk_framework/EKS/lib/cluster-deployment.ts +++ b/cdk_framework/EKS/lib/cluster-deployment.ts @@ -41,18 +41,17 @@ export function deployClusters(app: cdk.App) : Map<string, FargateStack | EC2Sta const versionKubernetes = eks.KubernetesVersion.of(clusterInterface.version); if(clusterInterface.launch_type === 'ec2'){ const ec2Cluster = cluster as ec2ClusterInterface - stack = new EC2Stack(app, ec2Cluster.name + 'EKSCluster', { + stack = new EC2Stack(app, `${ec2Cluster.name}EKSCluster`, { name: ec2Cluster.name, vpc: vpcStack.vpc, version: versionKubernetes, - ec2_instance: ec2Cluster.ec2_instance, - node_size: ec2Cluster.node_size, + instance_type: ec2Cluster.instance_type, env: { region: REGION }, }) } else { - stack = new FargateStack(app, clusterInterface.name + 'EKSCluster', { + stack = new FargateStack(app, `${clusterInterface.name}EKSCluster`, { name: clusterInterface.name, vpc: vpcStack.vpc, version: versionKubernetes, diff --git a/cdk_framework/EKS/lib/config/cluster-config/clusters.yml b/cdk_framework/EKS/lib/config/cluster-config/clusters.yml index f47037fce..f8cdab9cc 100644 --- a/cdk_framework/EKS/lib/config/cluster-config/clusters.yml +++ b/cdk_framework/EKS/lib/config/cluster-config/clusters.yml @@ -3,8 +3,7 @@ clusters: - name: ec2Cluster version: "1.21" launch_type: ec2 - ec2_instance: m5 - node_size: large + instance_type: m5.large - name: fargateCluster version: "1.21" launch_type: fargate diff --git a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts index d2c8fe534..fe2f2fbca 100644 --- a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts +++ b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts @@ -23,8 +23,6 @@ export class EC2Stack extends Stack { eks.ClusterLoggingTypes.SCHEDULER, ] - const ec2Instance = props.ec2_instance - const nodeSize = props.node_size const workerRole = new Role(this, 'EKSWorkerRole', { assumedBy: new ServicePrincipal('ec2.amazonaws.com'), @@ -48,8 +46,8 @@ export class EC2Stack extends Stack { clusterLogging: logging, }); - this.cluster.addNodegroupCapacity('ng-' + ec2Instance, { - instanceTypes: [new ec2.InstanceType(ec2Instance + '.' + nodeSize)], + this.cluster.addNodegroupCapacity(`ng-${props.instance_type}`, { + instanceTypes: [new ec2.InstanceType(props.instance_type)], minSize: 2, nodeRole: workerRole }) @@ -63,6 +61,5 @@ export interface EC2ClusterStackProps extends StackProps{ name: string; vpc: Vpc; version: KubernetesVersion; - ec2_instance: string; - node_size: string + instance_type: string; } diff --git a/cdk_framework/EKS/lib/utils/validate-config-schema.ts b/cdk_framework/EKS/lib/utils/validate-config-schema.ts index bf8c39e0a..a626fe712 100644 --- a/cdk_framework/EKS/lib/utils/validate-config-schema.ts +++ b/cdk_framework/EKS/lib/utils/validate-config-schema.ts @@ -30,18 +30,12 @@ const schema = { type: 'launch_type must be a string' } }, - ec2_instance: { + instance_type: { type: "string", errorMessage: { type: 'ec2_instance must be a string' } }, - node_size: { - type: "string", - errorMessage: { - type: 'Node_size must be a string' - } - }, }, required: ["name", "version", "launch_type"], additionalProperties: false From 8343824b827bc388ce95f8151e7d8d31d41c3c66 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Wed, 17 Aug 2022 14:12:42 -0700 Subject: [PATCH 07/13] added validation for the interfaces --- cdk_framework/EKS/lib/cluster-deployment.ts | 3 + .../lib/config/cluster-config/clusters.yml | 2 +- .../lib/interfaces/ec2cluster-interface.ts | 3 +- .../EKS/lib/stacks/ec2-cluster-stack.ts | 19 ++-- .../EKS/lib/utils/validate-config-schema.ts | 2 +- .../lib/utils/validate-interface-schema.ts | 97 +++++++++++++++++++ 6 files changed, 114 insertions(+), 12 deletions(-) create mode 100644 cdk_framework/EKS/lib/utils/validate-interface-schema.ts diff --git a/cdk_framework/EKS/lib/cluster-deployment.ts b/cdk_framework/EKS/lib/cluster-deployment.ts index bf482759c..4c891a4fc 100644 --- a/cdk_framework/EKS/lib/cluster-deployment.ts +++ b/cdk_framework/EKS/lib/cluster-deployment.ts @@ -9,6 +9,7 @@ import { FargateStack } from './stacks/fargate-cluster-stack'; import { validateFileSchema } from './utils/validate-config-schema'; import { ClusterInterface } from './interfaces/cluster-interface'; import { ec2ClusterInterface } from './interfaces/ec2cluster-interface'; +import { validateInterface } from './utils/validate-interface-schema'; const yaml = require('js-yaml') @@ -41,6 +42,7 @@ export function deployClusters(app: cdk.App) : Map<string, FargateStack | EC2Sta const versionKubernetes = eks.KubernetesVersion.of(clusterInterface.version); if(clusterInterface.launch_type === 'ec2'){ const ec2Cluster = cluster as ec2ClusterInterface + validateInterface(ec2Cluster) stack = new EC2Stack(app, `${ec2Cluster.name}EKSCluster`, { name: ec2Cluster.name, vpc: vpcStack.vpc, @@ -51,6 +53,7 @@ export function deployClusters(app: cdk.App) : Map<string, FargateStack | EC2Sta }, }) } else { + validateInterface(clusterInterface) stack = new FargateStack(app, `${clusterInterface.name}EKSCluster`, { name: clusterInterface.name, vpc: vpcStack.vpc, diff --git a/cdk_framework/EKS/lib/config/cluster-config/clusters.yml b/cdk_framework/EKS/lib/config/cluster-config/clusters.yml index f8cdab9cc..51a2a8948 100644 --- a/cdk_framework/EKS/lib/config/cluster-config/clusters.yml +++ b/cdk_framework/EKS/lib/config/cluster-config/clusters.yml @@ -5,5 +5,5 @@ clusters: launch_type: ec2 instance_type: m5.large - name: fargateCluster - version: "1.21" + version: "1.20" launch_type: fargate diff --git a/cdk_framework/EKS/lib/interfaces/ec2cluster-interface.ts b/cdk_framework/EKS/lib/interfaces/ec2cluster-interface.ts index d2f726c21..1ced96ef2 100644 --- a/cdk_framework/EKS/lib/interfaces/ec2cluster-interface.ts +++ b/cdk_framework/EKS/lib/interfaces/ec2cluster-interface.ts @@ -1,6 +1,5 @@ import {ClusterInterface} from "./cluster-interface" export interface ec2ClusterInterface extends ClusterInterface{ - ec2_instance: string - node_size: string + instance_type: string } diff --git a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts index fe2f2fbca..6928a0713 100644 --- a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts +++ b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts @@ -37,17 +37,20 @@ export class EC2Stack extends Stack { ManagedPolicy.fromAwsManagedPolicyName('AmazonEKS_CNI_Policy') ] }); + + const instance_type = props.instance_type.toLowerCase() + this.cluster = new eks.Cluster(this, props.name, { - clusterName: props.name, - vpc: props.vpc, - vpcSubnets: [{subnetType: ec2.SubnetType.PUBLIC}], - defaultCapacity: 0, // we want to manage capacity our selves - version: props.version, - clusterLogging: logging, + clusterName: props.name, + vpc: props.vpc, + vpcSubnets: [{subnetType: ec2.SubnetType.PUBLIC}], + defaultCapacity: 0, // we want to manage capacity our selves + version: props.version, + clusterLogging: logging, }); - this.cluster.addNodegroupCapacity(`ng-${props.instance_type}`, { - instanceTypes: [new ec2.InstanceType(props.instance_type)], + this.cluster.addNodegroupCapacity(`ng-${instance_type}`, { + instanceTypes: [new ec2.InstanceType(instance_type)], minSize: 2, nodeRole: workerRole }) diff --git a/cdk_framework/EKS/lib/utils/validate-config-schema.ts b/cdk_framework/EKS/lib/utils/validate-config-schema.ts index a626fe712..e32f2dd2f 100644 --- a/cdk_framework/EKS/lib/utils/validate-config-schema.ts +++ b/cdk_framework/EKS/lib/utils/validate-config-schema.ts @@ -35,7 +35,7 @@ const schema = { errorMessage: { type: 'ec2_instance must be a string' } - }, + } }, required: ["name", "version", "launch_type"], additionalProperties: false diff --git a/cdk_framework/EKS/lib/utils/validate-interface-schema.ts b/cdk_framework/EKS/lib/utils/validate-interface-schema.ts new file mode 100644 index 000000000..9cb554f37 --- /dev/null +++ b/cdk_framework/EKS/lib/utils/validate-interface-schema.ts @@ -0,0 +1,97 @@ +import { ClusterInterface } from "../interfaces/cluster-interface" +import { ec2ClusterInterface } from "../interfaces/ec2cluster-interface" + +const validateSchema = require('yaml-schema-validator') + +const supportedLaunchTypes = new Set(['fargate', 'ec2']) +const supportedVersions = new Set(['1.18', '1.19', '1.20', '1.21']); +const supportedCPUArchitectures = new Set(['m5', 'm6g', 't4g']); +const supportedNodeSizes = new Set(['medium', 'large', 'xlarge', '2xlarge', '4xlarge', '8xlarge', '12xlarge', '16xlarge', '24xlarge', 'metal']); +const supportedT4gInstances = new Set(['nano', 'micro', 'small', 'medium', 'large', 'xlarge', '2xlarge']) + + +const requiredSchema = { + name: { + type : String, + required: true + }, + version: { + type : String, + required: true, + use: {validateVersion} + }, + launch_type: { + type: String, + required: true, + use: {checkLaunchType} + }, + instance_type: { + type: String, + use: {validateInstanceType} + }, + } + +export function validateInterface(cluster: ec2ClusterInterface | ClusterInterface){ + const error = validateSchema(cluster, { schema: requiredSchema }) + if(error === undefined || error.length !== 0){ + throw new Error("There was an error in configuration: Check Red Message above") + } +} + + +function checkLaunchType(val: string) { + const adjustedType = val.toLowerCase() + if(!supportedLaunchTypes.has(adjustedType)){ + throw new Error("Wrong type") + } + return adjustedType +} + +function validateVersion(version: string){ + if(!supportedVersions.has(version)){ + throw new Error('Version needs to be a value of one of the following: ' + Array.from(supportedVersions).join(', ')); + } + return version +} + +function validateInstanceType(instance: string){ + const splitted = instance.split('.') + if(splitted.length !== 2){ + throw new Error('Instace_type is not in required /"ec2_instance.node_size/" template') + } + const adjustedInstance = validateEC2Instance(splitted[0]) + validateNodeSize(splitted[1], adjustedInstance) + return true + +} + +function validateEC2Instance(instance: string){ + const adjustedType = instance.toLowerCase() + if(!supportedCPUArchitectures.has(adjustedType)){ + throw new Error('Improper instance type or provided faulty ec2_instance/node_size for fargate cluster') + } + return adjustedType +} + +function validateNodeSize(size: string, instance: string){ + const adjustedSize = size.toLowerCase() + + if(instance === 't4g'){ + if(!supportedT4gInstances.has(adjustedSize)){ + throw new Error('Node size is not one of the options listed here https://www.amazonaws.cn/en/ec2/instance-types/') + } + } else { + if(!supportedNodeSizes.has(adjustedSize)){ + throw new Error('Node size is not one of the options listed here https://www.amazonaws.cn/en/ec2/instance-types/') + } + if(instance === 'm5' && adjustedSize === 'medium'){ + throw new Error('CPU architecture and node size are not compatible. Check here for compatibility options: https://www.amazonaws.cn/en/ec2/instance-types/') + } + if(instance === 'm6g' && adjustedSize === '24xlarge'){ + throw new Error('CPU architecture and node size are not compatible. Check here for compatibility options: https://www.amazonaws.cn/en/ec2/instance-types/') + } + } + + return adjustedSize + +} \ No newline at end of file From c27a28211fd29ec22f28351b2f173b6871920284 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Wed, 17 Aug 2022 14:13:40 -0700 Subject: [PATCH 08/13] got rid of unnecessary lines --- cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts index 6928a0713..10164c389 100644 --- a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts +++ b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts @@ -4,10 +4,6 @@ import { Vpc } from 'aws-cdk-lib/aws-ec2'; import { KubernetesVersion} from 'aws-cdk-lib/aws-eks'; import { ManagedPolicy, Role, ServicePrincipal } from 'aws-cdk-lib/aws-iam'; -// not used right now but will be needed for when validation is done -const supportedNodeSizes = new Set(['medium', 'large', 'xlarge', '2xlarge', '4xlarge', '8xlarge', '12xlarge', '16xlarge', '24xlarge', 'metal']); -const supportedT4gInstances = new Set(['nano', 'micro', 'small', 'medium', 'large', 'xlarge', '2xlarge']) - export class EC2Stack extends Stack { cluster : eks.Cluster From 6f67b28c6415b5d09855692702ffdaf32ef575e9 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Wed, 17 Aug 2022 14:31:14 -0700 Subject: [PATCH 09/13] added up-carats to dependencies --- cdk_framework/EKS/package.json | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/cdk_framework/EKS/package.json b/cdk_framework/EKS/package.json index 3ea1e5314..ab0287142 100644 --- a/cdk_framework/EKS/package.json +++ b/cdk_framework/EKS/package.json @@ -26,16 +26,13 @@ "typescript": "~3.9.7" }, "dependencies": { - "@aws-cdk/aws-ec2": "1.161.0", - "@aws-cdk/aws-eks": "1.161.0", - "@aws-cdk/aws-iam": "1.161.0", - "@aws-cdk/core": "1.161.0", - "ajv": "8.11.0", - "ajv-errors": "3.0.0", + "@aws-cdk/aws-ec2": "^1.161.0", + "@aws-cdk/aws-eks": "^1.161.0", + "@aws-cdk/aws-iam": "^1.161.0", + "@aws-cdk/core": "^1.161.0", "aws-cdk-lib": "2.29.0", - "constructs": "10.0.0", + "constructs": "^10.0.0", "js-yaml": "^4.1.0", - "source-map-support": "^0.5.21", - "yaml-schema-validator": "^1.2.3" + "source-map-support": "^0.5.21" } } From 3bdad697c16bc9ac04c3e0fbdd5cfaf0f7aa5489 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Thu, 18 Aug 2022 08:10:39 -0700 Subject: [PATCH 10/13] changed error messages --- cdk_framework/EKS/lib/cluster-deployment.ts | 6 +++++- cdk_framework/EKS/lib/utils/validate-interface-schema.ts | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cdk_framework/EKS/lib/cluster-deployment.ts b/cdk_framework/EKS/lib/cluster-deployment.ts index 4c891a4fc..05d2b453c 100644 --- a/cdk_framework/EKS/lib/cluster-deployment.ts +++ b/cdk_framework/EKS/lib/cluster-deployment.ts @@ -35,10 +35,14 @@ export function deployClusters(app: cdk.App) : Map<string, FargateStack | EC2Sta } }) - // schemaValidator(configData) + const clusterNameSet = new Set() for(const cluster of configData['clusters']){ let stack; const clusterInterface = cluster as ClusterInterface + if(clusterNameSet.has(clusterInterface.name)){ + throw new Error(`Cluster name ${clusterInterface.name} is shared by two different clusters`) + } + clusterNameSet.add(clusterInterface.name) const versionKubernetes = eks.KubernetesVersion.of(clusterInterface.version); if(clusterInterface.launch_type === 'ec2'){ const ec2Cluster = cluster as ec2ClusterInterface diff --git a/cdk_framework/EKS/lib/utils/validate-interface-schema.ts b/cdk_framework/EKS/lib/utils/validate-interface-schema.ts index 9cb554f37..bb60149ef 100644 --- a/cdk_framework/EKS/lib/utils/validate-interface-schema.ts +++ b/cdk_framework/EKS/lib/utils/validate-interface-schema.ts @@ -42,14 +42,14 @@ export function validateInterface(cluster: ec2ClusterInterface | ClusterInterfac function checkLaunchType(val: string) { const adjustedType = val.toLowerCase() if(!supportedLaunchTypes.has(adjustedType)){ - throw new Error("Wrong type") + throw new Error("") } return adjustedType } function validateVersion(version: string){ if(!supportedVersions.has(version)){ - throw new Error('Version needs to be a value of one of the following: ' + Array.from(supportedVersions).join(', ')); + throw new Error(`Version needs to be a value of one of the following: ${Array.from(supportedVersions).join(', ')}`); } return version } From 5e311fb8553cf102dd41f7b0b2bf304ac7d82533 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <54683946+Danielzolty@users.noreply.github.com> Date: Thu, 18 Aug 2022 08:40:50 -0700 Subject: [PATCH 11/13] Updated DESIGN to reflect new design changes --- cdk_framework/EKS/DESIGN.md | 107 +++++++++++++++++++++--------------- 1 file changed, 64 insertions(+), 43 deletions(-) diff --git a/cdk_framework/EKS/DESIGN.md b/cdk_framework/EKS/DESIGN.md index c9d3349f7..0344cb9e6 100644 --- a/cdk_framework/EKS/DESIGN.md +++ b/cdk_framework/EKS/DESIGN.md @@ -8,9 +8,9 @@ The purpose of this directory is to deploy different EKS clusters using AWS CDK. Steps in how the cluster deployment occurs: 1. Root construct, App, is created and calls cluster-deployment method -2. Cluster configuration file is read and VPC stack is created. In it, the VPC is made and prepared to be passed in to each cluster. -3. Cluster stacks are configured from the configuration file and the VPC is passed in as one of the props. -4. A single cluster is made in each stack with the configurations provided. The reason we need multiple stacks instead of putting all the clusters in one stack is because stack can’t hold more than one EKS cluster +2. Cluster configuration file is read and validated and VPC stack is created. In it, the VPC is made and prepared to be passed in to each cluster. +3. Cluster stacks are configured from the configuration file (by being casted to interfaces and validated), and the VPC is passed in as one of the props. +5. A single cluster is made in each stack with the configurations provided. The reason we need multiple stacks instead of putting all the clusters in one stack is because stack can’t hold more than one EKS cluster. ## Directory Structure @@ -19,26 +19,32 @@ Steps in how the cluster deployment occurs: /config /cluster-config config.yml + /interfaces + cluster-interface + ec2cluster-interface /stacks - cluster-stack + ec2-cluster-stack + fargate-cluster-stack vpc-stack /utils - validate-cluster-config + validate-config-schema + validate-interface-schema apps cluster-deployment /test ``` -`apps.ts` will call `cluster-deployment` to create all the stacks. `cluster-deployment.ts` will first call `vpc-stack.ts` to create a VPC which will be passed in to each of the clusters specified in the configuration file. The user either supplies the environment variable for the route to preferred configuraiton file or the default config file found in `/config/cluster-config` folder. The configuration file is validated by being passed into `validate-cluster-config.ts`. Then `resource-deployment` will call `cluster-stack` for every cluster in configuration file. The `cluster-stack` will then create the cluster to be deployed. +`apps.ts` will call `cluster-deployment` to create all the stacks. The user either supplies the environment variable for the route to preferred configuraiton file or the default config file found in `/config/cluster-config` folder. `cluster-deployment.ts` will first validate the config file, then call `vpc-stack.ts` to create a VPC which will be passed in to each of the clusters specified in the configuration file. Then `resource-deployment` will cast each cluster defined in config file to either `ec2-cluster-stack` or `fargate-cluster-stack`. This stack will then create a cluster to be deployed. ## Data Validation -After following the directions of configuring the configuration file (found in README), the following is checked in `validate-cluster-config`: -* `launch_type` and `version` need to be specified. -* `launch_type ` must have 1 field - either `ec2` or `fargate` to specify what type of cluster will be made. -* If `launch_type` is `ec2`, then, only fields allowed are `ec2_instance` and `node_size`. -* `ec2_instance` and `node_size` have to be compatible. Listings could be found at [Compatible Node Sizes](https://www.amazonaws.cn/en/ec2/instance-types/). -* `version` needs to be between 1.18 to 1.21. Patch version releases are not supported by the CDK. -* Clusters can't be given the same name +There are 2 different validation steps: +1. Validate the configuration file. This is done by calling `validate-config-schema`. This validates that there are no added fields in the config file and that all the values for the defined fields are of type string. +2. Once interfaces are created by the config file, each interface is passed into `validate-interface-schema` which checks: + * `launch_type` and `version` need to be specified. + * `launch_type ` must have 1 field - either `ec2` or `fargate` to specify what type of cluster will be made. + * If `launch_type` is `ec2`, then, `instance_type` is verified. + * `instance_type` is verified to be compatible. Listings could be found at [Compatible Node Sizes](https://www.amazonaws.cn/en/ec2/instance- types/). + * `version` needs to be between 1.18 to 1.21. Patch version releases are not supported by the CDK. ## VPC @@ -65,35 +71,58 @@ const vpc = new ec2.Vpc(this, 'EKSVpc', ``` The VPC was configured based on what was done in the [terraform framework](https://github.com/aws-observability/aws-otel-test-framework/blob/6cd6478ce2c32223494460b390f33aeb5e61c48e/terraform/eks_fargate_setup/main.tf#:~:text=%23%20%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D%2D-,module%20%22vpc%22%20%7B,-source%20%3D%20%22). The same configuration is done for every EKS cluster, so it was fine making this the default. The only difference between the terraform framework and CDK is that the CIDR blocks for the subnets aren’t the same. This is fine as long as they both remain in the range in the VPC CIDR block. - ## Cluster-Stacks - - There are a few props that need to be passed into the `cluster-stack.ts` file for the cluster to be created and deployed: - * VPC. The VPC that was made in the `vpc-stack` is passed in. - * Launch Type. It has to specify whether the cluster will be `ec2` or `fargate` cluster. If `ec2` cluster, then, the `ec2_instance` and `node_size` needs to be speified as well. - * Kubernetes Version. The Kubernetes Version needs to be specified. - * Cluster Name. - - When `cluster-stack.ts` is called from `resource-deployment` with all the props configured, it first checks to see what type of laucnh type the cluster is. If it ec2, then an `eks.Cluster` is created, whereas, if it is fargate, then an `eks.FargateCluster` is created. + ## Interfaces - If an `eks.Cluster` is created, then the cluster will be created by passing in the following: - * vpc - * kubernetes version - * default node capacity - * cluster logging types. + There are 2 different interfaces that could be made - `ClusterInterface` and `ec2ClusterInterface`. Every cluster in configuration file is first casted to `ClusterInterface`. `ClusterInterface` has 3 fields: + * `name` - the name of the cluster + * `launch_type` - the launch type of the cluster. Either `ec2` or `fargate` + * `version` - the Kubernetes version of the cluster + +Once the `ClusterInterface` is created, it checks to see what `launch_type` it has. If it is `fargate`, then nothing happens, but if it is `ec2`, you cast the cluster to `ec2ClusterInterface`. The reason for this is because there is an additional field called `instance_type` which is the instance type for the ec2 cluster node groups. - The vpc is the VPC that is passed in as a prop. The default capcity is 0, so it will start off with 0 node groups. This way we could add a node group of whatever launch type we want, instead of having the default node group amd_64. The kubernetes version is the version that is passed in as a prop. Cluster logging types specify what type of logs we want the deployment to broadcast. The cluster creation will look like this: + ## Cluster Stacks + +There are 2 different stacks that could get potentially be created - `ec2ClusterStack` and `fargateClusterStack`. To determine which stack needs to be deployed, the ClusterInterface checks to see which `launch_type`. If it is `fargate`, it will deploy to `fargateClusterStack`, and if it is `ec2`, it will cast to `ec2ClusterInterface` and deploy to `ec2ClusterStack`. + + There are a few props that need to be passed into the `fargate-cluster-stack.ts` file for the cluster to be created and deployed: + * `name`. The name of the cluster. + * `vpc`. The VPC that was made in the `vpc-stack` is passed in. + * `version`. The Kubernetes Version needs to be specified. + +Then, the stack will call eks.FargateCluster to create the cluster. It will look like this: + +``` +this.cluster = new eks.FargateCluster(this, props.name, { + clusterName: props.name, + vpc: props.vpc, + version: props.version, + clusterLogging: logging + }); +``` +The vpc is the VPC that is passed in as a prop. The kubernetes version is the version that is passed in as a prop. Cluster logging types specify what type of logs we want the deployment to broadcast. + +If `ec2-cluster-stack.ts` is called, there are some additional props that need to be passed: +* `name`. The name of the cluster. + * `vpc`. The VPC that was made in the `vpc-stack` is passed in. + * `version`. The Kubernetes Version needs to be specified. + * `instance_type`. The instance type of the ec2 Cluster node groups. + +Then, the stack will call eks.Cluster to create the cluster. It will look like this: ``` this.cluster = new eks.Cluster(this, props.name, { - clusterName: props.name, - vpc: props.vpc, - defaultCapacity: 0, // we want to manage capacity our selves - version: props.version, - clusterLogging: logging, - - }); + clusterName: props.name, + vpc: props.vpc, + vpcSubnets: [{subnetType: ec2.SubnetType.PUBLIC}], + defaultCapacity: 0, // we want to manage capacity our selves + version: props.version, + clusterLogging: logging, + + }); ``` +The default capcity is 0, so it will start off with 0 node groups. This way we could add a node group of whatever launch type we want, instead of having the default node group `amd_64`. + Because we specified a default node capacity of 0, we need to add a NodeGroup. This is where we call `cluster.addNodeGroupCapacity` where we add the instanceType to the node group. Adding the node group will look like this: ``` @@ -105,18 +134,10 @@ this.cluster.addNodegroupCapacity('ng-' + instanceType, { ``` The `instanceType` needs to be `m5`, `m6g` or `t4g` plus their compatible node size. The `minSize` is 2, which is the recommended minSize. `nodeRole` refers to the IAM Role that we want to assign to the node group. It is critical to provide the node group proper authorization so that the clusters can be properly managed, such as addign resources to these clusters. -The other option for cluster creation was the `eks.FargateCluster`. The FargateCluster has the same instantion as the EC2 Cluster, except that there is no need to specify defaultCapacity, which in turn means there is no need to add a node group. - ## Testing -There are two types of tests that were created - Fine-Grained Assertion Tests and Unit Tests. - ### Fine-Grained Assertion Tests These Tests were done in order to make sure the cloudformation template that was created for deployment has the right template, and will therefore provide the correct information. This is done for both the VPC stack and Cluster stacks. For testing the Cluster stack, the environment variable `CDK_CONFIG_PATH` is changed to be directed towards the `/test/test_config/test_clusters.yml` file. - -### Unit Testing - -The unit testing is used to make sure the `validate-cluster-config.ts` file is properly validating the configuration file. \ No newline at end of file From e31917f809d876613f30aec1abc4e1d0082ebcc7 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <dzolty@amazon.com> Date: Thu, 18 Aug 2022 09:38:44 -0700 Subject: [PATCH 12/13] Made PR changes --- cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts | 3 +-- cdk_framework/EKS/lib/utils/validate-interface-schema.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts index 10164c389..aba76bd8c 100644 --- a/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts +++ b/cdk_framework/EKS/lib/stacks/ec2-cluster-stack.ts @@ -40,7 +40,7 @@ export class EC2Stack extends Stack { clusterName: props.name, vpc: props.vpc, vpcSubnets: [{subnetType: ec2.SubnetType.PUBLIC}], - defaultCapacity: 0, // we want to manage capacity our selves + defaultCapacity: 0, // we want to manage capacity ourselves version: props.version, clusterLogging: logging, @@ -51,7 +51,6 @@ export class EC2Stack extends Stack { nodeRole: workerRole }) this.cluster.awsAuth.addMastersRole(Role.fromRoleName(this, 'eks_admin_role', 'Admin')) - this.cluster.awsAuth.addMastersRole(Role.fromRoleName(this, 'he', 'Admin')) } } diff --git a/cdk_framework/EKS/lib/utils/validate-interface-schema.ts b/cdk_framework/EKS/lib/utils/validate-interface-schema.ts index bb60149ef..50afef522 100644 --- a/cdk_framework/EKS/lib/utils/validate-interface-schema.ts +++ b/cdk_framework/EKS/lib/utils/validate-interface-schema.ts @@ -94,4 +94,4 @@ function validateNodeSize(size: string, instance: string){ return adjustedSize -} \ No newline at end of file +} From f8f5b67701e6aeb2c2bba01575f78c59f94dbfb7 Mon Sep 17 00:00:00 2001 From: Daniel Zolty <54683946+Danielzolty@users.noreply.github.com> Date: Thu, 18 Aug 2022 10:04:15 -0700 Subject: [PATCH 13/13] Updated README to reflect new changes --- cdk_framework/EKS/README.md | 58 +++++++++++++++---------------------- 1 file changed, 23 insertions(+), 35 deletions(-) diff --git a/cdk_framework/EKS/README.md b/cdk_framework/EKS/README.md index f144d81f7..10af92266 100644 --- a/cdk_framework/EKS/README.md +++ b/cdk_framework/EKS/README.md @@ -25,8 +25,11 @@ The `tsconfig.json` file is used to tell TypeScript how to configure the project Since the code base in written in TypeScript, the CDK library has to be downloaded using Node. 1. Make sure you have Node, so that you can use `npm` control. -2. Download from EKS directory the AWS CDK Library by typing `npm install aws-cdk-lib`. -3. In order to use the linter, the eslint dependency needs to be downloaded. This could be done by calling `npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin`. +2. Download from EKS directory the AWS CDK Library by typing `npm install aws-cdk-lib`. +3. Download `yaml-schema-validator` by typing in command line `npm install yaml-schema-validator`. +4. Download ajv library by typing in command line `npm install ajv`. +5. Download ajv errors by typing in command line `npm install ajv-errors`. +6. In order to use the linter, the eslint dependency needs to be downloaded. This could be done by calling `npm install --save-dev eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin`. ### Environemnt Variables @@ -40,34 +43,25 @@ There are a number of environment variables that should be defined before deploy Sample template of what config file looks like could be seen in the YAML files found in `lib/config` folder. Should create a category called `clusters`, where each desired cluster should be configured. The name of the cluster given should be the key name for each cluster. Then, there are a couple of fields that need to be addressed: * `clusters`: - * `launch_type` - choose either `ec2` or `fargate` subcategory - can't be both. Determines the launch type for the cluster to be deployed. This will act as the key to another list. - * `ec2_instance` - This is the the CPU Architecture for `ec2` launch types. It is only useful information for `ec2` key. If the `launch_type` is `fargate`, then nothing will happen by providing an `ec2_instance`. The options are `m6g`, `t4g`, amd `m5`, otherwise, an error will be thrown. There can’t be any other characters. It is case insensitive. - * `node_size` - This determines the size of the cpu architecture (memory, vCPUs, etc). It is only useful information for `ec2` key. If the key is `fargate` nothing will happen by providing the `node_size`. The list of compatible sizes could be found here: [Compatible Node Sizes](https://www.amazonaws.cn/en/ec2/instance-types/). It is case insensitive. + * `name` - The name of the cluster. It needs to be a string. Can't have two clusters with the same name. + * `launch_type` - choose either `ec2` or `fargate`. Determines the launch type for the cluster to be deployed. Case insensitive. * `version` - Kubernetes Version. Supported Kubernetes versions are any versions between 1.18-1.21. This can be seen at [KubernetesVersion API](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_eks.KubernetesVersion.html). Additionally, specifying patch releases isn't an option as the CDK doesn't support it. Therefore, every input value must be the minor version. + * `instance_type` - This is a string which is only required for ec2 clusters. There are 2 parts to the `instance_type`: ec2 instance which is the cpu architecture, and node size which is the size of the CPU. The options for ec2 instance are `m6g`, `t4g`, amd `m5` - each represent a different cpu architecture. There is a vast variety of node sizes. The list of compatible sizes could be found here: [Compatible Node Sizes](https://www.amazonaws.cn/en/ec2/instance-types/). The string for this should follow this template: "ec2_instance" + "." + "node_size". An example would be `m5.large`. It is case insensitive. Here is a sample configuration file example: ``` --- clusters: - armCluster: - launch_type: - ec2: - ec2_instance: m6g - node_size: large - version: 1.21 - fargateCluster: - launch_type: - fargate: - version: 1.21 - t4gCluster: - launch_type: - ec2: - ec2_instance: t4g - node_size: large - version: 1.21 + - name: ec2Cluster + version: "1.21" + launch_type: ec2 + instance_type: m5.large + - name: fargateCluster + version: "1.20" + launch_type: fargate ``` -There are three different clusters being deployed in this example - amdCluster, fargateCluster, and t4gCluster. There are only 2 fields for each cluster - `launch_type` and `version`. Then, in `launch_type`, either `ec2` or `fargate` is specified. If `fargate` is specified, then it should be left empty as shown above. If `ec2` is specified, then both `ec2_instance` and `node_size` should be defined. +There are two different clusters being deployed in this example - amdCluster, fargateCluster, and t4gCluster. There are 4 fields for each cluster - `name`, `launch_type`, `version`, and `instance_type`. `instance_type` is only required for ec2 cluster. ### Deploying clusters @@ -93,26 +87,20 @@ Here is an example case of how to run a deployment. Let's say there are two clus ``` --- clusters: - amdCluster: - launch_type: - ec2: - ec2_instance: m5 - node_size: large - version: 1.21 - fargateCluster: - launch_type: - fargate: - version: 1.21 + - name: ec2Cluster + version: "1.21" + launch_type: ec2 + instance_type: m5.large + - name: fargateCluster + version: "1.20" + launch_type: fargate ``` Now that we have the configuration file set up, we want to make sure the CDK_CONFIG_PATH environment variable is set to the route to this configuration file. This only needs to be done if the clusters.yml file in /lib/config/cluster-config folder was not overriden. Once the variable is set, all that needs to be done is call `make EKS-infra` and all the clusters will be deployed. ## Testing -There are two different tests that are implemented: 1. Fine-Grained Assertion Tests * These tests are used to test the template of the the cloudformation stacks that are being created. -2. Unit Tests - * These tests are created to ensure proper configuraiton validation. These are accomplished by using the table-driven approach. In order to run these tests, use command `npm test`.