diff --git a/.eslintrc.json b/.eslintrc.json index c172f04..dc91996 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -43,88 +43,80 @@ "!.projenrc.js" ], "rules": { - "indent": [ - "off" - ], "@stylistic/indent": [ "error", 2 ], - "quotes": [ + "@stylistic/quotes": [ "error", "single", { "avoidEscape": true } ], - "comma-dangle": [ + "@stylistic/comma-dangle": [ "error", "always-multiline" ], - "comma-spacing": [ + "@stylistic/comma-spacing": [ "error", { "before": false, "after": true } ], - "no-multi-spaces": [ + "@stylistic/no-multi-spaces": [ "error", { "ignoreEOLComments": false } ], - "array-bracket-spacing": [ + "@stylistic/array-bracket-spacing": [ "error", "never" ], - "array-bracket-newline": [ + "@stylistic/array-bracket-newline": [ "error", "consistent" ], - "object-curly-spacing": [ + "@stylistic/object-curly-spacing": [ "error", "always" ], - "object-curly-newline": [ + "@stylistic/object-curly-newline": [ "error", { "multiline": true, "consistent": true } ], - "object-property-newline": [ + "@stylistic/object-property-newline": [ "error", { "allowAllPropertiesOnSameLine": true } ], - "keyword-spacing": [ + "@stylistic/keyword-spacing": [ "error" ], - "brace-style": [ + "@stylistic/brace-style": [ "error", "1tbs", { "allowSingleLine": true } ], - "space-before-blocks": [ + "@stylistic/space-before-blocks": [ "error" ], - "curly": [ - "error", - "multi-line", - "consistent" - ], "@stylistic/member-delimiter-style": [ "error" ], - "semi": [ + "@stylistic/semi": [ "error", "always" ], - "max-len": [ + "@stylistic/max-len": [ "error", { "code": 150, @@ -135,13 +127,25 @@ "ignoreRegExpLiterals": true } ], - "quote-props": [ + "@stylistic/quote-props": [ "error", "consistent-as-needed" ], - "@typescript-eslint/no-require-imports": [ + "@stylistic/key-spacing": [ "error" ], + "@stylistic/no-multiple-empty-lines": [ + "error" + ], + "@stylistic/no-trailing-spaces": [ + "error" + ], + "curly": [ + "error", + "multi-line", + "consistent" + ], + "@typescript-eslint/no-require-imports": "error", "import/no-extraneous-dependencies": [ "error", { @@ -175,27 +179,12 @@ "no-shadow": [ "off" ], - "@typescript-eslint/no-shadow": [ - "error" - ], - "key-spacing": [ - "error" - ], - "no-multiple-empty-lines": [ - "error" - ], - "@typescript-eslint/no-floating-promises": [ - "error" - ], + "@typescript-eslint/no-shadow": "error", + "@typescript-eslint/no-floating-promises": "error", "no-return-await": [ "off" ], - "@typescript-eslint/return-await": [ - "error" - ], - "no-trailing-spaces": [ - "error" - ], + "@typescript-eslint/return-await": "error", "dot-notation": [ "error" ], diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 83cb973..c6b3b92 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1 @@ -* @mr-robot-in -* @hritik-verma-sc -* @rithikb24 -* @gagan1510 +* @smallcase/core-infra diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9975904..f4ce18e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,6 +32,7 @@ jobs: run: |- git add . git diff --staged --patch --exit-code > repo.patch || echo "self_mutation_happened=true" >> $GITHUB_OUTPUT + shell: bash working-directory: ./ - name: Upload patch if: steps.self_mutation.outputs.self_mutation_happened diff --git a/.github/workflows/dependabot-auto-approve.yml b/.github/workflows/dependabot-auto-approve.yml new file mode 100644 index 0000000..489fc10 --- /dev/null +++ b/.github/workflows/dependabot-auto-approve.yml @@ -0,0 +1,70 @@ +# Auto-approve Dependabot PRs +# Based on GitHub's official documentation for Dependabot automation + +name: Dependabot auto-approve +on: + pull_request: + types: [opened, reopened, synchronize] + workflow_run: + workflows: ["Dependabot auto-label"] + types: [completed] + +permissions: + pull-requests: write + +jobs: + dependabot: + runs-on: arc-runner-set + if: | + (github.event_name == 'pull_request' && github.event.pull_request.user.login == 'dependabot[bot]') || + (github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success') + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Dependabot metadata + id: metadata + uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Auto-approve and add automerge label for patch updates + if: | + steps.metadata.outputs.update-type == 'version-update:semver-patch' && + steps.metadata.outputs.update-type != null + run: | + gh pr review --approve "$PR_URL" + gh pr edit "$PR_URL" --add-label "automerge" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Auto-approve and add automerge label for minor updates + if: | + steps.metadata.outputs.update-type == 'version-update:semver-minor' && + steps.metadata.outputs.update-type != null + run: | + gh pr review --approve "$PR_URL" + gh pr edit "$PR_URL" --add-label "automerge" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Auto-approve and add automerge label for indirect dependencies + if: steps.metadata.outputs.dependency-type == 'indirect' + run: | + gh pr review --approve "$PR_URL" + gh pr edit "$PR_URL" --add-label "automerge" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Comment on major updates (require manual review) + if: steps.metadata.outputs.update-type == 'version-update:semver-major' + run: | + gh pr comment "$PR_URL" --body "⚠️ **Major version update detected** - This requires manual review before approval." + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Comment on unknown updates (require manual review) + if: steps.metadata.outputs.update-type == null || steps.metadata.outputs.update-type == '' + run: | + gh pr comment "$PR_URL" --body "❓ **Unknown update type** - This requires manual review before approval." + env: + PR_URL: ${{github.event.pull_request.html_url}} \ No newline at end of file diff --git a/.github/workflows/dependabot-auto-label.yml b/.github/workflows/dependabot-auto-label.yml new file mode 100644 index 0000000..6b28ff1 --- /dev/null +++ b/.github/workflows/dependabot-auto-label.yml @@ -0,0 +1,66 @@ +# Auto-label Dependabot PRs based on dependency type and update type +# Based on GitHub's official documentation for Dependabot automation + +name: Dependabot auto-label +on: + pull_request: + types: [opened, reopened, synchronize] + +permissions: + pull-requests: write + issues: write + +jobs: + dependabot: + runs-on: arc-runner-set + if: github.event.pull_request.user.login == 'dependabot[bot]' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Dependabot metadata + id: metadata + uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Add production dependency label + if: steps.metadata.outputs.dependency-type == 'direct:production' + run: gh pr edit "$PR_URL" --add-label "production" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Add development dependency label + if: steps.metadata.outputs.dependency-type == 'direct:development' + run: gh pr edit "$PR_URL" --add-label "dev-dependency" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Add indirect dependency label + if: steps.metadata.outputs.dependency-type == 'indirect' + run: gh pr edit "$PR_URL" --add-label "indirect-dependency" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Add patch update label + if: steps.metadata.outputs.update-type == 'version-update:semver-patch' + run: gh pr edit "$PR_URL" --add-label "patch" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Add minor update label + if: steps.metadata.outputs.update-type == 'version-update:semver-minor' + run: gh pr edit "$PR_URL" --add-label "minor" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Add major update label + if: steps.metadata.outputs.update-type == 'version-update:semver-major' + run: gh pr edit "$PR_URL" --add-label "major" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Add unknown update label + if: steps.metadata.outputs.update-type == null || steps.metadata.outputs.update-type == '' + run: gh pr edit "$PR_URL" --add-label "unknown-update" + env: + PR_URL: ${{github.event.pull_request.html_url}} \ No newline at end of file diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml new file mode 100644 index 0000000..9c8c10a --- /dev/null +++ b/.github/workflows/dependabot-auto-merge.yml @@ -0,0 +1,64 @@ +# Auto-merge Dependabot PRs +# Based on GitHub's official documentation for Dependabot automation + +name: Dependabot auto-merge +on: + pull_request: + types: [opened, reopened, synchronize, labeled] + +permissions: + contents: write + pull-requests: write + +jobs: + dependabot: + runs-on: arc-runner-set + if: github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'mr-robot-in' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Dependabot metadata + id: metadata + uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 + with: + github-token: "${{ secrets.GITHUB_TOKEN }}" + + - name: Enable auto-merge for patch updates + if: | + steps.metadata.outputs.update-type == 'version-update:semver-patch' && + contains(github.event.pull_request.labels.*.name, 'automerge') && + steps.metadata.outputs.update-type != null + run: gh pr merge --auto --merge "$PR_URL" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Enable auto-merge for minor updates + if: | + steps.metadata.outputs.update-type == 'version-update:semver-minor' && + contains(github.event.pull_request.labels.*.name, 'automerge') && + steps.metadata.outputs.update-type != null + run: gh pr merge --auto --merge "$PR_URL" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Enable auto-merge for indirect dependencies + if: | + steps.metadata.outputs.dependency-type == 'indirect' && + contains(github.event.pull_request.labels.*.name, 'automerge') + run: gh pr merge --auto --merge "$PR_URL" + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Comment on major updates (no auto-merge) + if: steps.metadata.outputs.update-type == 'version-update:semver-major' + run: | + gh pr comment "$PR_URL" --body "🚨 **Major version update** - Auto-merge disabled for major updates. Please review manually." + env: + PR_URL: ${{github.event.pull_request.html_url}} + + - name: Comment on unknown updates (no auto-merge) + if: steps.metadata.outputs.update-type == null || steps.metadata.outputs.update-type == '' + run: | + gh pr comment "$PR_URL" --body "❓ **Unknown update type** - Auto-merge disabled. Please review manually." + env: + PR_URL: ${{github.event.pull_request.html_url}} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1b8e85b..91db5bd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -47,6 +47,7 @@ jobs: run: |- echo "latest_commit=$(git ls-remote origin -h ${{ github.ref }} | cut -f1)" >> $GITHUB_OUTPUT cat $GITHUB_OUTPUT + shell: bash - name: Backup artifact permissions if: ${{ steps.git_remote.outputs.latest_commit == github.sha }} run: cd dist && getfacl -R . > permissions-backup.acl @@ -84,9 +85,7 @@ jobs: - name: Release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GITHUB_REPOSITORY: ${{ github.repository }} - GITHUB_REF: ${{ github.sha }} - run: errout=$(mktemp); gh release create $(cat dist/releasetag.txt) -R $GITHUB_REPOSITORY -F dist/changelog.md -t $(cat dist/releasetag.txt) --target $GITHUB_REF 2> $errout && true; exitcode=$?; if [ $exitcode -ne 0 ] && ! grep -q "Release.tag_name already exists" $errout; then cat $errout; exit $exitcode; fi + run: errout=$(mktemp); gh release create $(cat dist/releasetag.txt) -R $GITHUB_REPOSITORY -F dist/changelog.md -t $(cat dist/releasetag.txt) --target $GITHUB_SHA 2> $errout && true; exitcode=$?; if [ $exitcode -ne 0 ] && ! grep -q "Release.tag_name already exists" $errout; then cat $errout; exit $exitcode; fi release_npm: name: Publish to npm needs: release diff --git a/.github/workflows/upgrade-main.yml b/.github/workflows/upgrade-main.yml index 115bafa..14cba08 100644 --- a/.github/workflows/upgrade-main.yml +++ b/.github/workflows/upgrade-main.yml @@ -31,6 +31,7 @@ jobs: run: |- git add . git diff --staged --patch --exit-code > repo.patch || echo "patch_created=true" >> $GITHUB_OUTPUT + shell: bash working-directory: ./ - name: Upload patch if: steps.create_patch.outputs.patch_created diff --git a/.projen/deps.json b/.projen/deps.json index 2d3f032..b050530 100644 --- a/.projen/deps.json +++ b/.projen/deps.json @@ -25,7 +25,7 @@ }, { "name": "aws-cdk-lib", - "version": "2.169.0", + "version": "2.195.0", "type": "build" }, { @@ -52,7 +52,7 @@ }, { "name": "jest-junit", - "version": "^15", + "version": "^16", "type": "build" }, { @@ -70,12 +70,12 @@ }, { "name": "jsii-rosetta", - "version": "~5.6.0", + "version": "~5.9.0", "type": "build" }, { "name": "jsii", - "version": "~5.6.0", + "version": "~5.9.0", "type": "build" }, { @@ -92,7 +92,7 @@ }, { "name": "aws-cdk-lib", - "version": "^2.169.0", + "version": "^2.195.0", "type": "peer" }, { diff --git a/.projenrc.js b/.projenrc.js index ed9372a..8feaf71 100644 --- a/.projenrc.js +++ b/.projenrc.js @@ -1,12 +1,15 @@ const { AwsCdkConstructLibrary } = require('projen/lib/awscdk'); const { NpmAccess } = require('projen/lib/javascript'); -const CDK_VERSION = '2.169.0'; +const CDK_VERSION = '2.195.0'; const project = new AwsCdkConstructLibrary({ author: 'Bharat Parmar', authorAddress: 'bharat.parmar@smallcase.com', cdkVersion: `${CDK_VERSION}`, cdkVersionPinning: false, constructsVersion: '10.0.5', + jsiiVersion: '~5.9.0', + jsiiDocgen: '^10.7.0', + jsiiRosetta: '~5.9.0', constructsVersionPinning: false, releaseWorkflow: true, defaultReleaseBranch: 'main', @@ -33,7 +36,17 @@ const project = new AwsCdkConstructLibrary({ }, releaseEveryCommit: true, licensed: true, /* Indicates if a license should be added. */ - dependabot: false, /* Include dependabot configuration. */ + dependabot: false, + dependabotOptions: { + scheduleInterval: 'weekly', + versioningStrategy: 'lockfile-only', + runsOn: 'arc-runner-set', + allow: ['npm', 'github-actions'], + ignore: ['aws-cdk-lib', 'constructs'], + labels: ['dependencies', 'automerge'], + assignees: [], + reviewers: [], + }, mergify: false, /* Adds mergify configuration. */ pullRequestTemplate: true, /* Include a GitHub pull request template. */ // deps: [], /* Runtime dependencies of this module. */ diff --git a/API.md b/API.md index ea4cdfd..a071f7b 100644 --- a/API.md +++ b/API.md @@ -44,6 +44,7 @@ new Network(scope: Construct, id: string, props: VPCProps) | --- | --- | | toString | Returns a string representation of this construct. | | createSubnet | *No description.* | +| mergeSubnetsByGroupNames | *No description.* | --- @@ -58,7 +59,7 @@ Returns a string representation of this construct. ##### `createSubnet` ```typescript -public createSubnet(option: ISubnetsProps, vpc: Vpc, peeringConnectionId?: PeeringConnectionInternalType): Subnet[] +public createSubnet(option: ISubnetsProps, vpc: Vpc, peeringConnectionId?: PeeringConnectionInternalType, useGlobalNestedStacks?: boolean): Subnet[] ``` ###### `option`Required @@ -79,6 +80,42 @@ public createSubnet(option: ISubnetsProps, vpc: Vpc, peeringConnectionId?: Peeri --- +###### `useGlobalNestedStacks`Optional + +- *Type:* boolean + +--- + +##### `mergeSubnetsByGroupNames` + +```typescript +public mergeSubnetsByGroupNames(name: string, service: InterfaceVpcEndpointAwsService | GatewayVpcEndpointAwsService | InterfaceVpcEndpointService, subnetGroupNames: string[], externalSubnets?: IExternalVPEndpointSubnets[]): SelectedSubnets +``` + +###### `name`Required + +- *Type:* string + +--- + +###### `service`Required + +- *Type:* aws-cdk-lib.aws_ec2.InterfaceVpcEndpointAwsService | aws-cdk-lib.aws_ec2.GatewayVpcEndpointAwsService | aws-cdk-lib.aws_ec2.InterfaceVpcEndpointService + +--- + +###### `subnetGroupNames`Required + +- *Type:* string[] + +--- + +###### `externalSubnets`Optional + +- *Type:* IExternalVPEndpointSubnets[] + +--- + #### Static Functions | **Name** | **Description** | @@ -110,7 +147,7 @@ Any object. | **Name** | **Type** | **Description** | | --- | --- | --- | | node | constructs.Node | The tree node. | -| endpointOutputs | {[ key: string ]: aws-cdk-lib.aws_ec2.InterfaceVpcEndpoint \| aws-cdk-lib.aws_ec2.GatewayVpcEndpoint} | *No description.* | +| endpointOutputs | {[ key: string ]: aws-cdk-lib.aws_ec2.GatewayVpcEndpoint \| aws-cdk-lib.aws_ec2.InterfaceVpcEndpoint} | *No description.* | | natProvider | aws-cdk-lib.aws_ec2.NatProvider | *No description.* | | securityGroupOutputs | {[ key: string ]: aws-cdk-lib.aws_ec2.SecurityGroup} | *No description.* | | vpc | aws-cdk-lib.aws_ec2.Vpc | *No description.* | @@ -136,10 +173,10 @@ The tree node. ##### `endpointOutputs`Required ```typescript -public readonly endpointOutputs: {[ key: string ]: InterfaceVpcEndpoint | GatewayVpcEndpoint}; +public readonly endpointOutputs: {[ key: string ]: GatewayVpcEndpoint | InterfaceVpcEndpoint}; ``` -- *Type:* {[ key: string ]: aws-cdk-lib.aws_ec2.InterfaceVpcEndpoint | aws-cdk-lib.aws_ec2.GatewayVpcEndpoint} +- *Type:* {[ key: string ]: aws-cdk-lib.aws_ec2.GatewayVpcEndpoint | aws-cdk-lib.aws_ec2.InterfaceVpcEndpoint} --- @@ -214,141 +251,1228 @@ public readonly subnets: {[ key: string ]: Subnet[]}; --- -## Structs - -### AddRouteOptions +### VpcEndpointServiceNestedStack -#### Initializer +#### Initializers ```typescript -import { AddRouteOptions } from '@smallcase/cdk-vpc-module' +import { VpcEndpointServiceNestedStack } from '@smallcase/cdk-vpc-module' -const addRouteOptions: AddRouteOptions = { ... } +new VpcEndpointServiceNestedStack(scope: Construct, id: string, props: VpcEndpointServiceNestedStackProps) ``` -#### Properties - | **Name** | **Type** | **Description** | | --- | --- | --- | -| routerType | aws-cdk-lib.aws_ec2.RouterType | What type of router to route this traffic to. | -| destinationCidrBlock | string | IPv4 range this route applies to. | -| destinationIpv6CidrBlock | string | IPv6 range this route applies to. | -| enablesInternetConnectivity | boolean | Whether this route will enable internet connectivity. | -| existingVpcPeeringRouteKey | string | *No description.* | -| routerId | string | *No description.* | +| scope | constructs.Construct | *No description.* | +| id | string | *No description.* | +| props | VpcEndpointServiceNestedStackProps | *No description.* | --- -##### `routerType`Required +##### `scope`Required + +- *Type:* constructs.Construct + +--- + +##### `id`Required + +- *Type:* string + +--- + +##### `props`Required + +- *Type:* VpcEndpointServiceNestedStackProps + +--- + +#### Methods + +| **Name** | **Description** | +| --- | --- | +| toString | Returns a string representation of this construct. | +| addDependency | Add a dependency between this stack and another stack. | +| addMetadata | Adds an arbitrary key-value pair, with information you want to record about the stack. | +| addTransform | Add a Transform to this stack. A Transform is a macro that AWS CloudFormation uses to process your template. | +| exportStringListValue | Create a CloudFormation Export for a string list value. | +| exportValue | Create a CloudFormation Export for a string value. | +| formatArn | Creates an ARN from components. | +| getLogicalId | Allocates a stack-unique CloudFormation-compatible logical identity for a specific resource. | +| regionalFact | Look up a fact value for the given fact for the region of this stack. | +| renameLogicalId | Rename a generated logical identities. | +| reportMissingContextKey | Indicate that a context key was expected. | +| resolve | Resolve a tokenized value in the context of the current stack. | +| splitArn | Splits the provided ARN into its components. | +| toJsonString | Convert an object, potentially containing tokens, to a JSON string. | +| toYamlString | Convert an object, potentially containing tokens, to a YAML string. | +| setParameter | Assign a value to one of the nested stack parameters. | + +--- + +##### `toString` ```typescript -public readonly routerType: RouterType; +public toString(): string ``` -- *Type:* aws-cdk-lib.aws_ec2.RouterType +Returns a string representation of this construct. -What type of router to route this traffic to. +##### `addDependency` + +```typescript +public addDependency(target: Stack, reason?: string): void +``` + +Add a dependency between this stack and another stack. + +This can be used to define dependencies between any two stacks within an +app, and also supports nested stacks. + +###### `target`Required + +- *Type:* aws-cdk-lib.Stack --- -##### `destinationCidrBlock`Optional +###### `reason`Optional + +- *Type:* string + +--- + +##### `addMetadata` ```typescript -public readonly destinationCidrBlock: string; +public addMetadata(key: string, value: any): void ``` +Adds an arbitrary key-value pair, with information you want to record about the stack. + +These get translated to the Metadata section of the generated template. + +> [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/metadata-section-structure.html) + +###### `key`Required + - *Type:* string -- *Default:* '0.0.0.0/0' -IPv4 range this route applies to. +--- + +###### `value`Required + +- *Type:* any --- -##### `destinationIpv6CidrBlock`Optional +##### `addTransform` ```typescript -public readonly destinationIpv6CidrBlock: string; +public addTransform(transform: string): void +``` + +Add a Transform to this stack. A Transform is a macro that AWS CloudFormation uses to process your template. + +Duplicate values are removed when stack is synthesized. + +> [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-section-structure.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/transform-section-structure.html) + +*Example* + +```typescript +declare const stack: Stack; + +stack.addTransform('AWS::Serverless-2016-10-31') ``` + +###### `transform`Required + - *Type:* string -- *Default:* Uses IPv6 -IPv6 range this route applies to. +The transform to add. --- -##### `enablesInternetConnectivity`Optional +##### `exportStringListValue` ```typescript -public readonly enablesInternetConnectivity: boolean; +public exportStringListValue(exportedValue: any, options?: ExportValueOptions): string[] ``` -- *Type:* boolean -- *Default:* false +Create a CloudFormation Export for a string list value. -Whether this route will enable internet connectivity. +Returns a string list representing the corresponding `Fn.importValue()` +expression for this Export. The export expression is automatically wrapped with an +`Fn::Join` and the import value with an `Fn::Split`, since CloudFormation can only +export strings. You can control the name for the export by passing the `name` option. -If true, this route will be added before any AWS resources that depend -on internet connectivity in the VPC will be created. +If you don't supply a value for `name`, the value you're exporting must be +a Resource attribute (for example: `bucket.bucketName`) and it will be +given the same name as the automatic cross-stack reference that would be created +if you used the attribute in another Stack. + +One of the uses for this method is to *remove* the relationship between +two Stacks established by automatic cross-stack references. It will +temporarily ensure that the CloudFormation Export still exists while you +remove the reference from the consuming stack. After that, you can remove +the resource and the manual export. + +See `exportValue` for an example of this process. + +###### `exportedValue`Required + +- *Type:* any --- -##### `existingVpcPeeringRouteKey`Optional +###### `options`Optional + +- *Type:* aws-cdk-lib.ExportValueOptions + +--- + +##### `exportValue` ```typescript -public readonly existingVpcPeeringRouteKey: string; +public exportValue(exportedValue: any, options?: ExportValueOptions): string +``` + +Create a CloudFormation Export for a string value. + +Returns a string representing the corresponding `Fn.importValue()` +expression for this Export. You can control the name for the export by +passing the `name` option. + +If you don't supply a value for `name`, the value you're exporting must be +a Resource attribute (for example: `bucket.bucketName`) and it will be +given the same name as the automatic cross-stack reference that would be created +if you used the attribute in another Stack. + +One of the uses for this method is to *remove* the relationship between +two Stacks established by automatic cross-stack references. It will +temporarily ensure that the CloudFormation Export still exists while you +remove the reference from the consuming stack. After that, you can remove +the resource and the manual export. + +Here is how the process works. Let's say there are two stacks, +`producerStack` and `consumerStack`, and `producerStack` has a bucket +called `bucket`, which is referenced by `consumerStack` (perhaps because +an AWS Lambda Function writes into it, or something like that). + +It is not safe to remove `producerStack.bucket` because as the bucket is being +deleted, `consumerStack` might still be using it. + +Instead, the process takes two deployments: + +**Deployment 1: break the relationship**: + +- Make sure `consumerStack` no longer references `bucket.bucketName` (maybe the consumer + stack now uses its own bucket, or it writes to an AWS DynamoDB table, or maybe you just + remove the Lambda Function altogether). +- In the `ProducerStack` class, call `this.exportValue(this.bucket.bucketName)`. This + will make sure the CloudFormation Export continues to exist while the relationship + between the two stacks is being broken. +- Deploy (this will effectively only change the `consumerStack`, but it's safe to deploy both). + +**Deployment 2: remove the bucket resource**: + +- You are now free to remove the `bucket` resource from `producerStack`. +- Don't forget to remove the `exportValue()` call as well. +- Deploy again (this time only the `producerStack` will be changed -- the bucket will be deleted). + +###### `exportedValue`Required + +- *Type:* any + +--- + +###### `options`Optional + +- *Type:* aws-cdk-lib.ExportValueOptions + +--- + +##### `formatArn` + +```typescript +public formatArn(components: ArnComponents): string +``` + +Creates an ARN from components. + +If `partition`, `region` or `account` are not specified, the stack's +partition, region and account will be used. + +If any component is the empty string, an empty string will be inserted +into the generated ARN at the location that component corresponds to. + +The ARN will be formatted as follows: + + arn:{partition}:{service}:{region}:{account}:{resource}{sep}{resource-name} + +The required ARN pieces that are omitted will be taken from the stack that +the 'scope' is attached to. If all ARN pieces are supplied, the supplied scope +can be 'undefined'. + +###### `components`Required + +- *Type:* aws-cdk-lib.ArnComponents + +--- + +##### `getLogicalId` + +```typescript +public getLogicalId(element: CfnElement): string +``` + +Allocates a stack-unique CloudFormation-compatible logical identity for a specific resource. + +This method is called when a `CfnElement` is created and used to render the +initial logical identity of resources. Logical ID renames are applied at +this stage. + +This method uses the protected method `allocateLogicalId` to render the +logical ID for an element. To modify the naming scheme, extend the `Stack` +class and override this method. + +###### `element`Required + +- *Type:* aws-cdk-lib.CfnElement + +The CloudFormation element for which a logical identity is needed. + +--- + +##### `regionalFact` + +```typescript +public regionalFact(factName: string, defaultValue?: string): string ``` +Look up a fact value for the given fact for the region of this stack. + +Will return a definite value only if the region of the current stack is resolved. +If not, a lookup map will be added to the stack and the lookup will be done at +CDK deployment time. + +What regions will be included in the lookup map is controlled by the +`@aws-cdk/core:target-partitions` context value: it must be set to a list +of partitions, and only regions from the given partitions will be included. +If no such context key is set, all regions will be included. + +This function is intended to be used by construct library authors. Application +builders can rely on the abstractions offered by construct libraries and do +not have to worry about regional facts. + +If `defaultValue` is not given, it is an error if the fact is unknown for +the given region. + +###### `factName`Required + - *Type:* string --- -##### `routerId`Optional +###### `defaultValue`Optional + +- *Type:* string + +--- + +##### `renameLogicalId` ```typescript -public readonly routerId: string; +public renameLogicalId(oldId: string, newId: string): void ``` +Rename a generated logical identities. + +To modify the naming scheme strategy, extend the `Stack` class and +override the `allocateLogicalId` method. + +###### `oldId`Required + - *Type:* string --- -### NetworkACL +###### `newId`Required -#### Initializer +- *Type:* string + +--- + +##### `reportMissingContextKey` ```typescript -import { NetworkACL } from '@smallcase/cdk-vpc-module' +public reportMissingContextKey(report: MissingContext): void +``` -const networkACL: NetworkACL = { ... } +Indicate that a context key was expected. + +Contains instructions which will be emitted into the cloud assembly on how +the key should be supplied. + +###### `report`Required + +- *Type:* aws-cdk-lib.cloud_assembly_schema.MissingContext + +The set of parameters needed to obtain the context. + +--- + +##### `resolve` + +```typescript +public resolve(obj: any): any +``` + +Resolve a tokenized value in the context of the current stack. + +###### `obj`Required + +- *Type:* any + +--- + +##### `splitArn` + +```typescript +public splitArn(arn: string, arnFormat: ArnFormat): ArnComponents +``` + +Splits the provided ARN into its components. + +Works both if 'arn' is a string like 'arn:aws:s3:::bucket', +and a Token representing a dynamic CloudFormation expression +(in which case the returned components will also be dynamic CloudFormation expressions, +encoded as Tokens). + +###### `arn`Required + +- *Type:* string + +the ARN to split into its components. + +--- + +###### `arnFormat`Required + +- *Type:* aws-cdk-lib.ArnFormat + +the expected format of 'arn' - depends on what format the service 'arn' represents uses. + +--- + +##### `toJsonString` + +```typescript +public toJsonString(obj: any, space?: number): string +``` + +Convert an object, potentially containing tokens, to a JSON string. + +###### `obj`Required + +- *Type:* any + +--- + +###### `space`Optional + +- *Type:* number + +--- + +##### `toYamlString` + +```typescript +public toYamlString(obj: any): string +``` + +Convert an object, potentially containing tokens, to a YAML string. + +###### `obj`Required + +- *Type:* any + +--- + +##### `setParameter` + +```typescript +public setParameter(name: string, value: string): void +``` + +Assign a value to one of the nested stack parameters. + +###### `name`Required + +- *Type:* string + +The parameter name (ID). + +--- + +###### `value`Required + +- *Type:* string + +The value to assign. + +--- + +#### Static Functions + +| **Name** | **Description** | +| --- | --- | +| isConstruct | Checks if `x` is a construct. | +| isStack | Return whether the given object is a Stack. | +| of | Looks up the first stack scope in which `construct` is defined. | +| isNestedStack | Checks if `x` is an object of type `NestedStack`. | + +--- + +##### ~~`isConstruct`~~ + +```typescript +import { VpcEndpointServiceNestedStack } from '@smallcase/cdk-vpc-module' + +VpcEndpointServiceNestedStack.isConstruct(x: any) +``` + +Checks if `x` is a construct. + +###### `x`Required + +- *Type:* any + +Any object. + +--- + +##### `isStack` + +```typescript +import { VpcEndpointServiceNestedStack } from '@smallcase/cdk-vpc-module' + +VpcEndpointServiceNestedStack.isStack(x: any) +``` + +Return whether the given object is a Stack. + +We do attribute detection since we can't reliably use 'instanceof'. + +###### `x`Required + +- *Type:* any + +--- + +##### `of` + +```typescript +import { VpcEndpointServiceNestedStack } from '@smallcase/cdk-vpc-module' + +VpcEndpointServiceNestedStack.of(construct: IConstruct) +``` + +Looks up the first stack scope in which `construct` is defined. + +Fails if there is no stack up the tree. + +###### `construct`Required + +- *Type:* constructs.IConstruct + +The construct to start the search from. + +--- + +##### `isNestedStack` + +```typescript +import { VpcEndpointServiceNestedStack } from '@smallcase/cdk-vpc-module' + +VpcEndpointServiceNestedStack.isNestedStack(x: any) +``` + +Checks if `x` is an object of type `NestedStack`. + +###### `x`Required + +- *Type:* any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| node | constructs.Node | The tree node. | +| account | string | The AWS account into which this stack will be deployed. | +| artifactId | string | The ID of the cloud assembly artifact for this stack. | +| availabilityZones | string[] | Returns the list of AZs that are available in the AWS environment (account/region) associated with this stack. | +| bundlingRequired | boolean | Indicates whether the stack requires bundling or not. | +| dependencies | aws-cdk-lib.Stack[] | Return the stacks this stack depends on. | +| environment | string | The environment coordinates in which this stack is deployed. | +| nested | boolean | Indicates if this is a nested stack, in which case `parentStack` will include a reference to it's parent. | +| notificationArns | string[] | Returns the list of notification Amazon Resource Names (ARNs) for the current stack. | +| partition | string | The partition in which this stack is defined. | +| region | string | The AWS region into which this stack will be deployed (e.g. `us-west-2`). | +| stackId | string | An attribute that represents the ID of the stack. | +| stackName | string | An attribute that represents the name of the nested stack. | +| synthesizer | aws-cdk-lib.IStackSynthesizer | Synthesis method for this stack. | +| tags | aws-cdk-lib.TagManager | Tags to be applied to the stack. | +| templateFile | string | The name of the CloudFormation template file emitted to the output directory during synthesis. | +| templateOptions | aws-cdk-lib.ITemplateOptions | Options for CloudFormation template (like version, transform, description). | +| urlSuffix | string | The Amazon domain suffix for the region in which this stack is defined. | +| nestedStackParent | aws-cdk-lib.Stack | If this is a nested stack, returns it's parent stack. | +| nestedStackResource | aws-cdk-lib.CfnResource | If this is a nested stack, this represents its `AWS::CloudFormation::Stack` resource. | +| terminationProtection | boolean | Whether termination protection is enabled for this stack. | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- *Type:* constructs.Node + +The tree node. + +--- + +##### `account`Required + +```typescript +public readonly account: string; +``` + +- *Type:* string + +The AWS account into which this stack will be deployed. + +This value is resolved according to the following rules: + +1. The value provided to `env.account` when the stack is defined. This can + either be a concrete account (e.g. `585695031111`) or the + `Aws.ACCOUNT_ID` token. +3. `Aws.ACCOUNT_ID`, which represents the CloudFormation intrinsic reference + `{ "Ref": "AWS::AccountId" }` encoded as a string token. + +Preferably, you should use the return value as an opaque string and not +attempt to parse it to implement your logic. If you do, you must first +check that it is a concrete value an not an unresolved token. If this +value is an unresolved token (`Token.isUnresolved(stack.account)` returns +`true`), this implies that the user wishes that this stack will synthesize +into an **account-agnostic template**. In this case, your code should either +fail (throw an error, emit a synth error using `Annotations.of(construct).addError()`) or +implement some other account-agnostic behavior. + +--- + +##### `artifactId`Required + +```typescript +public readonly artifactId: string; +``` + +- *Type:* string + +The ID of the cloud assembly artifact for this stack. + +--- + +##### `availabilityZones`Required + +```typescript +public readonly availabilityZones: string[]; +``` + +- *Type:* string[] + +Returns the list of AZs that are available in the AWS environment (account/region) associated with this stack. + +If the stack is environment-agnostic (either account and/or region are +tokens), this property will return an array with 2 tokens that will resolve +at deploy-time to the first two availability zones returned from CloudFormation's +`Fn::GetAZs` intrinsic function. + +If they are not available in the context, returns a set of dummy values and +reports them as missing, and let the CLI resolve them by calling EC2 +`DescribeAvailabilityZones` on the target environment. + +To specify a different strategy for selecting availability zones override this method. + +--- + +##### `bundlingRequired`Required + +```typescript +public readonly bundlingRequired: boolean; +``` + +- *Type:* boolean + +Indicates whether the stack requires bundling or not. + +--- + +##### `dependencies`Required + +```typescript +public readonly dependencies: Stack[]; +``` + +- *Type:* aws-cdk-lib.Stack[] + +Return the stacks this stack depends on. + +--- + +##### `environment`Required + +```typescript +public readonly environment: string; +``` + +- *Type:* string + +The environment coordinates in which this stack is deployed. + +In the form +`aws://account/region`. Use `stack.account` and `stack.region` to obtain +the specific values, no need to parse. + +You can use this value to determine if two stacks are targeting the same +environment. + +If either `stack.account` or `stack.region` are not concrete values (e.g. +`Aws.ACCOUNT_ID` or `Aws.REGION`) the special strings `unknown-account` and/or +`unknown-region` will be used respectively to indicate this stack is +region/account-agnostic. + +--- + +##### `nested`Required + +```typescript +public readonly nested: boolean; +``` + +- *Type:* boolean + +Indicates if this is a nested stack, in which case `parentStack` will include a reference to it's parent. + +--- + +##### `notificationArns`Required + +```typescript +public readonly notificationArns: string[]; +``` + +- *Type:* string[] + +Returns the list of notification Amazon Resource Names (ARNs) for the current stack. + +--- + +##### `partition`Required + +```typescript +public readonly partition: string; +``` + +- *Type:* string + +The partition in which this stack is defined. + +--- + +##### `region`Required + +```typescript +public readonly region: string; +``` + +- *Type:* string + +The AWS region into which this stack will be deployed (e.g. `us-west-2`). + +This value is resolved according to the following rules: + +1. The value provided to `env.region` when the stack is defined. This can + either be a concrete region (e.g. `us-west-2`) or the `Aws.REGION` + token. +3. `Aws.REGION`, which is represents the CloudFormation intrinsic reference + `{ "Ref": "AWS::Region" }` encoded as a string token. + +Preferably, you should use the return value as an opaque string and not +attempt to parse it to implement your logic. If you do, you must first +check that it is a concrete value an not an unresolved token. If this +value is an unresolved token (`Token.isUnresolved(stack.region)` returns +`true`), this implies that the user wishes that this stack will synthesize +into a **region-agnostic template**. In this case, your code should either +fail (throw an error, emit a synth error using `Annotations.of(construct).addError()`) or +implement some other region-agnostic behavior. + +--- + +##### `stackId`Required + +```typescript +public readonly stackId: string; +``` + +- *Type:* string + +An attribute that represents the ID of the stack. + +This is a context aware attribute: +- If this is referenced from the parent stack, it will return `{ "Ref": "LogicalIdOfNestedStackResource" }`. +- If this is referenced from the context of the nested stack, it will return `{ "Ref": "AWS::StackId" }` + +Example value: `arn:aws:cloudformation:us-east-2:123456789012:stack/mystack-mynestedstack-sggfrhxhum7w/f449b250-b969-11e0-a185-5081d0136786` + +--- + +##### `stackName`Required + +```typescript +public readonly stackName: string; +``` + +- *Type:* string + +An attribute that represents the name of the nested stack. + +This is a context aware attribute: +- If this is referenced from the parent stack, it will return a token that parses the name from the stack ID. +- If this is referenced from the context of the nested stack, it will return `{ "Ref": "AWS::StackName" }` + +Example value: `mystack-mynestedstack-sggfrhxhum7w` + +--- + +##### `synthesizer`Required + +```typescript +public readonly synthesizer: IStackSynthesizer; +``` + +- *Type:* aws-cdk-lib.IStackSynthesizer + +Synthesis method for this stack. + +--- + +##### `tags`Required + +```typescript +public readonly tags: TagManager; +``` + +- *Type:* aws-cdk-lib.TagManager + +Tags to be applied to the stack. + +--- + +##### `templateFile`Required + +```typescript +public readonly templateFile: string; +``` + +- *Type:* string + +The name of the CloudFormation template file emitted to the output directory during synthesis. + +Example value: `MyStack.template.json` + +--- + +##### `templateOptions`Required + +```typescript +public readonly templateOptions: ITemplateOptions; +``` + +- *Type:* aws-cdk-lib.ITemplateOptions + +Options for CloudFormation template (like version, transform, description). + +--- + +##### `urlSuffix`Required + +```typescript +public readonly urlSuffix: string; +``` + +- *Type:* string + +The Amazon domain suffix for the region in which this stack is defined. + +--- + +##### `nestedStackParent`Optional + +```typescript +public readonly nestedStackParent: Stack; +``` + +- *Type:* aws-cdk-lib.Stack + +If this is a nested stack, returns it's parent stack. + +--- + +##### `nestedStackResource`Optional + +```typescript +public readonly nestedStackResource: CfnResource; +``` + +- *Type:* aws-cdk-lib.CfnResource + +If this is a nested stack, this represents its `AWS::CloudFormation::Stack` resource. + +`undefined` for top-level (non-nested) stacks. + +--- + +##### `terminationProtection`Required + +```typescript +public readonly terminationProtection: boolean; +``` + +- *Type:* boolean + +Whether termination protection is enabled for this stack. + +--- + + +## Structs + +### AddRouteOptions + +#### Initializer + +```typescript +import { AddRouteOptions } from '@smallcase/cdk-vpc-module' + +const addRouteOptions: AddRouteOptions = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| routerType | aws-cdk-lib.aws_ec2.RouterType | What type of router to route this traffic to. | +| destinationCidrBlock | string | IPv4 range this route applies to. | +| destinationIpv6CidrBlock | string | IPv6 range this route applies to. | +| enablesInternetConnectivity | boolean | Whether this route will enable internet connectivity. | +| existingVpcPeeringRouteKey | string | *No description.* | +| routeName | string | *No description.* | +| routerId | string | *No description.* | + +--- + +##### `routerType`Required + +```typescript +public readonly routerType: RouterType; +``` + +- *Type:* aws-cdk-lib.aws_ec2.RouterType + +What type of router to route this traffic to. + +--- + +##### `destinationCidrBlock`Optional + +```typescript +public readonly destinationCidrBlock: string; +``` + +- *Type:* string +- *Default:* '0.0.0.0/0' + +IPv4 range this route applies to. + +--- + +##### `destinationIpv6CidrBlock`Optional + +```typescript +public readonly destinationIpv6CidrBlock: string; +``` + +- *Type:* string +- *Default:* Uses IPv6 + +IPv6 range this route applies to. + +--- + +##### `enablesInternetConnectivity`Optional + +```typescript +public readonly enablesInternetConnectivity: boolean; +``` + +- *Type:* boolean +- *Default:* false + +Whether this route will enable internet connectivity. + +If true, this route will be added before any AWS resources that depend +on internet connectivity in the VPC will be created. + +--- + +##### `existingVpcPeeringRouteKey`Optional + +```typescript +public readonly existingVpcPeeringRouteKey: string; +``` + +- *Type:* string + +--- + +##### `routeName`Optional + +```typescript +public readonly routeName: string; +``` + +- *Type:* string + +--- + +##### `routerId`Optional + +```typescript +public readonly routerId: string; +``` + +- *Type:* string + +--- + +### LoadBalancerConfig + +#### Initializer + +```typescript +import { LoadBalancerConfig } from '@smallcase/cdk-vpc-module' + +const loadBalancerConfig: LoadBalancerConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| certificates | string[] | *No description.* | +| existingArn | string | *No description.* | +| existingSecurityGroupId | string | *No description.* | +| internetFacing | boolean | *No description.* | +| securityGroupRules | SecurityGroupRule[] | *No description.* | +| subnetGroupName | string | *No description.* | +| targetGroups | TargetGroupConfig[] | *No description.* | + +--- + +##### `certificates`Optional + +```typescript +public readonly certificates: string[]; +``` + +- *Type:* string[] + +--- + +##### `existingArn`Optional + +```typescript +public readonly existingArn: string; +``` + +- *Type:* string + +--- + +##### `existingSecurityGroupId`Optional + +```typescript +public readonly existingSecurityGroupId: string; +``` + +- *Type:* string + +--- + +##### `internetFacing`Optional + +```typescript +public readonly internetFacing: boolean; +``` + +- *Type:* boolean + +--- + +##### `securityGroupRules`Optional + +```typescript +public readonly securityGroupRules: SecurityGroupRule[]; +``` + +- *Type:* SecurityGroupRule[] + +--- + +##### `subnetGroupName`Optional + +```typescript +public readonly subnetGroupName: string; +``` + +- *Type:* string + +--- + +##### `targetGroups`Optional + +```typescript +public readonly targetGroups: TargetGroupConfig[]; +``` + +- *Type:* TargetGroupConfig[] + +--- + +### NetworkACL + +#### Initializer + +```typescript +import { NetworkACL } from '@smallcase/cdk-vpc-module' + +const networkACL: NetworkACL = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| cidr | aws-cdk-lib.aws_ec2.AclCidr | *No description.* | +| traffic | aws-cdk-lib.aws_ec2.AclTraffic | *No description.* | + +--- + +##### `cidr`Required + +```typescript +public readonly cidr: AclCidr; +``` + +- *Type:* aws-cdk-lib.aws_ec2.AclCidr + +--- + +##### `traffic`Required + +```typescript +public readonly traffic: AclTraffic; +``` + +- *Type:* aws-cdk-lib.aws_ec2.AclTraffic + +--- + +### NetworkLoadBalancerConfig + +#### Initializer + +```typescript +import { NetworkLoadBalancerConfig } from '@smallcase/cdk-vpc-module' + +const networkLoadBalancerConfig: NetworkLoadBalancerConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| securityGroupRules | SecurityGroupRule[] | *No description.* | +| subnetGroupName | string | *No description.* | +| certificates | string[] | *No description.* | +| existingSecurityGroupId | string | *No description.* | +| internetFacing | boolean | *No description.* | + +--- + +##### `securityGroupRules`Required + +```typescript +public readonly securityGroupRules: SecurityGroupRule[]; +``` + +- *Type:* SecurityGroupRule[] + +--- + +##### `subnetGroupName`Required + +```typescript +public readonly subnetGroupName: string; +``` + +- *Type:* string + +--- + +##### `certificates`Optional + +```typescript +public readonly certificates: string[]; ``` -#### Properties - -| **Name** | **Type** | **Description** | -| --- | --- | --- | -| cidr | aws-cdk-lib.aws_ec2.AclCidr | *No description.* | -| traffic | aws-cdk-lib.aws_ec2.AclTraffic | *No description.* | +- *Type:* string[] --- -##### `cidr`Required +##### `existingSecurityGroupId`Optional ```typescript -public readonly cidr: AclCidr; +public readonly existingSecurityGroupId: string; ``` -- *Type:* aws-cdk-lib.aws_ec2.AclCidr +- *Type:* string --- -##### `traffic`Required +##### `internetFacing`Optional ```typescript -public readonly traffic: AclTraffic; +public readonly internetFacing: boolean; ``` -- *Type:* aws-cdk-lib.aws_ec2.AclTraffic +- *Type:* boolean --- @@ -485,6 +1609,111 @@ public readonly description: string; --- +### TargetGroupConfig + +#### Initializer + +```typescript +import { TargetGroupConfig } from '@smallcase/cdk-vpc-module' + +const targetGroupConfig: TargetGroupConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| applicationPort | number | *No description.* | +| host | string | *No description.* | +| healthCheckPath | string | *No description.* | +| healthCheckPort | number | *No description.* | +| healthCheckProtocol | aws-cdk-lib.aws_elasticloadbalancingv2.Protocol | *No description.* | +| priority | number | *No description.* | +| protocol | aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationProtocol | *No description.* | +| protocolVersion | aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationProtocolVersion | *No description.* | + +--- + +##### `applicationPort`Required + +```typescript +public readonly applicationPort: number; +``` + +- *Type:* number + +--- + +##### `host`Required + +```typescript +public readonly host: string; +``` + +- *Type:* string + +--- + +##### `healthCheckPath`Optional + +```typescript +public readonly healthCheckPath: string; +``` + +- *Type:* string + +--- + +##### `healthCheckPort`Optional + +```typescript +public readonly healthCheckPort: number; +``` + +- *Type:* number + +--- + +##### `healthCheckProtocol`Optional + +```typescript +public readonly healthCheckProtocol: Protocol; +``` + +- *Type:* aws-cdk-lib.aws_elasticloadbalancingv2.Protocol + +--- + +##### `priority`Optional + +```typescript +public readonly priority: number; +``` + +- *Type:* number + +--- + +##### `protocol`Optional + +```typescript +public readonly protocol: ApplicationProtocol; +``` + +- *Type:* aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationProtocol + +--- + +##### `protocolVersion`Optional + +```typescript +public readonly protocolVersion: ApplicationProtocolVersion; +``` + +- *Type:* aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationProtocolVersion + +--- + ### VpcEndpointConfig #### Initializer @@ -579,6 +1808,227 @@ public readonly securityGroupRules: SecurityGroupRule[]; --- +### VpcEndpointServiceNestedStackProps + +#### Initializer + +```typescript +import { VpcEndpointServiceNestedStackProps } from '@smallcase/cdk-vpc-module' + +const vpcEndpointServiceNestedStackProps: VpcEndpointServiceNestedStackProps = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| description | string | A description of the stack. | +| notificationArns | string[] | The Simple Notification Service (SNS) topics to publish stack related events. | +| parameters | {[ key: string ]: string} | The set value pairs that represent the parameters passed to CloudFormation when this nested stack is created. | +| removalPolicy | aws-cdk-lib.RemovalPolicy | Policy to apply when the nested stack is removed. | +| timeout | aws-cdk-lib.Duration | The length of time that CloudFormation waits for the nested stack to reach the CREATE_COMPLETE state. | +| subnets | {[ key: string ]: aws-cdk-lib.aws_ec2.Subnet[]} | *No description.* | +| vpc | aws-cdk-lib.aws_ec2.Vpc | *No description.* | +| vpcEndpointServiceConfigs | VpcEndpontServiceConfig[] | *No description.* | + +--- + +##### `description`Optional + +```typescript +public readonly description: string; +``` + +- *Type:* string +- *Default:* No description. + +A description of the stack. + +--- + +##### `notificationArns`Optional + +```typescript +public readonly notificationArns: string[]; +``` + +- *Type:* string[] +- *Default:* notifications are not sent for this stack. + +The Simple Notification Service (SNS) topics to publish stack related events. + +--- + +##### `parameters`Optional + +```typescript +public readonly parameters: {[ key: string ]: string}; +``` + +- *Type:* {[ key: string ]: string} +- *Default:* no user-defined parameters are passed to the nested stack + +The set value pairs that represent the parameters passed to CloudFormation when this nested stack is created. + +Each parameter has a name corresponding +to a parameter defined in the embedded template and a value representing +the value that you want to set for the parameter. + +The nested stack construct will automatically synthesize parameters in order +to bind references from the parent stack(s) into the nested stack. + +--- + +##### `removalPolicy`Optional + +```typescript +public readonly removalPolicy: RemovalPolicy; +``` + +- *Type:* aws-cdk-lib.RemovalPolicy +- *Default:* RemovalPolicy.DESTROY + +Policy to apply when the nested stack is removed. + +The default is `Destroy`, because all Removal Policies of resources inside the +Nested Stack should already have been set correctly. You normally should +not need to set this value. + +--- + +##### `timeout`Optional + +```typescript +public readonly timeout: Duration; +``` + +- *Type:* aws-cdk-lib.Duration +- *Default:* no timeout + +The length of time that CloudFormation waits for the nested stack to reach the CREATE_COMPLETE state. + +When CloudFormation detects that the nested stack has reached the +CREATE_COMPLETE state, it marks the nested stack resource as +CREATE_COMPLETE in the parent stack and resumes creating the parent stack. +If the timeout period expires before the nested stack reaches +CREATE_COMPLETE, CloudFormation marks the nested stack as failed and rolls +back both the nested stack and parent stack. + +--- + +##### `subnets`Required + +```typescript +public readonly subnets: {[ key: string ]: Subnet[]}; +``` + +- *Type:* {[ key: string ]: aws-cdk-lib.aws_ec2.Subnet[]} + +--- + +##### `vpc`Required + +```typescript +public readonly vpc: Vpc; +``` + +- *Type:* aws-cdk-lib.aws_ec2.Vpc + +--- + +##### `vpcEndpointServiceConfigs`Required + +```typescript +public readonly vpcEndpointServiceConfigs: VpcEndpontServiceConfig[]; +``` + +- *Type:* VpcEndpontServiceConfig[] + +--- + +### VpcEndpontServiceConfig + +#### Initializer + +```typescript +import { VpcEndpontServiceConfig } from '@smallcase/cdk-vpc-module' + +const vpcEndpontServiceConfig: VpcEndpontServiceConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --- | --- | --- | +| alb | LoadBalancerConfig | *No description.* | +| name | string | *No description.* | +| nlb | NetworkLoadBalancerConfig | *No description.* | +| acceptanceRequired | boolean | *No description.* | +| additionalTags | {[ key: string ]: string} | *No description.* | +| allowedPrincipals | string[] | *No description.* | + +--- + +##### `alb`Required + +```typescript +public readonly alb: LoadBalancerConfig; +``` + +- *Type:* LoadBalancerConfig + +--- + +##### `name`Required + +```typescript +public readonly name: string; +``` + +- *Type:* string + +--- + +##### `nlb`Required + +```typescript +public readonly nlb: NetworkLoadBalancerConfig; +``` + +- *Type:* NetworkLoadBalancerConfig + +--- + +##### `acceptanceRequired`Optional + +```typescript +public readonly acceptanceRequired: boolean; +``` + +- *Type:* boolean + +--- + +##### `additionalTags`Optional + +```typescript +public readonly additionalTags: {[ key: string ]: string}; +``` + +- *Type:* {[ key: string ]: string} + +--- + +##### `allowedPrincipals`Optional + +```typescript +public readonly allowedPrincipals: string[]; +``` + +- *Type:* string[] + +--- + ### VPCProps #### Initializer @@ -597,7 +2047,9 @@ const vPCProps: VPCProps = { ... } | vpc | aws-cdk-lib.aws_ec2.VpcProps | *No description.* | | natEipAllocationIds | string[] | *No description.* | | peeringConfigs | {[ key: string ]: PeeringConfig} | *No description.* | +| useNestedStacks | boolean | *No description.* | | vpcEndpoints | VpcEndpointConfig[] | *No description.* | +| vpcEndpointServices | VpcEndpontServiceConfig[] | *No description.* | --- @@ -641,6 +2093,16 @@ public readonly peeringConfigs: {[ key: string ]: PeeringConfig}; --- +##### `useNestedStacks`Optional + +```typescript +public readonly useNestedStacks: boolean; +``` + +- *Type:* boolean + +--- + ##### `vpcEndpoints`Optional ```typescript @@ -651,6 +2113,16 @@ public readonly vpcEndpoints: VpcEndpointConfig[]; --- +##### `vpcEndpointServices`Optional + +```typescript +public readonly vpcEndpointServices: VpcEndpontServiceConfig[]; +``` + +- *Type:* VpcEndpontServiceConfig[] + +--- + ## Protocols @@ -716,6 +2188,7 @@ public readonly routeTableId: string; | ingressNetworkACL | NetworkACL[] | *No description.* | | routes | AddRouteOptions[] | *No description.* | | tags | {[ key: string ]: string} | *No description.* | +| useNestedStacks | boolean | *No description.* | | useSubnetForNAT | boolean | *No description.* | --- @@ -800,6 +2273,16 @@ public readonly tags: {[ key: string ]: string}; --- +##### `useNestedStacks`Optional + +```typescript +public readonly useNestedStacks: boolean; +``` + +- *Type:* boolean + +--- + ##### `useSubnetForNAT`Optional ```typescript diff --git a/README.md b/README.md index 740c776..7cb7d47 100644 --- a/README.md +++ b/README.md @@ -293,3 +293,219 @@ Here’s a breakdown of the configuration options available: 4. externalSubnets: Specify external subnets if you need to define subnets manually (each with an id, availabilityZone, and routeTableId). 5. iamPolicyStatements: (Optional) Attach IAM policy statements to control access to the endpoint. 6. additionalTags: (Optional) Add custom tags to the VPC Endpoint for easier identification and tracking. + +## Dynamic Routing Strategy + +The module automatically chooses the optimal routing strategy based on the number of NAT Gateways to prevent duplicate `0.0.0.0/0` route entries: + +### **Single NAT Gateway (≤1 NAT Gateway)** +- **Strategy**: One route table per subnet group +- **Benefits**: + - **Cost Optimized**: Fewer route tables = lower costs + - **Simpler Management**: One route table per subnet group + - **No Duplicate Routes**: Single NAT Gateway means no duplicate `0.0.0.0/0` entries + - **Suitable for**: Development, testing, small workloads +- **Configuration**: All subnets in a group share the same route table with one NAT route + +### **Multiple NAT Gateways (>1 NAT Gateway)** +- **Strategy**: One route table per subnet +- **Benefits**: + - **Prevents Duplicate Routes**: Each subnet gets its own route table, avoiding duplicate `0.0.0.0/0` entries + - **AZ-Aware Routing**: Each subnet uses NAT Gateway in the same AZ when possible + - **High Availability**: Better fault tolerance and load distribution + - **Cross-AZ Cost Reduction**: Reduced data transfer costs + - **Suitable for**: Production workloads, high availability requirements +- **Configuration**: Each subnet gets its own route table with one NAT route + +### **Why This Strategy?** + +AWS route tables don't support duplicate entries for the same destination CIDR (like `0.0.0.0/0`). When you have multiple NAT Gateways: + +- **❌ Wrong Approach**: Multiple NAT routes in same route table → `AlreadyExists` error +- **✅ Correct Approach**: One route table per subnet → Each gets one NAT route + +### **Automatic Strategy Selection** + +```typescript +// Single NAT Gateway - Cost Optimized +new Network(this, 'NETWORK', { + vpc: { + cidr: '10.10.0.0/16', + subnetConfiguration: [], + }, + subnets: [ + { + subnetGroupName: 'NATGateway', + subnetType: ec2.SubnetType.PUBLIC, + cidrBlock: ['10.10.0.0/28'], // Only one subnet + availabilityZones: ['ap-south-1a'], // Only one AZ + useSubnetForNAT: true, + }, + { + subnetGroupName: 'Private', + subnetType: ec2.SubnetType.PRIVATE_WITH_NAT, + cidrBlock: ['10.10.5.0/24', '10.10.6.0/24', '10.10.7.0/24'], + availabilityZones: ['ap-south-1a', 'ap-south-1b', 'ap-south-1c'], + }, + ], +}); + +// Multiple NAT Gateways - Performance Optimized +new Network(this, 'NETWORK', { + vpc: { + cidr: '10.10.0.0/16', + subnetConfiguration: [], + }, + natEipAllocationIds: [ + 'eipalloc-1234567890abcdef', + 'eipalloc-0987654321fedcba', + 'eipalloc-abcdef1234567890', + ], + subnets: [ + { + subnetGroupName: 'NATGateway', + subnetType: ec2.SubnetType.PUBLIC, + cidrBlock: ['10.10.0.0/28', '10.10.0.16/28', '10.10.0.32/28'], + availabilityZones: ['ap-south-1a', 'ap-south-1b', 'ap-south-1c'], + useSubnetForNAT: true, + }, + { + subnetGroupName: 'Private', + subnetType: ec2.SubnetType.PRIVATE_WITH_NAT, + cidrBlock: ['10.10.5.0/24', '10.10.6.0/24', '10.10.7.0/24'], + availabilityZones: ['ap-south-1a', 'ap-south-1b', 'ap-south-1c'], + }, + ], +}); +``` + +### **CloudFormation Outputs** + +The module provides outputs to show which strategy is being used: + +- **RoutingStrategy**: Shows "Route Table per Subnet Group" or "Route Table per Subnet" +- **NATGatewayCount**: Shows the number of NAT Gateways configured + +### **Route Table Distribution** + +| Scenario | Route Tables | NAT Routes per Table | Strategy | +|----------|-------------|---------------------|----------| +| Single NAT | 1 per subnet group | 1 | Cost optimized | +| Multiple NAT | 1 per subnet | 1 | Performance optimized | + +### **Migration Strategy** + +You can easily migrate between strategies by changing your configuration: + +1. **Development → Production**: Add more NAT Gateway subnets +2. **Production → Development**: Reduce to single NAT Gateway subnet +3. **Cost Optimization**: Monitor usage and adjust NAT Gateway count + +The module handles the migration automatically without manual route table changes. + +## NAT Gateway EIP Allocation + +You can specify existing Elastic IP (EIP) allocation IDs to use with your NAT Gateways. This is useful when you want to: + +- Use pre-existing EIPs +- Maintain consistent IP addresses across deployments +- Control EIP costs and management + +### **Using EIP Allocation IDs** + +```typescript +new Network(this, 'NETWORK', { + vpc: { + cidr: '10.10.0.0/16', + subnetConfiguration: [], + }, + // Specify existing EIP allocation IDs + natEipAllocationIds: [ + 'eipalloc-1234567890abcdef', // EIP for NAT Gateway 1 + 'eipalloc-0987654321fedcba', // EIP for NAT Gateway 2 + 'eipalloc-abcdef1234567890', // EIP for NAT Gateway 3 + ], + subnets: [ + { + subnetGroupName: 'NATGateway', + subnetType: ec2.SubnetType.PUBLIC, + cidrBlock: ['10.10.0.0/28', '10.10.0.16/28', '10.10.0.32/28'], + availabilityZones: ['ap-south-1a', 'ap-south-1b', 'ap-south-1c'], + useSubnetForNAT: true, + }, + { + subnetGroupName: 'Private', + subnetType: ec2.SubnetType.PRIVATE_WITH_NAT, + cidrBlock: ['10.10.5.0/24', '10.10.6.0/24', '10.10.7.0/24'], + availabilityZones: ['ap-south-1a', 'ap-south-1b', 'ap-south-1c'], + }, + ], +}); +``` + +### **EIP Allocation ID Requirements** + +- **Count**: Should match the number of NAT Gateway subnets (optional) +- **Format**: Must be valid EIP allocation IDs (e.g., `eipalloc-xxxxxxxxx`) +- **Region**: Must be in the same region as your VPC +- **Account**: Must be owned by the same AWS account + +### **Benefits of Using EIP Allocation IDs** + +1. **Cost Control**: Reuse existing EIPs instead of creating new ones +2. **IP Consistency**: Maintain the same public IP addresses across deployments +3. **Compliance**: Meet requirements for static IP addresses +4. **DNS**: Use existing DNS records that point to specific EIPs + +### **CloudFormation Outputs** + +When EIP allocation IDs are provided, the module outputs: + +- **NATEipAllocationIds**: Comma-separated list of EIP allocation IDs used +- **RoutingStrategy**: Shows the routing strategy being used +- **NATGatewayCount**: Number of NAT Gateways configured + +### **Example Output** + +```json +{ + "NATEipAllocationIds": "eipalloc-1234567890abcdef,eipalloc-0987654321fedcba,eipalloc-abcdef1234567890", + "RoutingStrategy": "Route Table per Subnet", + "NATGatewayCount": "3" +} +``` + +### **Creating EIPs for NAT Gateways** + +If you need to create EIPs first, you can do so using CDK: + +```typescript +import * as ec2 from 'aws-cdk-lib/aws-ec2'; + +// Create EIPs +const eip1 = new ec2.CfnEIP(this, 'NATEip1', { + domain: 'vpc', +}); + +const eip2 = new ec2.CfnEIP(this, 'NATEip2', { + domain: 'vpc', +}); + +const eip3 = new ec2.CfnEIP(this, 'NATEip3', { + domain: 'vpc', +}); + +// Use them in your Network construct +new Network(this, 'NETWORK', { + vpc: { + cidr: '10.10.0.0/16', + subnetConfiguration: [], + }, + natEipAllocationIds: [ + eip1.attrAllocationId, + eip2.attrAllocationId, + eip3.attrAllocationId, + ], + // ... rest of configuration +}); +``` diff --git a/package.json b/package.json index 471336e..9d37d36 100644 --- a/package.json +++ b/package.json @@ -41,25 +41,25 @@ "@types/node": "^16 <= 16.18.78", "@typescript-eslint/eslint-plugin": "^8", "@typescript-eslint/parser": "^8", - "aws-cdk-lib": "2.169.0", + "aws-cdk-lib": "2.195.0", "commit-and-tag-version": "^12", "constructs": "10.0.5", "eslint": "^9", "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.31.0", + "eslint-plugin-import": "^2.32.0", "jest": "^27", - "jest-junit": "^15", - "jsii": "~5.6.0", - "jsii-diff": "^1.106.0", + "jest-junit": "^16", + "jsii": "~5.9.0", + "jsii-diff": "^1.114.1", "jsii-docgen": "^10.5.0", - "jsii-pacmak": "^1.106.0", - "jsii-rosetta": "~5.6.0", - "projen": "^0.91.3", + "jsii-pacmak": "^1.114.1", + "jsii-rosetta": "~5.9.0", + "projen": "^0.95.6", "ts-jest": "^27", "typescript": "^4.9.5" }, "peerDependencies": { - "aws-cdk-lib": "^2.169.0", + "aws-cdk-lib": "^2.195.0", "constructs": "^10.0.5" }, "keywords": [ diff --git a/src/constructs/network.ts b/src/constructs/network.ts index aa41390..ee24232 100644 --- a/src/constructs/network.ts +++ b/src/constructs/network.ts @@ -1,7 +1,10 @@ import { aws_ec2 as ec2, CfnOutput, Tags, aws_iam as iam, Stack } from 'aws-cdk-lib'; import { AwsCustomResource, AwsCustomResourcePolicy, PhysicalResourceId } from 'aws-cdk-lib/custom-resources'; import { Construct } from 'constructs'; +import { SubnetStack } from './subnet-stack'; +import { VpcEndpointServiceNestedStack, VpcEndpontServiceConfig } from './vpc-endpoint-service'; import { ObjToStrMap } from '../utils/common'; + export interface NetworkACL { readonly cidr: ec2.AclCidr; readonly traffic: ec2.AclTraffic; @@ -47,6 +50,7 @@ export interface AddRouteOptions { * @stability stable */ readonly enablesInternetConnectivity?: boolean; + readonly routeName?: string; } export interface ISubnetsProps { readonly subnetGroupName: string; @@ -58,6 +62,7 @@ export interface ISubnetsProps { readonly routes?: AddRouteOptions[]; readonly tags?: Record; readonly useSubnetForNAT?: boolean; + readonly useNestedStacks?: boolean; } export interface VPCProps { readonly vpc: ec2.VpcProps; @@ -65,6 +70,8 @@ export interface VPCProps { readonly vpcEndpoints?: VpcEndpointConfig[]; // List of VPC endpoints to configure readonly natEipAllocationIds?: string[]; readonly subnets: ISubnetsProps[]; + readonly vpcEndpointServices?: VpcEndpontServiceConfig[]; // List of VPC endpoint Service to configure + readonly useNestedStacks?: boolean; } export interface PeeringConfig { @@ -77,9 +84,9 @@ export interface PeeringConfig { export interface PeeringConnectionInternalType { -/** -* @jsii ignore -*/ + /** + * @jsii ignore + */ [name: string]: ec2.CfnVPCPeeringConnection; } export interface SecurityGroupRule { @@ -111,10 +118,10 @@ export class Network extends Construct { public readonly securityGroupOutputs: { [key: string]: ec2.SecurityGroup } = {}; // Store Security Group outputs public readonly endpointOutputs: { [key: string]: ec2.InterfaceVpcEndpoint | ec2.GatewayVpcEndpoint } = {}; // Store Endpoint outputs private peeringConnectionIds: PeeringConnectionInternalType = {}; - public readonly natProvider!: ec2.NatProvider; constructor(scope: Construct, id: string, props: VPCProps) { super(scope, id); this.vpc = new ec2.Vpc(this, 'VPC', props.vpc); + if (props.peeringConfigs) { const convertPeeringConfig: Map = ObjToStrMap(props.peeringConfigs); convertPeeringConfig.forEach((createVpcPeering, key) => { @@ -132,8 +139,27 @@ export class Network extends Construct { this.peeringConnectionIds[key] = peeringConnectionIdByKey; }); } + + const internetGateway = new ec2.CfnInternetGateway( + this, + 'InternetGateway', + {}, + ); + new ec2.CfnVPCGatewayAttachment(this, 'VPCGatewayAttachement', { + internetGatewayId: internetGateway.ref, + vpcId: this.vpc.vpcId, + }); + + // Initialize NAT provider with EIP allocation IDs if provided + const natProvider = props.natEipAllocationIds && props.natEipAllocationIds.length > 0 + ? ec2.NatProvider.gateway({ + eipAllocationIds: props.natEipAllocationIds, + }) : ec2.NatProvider.gateway(); + + + // First pass: collect all subnets props.subnets.forEach((subnetProps) => { - let subnet = this.createSubnet(subnetProps, this.vpc, this.peeringConnectionIds); + let subnet = this.createSubnet(subnetProps, this.vpc, this.peeringConnectionIds, props.useNestedStacks); this.subnets[subnetProps.subnetGroupName] = subnet; subnet.forEach((sb) => { if (sb instanceof ec2.PublicSubnet) { @@ -154,40 +180,43 @@ export class Network extends Construct { } }); }); - const internetGateway = new ec2.CfnInternetGateway( - this, - 'InternetGateway', - {}, - ); - const att = new ec2.CfnVPCGatewayAttachment(this, 'VPCGatewayAttachement', { - internetGatewayId: internetGateway.ref, - vpcId: this.vpc.vpcId, - }); - this.pbSubnets.forEach((pb) => { - pb.addDefaultInternetRoute(internetGateway.ref, att); - }); - if (this.natSubnets.length > 0) { - if (props.natEipAllocationIds && this.natSubnets.length != props.natEipAllocationIds?.length) { - // eslint-disable-next-line max-len - throw new Error( - 'natEipAllocationIds and natSubnets length should be equal', - ); - } - - if (props.natEipAllocationIds?.length == this.natSubnets?.length) { - this.natProvider = ec2.NatProvider.gateway({ - eipAllocationIds: props.natEipAllocationIds, - }); - } else { - this.natProvider = ec2.NatProvider.gateway(); - } - this.natProvider.configureNat({ + // Configure NAT after collecting all subnets + if (this.natSubnets.length > 0) { + natProvider.configureNat({ vpc: this.vpc, natSubnets: this.natSubnets, privateSubnets: this.pvSubnets, }); } + + // Determine routing strategy based on number of NAT Gateways + const natGatewayCount = this.natSubnets.length; + const useSingleRouteTable = natGatewayCount <= 1; + + // Add output to show which strategy is being used + new CfnOutput(this, 'RoutingStrategy', { + value: useSingleRouteTable ? 'Route Table per Subnet Group' : 'Route Table per Subnet', + description: 'Routing strategy based on NAT Gateway count', + }); + + new CfnOutput(this, 'NATGatewayCount', { + value: natGatewayCount.toString(), + description: 'Number of NAT Gateways configured', + }); + + // Add output for EIP allocation IDs if provided + if (props.natEipAllocationIds && props.natEipAllocationIds.length > 0) { + new CfnOutput(this, 'NATEipAllocationIds', { + value: props.natEipAllocationIds.join(','), + description: 'EIP allocation IDs used for NAT Gateways', + }); + } + + // this.pbSubnets.forEach((pb) => { + // pb.addDefaultInternetRoute(internetGateway.ref, att); + // }); + new CfnOutput(this, 'VpcId', { value: this.vpc.vpcId }); // Add VPC endpoints if specified in the props if (props?.vpcEndpoints) { @@ -195,126 +224,153 @@ export class Network extends Construct { this.addVpcEndpoint(endpointConfig); } } + if (props?.vpcEndpointServices) { + new VpcEndpointServiceNestedStack(this, 'VpcEndpointServices', { + vpc: this.vpc, + vpcEndpointServiceConfigs: props.vpcEndpointServices, + subnets: this.subnets, + }); + } } - createSubnet(option: ISubnetsProps, vpc: ec2.Vpc, peeringConnectionId?: PeeringConnectionInternalType) { - const subnets: ec2.Subnet[] = []; - const SUBNETTYPE_TAG = 'aws-cdk:subnet-type'; - const SUBNETNAME_TAG = 'aws-cdk:subnet-name'; - const NAME_TAG = 'Name'; - if (option.availabilityZones.length != option.cidrBlock.length) { - // eslint-disable-next-line max-len - throw new Error( - "You cannot reference a Subnet's availability zone if it was not supplied. Add the availabilityZone when importing using option.fromSubnetAttributes()", - ); - } + createSubnet(option: ISubnetsProps, vpc: ec2.Vpc, peeringConnectionId?: PeeringConnectionInternalType, useGlobalNestedStacks?: boolean) { + const shouldUseNestedStack = option.useNestedStacks ?? useGlobalNestedStacks ?? false; + if (shouldUseNestedStack) { + // Create nested stack for this subnet group + const subnetStack = new SubnetStack(this, `${option.subnetGroupName}Stack`, { + vpc: vpc, + subnetGroupName: option.subnetGroupName, + subnetType: option.subnetType, + cidrBlocks: option.cidrBlock, + availabilityZones: option.availabilityZones, + ingressNetworkACL: option.ingressNetworkACL, + egressNetworkACL: option.egressNetworkACL, + routes: option.routes, + peeringConnectionId: peeringConnectionId, + tags: option.tags, + useSubnetForNAT: option.useSubnetForNAT, + }); + // Return the subnets from the nested stack + return subnetStack.subnets; + } else { + const subnets: ec2.Subnet[] = []; + const SUBNETTYPE_TAG = 'aws-cdk:subnet-type'; + const SUBNETNAME_TAG = 'aws-cdk:subnet-name'; + const NAME_TAG = 'Name'; + if (option.availabilityZones.length != option.cidrBlock.length) { + // eslint-disable-next-line max-len + throw new Error( + "You cannot reference a Subnet's availability zone if it was not supplied. Add the availabilityZone when importing using option.fromSubnetAttributes()", + ); + } + + option.availabilityZones.forEach((az, index) => { + let subnet: ec2.PrivateSubnet | ec2.PublicSubnet = + option.subnetType === ec2.SubnetType.PUBLIC + ? new ec2.PublicSubnet( + this, + `${option.subnetGroupName}Subnet${index}`, + { + availabilityZone: az, + cidrBlock: option.cidrBlock[index], + vpcId: vpc.vpcId, + mapPublicIpOnLaunch: true, - option.availabilityZones.forEach((az, index) => { - let subnet: ec2.PrivateSubnet | ec2.PublicSubnet = - option.subnetType === ec2.SubnetType.PUBLIC - ? new ec2.PublicSubnet( - this, - `${option.subnetGroupName}Subnet${index}`, - { - availabilityZone: az, - cidrBlock: option.cidrBlock[index], - vpcId: vpc.vpcId, - mapPublicIpOnLaunch: true, - - }, - ) - : new ec2.PrivateSubnet( - this, - `${option.subnetGroupName}Subnet${index}`, - { - availabilityZone: az, - cidrBlock: option.cidrBlock[index], - vpcId: vpc.vpcId, - mapPublicIpOnLaunch: false, - }, - ); - option.routes?.forEach((route, routeIndex) => { - if (peeringConnectionId != undefined && route.existingVpcPeeringRouteKey != undefined) { - let routeId: ec2.CfnVPCPeeringConnection | undefined = peeringConnectionId[route.existingVpcPeeringRouteKey]; - if (routeId != undefined) { + }, + ) + : new ec2.PrivateSubnet( + this, + `${option.subnetGroupName}Subnet${index}`, + { + availabilityZone: az, + cidrBlock: option.cidrBlock[index], + vpcId: vpc.vpcId, + mapPublicIpOnLaunch: false, + }, + ); + option.routes?.forEach((route, routeIndex) => { + if (peeringConnectionId != undefined && route.existingVpcPeeringRouteKey != undefined) { + let routeId: ec2.CfnVPCPeeringConnection | undefined = peeringConnectionId[route.existingVpcPeeringRouteKey]; + if (routeId != undefined) { + subnet.addRoute( + `${option.subnetGroupName}${routeIndex}RouteEntry`, + { + routerId: routeId.ref, + routerType: route.routerType, + destinationCidrBlock: route.destinationCidrBlock, + }, + ); + } + } else if (route.routerId != undefined) { subnet.addRoute( `${option.subnetGroupName}${routeIndex}RouteEntry`, { - routerId: routeId.ref, + routerId: route.routerId ?? '', routerType: route.routerType, destinationCidrBlock: route.destinationCidrBlock, }, ); } - } else if (route.routerId != undefined) { - subnet.addRoute( - `${option.subnetGroupName}${routeIndex}RouteEntry`, - { - routerId: route.routerId ?? '', - routerType: route.routerType, - destinationCidrBlock: route.destinationCidrBlock, - }, - ); - } - }); - Tags.of(subnet).add(SUBNETNAME_TAG, option.subnetGroupName); - Tags.of(subnet).add(SUBNETTYPE_TAG, option.subnetType); - if (option.tags != undefined) { - const tags: Map = ObjToStrMap(option.tags); - tags.forEach((v, k) => { - Tags.of(subnet).add(k, v); }); - } - subnets.push(subnet); - }); - const nacl = new ec2.NetworkAcl(this, `${option.subnetGroupName}NACL`, { - vpc: vpc, - subnetSelection: { - subnets: subnets, - }, - }); - Tags.of(nacl).add(NAME_TAG, nacl.node.path); - option.ingressNetworkACL?.forEach((ingressNACL, index) => { - new ec2.NetworkAclEntry( - this, - `${option.subnetGroupName}IngressNACL-${index}`, - { - ruleNumber: 100 + index, - cidr: ingressNACL.cidr, - networkAcl: nacl, - traffic: ingressNACL.traffic, - direction: ec2.TrafficDirection.INGRESS, - }, - ); - }); - option.egressNetworkACL?.forEach((ingressNACL, index) => { - new ec2.NetworkAclEntry( - this, - `${option.subnetGroupName}EgressNACL-${index}`, - { - ruleNumber: 100 + index, - cidr: ingressNACL.cidr, - networkAcl: nacl, - traffic: ingressNACL.traffic, - direction: ec2.TrafficDirection.EGRESS, + Tags.of(subnet).add(SUBNETNAME_TAG, option.subnetGroupName); + Tags.of(subnet).add(SUBNETTYPE_TAG, option.subnetType); + if (option.tags != undefined) { + const tags: Map = ObjToStrMap(option.tags); + tags.forEach((v, k) => { + Tags.of(subnet).add(k, v); + }); + } + subnets.push(subnet); + }); + const nacl = new ec2.NetworkAcl(this, `${option.subnetGroupName}NACL`, { + vpc: vpc, + subnetSelection: { + subnets: subnets, }, - ); - }); + }); + Tags.of(nacl).add(NAME_TAG, nacl.node.path); + option.ingressNetworkACL?.forEach((ingressNACL, index) => { + new ec2.NetworkAclEntry( + this, + `${option.subnetGroupName}IngressNACL-${index}`, + { + ruleNumber: 100 + index, + cidr: ingressNACL.cidr, + networkAcl: nacl, + traffic: ingressNACL.traffic, + direction: ec2.TrafficDirection.INGRESS, + }, + ); + }); + option.egressNetworkACL?.forEach((ingressNACL, index) => { + new ec2.NetworkAclEntry( + this, + `${option.subnetGroupName}EgressNACL-${index}`, + { + ruleNumber: 100 + index, + cidr: ingressNACL.cidr, + networkAcl: nacl, + traffic: ingressNACL.traffic, + direction: ec2.TrafficDirection.EGRESS, + }, + ); + }); - new CfnOutput(this, `${option.subnetGroupName}OutPutSubnets`, { - value: subnets - .map((subnet) => { - return subnet.subnetId; - }) - .join(','), - description: `${option.subnetGroupName} subnets cross`, - }); - new CfnOutput(this, `${option.subnetGroupName}OutPutNACL`, { - value: nacl.networkAclId, - description: `${option.subnetGroupName} subnets associated this nacl`, - }); - return subnets; + new CfnOutput(this, `${option.subnetGroupName}OutPutSubnets`, { + value: subnets + .map((subnet) => { + return subnet.subnetId; + }) + .join(','), + description: `${option.subnetGroupName} subnets cross`, + }); + new CfnOutput(this, `${option.subnetGroupName}OutPutNACL`, { + value: nacl.networkAclId, + description: `${option.subnetGroupName} subnets associated this nacl`, + }); + return subnets; + } } // Helper function to add VPC endpoints based on the service and optional subnet and security group configuration @@ -374,10 +430,10 @@ export class Network extends Construct { // Helper function to merge subnets based on subnet group names - private mergeSubnetsByGroupNames(name: string, + public mergeSubnetsByGroupNames(name: string, service: ec2.InterfaceVpcEndpointAwsService | ec2.GatewayVpcEndpointAwsService - | ec2.InterfaceVpcEndpointService, - subnetGroupNames: string[], externalSubnets?: IExternalVPEndpointSubnets[] ): ec2.SelectedSubnets { + | ec2.InterfaceVpcEndpointService, + subnetGroupNames: string[], externalSubnets?: IExternalVPEndpointSubnets[]): ec2.SelectedSubnets { // Check if subnetGroupNames is required and not empty for Interface VPC Endpoints if ((service instanceof ec2.InterfaceVpcEndpointAwsService || service instanceof ec2.InterfaceVpcEndpointService) && (!subnetGroupNames || subnetGroupNames.length === 0)) { @@ -430,6 +486,7 @@ export class Network extends Construct { return sg; } + private applyTagsUsingCustomResource(resourceId: string, resourceType: string, tags: { [key: string]: string }) { new AwsCustomResource(this, `AddTagsTo${resourceType}`, { onCreate: { diff --git a/src/constructs/subnet-stack.ts b/src/constructs/subnet-stack.ts new file mode 100644 index 0000000..2594fca --- /dev/null +++ b/src/constructs/subnet-stack.ts @@ -0,0 +1,158 @@ +import * as cdk from 'aws-cdk-lib'; +import { Tags } from 'aws-cdk-lib'; +import * as ec2 from 'aws-cdk-lib/aws-ec2'; +import { Construct } from 'constructs'; +import { AddRouteOptions, NetworkACL } from './network'; +import { ObjToStrMap } from '../utils/common'; + +interface SubnetStackProps extends cdk.NestedStackProps { + vpc: ec2.Vpc; + subnetGroupName: string; + subnetType: ec2.SubnetType; + cidrBlocks: string[]; + availabilityZones: string[]; + ingressNetworkACL?: NetworkACL[]; + egressNetworkACL?: NetworkACL[]; + routes?: AddRouteOptions[]; + peeringConnectionId?: { [key: string]: ec2.CfnVPCPeeringConnection }; + tags?: Record; + useSubnetForNAT?: boolean; + useNestedStacks?: boolean; +} + +export class SubnetStack extends cdk.NestedStack { + public readonly subnets: ec2.Subnet[] = []; + public readonly nacl: ec2.NetworkAcl; + + constructor(scope: Construct, id: string, props: SubnetStackProps) { + super(scope, id, props); + + const SUBNETTYPE_TAG = 'aws-cdk:subnet-type'; + const SUBNETNAME_TAG = 'aws-cdk:subnet-name'; + const NAME_TAG = 'Name'; + + // Validate input + if (props.availabilityZones.length !== props.cidrBlocks.length) { + throw new Error( + "You cannot reference a Subnet's availability zone if it was not supplied. Add the availabilityZone when importing using option.fromSubnetAttributes()", + ); + } + + // Create subnets + props.availabilityZones.forEach((az, index) => { + const subnet: ec2.PrivateSubnet | ec2.PublicSubnet = + props.subnetType === ec2.SubnetType.PUBLIC + ? new ec2.PublicSubnet( + this, + `${props.subnetGroupName}Subnet${index}`, + { + availabilityZone: az, + cidrBlock: props.cidrBlocks[index], + vpcId: props.vpc.vpcId, + mapPublicIpOnLaunch: true, + }, + ) + : new ec2.PrivateSubnet( + this, + `${props.subnetGroupName}Subnet${index}`, + { + availabilityZone: az, + cidrBlock: props.cidrBlocks[index], + vpcId: props.vpc.vpcId, + mapPublicIpOnLaunch: false, + }, + ); + + // Add tags + Tags.of(subnet).add(SUBNETNAME_TAG, props.subnetGroupName); + Tags.of(subnet).add(SUBNETTYPE_TAG, props.subnetType); + + if (props.tags) { + const tags: Map = ObjToStrMap(props.tags); + tags.forEach((v, k) => { + Tags.of(subnet).add(k, v); + }); + } + + // Add routes + props.routes?.forEach((route) => { + const destinationCidr = route.routeName ?? route.destinationCidrBlock?.replace(/[./]/g, '-'); + if (props.peeringConnectionId && route.existingVpcPeeringRouteKey !== undefined) { + const routeId = props.peeringConnectionId[route.existingVpcPeeringRouteKey]; + if (routeId !== undefined) { + subnet.addRoute( + `${props.subnetGroupName}-${destinationCidr}-Route`, + { + routerId: routeId.ref, + routerType: route.routerType, + destinationCidrBlock: route.destinationCidrBlock, + }, + ); + } + } else if (route.routerId) { + subnet.addRoute( + `${props.subnetGroupName}-${destinationCidr}-Route`, + { + routerId: route.routerId, + routerType: route.routerType, + destinationCidrBlock: route.destinationCidrBlock, + }, + ); + } + }); + this.subnets.push(subnet); + }); + + // Create Network ACL + this.nacl = new ec2.NetworkAcl(this, `${props.subnetGroupName}NACL`, { + vpc: props.vpc, + subnetSelection: { + subnets: this.subnets, + }, + }); + + Tags.of(this.nacl).add(NAME_TAG, this.nacl.node.path); + + // Add NACL entries + props.ingressNetworkACL?.forEach((ingressNACL, index) => { + new ec2.NetworkAclEntry( + this, + `${props.subnetGroupName}IngressNACL-${index}`, + { + ruleNumber: 100 + index, + cidr: ingressNACL.cidr, + networkAcl: this.nacl, + traffic: ingressNACL.traffic, + direction: ec2.TrafficDirection.INGRESS, + }, + ); + }); + + props.egressNetworkACL?.forEach((egressNACL, index) => { + new ec2.NetworkAclEntry( + this, + `${props.subnetGroupName}EgressNACL-${index}`, + { + ruleNumber: 100 + index, + cidr: egressNACL.cidr, + networkAcl: this.nacl, + traffic: egressNACL.traffic, + direction: ec2.TrafficDirection.EGRESS, + }, + ); + }); + + // Outputs + new cdk.CfnOutput(this, `${props.subnetGroupName}OutputSubnets`, { + value: this.subnets + .map((subnet) => subnet.subnetId) + .join(','), + description: `${props.subnetGroupName} subnets`, + }); + + new cdk.CfnOutput(this, `${props.subnetGroupName}OutputNACL`, { + value: this.nacl.networkAclId, + description: `${props.subnetGroupName} NACL`, + }); + } +} diff --git a/src/constructs/vpc-endpoint-service.ts b/src/constructs/vpc-endpoint-service.ts new file mode 100644 index 0000000..d3c392f --- /dev/null +++ b/src/constructs/vpc-endpoint-service.ts @@ -0,0 +1,324 @@ +import { NestedStack, NestedStackProps, CfnOutput, Tags, aws_iam as iam, aws_ec2 as ec2 } from 'aws-cdk-lib'; +import * as acm from 'aws-cdk-lib/aws-certificatemanager'; +import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2'; +import * as targets from 'aws-cdk-lib/aws-elasticloadbalancingv2-targets'; +import { Construct } from 'constructs'; +import { SecurityGroupRule } from './network'; + +export interface VpcEndpontServiceConfig { + readonly name: string; + readonly alb: LoadBalancerConfig; + readonly nlb: NetworkLoadBalancerConfig; + readonly allowedPrincipals?: string[]; + readonly acceptanceRequired?: boolean; + readonly additionalTags?: { [key: string]: string }; +} + +export interface LoadBalancerConfig { + readonly existingArn?: string; + readonly existingSecurityGroupId?: string; + readonly subnetGroupName?: string; + readonly internetFacing?: boolean; + readonly targetGroups?: TargetGroupConfig[]; + readonly certificates?: string[]; + readonly securityGroupRules?: SecurityGroupRule[]; +} + +export interface NetworkLoadBalancerConfig { + readonly subnetGroupName: string; + readonly securityGroupRules: SecurityGroupRule[]; + readonly existingSecurityGroupId?: string; + readonly certificates?: string[]; + readonly internetFacing?: boolean; +} + +export interface TargetGroupConfig { + readonly host: string; + readonly applicationPort: number; + readonly healthCheckPath?: string; + readonly healthCheckProtocol?: elbv2.Protocol; + readonly protocolVersion?: elbv2.ApplicationProtocolVersion; + readonly protocol?: elbv2.ApplicationProtocol; + readonly healthCheckPort?: number; + readonly priority?: number; +} + +export interface VpcEndpointServiceNestedStackProps extends NestedStackProps { + readonly vpc: ec2.Vpc; + readonly vpcEndpointServiceConfigs: VpcEndpontServiceConfig[]; + readonly subnets: { [key: string]: ec2.Subnet[] }; +} + +export class VpcEndpointServiceNestedStack extends NestedStack { + constructor(scope: Construct, id: string, props: VpcEndpointServiceNestedStackProps) { + super(scope, id, props); + + // Create VPC endpoint services + for (const vpcEndpointServiceConfig of props.vpcEndpointServiceConfigs) { + this.addVpcEndpointService(vpcEndpointServiceConfig, props.vpc, props.subnets); + } + } + + private addVpcEndpointService(vpceServiceConfig: VpcEndpontServiceConfig, vpc: ec2.Vpc, subnets: { [key: string]: ec2.Subnet[] }) { + const { alb, name, nlb, allowedPrincipals, acceptanceRequired, additionalTags } = vpceServiceConfig; + let ALB: elbv2.ApplicationLoadBalancer; + let NLB: elbv2.NetworkLoadBalancer; + let vpcEndpointService: ec2.VpcEndpointService; + let nlbTargetGroups: elbv2.INetworkTargetGroup[] = []; + let albListeners: string[]; + let albListener: elbv2.IApplicationListener; + let albOutputArn: string | undefined; + let nlbOutputArn: string | undefined; + + // eslint-disable-next-line max-len + const albVpcSubnets = alb.subnetGroupName ? this.mergeSubnetsByGroupNames(ec2.InterfaceVpcEndpointService, [alb.subnetGroupName], subnets) : undefined; + + const nlbSecurityGroup = this.createOrExistingSGWithRules('NLB', nlb.existingSecurityGroupId, nlb.securityGroupRules, name, vpc); + const albSecurityGroup = this.createOrExistingSGWithRules('ALB', alb.existingSecurityGroupId, alb.securityGroupRules, name, vpc); + albSecurityGroup.addIngressRule(nlbSecurityGroup, ec2.Port.HTTPS, 'allowNLBTraffic443'); + albSecurityGroup.addIngressRule(nlbSecurityGroup, ec2.Port.HTTP, 'allowNLBTraffic80'); + + // eslint-disable-next-line max-len + const nlbVpcSubnets = nlb.subnetGroupName ? this.mergeSubnetsByGroupNames(ec2.InterfaceVpcEndpointService, [nlb.subnetGroupName], subnets) : undefined; + + if (alb.existingArn == undefined) { + ALB = new elbv2.ApplicationLoadBalancer(this, `${name}alb`, { + vpc: vpc, + internetFacing: alb?.internetFacing ? alb?.internetFacing : false, + vpcSubnets: albVpcSubnets, + securityGroup: albSecurityGroup, + }); + const nlbTargetGroup = new elbv2.NetworkTargetGroup(this, `NLBTargetGroup${name}`, { + port: 443, + vpc: vpc, + protocol: elbv2.Protocol.TCP, + targets: [new targets.AlbArnTarget(ALB.loadBalancerArn, 443)], + }); + nlbTargetGroups.push(nlbTargetGroup); + albListener = ALB.addListener(`${name}-443-ALBListener`, { + port: 443, + certificates: alb.certificates ? alb.certificates.map((certiArn, index) => { + return acm.Certificate.fromCertificateArn(this, `${name}-importAlbCert-${index}`, certiArn); + }) : undefined, + defaultAction: elbv2.ListenerAction.fixedResponse(503, { + contentType: 'text/plain', + messageBody: 'Service is temporarily unavailable.', + }), + }); + ALB.addListener(`${name}-HttpListener`, { + port: 80, + defaultAction: elbv2.ListenerAction.redirect({ + port: '443', + protocol: elbv2.ApplicationProtocol.HTTPS, + permanent: true, + }), + }); + albOutputArn = ALB.loadBalancerArn; + } else { + const nlbTargetGroup = new elbv2.NetworkTargetGroup(this, `NLBTargetGroup${name}`, { + port: 443, + vpc: vpc, + protocol: elbv2.Protocol.TCP, + targets: [new targets.AlbArnTarget(alb.existingArn, 443)], + }); + nlbTargetGroups.push(nlbTargetGroup); + albListeners = this.getLoadBalancerListener(alb.existingArn, true, name); + albOutputArn = alb.existingArn; + } + + NLB = new elbv2.NetworkLoadBalancer(this, `${name}nlb`, { + vpc: vpc, + vpcSubnets: nlbVpcSubnets, + internetFacing: nlb.internetFacing ? nlb.internetFacing : false, + securityGroups: [nlbSecurityGroup!], + }); + + if (nlb.certificates != undefined) { + const certificates: acm.ICertificate[] = nlb.certificates.map((certiArn, index) => { + return acm.Certificate.fromCertificateArn(this, `${name}-importNlbCert-${index}`, certiArn); + }); + NLB.addListener(`${name}NLB443Listener`, { + port: 443, + certificates, + protocol: elbv2.Protocol.HTTPS, + defaultTargetGroups: nlbTargetGroups, + }); + NLB.addListener(`${name}NLB80Listener`, { + port: 80, + protocol: elbv2.Protocol.HTTP, + defaultTargetGroups: nlbTargetGroups, + }); + } else { + NLB.addListener(`${name}NLB443Listener`, { + port: 443, + protocol: elbv2.Protocol.TCP, + defaultTargetGroups: nlbTargetGroups, + }); + NLB.addListener(`${name}NLB80Listener`, { + port: 80, + protocol: elbv2.Protocol.TCP, + defaultTargetGroups: nlbTargetGroups, + }); + } + + vpcEndpointService = new ec2.VpcEndpointService(this, `${name}EndpointService`, { + vpcEndpointServiceLoadBalancers: [NLB], + acceptanceRequired: acceptanceRequired, + allowedPrincipals: allowedPrincipals?.map((principal) => new iam.ArnPrincipal(principal)), + contributorInsights: false, + }); + nlbOutputArn = NLB.loadBalancerArn; + this.createVPCEndpointServiceOutputs(vpcEndpointService, name, nlbOutputArn, albOutputArn); + + if (additionalTags) { + Tags.of(vpcEndpointService).add('Name', name); + Object.entries(additionalTags).forEach(([key, value]) => { + Tags.of(vpcEndpointService).add(key, value); + }); + } + + if (alb.targetGroups) { + alb.targetGroups.forEach((tgConfig, index) => { + const albTargetGroup = new elbv2.ApplicationTargetGroup(this, `${name}-AlbTargetGroup-${index}`, { + vpc: vpc, + protocolVersion: tgConfig.protocolVersion ? tgConfig.protocolVersion : elbv2.ApplicationProtocolVersion.HTTP1, + protocol: tgConfig.protocol ? tgConfig.protocol : elbv2.ApplicationProtocol.HTTP, + targetType: elbv2.TargetType.IP, + port: tgConfig.applicationPort, + healthCheck: { + path: tgConfig.healthCheckPath, + protocol: tgConfig.healthCheckProtocol ? tgConfig.healthCheckProtocol : elbv2.Protocol.HTTP, + port: tgConfig.healthCheckPort ? `${tgConfig.healthCheckPort}` : `${tgConfig.applicationPort}`, + }, + }); + if (alb.existingArn) { + new elbv2.CfnListenerRule(this, `${name}-http-rule-${index}`, { + listenerArn: albListeners[0], + actions: [ + { + type: 'forward', + targetGroupArn: albTargetGroup.targetGroupArn, + }, + ], + conditions: [ + { + field: 'host-header', + hostHeaderConfig: { + values: [tgConfig.host], + }, + }, + ], + priority: tgConfig.priority ? tgConfig.priority : (index + 1), + }); + } else { + if (albListener != undefined) { + albListener.addAction(`${name}-albAction-${index}`, { + conditions: [ + elbv2.ListenerCondition.hostHeaders([tgConfig.host]), + ], + action: elbv2.ListenerAction.forward([albTargetGroup]), + priority: tgConfig.priority ? tgConfig.priority : (index + 1), + }); + } + } + }); + } + } + + private createVPCEndpointServiceOutputs( + vpcEndpointService: ec2.VpcEndpointService, + name: string, + nlb?: string, + alb?: string, + ) { + new CfnOutput(this, `${name}VpcEndpointServiceName`, { + value: vpcEndpointService.vpcEndpointServiceName, + description: 'The name of the VPC Endpoint Service.', + }); + if (alb != undefined) { + new CfnOutput(this, `${name}AlbArn`, { + value: alb, + description: 'The ALB ARN of the Application Load Balancer.', + }); + } + + if (nlb != undefined) { + new CfnOutput(this, `${name}NlbArn`, { + value: nlb, + description: 'The NLB ARN of the Network Load Balancer.', + }); + } + } + + private getLoadBalancerListener(loadBalancerArn: string, sslEnabled: boolean, name: string) { + const listeners = []; + + if (!sslEnabled) { + listeners.push(elbv2.ApplicationListener.fromLookup(this, name + '-listener-http', { + loadBalancerArn: loadBalancerArn, + listenerProtocol: elbv2.ApplicationProtocol.HTTP, + }).listenerArn); + } + + if (sslEnabled) { + listeners.push(elbv2.ApplicationListener.fromLookup(this, name + '-listener-https', { + loadBalancerArn: loadBalancerArn, + listenerProtocol: elbv2.ApplicationProtocol.HTTPS, + }).listenerArn); + } + return listeners; + } + + + private createOrExistingSGWithRules(type: string, sgId?: string, rules?: SecurityGroupRule[], name?: string, vpc?: ec2.Vpc): ec2.SecurityGroup { + const sg = sgId ? ec2.SecurityGroup.fromSecurityGroupId( + this, + `${name}${type}ExistingSecurityGroup`, + sgId, + ) as ec2.SecurityGroup + : new ec2.SecurityGroup(this, `${name}-${type}-sg`, { + vpc: vpc!, + securityGroupName: `${name}-${type}-sg`, + description: `Custom security group for ${name}`, + allowAllOutbound: true, // Allow all outbound traffic by default + }); + Tags.of(sg).add('Name', `${name}-${type}-sg`); + // If rules are provided, add each rule to the security group + if (rules) { + for (const rule of rules) { + sg.addIngressRule(rule.peer, rule.port, rule.description); + } + } + + return sg; + } + + // Helper function to merge subnets based on subnet group names + private mergeSubnetsByGroupNames( + service: ec2.InterfaceVpcEndpointAwsService | ec2.GatewayVpcEndpointAwsService + | ec2.InterfaceVpcEndpointService, + subnetGroupNames: string[], subnets: { [key: string]: ec2.Subnet[] }): ec2.SelectedSubnets { + // Check if subnetGroupNames is required and not empty for Interface VPC Endpoints + if ((service instanceof ec2.InterfaceVpcEndpointAwsService || service instanceof ec2.InterfaceVpcEndpointService) && + (!subnetGroupNames || subnetGroupNames.length === 0)) { + throw new Error('subnetGroupNames must contain at least one subnet group name for Interface VPC Endpoints.'); + } + + // Initialize an array to hold all the subnets + let mergedSubnets: ec2.ISubnet[] = []; + + // Iterate over each subnet group name and select the subnets + for (const groupName of subnetGroupNames) { + const selectedSubnets = subnets[groupName]; + if (selectedSubnets) { + mergedSubnets = mergedSubnets.concat(selectedSubnets); // Merge the subnets + } + } + + // Return the merged subnets as a SelectedSubnets object + return { + subnets: mergedSubnets, + availabilityZones: [...new Set(mergedSubnets.map(subnet => subnet.availabilityZone))], // Deduplicate AZs + } as ec2.SelectedSubnets; + } +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 3734472..98987c3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,2 @@ -export * from './constructs/network'; \ No newline at end of file +export * from './constructs/network'; +export * from './constructs/vpc-endpoint-service'; \ No newline at end of file diff --git a/tsconfig.dev.json b/tsconfig.dev.json index 0274489..9852f98 100644 --- a/tsconfig.dev.json +++ b/tsconfig.dev.json @@ -8,7 +8,7 @@ "inlineSourceMap": true, "inlineSources": true, "lib": [ - "es2019" + "es2020" ], "module": "CommonJS", "noEmitOnError": false, @@ -23,7 +23,7 @@ "strictNullChecks": true, "strictPropertyInitialization": true, "stripInternal": true, - "target": "ES2019" + "target": "ES2020" }, "include": [ "src/**/*.ts", diff --git a/yarn.lock b/yarn.lock index 25055eb..8596dd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,145 +2,148 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== +"@asamuzakjp/css-color@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-3.2.0.tgz#cc42f5b85c593f79f1fa4f25d2b9b321e61d1794" + integrity sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw== dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" + "@csstools/css-calc" "^2.1.3" + "@csstools/css-color-parser" "^3.0.9" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + lru-cache "^10.4.3" -"@aws-cdk/asset-awscli-v1@^2.2.208": - version "2.2.215" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.215.tgz#430a39a597d79f6652192f3cee2700faa2b60dd9" - integrity sha512-D+Jzwpl+zlBGjJf7nuRcz6JFNwqDQ+IzwIq0VSC4LMRRvrkhGE/ZE+zab3EnjmVkipcQqtQe+PVKefgmxETbvA== - -"@aws-cdk/asset-kubectl-v20@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.3.tgz#80e09004be173995e91614e34d947da11dd9ff4d" - integrity sha512-cDG1w3ieM6eOT9mTefRuTypk95+oyD7P5X/wRltwmYxU7nZc3+076YEVS6vrjDKr3ADYbfn0lDKpfB1FBtO9CQ== +"@aws-cdk/asset-awscli-v1@^2.2.229": + version "2.2.250" + resolved "https://registry.yarnpkg.com/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.250.tgz#9d397fd2ddddee685d5adb8e319cdca2e3eb531c" + integrity sha512-OWprXv59KZQxPOV3UsZUZ1MGF/xFTvBr2nWoz+CSnQV84kxnLnwj3wIfAqqVTnELla3tA7mjPXWwK6Fvm0te9w== "@aws-cdk/asset-node-proxy-agent-v6@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.1.0.tgz#6d3c7860354d4856a7e75375f2f0ecab313b4989" integrity sha512-7bY3J8GCVxLupn/kNmpPc5VJz8grx+4RKfnnJiO1LG+uxkZfANZG3RMHhE+qQxxwkyQ9/MfPtTpf748UhR425A== -"@aws-cdk/cloud-assembly-schema@^38.0.1": - version "38.0.1" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-38.0.1.tgz#cdf4684ae8778459e039cd44082ea644a3504ca9" - integrity sha512-KvPe+NMWAulfNVwY7jenFhzhuLhLqJ/OPy5jx7wUstbjnYnjRVLpUHPU3yCjXFE0J8cuJVdx95BJ4rOs66Pi9w== +"@aws-cdk/cloud-assembly-schema@^41.2.0": + version "41.2.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-41.2.0.tgz#c1ef513e1cc0528dbc05948ae39d5631306af423" + integrity sha512-JaulVS6z9y5+u4jNmoWbHZRs9uGOnmn/ktXygNWKNu1k6lF3ad4so3s18eRu15XCbUIomxN9WPYT6Ehh7hzONw== dependencies: - jsonschema "^1.4.1" - semver "^7.6.3" + jsonschema "~1.4.1" + semver "^7.7.1" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-validator-identifier" "^7.27.1" js-tokens "^4.0.0" - picocolors "^1.0.0" + picocolors "^1.1.1" -"@babel/compat-data@^7.25.9": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" - integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== +"@babel/compat-data@^7.27.2": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" + integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" + integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.4" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.4" + "@babel/types" "^7.28.4" + "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.26.0", "@babel/generator@^7.26.3", "@babel/generator@^7.7.2": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" - integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== +"@babel/generator@^7.28.3", "@babel/generator@^7.7.2": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" + integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== dependencies: - "@babel/parser" "^7.26.3" - "@babel/types" "^7.26.3" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" + "@babel/parser" "^7.28.3" + "@babel/types" "^7.28.2" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" -"@babel/helper-compilation-targets@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" - integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== +"@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: - "@babel/compat-data" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" -"@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== +"@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" - integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" - integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" + integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== dependencies: - "@babel/types" "^7.26.3" + "@babel/types" "^7.28.4" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -171,11 +174,11 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== dependencies: - "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -248,41 +251,41 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/template@^7.25.9", "@babel/template@^7.3.3": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/traverse@^7.25.9", "@babel/traverse@^7.7.2": - version "7.26.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" - integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.3" - "@babel/parser" "^7.26.3" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.3" + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/template@^7.27.2", "@babel/template@^7.3.3": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.7.2": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" + integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.3" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.4" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" debug "^4.3.1" - globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" - integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.3.3": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" + integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" "@balena/dockerignore@^1.0.2": version "1.0.2" @@ -294,10 +297,38 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== +"@csstools/color-helpers@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" + integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== + +"@csstools/css-calc@^2.1.3", "@csstools/css-calc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" + integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== + +"@csstools/css-color-parser@^3.0.9": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" + integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== + dependencies: + "@csstools/color-helpers" "^5.1.0" + "@csstools/css-calc" "^2.1.4" + +"@csstools/css-parser-algorithms@^3.0.4": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" + integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== + +"@csstools/css-tokenizer@^3.0.3": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" + integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== + +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== dependencies: eslint-visitor-keys "^3.4.3" @@ -306,26 +337,31 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== -"@eslint/config-array@^0.19.0": - version "0.19.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" - integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== +"@eslint/config-array@^0.21.0": + version "0.21.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.0.tgz#abdbcbd16b124c638081766392a4d6b509f72636" + integrity sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ== dependencies: - "@eslint/object-schema" "^2.1.5" + "@eslint/object-schema" "^2.1.6" debug "^4.3.1" minimatch "^3.1.2" -"@eslint/core@^0.9.0": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.9.1.tgz#31763847308ef6b7084a4505573ac9402c51f9d1" - integrity sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q== +"@eslint/config-helpers@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.1.tgz#d316e47905bd0a1a931fa50e669b9af4104d1617" + integrity sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== + +"@eslint/core@^0.15.2": + version "0.15.2" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.2.tgz#59386327d7862cc3603ebc7c78159d2dcc4a868f" + integrity sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg== dependencies: "@types/json-schema" "^7.0.15" -"@eslint/eslintrc@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" - integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== +"@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -337,21 +373,22 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.17.0": - version "9.17.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.17.0.tgz#1523e586791f80376a6f8398a3964455ecc651ec" - integrity sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w== +"@eslint/js@9.35.0": + version "9.35.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.35.0.tgz#ffbc7e13cf1204db18552e9cd9d4a8e17c692d07" + integrity sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw== -"@eslint/object-schema@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" - integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== +"@eslint/object-schema@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" + integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== -"@eslint/plugin-kit@^0.2.3": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz#2b78e7bb3755784bb13faa8932a1d994d6537792" - integrity sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg== +"@eslint/plugin-kit@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz#fd8764f0ee79c8ddab4da65460c641cefee017c5" + integrity sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w== dependencies: + "@eslint/core" "^0.15.2" levn "^0.4.1" "@humanfs/core@^0.19.1": @@ -360,27 +397,22 @@ integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== "@humanfs/node@^0.16.6": - version "0.16.6" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" - integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: "@humanfs/core" "^0.19.1" - "@humanwhocodes/retry" "^0.3.0" + "@humanwhocodes/retry" "^0.4.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/retry@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" - integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== - -"@humanwhocodes/retry@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" - integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== "@hutson/parse-repository-url@^3.0.0": version "3.0.2" @@ -577,13 +609,20 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" - integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": @@ -591,44 +630,39 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== -"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.30" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz#4a76c4daeee5df09f5d3940e087442fb36ce2b99" + integrity sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jsii/check-node@1.105.0": - version "1.105.0" - resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.105.0.tgz#92ffea17d1497ddf9b104088d65a363bbf9d2b64" - integrity sha512-7QIzioc9//TwRjLhGMllcTBfIvJ0h6OeGVUEYdXB1DpCNtMbr8Xcj5KaeKHRAF9iRjB1d0IGzKm4A8fRUzIf+Q== +"@jsii/check-node@1.113.0": + version "1.113.0" + resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.113.0.tgz#13075880ea626ba8738ee3a220fa6d83fe710091" + integrity sha512-6iPLiQiSVn8/D89ycIpj78cMfmxOIU/F9RUTVYwLqKPw4cxpR+BCC4N83WKyGkZxhOxULLa9f5q+rkWq/vAMpA== dependencies: chalk "^4.1.2" - semver "^7.6.3" + semver "^7.7.2" -"@jsii/check-node@1.106.0": - version "1.106.0" - resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.106.0.tgz#5deb20b0bbe0a506c4bd9edf60b17b0a93f83834" - integrity sha512-/T/TUsbHdEbZRFR4Rem9+UXVvgMYncEkrIeC52oIHJ8BDSgqlDsIARio/Eu5DOftF4avSLV/sshR6n19mpK1oA== +"@jsii/check-node@1.114.1": + version "1.114.1" + resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.114.1.tgz#9ff05988721cdee3d295b80a131e10e449e0571d" + integrity sha512-SE9H1xBo4D+y259zRWqbrUnWVzCzxZh8ek2G1u5P+wP1n86GcgU+vz8uhJfGagdWFwW1EMW6t4PkPvbYoQG0yw== dependencies: chalk "^4.1.2" - semver "^7.6.3" + semver "^7.7.2" -"@jsii/spec@^1.105.0", "@jsii/spec@^1.106.0": - version "1.106.0" - resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.106.0.tgz#f40010ec8cde14b7a003dd5b6a46480d9d7e222f" - integrity sha512-pAIvqEGf0YLmtzFtUKWNEGkCmXMHENy7k+rzCD147wnM4jHhvEL1mEvxi99aA2VcmvLYaAYNOs/XozT+s+kLqQ== +"@jsii/spec@1.114.1", "@jsii/spec@^1.113.0": + version "1.114.1" + resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.114.1.tgz#9c064d57f062d913bcfda25b5496bdf4c9c95c46" + integrity sha512-SdjVQaNqLkTUK+2R0/t/MnM/NBvv1vzqxO5sn1nnoFD5Wlih8TFOIjl+Q8npzYmOtN+et3D+BMVYrxmVfq4X0w== dependencies: ajv "^8.17.1" @@ -702,9 +736,9 @@ "@sinonjs/commons" "^1.7.0" "@stylistic/eslint-plugin@^2": - version "2.12.1" - resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-2.12.1.tgz#e341beb4e4315084d8be20bceeeda7d8a46f079f" - integrity sha512-fubZKIHSPuo07FgRTn6S4Nl0uXPRPYVNpyZzIDGfp7Fny6JjNus6kReLD7NI380JXi4HtUTSOZ34LBuNPO1XLQ== + version "2.13.0" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-2.13.0.tgz#53bf175dac8c1ec055b370a6ff77d491cae9a70d" + integrity sha512-RnO1SaiCFHn666wNz2QfZEFxvmiNRqhzaMXHXxXXKt+MEP7aajlPxUSMIQpKAaJfverpovEYqjBOXDq6dDcaOQ== dependencies: "@typescript-eslint/utils" "^8.13.0" eslint-visitor-keys "^4.2.0" @@ -729,9 +763,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" @@ -744,16 +778,16 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" - integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.28.2" "@types/estree@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/graceful-fs@^4.1.2": version "4.1.9" @@ -805,11 +839,11 @@ integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*": - version "22.10.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9" - integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ== + version "24.3.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.3.1.tgz#b0a3fb2afed0ef98e8d7f06d46ef6349047709f3" + integrity sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g== dependencies: - undici-types "~6.20.0" + undici-types "~7.10.0" "@types/node@^16 <= 16.18.78": version "16.18.78" @@ -822,9 +856,9 @@ integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/prettier@^2.1.5": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759" - integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/stack-utils@^2.0.0": version "2.0.3" @@ -844,90 +878,107 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^8": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.1.tgz#992e5ac1553ce20d0d46aa6eccd79dc36dedc805" - integrity sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ== + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.42.0.tgz#2172d0496c42eee8c7294b6661681100953fa88f" + integrity sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.18.1" - "@typescript-eslint/type-utils" "8.18.1" - "@typescript-eslint/utils" "8.18.1" - "@typescript-eslint/visitor-keys" "8.18.1" + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/type-utils" "8.42.0" + "@typescript-eslint/utils" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" graphemer "^1.4.0" - ignore "^5.3.1" + ignore "^7.0.0" natural-compare "^1.4.0" - ts-api-utils "^1.3.0" + ts-api-utils "^2.1.0" "@typescript-eslint/parser@^8": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.18.1.tgz#c258bae062778b7696793bc492249027a39dfb95" - integrity sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA== - dependencies: - "@typescript-eslint/scope-manager" "8.18.1" - "@typescript-eslint/types" "8.18.1" - "@typescript-eslint/typescript-estree" "8.18.1" - "@typescript-eslint/visitor-keys" "8.18.1" + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.42.0.tgz#20ea66f4867981fb5bb62cbe1454250fc4a440ab" + integrity sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg== + dependencies: + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.18.1": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz#52cedc3a8178d7464a70beffed3203678648e55b" - integrity sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ== +"@typescript-eslint/project-service@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.42.0.tgz#636eb3418b6c42c98554dce884943708bf41a583" + integrity sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg== dependencies: - "@typescript-eslint/types" "8.18.1" - "@typescript-eslint/visitor-keys" "8.18.1" + "@typescript-eslint/tsconfig-utils" "^8.42.0" + "@typescript-eslint/types" "^8.42.0" + debug "^4.3.4" -"@typescript-eslint/type-utils@8.18.1": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz#10f41285475c0bdee452b79ff7223f0e43a7781e" - integrity sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ== +"@typescript-eslint/scope-manager@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.42.0.tgz#36016757bc85b46ea42bae47b61f9421eddedde3" + integrity sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw== dependencies: - "@typescript-eslint/typescript-estree" "8.18.1" - "@typescript-eslint/utils" "8.18.1" - debug "^4.3.4" - ts-api-utils "^1.3.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" -"@typescript-eslint/types@8.18.1": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.1.tgz#d7f4f94d0bba9ebd088de840266fcd45408a8fff" - integrity sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw== +"@typescript-eslint/tsconfig-utils@8.42.0", "@typescript-eslint/tsconfig-utils@^8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.42.0.tgz#21a3e74396fd7443ff930bc41b27789ba7e9236e" + integrity sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ== -"@typescript-eslint/typescript-estree@8.18.1": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz#2a86cd64b211a742f78dfa7e6f4860413475367e" - integrity sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg== +"@typescript-eslint/type-utils@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.42.0.tgz#d6733e7a9fbdf5af60c09c6038dffde13f4e4253" + integrity sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ== dependencies: - "@typescript-eslint/types" "8.18.1" - "@typescript-eslint/visitor-keys" "8.18.1" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" + "@typescript-eslint/utils" "8.42.0" + debug "^4.3.4" + ts-api-utils "^2.1.0" + +"@typescript-eslint/types@8.42.0", "@typescript-eslint/types@^8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.42.0.tgz#ae15c09cebda20473772902033328e87372db008" + integrity sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw== + +"@typescript-eslint/typescript-estree@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.42.0.tgz#593c3af87d4462252c0d7239d1720b84a1b56864" + integrity sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ== + dependencies: + "@typescript-eslint/project-service" "8.42.0" + "@typescript-eslint/tsconfig-utils" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/visitor-keys" "8.42.0" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" - ts-api-utils "^1.3.0" + ts-api-utils "^2.1.0" -"@typescript-eslint/utils@8.18.1", "@typescript-eslint/utils@^8.13.0": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.1.tgz#c4199ea23fc823c736e2c96fd07b1f7235fa92d5" - integrity sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ== +"@typescript-eslint/utils@8.42.0", "@typescript-eslint/utils@^8.13.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.42.0.tgz#95f8e0c697ff2f7da5f72e16135011f878d815c0" + integrity sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g== dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.18.1" - "@typescript-eslint/types" "8.18.1" - "@typescript-eslint/typescript-estree" "8.18.1" + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.42.0" + "@typescript-eslint/types" "8.42.0" + "@typescript-eslint/typescript-estree" "8.42.0" -"@typescript-eslint/visitor-keys@8.18.1": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz#344b4f6bc83f104f514676facf3129260df7610a" - integrity sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ== +"@typescript-eslint/visitor-keys@8.42.0": + version "8.42.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.42.0.tgz#87c6caaa1ac307bc73a87c1fc469f88f0162f27e" + integrity sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ== dependencies: - "@typescript-eslint/types" "8.18.1" - eslint-visitor-keys "^4.2.0" + "@typescript-eslint/types" "8.42.0" + eslint-visitor-keys "^4.2.1" -"@xmldom/xmldom@^0.9.6": - version "0.9.6" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.9.6.tgz#3eaefb585c1f920e06fb35e6dcb8d505445621c0" - integrity sha512-Su4xcxR0CPGwlDHNmVP09fqET9YxbyDXHaSob6JlBH7L6reTYaeim6zbk9o08UarO0L5GTRo3uzl0D+9lSxmvw== +"@xmldom/xmldom@^0.9.8": + version "0.9.8" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.9.8.tgz#1471e82bdff9e8f20ee8bbe60d4ffa8a516e78d8" + integrity sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A== JSONStream@^1.3.5: version "1.3.5" @@ -965,10 +1016,10 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.14.0, acorn@^8.2.4: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== +acorn@^8.15.0, acorn@^8.2.4: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== add-stream@^1.0.0: version "1.0.0" @@ -983,9 +1034,9 @@ agent-base@6: debug "4" agent-base@^7.1.0, agent-base@^7.1.2: - version "7.1.3" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" - integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== ajv@^6.12.4: version "6.12.6" @@ -1058,7 +1109,7 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== @@ -1071,36 +1122,39 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== -array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== +array-includes@^3.1.9: + version "3.1.9" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" + integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + get-intrinsic "^1.3.0" + is-string "^1.1.1" + math-intrinsics "^1.1.0" array-timsort@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926" integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== -array.prototype.findlastindex@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== +array.prototype.findlastindex@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-abstract "^1.23.2" + es-abstract "^1.23.9" es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" -array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== @@ -1110,7 +1164,7 @@ array.prototype.flat@^1.3.2: es-abstract "^1.23.5" es-shim-unscopables "^1.0.2" -array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== @@ -1143,6 +1197,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1155,25 +1214,24 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -aws-cdk-lib@2.169.0: - version "2.169.0" - resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.169.0.tgz#555e5adf078ef5816070d5a822586044fcd1337f" - integrity sha512-JBwXMZNkXLCyIJmyK6HcA5UDaYYmJhQ0+ZmE10uTgNTqo/7lZpXYyQYES0SWGM4XrR18lFcH73RmHSAaoEyQhw== +aws-cdk-lib@2.195.0: + version "2.195.0" + resolved "https://registry.yarnpkg.com/aws-cdk-lib/-/aws-cdk-lib-2.195.0.tgz#0d4881f1aadcf4bc5da4a51bc2c20a1fd7e8bdde" + integrity sha512-AYLysgSjSnSjkal/AmR86DqvOVqy0VjeWmXR+ucIIGSOzJsevsYuNWCeVnf4v9x+vd2ysVcO8fXndG426vGZ/w== dependencies: - "@aws-cdk/asset-awscli-v1" "^2.2.208" - "@aws-cdk/asset-kubectl-v20" "^2.1.3" + "@aws-cdk/asset-awscli-v1" "^2.2.229" "@aws-cdk/asset-node-proxy-agent-v6" "^2.1.0" - "@aws-cdk/cloud-assembly-schema" "^38.0.1" + "@aws-cdk/cloud-assembly-schema" "^41.2.0" "@balena/dockerignore" "^1.0.2" case "1.6.3" - fs-extra "^11.2.0" + fs-extra "^11.3.0" ignore "^5.3.2" - jsonschema "^1.4.1" + jsonschema "^1.5.0" mime-types "^2.1.35" minimatch "^3.1.2" punycode "^2.3.1" - semver "^7.6.3" - table "^6.8.2" + semver "^7.7.1" + table "^6.9.0" yaml "1.10.2" babel-jest@^27.5.1: @@ -1212,9 +1270,9 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__traverse" "^7.0.6" babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -1246,17 +1304,17 @@ balanced-match@^1.0.0: integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" @@ -1273,14 +1331,14 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist@^4.24.0: - version "4.24.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" - integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== + version "4.25.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.25.4.tgz#ebdd0e1d1cf3911834bab3a6cd7b917d9babf5af" + integrity sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg== dependencies: - caniuse-lite "^1.0.30001688" - electron-to-chromium "^1.5.73" + caniuse-lite "^1.0.30001737" + electron-to-chromium "^1.5.211" node-releases "^2.0.19" - update-browserslist-db "^1.1.1" + update-browserslist-db "^1.1.3" bs-logger@0.x: version "0.2.6" @@ -1301,10 +1359,10 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" - integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" function-bind "^1.1.2" @@ -1319,13 +1377,13 @@ call-bind@^1.0.7, call-bind@^1.0.8: get-intrinsic "^1.2.4" set-function-length "^1.2.2" -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" - integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: - call-bind-apply-helpers "^1.0.1" - get-intrinsic "^1.2.6" + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" @@ -1351,10 +1409,10 @@ camelcase@^6.2.0, camelcase@^6.3.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001688: - version "1.0.30001690" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" - integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== +caniuse-lite@^1.0.30001737: + version "1.0.30001741" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz#67fb92953edc536442f3c9da74320774aa523143" + integrity sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw== case@1.6.3, case@^1.6.3: version "1.6.3" @@ -1389,9 +1447,9 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" - integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== cliui@^7.0.2: version "7.0.4" @@ -1421,10 +1479,10 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== -codemaker@^1.106.0: - version "1.106.0" - resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.106.0.tgz#c696de48847e7758731b72d89264e972eaceb4d0" - integrity sha512-1aLNQCF/3DVxXol6eRqoLZnYulAwWPGq8BMF8pMZu+CaNkR7c0T5otMcbAXcskRLChiFt+BjVWS3JPVeBOHD4w== +codemaker@^1.114.1: + version "1.114.1" + resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.114.1.tgz#16c043d6eab1770806a0de6de807e6f56dbe305f" + integrity sha512-X3KgS+Jof8gi3mIVnuyDrQX/g4loOlIHpwyladoSWLxv8B+nIdnGOd2TFNtxOlNGCGyuy2RY5+nASBziLiwu9w== dependencies: camelcase "^6.3.0" decamelize "^5.0.1" @@ -1478,25 +1536,25 @@ comment-json@4.2.2: repeat-string "^1.6.1" commit-and-tag-version@^12: - version "12.5.0" - resolved "https://registry.yarnpkg.com/commit-and-tag-version/-/commit-and-tag-version-12.5.0.tgz#fcfd5db2d70c76cb1f40defb44b8c8d687af273b" - integrity sha512-Ll7rkKntH20iEFOPUT4e503Jf3J0J8jSN+aSeHuvNdtv4xmv9kSLSBg2CWsMVihwF3J2WvMHBEUSCKuDNesiTA== + version "12.6.0" + resolved "https://registry.yarnpkg.com/commit-and-tag-version/-/commit-and-tag-version-12.6.0.tgz#3d80302463742cce09460c85779f43d878868576" + integrity sha512-/x9+InrMz4G0GzDh1/ddrCsq4SKxRPS3vO5ShhZFG9EEr0GCZ3IrQPFpnBEgnIzm1XqwbkMYpIxFml7HuVs6mQ== dependencies: chalk "^2.4.2" conventional-changelog "4.0.0" conventional-changelog-config-spec "2.1.0" conventional-changelog-conventionalcommits "6.1.0" conventional-recommended-bump "7.0.1" - detect-indent "^6.0.0" + detect-indent "^6.1.0" detect-newline "^3.1.0" dotgitignore "^2.1.0" - figures "^3.1.0" + figures "^3.2.0" find-up "^5.0.0" - git-semver-tags "^5.0.0" - jsdom "^25.0.0" - semver "^7.6.3" + git-semver-tags "^5.0.1" + jsdom "^25.0.1" + semver "^7.7.2" w3c-xmlserializer "^5.0.0" - yaml "^2.4.1" + yaml "^2.6.0" yargs "^17.7.2" commonmark@^0.31.2: @@ -1695,6 +1753,17 @@ core-util-is@^1.0.3, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +cross-spawn@^6.0.0: + version "6.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" + integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -1722,11 +1791,12 @@ cssstyle@^2.3.0: cssom "~0.3.6" cssstyle@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.1.0.tgz#161faee382af1bafadb6d3867a92a19bcb4aea70" - integrity sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA== + version "4.6.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9" + integrity sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg== dependencies: - rrweb-cssom "^0.7.1" + "@asamuzakjp/css-color" "^3.2.0" + rrweb-cssom "^0.8.0" dargs@^7.0.0: version "7.0.0" @@ -1750,7 +1820,7 @@ data-urls@^5.0.0: whatwg-mimetype "^4.0.0" whatwg-url "^14.0.0" -data-view-buffer@^1.0.1: +data-view-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== @@ -1759,7 +1829,7 @@ data-view-buffer@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.2" -data-view-byte-length@^1.0.1: +data-view-byte-length@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== @@ -1768,7 +1838,7 @@ data-view-byte-length@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.2" -data-view-byte-offset@^1.0.0: +data-view-byte-offset@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== @@ -1788,9 +1858,9 @@ dateformat@^3.0.3: integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" @@ -1820,9 +1890,9 @@ decamelize@^5.0.1: integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA== decimal.js@^10.2.1, decimal.js@^10.4.3: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + version "10.6.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" + integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== dedent@^0.7.0: version "0.7.0" @@ -1867,7 +1937,7 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== -detect-indent@^6.0.0: +detect-indent@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== @@ -1925,10 +1995,10 @@ dunder-proto@^1.0.0, dunder-proto@^1.0.1: es-errors "^1.3.0" gopd "^1.2.0" -electron-to-chromium@^1.5.73: - version "1.5.75" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.75.tgz#bba96eabf0e8ca36324679caa38b982800acc87d" - integrity sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q== +electron-to-chromium@^1.5.211: + version "1.5.214" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.214.tgz#f7bbdc0796124292d4b8a34a49e968c5e6430763" + integrity sha512-TpvUNdha+X3ybfU78NoQatKvQEm1oq3lf2QbnmCEdw+Bd9RuIAY+hJTvq1avzHM0f7EJfnH3vbCnbzKzisc/9Q== emittery@^0.8.1: version "0.8.1" @@ -1940,10 +2010,17 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +end-of-stream@^1.1.0: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== entities@~3.0.1: version "3.0.1" @@ -1957,27 +2034,28 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.6: - version "1.23.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.6.tgz#55f0e1ce7128995cc04ace0a57d7dca348345108" - integrity sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA== +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.0.tgz#c44732d2beb0acc1ed60df840869e3106e7af328" + integrity sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg== dependencies: - array-buffer-byte-length "^1.0.1" + array-buffer-byte-length "^1.0.2" arraybuffer.prototype.slice "^1.0.4" available-typed-arrays "^1.0.7" call-bind "^1.0.8" - call-bound "^1.0.3" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" es-define-property "^1.0.1" es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" es-to-primitive "^1.3.0" - function.prototype.name "^1.1.7" - get-intrinsic "^1.2.6" - get-symbol-description "^1.0.2" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" globalthis "^1.0.4" gopd "^1.2.0" has-property-descriptors "^1.0.2" @@ -1985,31 +2063,36 @@ es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.6: has-symbols "^1.1.0" hasown "^2.0.2" internal-slot "^1.1.0" - is-array-buffer "^3.0.4" + is-array-buffer "^3.0.5" is-callable "^1.2.7" is-data-view "^1.0.2" is-negative-zero "^2.0.3" is-regex "^1.2.1" - is-shared-array-buffer "^1.0.3" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" is-string "^1.1.1" - is-typed-array "^1.1.13" - is-weakref "^1.1.0" - math-intrinsics "^1.0.0" - object-inspect "^1.13.3" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.3" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" string.prototype.trim "^1.2.10" string.prototype.trimend "^1.0.9" string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.3" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" typed-array-length "^1.0.7" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.16" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" @@ -2021,28 +2104,29 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: - get-intrinsic "^1.2.4" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" has-tostringtag "^1.0.2" - hasown "^2.0.1" + hasown "^2.0.2" -es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" es-to-primitive@^1.3.0: version "1.3.0" @@ -2104,42 +2188,42 @@ eslint-import-resolver-typescript@^2.7.1: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-module-utils@^2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== +eslint-module-utils@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" + integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== dependencies: debug "^3.2.7" -eslint-plugin-import@^2.31.0: - version "2.31.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" - integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== +eslint-plugin-import@^2.32.0: + version "2.32.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" + integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== dependencies: "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" + array-includes "^3.1.9" + array.prototype.findlastindex "^1.2.6" + array.prototype.flat "^1.3.3" + array.prototype.flatmap "^1.3.3" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.0" + eslint-module-utils "^2.12.1" hasown "^2.0.2" - is-core-module "^2.15.1" + is-core-module "^2.16.1" is-glob "^4.0.3" minimatch "^3.1.2" object.fromentries "^2.0.8" object.groupby "^1.0.3" - object.values "^1.2.0" + object.values "^1.2.1" semver "^6.3.1" - string.prototype.trimend "^1.0.8" + string.prototype.trimend "^1.0.9" tsconfig-paths "^3.15.0" -eslint-scope@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" - integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -2149,26 +2233,27 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== +eslint-visitor-keys@^4.2.0, eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@^9: - version "9.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.17.0.tgz#faa1facb5dd042172fdc520106984b5c2421bb0c" - integrity sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA== + version "9.35.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.35.0.tgz#7a89054b7b9ee1dfd1b62035d8ce75547773f47e" + integrity sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.19.0" - "@eslint/core" "^0.9.0" - "@eslint/eslintrc" "^3.2.0" - "@eslint/js" "9.17.0" - "@eslint/plugin-kit" "^0.2.3" + "@eslint/config-array" "^0.21.0" + "@eslint/config-helpers" "^0.3.1" + "@eslint/core" "^0.15.2" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.35.0" + "@eslint/plugin-kit" "^0.3.5" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.4.1" + "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" "@types/json-schema" "^7.0.15" ajv "^6.12.4" @@ -2176,9 +2261,9 @@ eslint@^9: cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^8.2.0" - eslint-visitor-keys "^4.2.0" - espree "^10.3.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -2194,14 +2279,14 @@ eslint@^9: natural-compare "^1.4.0" optionator "^0.9.3" -espree@^10.0.1, espree@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" - integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== +espree@^10.0.1, espree@^10.3.0, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: - acorn "^8.14.0" + acorn "^8.15.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.0" + eslint-visitor-keys "^4.2.1" esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" @@ -2232,6 +2317,19 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -2267,16 +2365,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== +fast-glob@^3.3.2, fast-glob@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-patch@^3.1.1: version "3.1.1" @@ -2294,14 +2392,14 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-uri@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" - integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" @@ -2312,7 +2410,7 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -figures@^3.1.0: +figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== @@ -2372,33 +2470,37 @@ flat-cache@^4.0.0: keyv "^4.5.4" flatted@^3.2.7, flatted@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" - integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: - is-callable "^1.1.3" + is-callable "^1.2.7" form-data@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.2.tgz#83ad9ced7c03feaad97e293d6f6091011e1659c8" - integrity sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ== + version "3.0.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.4.tgz#938273171d3f999286a4557528ce022dc2c98df1" + integrity sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" - mime-types "^2.1.12" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.35" form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" + integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" fs-extra@^10.1.0: @@ -2410,10 +2512,10 @@ fs-extra@^10.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== +fs-extra@^11.3.0: + version "11.3.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.1.tgz#ba7a1f97a85f94c6db2e52ff69570db3671d5a74" + integrity sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -2443,12 +2545,13 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6, function.prototype.name@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.7.tgz#9df48ea5f746bf577d7e15b5da89df8952a98e7b" - integrity sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" functions-have-names "^1.2.3" hasown "^2.0.2" @@ -2469,21 +2572,21 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz#43dd3dd0e7b49b82b2dfcad10dc824bf7fc265d5" - integrity sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: - call-bind-apply-helpers "^1.0.1" - dunder-proto "^1.0.0" + call-bind-apply-helpers "^1.0.2" es-define-property "^1.0.1" es-errors "^1.3.0" - es-object-atoms "^1.0.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" + get-proto "^1.0.1" gopd "^1.2.0" has-symbols "^1.1.0" hasown "^2.0.2" - math-intrinsics "^1.0.0" + math-intrinsics "^1.1.0" get-package-type@^0.1.0: version "0.1.0" @@ -2500,12 +2603,27 @@ get-pkg-repo@^4.2.1: through2 "^2.0.0" yargs "^16.2.0" +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.2: +get-symbol-description@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== @@ -2531,7 +2649,7 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^5.0.0: +git-semver-tags@^5.0.0, git-semver-tags@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-5.0.1.tgz#db748aa0e43d313bf38dcd68624d8443234e1c15" integrity sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== @@ -2565,7 +2683,7 @@ glob-promise@^6.0.7: resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-6.0.7.tgz#6d894212c63a42e1b86d1cbb04f4582b658308e4" integrity sha512-DEAe6br1w8ZF+y6KM2pzgdfhpreladtNvyNNVgSkxxkFWzXTJFXxQrJQQbAnc7kL0EUd7w5cR8u4K0P4+/q+Gw== -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2577,7 +2695,7 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8, glob@^8.1.0: +glob@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -2588,11 +2706,6 @@ glob@^8, glob@^8.1.0: minimatch "^5.0.1" once "^1.3.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^14.0.0: version "14.0.0" resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" @@ -2677,14 +2790,14 @@ has-symbols@^1.0.3, has-symbols@^1.1.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -2774,15 +2887,20 @@ iconv-lite@0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -ignore@^5.2.0, ignore@^5.3.1, ignore@^5.3.2: +ignore@^5.2.0, ignore@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore@^7.0.0: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -2857,11 +2975,15 @@ is-arrayish@^0.2.1: integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== dependencies: - has-tostringtag "^1.0.0" + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" is-bigint@^1.1.0: version "1.1.0" @@ -2871,22 +2993,22 @@ is-bigint@^1.1.0: has-bigints "^1.0.2" is-boolean-object@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" - integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bound "^1.0.2" + call-bound "^1.0.3" has-tostringtag "^1.0.2" -is-callable@^1.1.3, is-callable@^1.2.7: +is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0, is-core-module@^2.5.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.0.tgz#6c01ffdd5e33c49c1d2abfa93334a85cb56bd81c" - integrity sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g== +is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1, is-core-module@^2.5.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" @@ -2930,11 +3052,14 @@ is-generator-fn@^2.0.0: integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" @@ -2996,19 +3121,24 @@ is-set@^2.0.3: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.3: +is-shared-array-buffer@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: call-bound "^1.0.3" +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.7, is-string@^1.1.1: +is-string@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== @@ -3049,12 +3179,12 @@ is-weakmap@^2.0.2: resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== -is-weakref@^1.0.2, is-weakref@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef" - integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q== +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: - call-bound "^1.0.2" + call-bound "^1.0.3" is-weakset@^2.0.3: version "2.0.4" @@ -3114,9 +3244,9 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -3304,10 +3434,10 @@ jest-jasmine2@^27.5.1: pretty-format "^27.5.1" throat "^6.0.1" -jest-junit@^15: - version "15.0.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-15.0.0.tgz#a47544ab42e9f8fe7ada56306c218e09e52bd690" - integrity sha512-Z5sVX0Ag3HZdMUnD5DFlG+1gciIFSy7yIVPhOdGUi8YJaI9iLvvBb530gtQL2CHmv0JJeiwRZenr0VrSR7frvg== +jest-junit@^16: + version "16.0.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-16.0.0.tgz#d838e8c561cf9fdd7eb54f63020777eee4136785" + integrity sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ== dependencies: mkdirp "^1.0.4" strip-ansi "^6.0.1" @@ -3589,7 +3719,7 @@ jsdom@^16.6.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsdom@^25.0.0: +jsdom@^25.0.1: version "25.0.1" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-25.0.1.tgz#536ec685c288fc8a5773a65f82d8b44badcc73ef" integrity sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw== @@ -3621,97 +3751,97 @@ jsesc@^3.0.2: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsii-diff@^1.106.0: - version "1.106.0" - resolved "https://registry.yarnpkg.com/jsii-diff/-/jsii-diff-1.106.0.tgz#5619755f62f7c65b3f35f688639cf7f82e7443a0" - integrity sha512-1UMvocIJCsUzb0IG/fcOANsm2qVN8lcWG5AD98bljlkJenO33i+YzIChIZc/JqKY0cQFRc7OIEcExt3GtqRzNQ== +jsii-diff@^1.114.1: + version "1.114.1" + resolved "https://registry.yarnpkg.com/jsii-diff/-/jsii-diff-1.114.1.tgz#74be17840cc48efb74b4f398f9e90f5920a7acd3" + integrity sha512-SdttsWI1SWB/fHxpNHbNFi7Z08j54xvrfy/Hwy0fs8f935a6JJNWAkTmxti12zzFVvL73Oonr6aHf0pRmxpKuA== dependencies: - "@jsii/check-node" "1.106.0" - "@jsii/spec" "^1.106.0" + "@jsii/check-node" "1.114.1" + "@jsii/spec" "1.114.1" fs-extra "^10.1.0" - jsii-reflect "^1.106.0" + jsii-reflect "^1.114.1" log4js "^6.9.1" - yargs "^16.2.0" + yargs "^17.7.2" jsii-docgen@^10.5.0: - version "10.6.1" - resolved "https://registry.yarnpkg.com/jsii-docgen/-/jsii-docgen-10.6.1.tgz#5cff3ae39fb85722e1bf77100fed0e39e8ca94c1" - integrity sha512-YzuFpdKnETdkljGXv7mn9DCRK6JIK09XrwJ9UDhdJEy3DpRUGn7uD5RH8vm2rIsQrad9L8pKV4xfSii5Pzoy9g== + version "10.8.2" + resolved "https://registry.yarnpkg.com/jsii-docgen/-/jsii-docgen-10.8.2.tgz#806d1ebfb106c8af70f287921f31d0763faabec8" + integrity sha512-oXpYGclsqNuAwL7ry20I/u/4y8NdjD7HBZoUYvrFd5d97mtyZCrhDLDMtr+QzaHBPKKlAPchhU7/3/D0Pb0UfA== dependencies: - "@jsii/spec" "^1.106.0" + "@jsii/spec" "^1.113.0" case "^1.6.3" fs-extra "^10.1.0" glob "^8.1.0" glob-promise "^6.0.7" - jsii-reflect "^1.106.0" - semver "^7.6.3" + jsii-reflect "^1.113.0" + semver "^7.7.2" yargs "^16.2.0" -jsii-pacmak@^1.106.0: - version "1.106.0" - resolved "https://registry.yarnpkg.com/jsii-pacmak/-/jsii-pacmak-1.106.0.tgz#0622a5770585a35b84abff964cb58aaa38f12779" - integrity sha512-cNSzPszHaFg5AYwOQhp+eM/KpOJupdeyyycrzR6AtxwSmRN6x4K7YybZY/Rk0zfqGds9ukOYv0euGLZuXzXt1w== +jsii-pacmak@^1.114.1: + version "1.114.1" + resolved "https://registry.yarnpkg.com/jsii-pacmak/-/jsii-pacmak-1.114.1.tgz#6723a4c148c5c050b7697744298987db15dd1956" + integrity sha512-Ks/PmxhznYhLIbQIo4fFPgWAa/cQb6RPudvvT08IKVIJE7i9LbzXE3go0hjbDjuhNFF6r8eYOAd1mqtbIyVB2g== dependencies: - "@jsii/check-node" "1.106.0" - "@jsii/spec" "^1.106.0" + "@jsii/check-node" "1.114.1" + "@jsii/spec" "1.114.1" clone "^2.1.2" - codemaker "^1.106.0" + codemaker "^1.114.1" commonmark "^0.31.2" escape-string-regexp "^4.0.0" fs-extra "^10.1.0" - jsii-reflect "^1.106.0" - semver "^7.6.3" - spdx-license-list "^6.9.0" + jsii-reflect "^1.114.1" + semver "^7.7.2" + spdx-license-list "^6.10.0" xmlbuilder "^15.1.1" - yargs "^16.2.0" + yargs "^17.7.2" -jsii-reflect@^1.106.0: - version "1.106.0" - resolved "https://registry.yarnpkg.com/jsii-reflect/-/jsii-reflect-1.106.0.tgz#8d9bfa7cd22e677fbcc433781b919df3b41d8b2d" - integrity sha512-3t+a8kT4G5fYnQAM7eS8bgUpK+Vj1sFgABqLIC2Oae+8rUb6J+v7xTSvqWEOlO0FI608/BwalWsXsvW+Mtogmw== +jsii-reflect@^1.113.0, jsii-reflect@^1.114.1: + version "1.114.1" + resolved "https://registry.yarnpkg.com/jsii-reflect/-/jsii-reflect-1.114.1.tgz#475ef04a18d76c9be0f4dfa417a0d783a24174d6" + integrity sha512-t+p1eYPfzHa8d99Ywa/LwunEtgHQgNGhxCU8XaupWtgW+kLODoQ3eovddSMZOtIH6CQnbHneEqCMVmDeU8dzNA== dependencies: - "@jsii/check-node" "1.106.0" - "@jsii/spec" "^1.106.0" + "@jsii/check-node" "1.114.1" + "@jsii/spec" "1.114.1" chalk "^4" fs-extra "^10.1.0" - oo-ascii-tree "^1.106.0" - yargs "^16.2.0" + oo-ascii-tree "^1.114.1" + yargs "^17.7.2" -jsii-rosetta@~5.6.0: - version "5.6.3" - resolved "https://registry.yarnpkg.com/jsii-rosetta/-/jsii-rosetta-5.6.3.tgz#ac1f8caaf0a34ded2bd907309851b6865085f085" - integrity sha512-+bTTyFv8qJxNd798nhNU3SFV3WXJd7nrPhQ9FozS92QzLHReCpJIUtJQ4+4bxUDwFTun24872w5T6GY8OKXPgA== +jsii-rosetta@~5.9.0: + version "5.9.4" + resolved "https://registry.yarnpkg.com/jsii-rosetta/-/jsii-rosetta-5.9.4.tgz#82ce40c5ed2817b65eb75f2b98deb7b036592db2" + integrity sha512-UHwCmY2uM1dWlOBsGtq6615bOdmrMzEW2VWc5EwiWCTTFZMpuodc4mlbgZWHkXnZvpEKr5sHpmXP8eJyeUtp/Q== dependencies: - "@jsii/check-node" "1.105.0" - "@jsii/spec" "^1.105.0" - "@xmldom/xmldom" "^0.9.6" + "@jsii/check-node" "1.113.0" + "@jsii/spec" "^1.113.0" + "@xmldom/xmldom" "^0.9.8" chalk "^4" commonmark "^0.31.2" - fast-glob "^3.3.2" - jsii "~5.6.0" - semver "^7.6.3" + fast-glob "^3.3.3" + jsii "~5.9.1" + semver "^7.7.2" semver-intersect "^1.5.0" stream-json "^1.9.1" - typescript "~5.6" + typescript "~5.9" workerpool "^6.5.1" yargs "^17.7.2" -jsii@~5.6.0: - version "5.6.4" - resolved "https://registry.yarnpkg.com/jsii/-/jsii-5.6.4.tgz#105774013380a51469528aad127bc3508df41e9c" - integrity sha512-ZfrnPJeuIQJscs3NN8jAYy246DByFcgTIRomoAOM0PY9nfRx/8qXLkWI2LZ49Zmh7WNzqVt8dBCJ6+z1CUqdpQ== +jsii@~5.9.0, jsii@~5.9.1: + version "5.9.4" + resolved "https://registry.yarnpkg.com/jsii/-/jsii-5.9.4.tgz#22b38ffa1359dee12e2fd8c5bacb3f9b324f9fa6" + integrity sha512-YLNzhSwLyFU6R3DRAykJOM7hTQbRXqPH4/2uBpFJ4y5/Kj/blrK6mKO2W7bG7oRG6crw/Ui5gUTk4/eLuFJguA== dependencies: - "@jsii/check-node" "1.106.0" - "@jsii/spec" "^1.106.0" + "@jsii/check-node" "1.113.0" + "@jsii/spec" "^1.113.0" case "^1.6.3" chalk "^4" fast-deep-equal "^3.1.3" log4js "^6.9.1" - semver "^7.6.3" + semver "^7.7.2" semver-intersect "^1.5.0" sort-json "^2.0.1" - spdx-license-list "^6.9.0" - typescript "~5.6" + spdx-license-list "^6.10.0" + typescript "~5.9" yargs "^17.7.2" json-buffer@3.0.1: @@ -3729,6 +3859,11 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-parse-even-better-errors@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz#d3f67bd5925e81d3e31aa466acc821c8375cec43" + integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -3769,9 +3904,9 @@ jsonfile@^4.0.0: graceful-fs "^4.1.6" jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== dependencies: universalify "^2.0.0" optionalDependencies: @@ -3782,11 +3917,26 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -jsonschema@^1.4.1: +jsonschema@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.5.0.tgz#f6aceb1ab9123563dd901d05f81f9d4883d3b7d8" + integrity sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw== + +jsonschema@~1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== +just-diff-apply@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== + +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== + keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -3898,6 +4048,11 @@ log4js@^6.9.1: rfdc "^1.3.0" streamroller "^3.1.5" +lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -3941,7 +4096,7 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -math-intrinsics@^1.0.0: +math-intrinsics@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== @@ -3978,7 +4133,7 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: +micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -4038,7 +4193,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.8: +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8, minimist@~1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -4068,15 +4223,20 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.19: - version "2.0.19" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + version "2.0.20" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.20.tgz#e26bb79dbdd1e64a146df389c699014c611cbc27" + integrity sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA== normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" @@ -4103,6 +4263,13 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -4111,21 +4278,21 @@ npm-run-path@^4.0.1: path-key "^3.0.0" nwsapi@^2.2.0, nwsapi@^2.2.12: - version "2.2.16" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43" - integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ== + version "2.2.22" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.22.tgz#109f9530cda6c156d6a713cdf5939e9f0de98b9d" + integrity sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ== -object-inspect@^1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" - integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.5: +object.assign@^4.1.7: version "4.1.7" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== @@ -4156,7 +4323,7 @@ object.groupby@^1.0.3: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.2.0: +object.values@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== @@ -4166,7 +4333,7 @@ object.values@^1.2.0: define-properties "^1.2.1" es-object-atoms "^1.0.0" -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -4180,10 +4347,10 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -oo-ascii-tree@^1.106.0: - version "1.106.0" - resolved "https://registry.yarnpkg.com/oo-ascii-tree/-/oo-ascii-tree-1.106.0.tgz#58a017dd63f93dc912c9037080967ed7b7afa997" - integrity sha512-0PZkjIiJUW3jEx7durxcri7JciR8VbJpf2K3qiVbGG4x0MTq6Xm/H84GjBI6tamSx/DV1PMFDfwMs3hm8zfOCw== +oo-ascii-tree@^1.114.1: + version "1.114.1" + resolved "https://registry.yarnpkg.com/oo-ascii-tree/-/oo-ascii-tree-1.114.1.tgz#41c2f8c7c66d668a284653e64b6815be919551a8" + integrity sha512-+xac1eA8pc16YTNQ3Joxfw1+C3kySirXJmZvKvbtvw2m16CQXpBjETp19EPIvXH6b4dthokP4NbVHm75btcGIQ== optionator@^0.9.3: version "0.9.4" @@ -4197,6 +4364,20 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -4263,6 +4444,15 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-conflict-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz#996b1edfc0c727583b56c7644dbb3258fc9e9e4b" + integrity sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ== + dependencies: + json-parse-even-better-errors "^4.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -4287,11 +4477,11 @@ parse5@6.0.1: integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parse5@^7.1.2: - version "7.2.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" - integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== + version "7.3.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== dependencies: - entities "^4.5.0" + entities "^6.0.0" path-exists@^3.0.0: version "3.0.0" @@ -4308,6 +4498,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -4325,7 +4520,7 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" -picocolors@^1.0.0, picocolors@^1.1.0: +picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -4336,9 +4531,9 @@ picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== pify@^2.3.0: version "2.3.0" @@ -4351,9 +4546,9 @@ pify@^3.0.0: integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@^4.2.0: version "4.2.0" @@ -4363,9 +4558,9 @@ pkg-dir@^4.2.0: find-up "^4.0.0" possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== prelude-ls@^1.2.1: version "1.2.1" @@ -4386,10 +4581,10 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -projen@^0.91.3: - version "0.91.3" - resolved "https://registry.yarnpkg.com/projen/-/projen-0.91.3.tgz#9e1e7b0e3217d9d29e74d94f8dac0e2b48ac2218" - integrity sha512-LITT3d4tBceuNfeRbC9hptvimNvwu2+bYp1O5lVs2B6XwguIBvAHGxvwbKLW3Nd3aKdCFm7OWTNmCRZg49yBHA== +projen@^0.95.6: + version "0.95.6" + resolved "https://registry.yarnpkg.com/projen/-/projen-0.95.6.tgz#0d8ca52804117dd6b4f95b3fb1f3da49f8eb213b" + integrity sha512-LgtNgveF7UyYoFwEFbx0r570R3+jvz9XQRvykijZg+O5y7+h1hF+FzvL2r1i7FZ3RTlqfyJHP+wFXrfA1F+Oxw== dependencies: "@iarna/toml" "^2.2.5" case "^1.6.3" @@ -4397,11 +4592,12 @@ projen@^0.91.3: comment-json "4.2.2" constructs "^10.0.0" conventional-changelog-config-spec "^2.1.0" + fast-glob "^3.3.3" fast-json-patch "^3.1.1" - glob "^8" ini "^2.0.0" - semver "^7.6.3" - shx "^0.3.4" + parse-conflict-json "^4.0.0" + semver "^7.7.2" + shx "^0.4.0" xmlbuilder2 "^3.1.1" yaml "^2.2.2" yargs "^17.7.2" @@ -4421,6 +4617,14 @@ psl@^1.1.33: dependencies: punycode "^2.3.1" +pump@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -4520,27 +4724,29 @@ redent@^3.0.0: strip-indent "^3.0.0" reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz#c905f3386008de95a62315f3ea8630404be19e2f" - integrity sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q== + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: call-bind "^1.0.8" define-properties "^1.2.1" - dunder-proto "^1.0.1" - es-abstract "^1.23.6" + es-abstract "^1.23.9" es-errors "^1.3.0" - get-intrinsic "^1.2.6" - gopd "^1.2.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" which-builtin-type "^1.2.1" -regexp.prototype.flags@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" - integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== +regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" define-properties "^1.2.1" es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" set-function-name "^2.0.2" repeat-string@^1.6.1: @@ -4595,9 +4801,9 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22 supports-preserve-symlinks-flag "^1.0.0" reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rfdc@^1.3.0: version "1.4.1" @@ -4616,6 +4822,11 @@ rrweb-cssom@^0.7.1: resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz#c73451a484b86dd7cfb1e0b2898df4b703183e4b" integrity sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg== +rrweb-cssom@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" + integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -4644,6 +4855,14 @@ safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + safe-regex-test@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" @@ -4679,15 +4898,15 @@ semver-intersect@^1.5.0: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5": +"semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.5.3, semver@^7.6.0, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.4, semver@^7.5.3, semver@^7.6.0, semver@^7.7.1, semver@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== semver@^6.3.0, semver@^6.3.1: version "6.3.1" @@ -4716,6 +4935,22 @@ set-function-name@^2.0.2: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4723,27 +4958,33 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== +shelljs@^0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.9.2.tgz#a8ac724434520cd7ae24d52071e37a18ac2bb183" + integrity sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw== dependencies: - glob "^7.0.0" + execa "^1.0.0" + fast-glob "^3.3.2" interpret "^1.0.0" rechoir "^0.6.2" -shx@^0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.4.tgz#74289230b4b663979167f94e1935901406e40f02" - integrity sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g== +shx@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/shx/-/shx-0.4.0.tgz#c6ea6ace7e778da0ab32d2eab9def59d788e9336" + integrity sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA== dependencies: - minimist "^1.2.3" - shelljs "^0.8.5" + minimist "^1.2.8" + shelljs "^0.9.2" side-channel-list@^1.0.0: version "1.0.0" @@ -4785,7 +5026,7 @@ side-channel@^1.1.0: side-channel-map "^1.0.1" side-channel-weakmap "^1.0.2" -signal-exit@^3.0.2, signal-exit@^3.0.3: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4832,9 +5073,9 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + version "0.7.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" + integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== spdx-correct@^3.0.0: version "3.2.0" @@ -4858,14 +5099,14 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.20" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" - integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== + version "3.0.22" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef" + integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== -spdx-license-list@^6.9.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/spdx-license-list/-/spdx-license-list-6.9.0.tgz#5543abb3a15f985a12808f642a622d2721c372ad" - integrity sha512-L2jl5vc2j6jxWcNCvcVj/BW9A8yGIG02Dw+IUw0ZxDM70f7Ylf5Hq39appV1BI9yxyWQRpq2TQ1qaXvf+yjkqA== +spdx-license-list@^6.10.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/spdx-license-list/-/spdx-license-list-6.10.0.tgz#738249443db42f5fd6780c7c40daecefed7a3adf" + integrity sha512-wF3RhDFoqdu14d1Prv6c8aNU0FSRuSFJpNjWeygIZcNZEwPxp7I5/Hwo8j6lSkBKWAIkSQrKefrC5N0lvOP0Gw== split2@^3.2.2: version "3.2.2" @@ -4893,6 +5134,14 @@ stack-utils@^2.0.3: dependencies: escape-string-regexp "^2.0.0" +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + stream-chain@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" @@ -4944,7 +5193,7 @@ string.prototype.trim@^1.2.10: es-object-atoms "^1.0.0" has-property-descriptors "^1.0.2" -string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: +string.prototype.trimend@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== @@ -4994,6 +5243,11 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -5050,7 +5304,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.8.2: +table@^6.9.0: version "6.9.0" resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== @@ -5101,17 +5355,17 @@ through@2, "through@>=2.2.7 <3": resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tldts-core@^6.1.69: - version "6.1.69" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.69.tgz#079ffcac8a4407bc74567e292aecf30b943674e1" - integrity sha512-nygxy9n2PBUFQUtAXAc122gGo+04/j5qr5TGQFZTHafTKYvmARVXt2cA5rgero2/dnXUfkdPtiJoKmrd3T+wdA== +tldts-core@^6.1.86: + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8" + integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA== tldts@^6.1.32: - version "6.1.69" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.69.tgz#0fe1fcb1ad09510459693e72f96062cee2411f1f" - integrity sha512-Oh/CqRQ1NXNY7cy9NkTPUauOWiTro0jEYZTioGbOmcQh6EC45oribyIMJp0OJO3677r13tO6SKdWoGZUx2BDFw== + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7" + integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ== dependencies: - tldts-core "^6.1.69" + tldts-core "^6.1.86" tmpl@1.0.5: version "1.0.5" @@ -5136,9 +5390,9 @@ tough-cookie@^4.0.0: url-parse "^1.5.3" tough-cookie@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.0.0.tgz#6b6518e2b5c070cf742d872ee0f4f92d69eac1af" - integrity sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q== + version "5.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" + integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A== dependencies: tldts "^6.1.32" @@ -5149,10 +5403,10 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -tr46@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.0.0.tgz#3b46d583613ec7283020d79019f1335723801cec" - integrity sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g== +tr46@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca" + integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== dependencies: punycode "^2.3.1" @@ -5161,10 +5415,10 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-api-utils@^1.3.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" - integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== +ts-api-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== ts-jest@^27: version "27.1.5" @@ -5222,7 +5476,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -typed-array-buffer@^1.0.2: +typed-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== @@ -5231,7 +5485,7 @@ typed-array-buffer@^1.0.2: es-errors "^1.3.0" is-typed-array "^1.1.14" -typed-array-byte-length@^1.0.1: +typed-array-byte-length@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== @@ -5242,7 +5496,7 @@ typed-array-byte-length@^1.0.1: has-proto "^1.2.0" is-typed-array "^1.1.14" -typed-array-byte-offset@^1.0.3: +typed-array-byte-offset@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== @@ -5284,17 +5538,17 @@ typescript@^4.9.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -typescript@~5.6: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== +typescript@~5.9: + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== uglify-js@^3.1.4: version "3.19.3" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== -unbox-primitive@^1.0.2: +unbox-primitive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== @@ -5304,10 +5558,10 @@ unbox-primitive@^1.0.2: has-symbols "^1.1.0" which-boxed-primitive "^1.1.1" -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== +undici-types@~7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== universalify@^0.1.0: version "0.1.2" @@ -5324,13 +5578,13 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -update-browserslist-db@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" - integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" - picocolors "^1.1.0" + picocolors "^1.1.1" uri-js@^4.2.2: version "4.4.1" @@ -5442,11 +5696,11 @@ whatwg-mimetype@^4.0.0: integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== whatwg-url@^14.0.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.1.0.tgz#fffebec86cc8e6c2a657e50dc606207b870f0ab3" - integrity sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w== + version "14.2.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663" + integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== dependencies: - tr46 "^5.0.0" + tr46 "^5.1.0" webidl-conversions "^7.0.0" whatwg-url@^8.0.0, whatwg-url@^8.5.0: @@ -5498,18 +5752,26 @@ which-collection@^1.0.2: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.16: - version "1.1.18" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" - integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" call-bind "^1.0.8" - call-bound "^1.0.3" - for-each "^0.3.3" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" gopd "^1.2.0" has-tostringtag "^1.0.2" +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -5562,9 +5824,9 @@ ws@^7.4.6: integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.18.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== xml-name-validator@^3.0.0: version "3.0.0" @@ -5626,10 +5888,10 @@ yaml@1.10.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.2.2, yaml@^2.4.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" - integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== +yaml@^2.2.2, yaml@^2.6.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9"