diff --git a/package.json b/package.json index 92c949e0d9e08..7a6e3617842e8 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "jsii-rosetta": "^0.22.0", "lerna": "^3.20.2", "standard-version": "^7.1.0", - "typescript": "~3.8.2" + "typescript": "~3.8.3" }, "repository": { "type": "git", diff --git a/packages/@aws-cdk/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts b/packages/@aws-cdk/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts index 053dca7f4f289..f2f2a5bed2dfe 100644 --- a/packages/@aws-cdk/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts +++ b/packages/@aws-cdk/aws-applicationautoscaling/lib/target-tracking-scaling-policy.ts @@ -35,14 +35,24 @@ export interface BaseTargetTrackingProps { /** * Period after a scale in activity completes before another scale in activity can start. * - * @default - No scale in cooldown. + * @default Duration.seconds(300) for the following scalable targets: ECS services, + * Spot Fleet requests, EMR clusters, AppStream 2.0 fleets, Aurora DB clusters, + * Amazon SageMaker endpoint variants, Custom resources. For all other scalable + * targets, the default value is Duration.seconds(0): DynamoDB tables, DynamoDB + * global secondary indexes, Amazon Comprehend document classification endpoints, + * Lambda provisioned concurrency */ readonly scaleInCooldown?: cdk.Duration; /** * Period after a scale out activity completes before another scale out activity can start. * - * @default - No scale out cooldown. + * @default Duration.seconds(300) for the following scalable targets: ECS services, + * Spot Fleet requests, EMR clusters, AppStream 2.0 fleets, Aurora DB clusters, + * Amazon SageMaker endpoint variants, Custom resources. For all other scalable + * targets, the default value is Duration.seconds(0): DynamoDB tables, DynamoDB + * global secondary indexes, Amazon Comprehend document classification endpoints, + * Lambda provisioned concurrency */ readonly scaleOutCooldown?: cdk.Duration; } diff --git a/packages/@aws-cdk/aws-cloudfront/package.json b/packages/@aws-cdk/aws-cloudfront/package.json index 9b8ba41507d68..c5768f3bae46a 100644 --- a/packages/@aws-cdk/aws-cloudfront/package.json +++ b/packages/@aws-cdk/aws-cloudfront/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.30", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-cloudtrail/package.json b/packages/@aws-cdk/aws-cloudtrail/package.json index a6cce463e84f4..802d17e76b5dd 100644 --- a/packages/@aws-cdk/aws-cloudtrail/package.json +++ b/packages/@aws-cdk/aws-cloudtrail/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.30", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-codebuild/package.json b/packages/@aws-cdk/aws-codebuild/package.json index ff06383a9c27f..80e3aae90db11 100644 --- a/packages/@aws-cdk/aws-codebuild/package.json +++ b/packages/@aws-cdk/aws-codebuild/package.json @@ -70,7 +70,7 @@ "@aws-cdk/aws-sns": "0.0.0", "@aws-cdk/aws-sqs": "0.0.0", "@types/nodeunit": "^0.0.30", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-codecommit/package.json b/packages/@aws-cdk/aws-codecommit/package.json index 650e8967d082f..cf0636a9dccda 100644 --- a/packages/@aws-cdk/aws-codecommit/package.json +++ b/packages/@aws-cdk/aws-codecommit/package.json @@ -70,7 +70,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-sns": "0.0.0", "@types/nodeunit": "^0.0.30", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-dynamodb/package.json b/packages/@aws-cdk/aws-dynamodb/package.json index e5f9699d8fa4a..ebcea0c734d8f 100644 --- a/packages/@aws-cdk/aws-dynamodb/package.json +++ b/packages/@aws-cdk/aws-dynamodb/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.30", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "aws-sdk-mock": "^5.0.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/@aws-cdk/aws-eks/package.json b/packages/@aws-cdk/aws-eks/package.json index f01748d440fb2..c7f7b89610e39 100644 --- a/packages/@aws-cdk/aws-eks/package.json +++ b/packages/@aws-cdk/aws-eks/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.30", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-events-targets/package.json b/packages/@aws-cdk/aws-events-targets/package.json index d5da3be418101..63ef0ed256214 100644 --- a/packages/@aws-cdk/aws-events-targets/package.json +++ b/packages/@aws-cdk/aws-events-targets/package.json @@ -86,7 +86,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-codecommit": "0.0.0", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "aws-sdk-mock": "^5.0.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", diff --git a/packages/@aws-cdk/aws-lambda/package.json b/packages/@aws-cdk/aws-lambda/package.json index b7f887c13f5c3..c0477da1d43d2 100644 --- a/packages/@aws-cdk/aws-lambda/package.json +++ b/packages/@aws-cdk/aws-lambda/package.json @@ -71,13 +71,13 @@ "@types/lodash": "^4.14.149", "@types/nodeunit": "^0.0.30", "@types/sinon": "^7.5.2", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "aws-sdk-mock": "^5.0.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", "lodash": "^4.17.15", - "nock": "^12.0.1", + "nock": "^12.0.2", "nodeunit": "^0.11.3", "pkglint": "0.0.0", "sinon": "^9.0.0" diff --git a/packages/@aws-cdk/aws-route53/package.json b/packages/@aws-cdk/aws-route53/package.json index 1d2b9e64cbf64..d6d3fc63fdfd6 100644 --- a/packages/@aws-cdk/aws-route53/package.json +++ b/packages/@aws-cdk/aws-route53/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@aws-cdk/assert": "0.0.0", "@types/nodeunit": "^0.0.30", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/aws-sqs/package.json b/packages/@aws-cdk/aws-sqs/package.json index 12fe4b99207dc..a9262ae314099 100644 --- a/packages/@aws-cdk/aws-sqs/package.json +++ b/packages/@aws-cdk/aws-sqs/package.json @@ -65,7 +65,7 @@ "@aws-cdk/assert": "0.0.0", "@aws-cdk/aws-s3": "0.0.0", "@types/nodeunit": "^0.0.30", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", diff --git a/packages/@aws-cdk/custom-resources/README.md b/packages/@aws-cdk/custom-resources/README.md index 56d496856e039..d8ba5bb9205e7 100644 --- a/packages/@aws-cdk/custom-resources/README.md +++ b/packages/@aws-cdk/custom-resources/README.md @@ -63,7 +63,7 @@ The following example is a skeleton for a Python implementation of `onEvent`: ```py def on_event(event, context): - print(event) + print(event) request_type = event['RequestType'] if request_type == 'Create': return on_create(event) if request_type == 'Update': return on_update(event) @@ -76,9 +76,9 @@ def on_create(event): # add your create code here... physical_id = ... - + return { 'PhysicalResourceId': physical_id } - + def on_update(event): physical_id = event["PhysicalResourceId"] props = event["ResourceProperties"] @@ -104,8 +104,8 @@ def is_complete(event, context): request_type = event["RequestType"] # check if resource is stable based on request_type - is_ready = ... - + is_ready = ... + return { 'IsComplete': is_ready } ``` @@ -121,7 +121,7 @@ If `onEvent` returns successfully, the framework will submit a "SUCCESS" respons to AWS CloudFormation for this resource operation. If the provider is [asynchronous](#asynchronous-providers-iscomplete) (`isCompleteHandler` is defined), the framework will only submit a response based on the result of -`isComplete`. +`isComplete`. If `onEvent` throws an error, the framework will submit a "FAILED" response to AWS CloudFormation. @@ -153,10 +153,10 @@ The return value from `onEvent` must be a JSON object with the following fields: It is not uncommon for the provisioning of resources to be an asynchronous operation, which means that the operation does not immediately finish, and we -need to "wait" until the resource stabilizes. +need to "wait" until the resource stabilizes. The provider framework makes it easy to implement "waiters" by allowing users to -specify an additional AWS Lambda function in `isCompleteHandler`. +specify an additional AWS Lambda function in `isCompleteHandler`. The framework will repeatedly invoke the handler every `queryInterval`. When `isComplete` returns with `IsComplete: true`, the framework will submit a @@ -230,7 +230,7 @@ lifecycle events: ### Execution Policy Similarly to any AWS Lambda function, if the user-defined handlers require -access to AWS resources, you will have to define these permissions +access to AWS resources, you will have to define these permissions by calling "grant" methods such as `myBucket.grantRead(myHandler)`), using `myHandler.addToRolePolicy` or specifying an `initialPolicy` when defining the function. @@ -353,7 +353,7 @@ const awsCustom1 = new AwsCustomResource(this, 'API1', { onCreate: { service: '...', action: '...', - physicalResourceId: '...' + physicalResourceId: PhysicalResourceId.of('...') } }); @@ -364,7 +364,7 @@ const awsCustom2 = new AwsCustomResource(this, 'API2', { parameters: { text: awsCustom1.getDataString('Items.0.text') }, - physicalResourceId: '...' + physicalResourceId: PhysicalResourceId.of('...') } }) ``` @@ -381,7 +381,7 @@ const verifyDomainIdentity = new AwsCustomResource(this, 'VerifyDomainIdentity', parameters: { Domain: 'example.com' }, - physicalResourceIdPath: 'VerificationToken' // Use the token returned by the call as physical id + physicalResourceId: PhysicalResourceId.fromResponse('VerificationToken') // Use the token returned by the call as physical id } }); @@ -403,7 +403,7 @@ const getParameter = new AwsCustomResource(this, 'GetParameter', { Name: 'my-parameter', WithDecryption: true }, - physicalResourceId: Date.now().toString() // Update physical id to always fetch the latest version + physicalResourceId: PhysicalResourceId.of(Date.now().toString()) // Update physical id to always fetch the latest version } }); diff --git a/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts b/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts index f8c17c3db0aef..4ebcf8e9e1bbf 100644 --- a/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts +++ b/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/aws-custom-resource.ts @@ -16,6 +16,32 @@ export type AwsSdkMetadata = {[key: string]: any}; const awsSdkMetadata: AwsSdkMetadata = metadata; +/** + * Physical ID of the custom resource. + */ +export class PhysicalResourceId { + + /** + * Extract the physical resource id from the path (dot notation) to the data in the API call response. + */ + public static fromResponse(responsePath: string): PhysicalResourceId { + return new PhysicalResourceId(responsePath, undefined); + } + + /** + * Explicit physical resource id. + */ + public static of(id: string): PhysicalResourceId { + return new PhysicalResourceId(undefined, id); + } + + /** + * @param responsePath Path to a response data element to be used as the physical id. + * @param id Literal string to be used as the physical id. + */ + private constructor(public readonly responsePath?: string, public readonly id?: string) { } +} + /** * An AWS SDK call. */ @@ -37,27 +63,18 @@ export interface AwsSdkCall { /** * The parameters for the service action * + * @default - no paramters * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/index.html */ readonly parameters?: any; /** - * The path to the data in the API call response to use as the physical - * resource id. Either `physicalResourceId` or `physicalResourceIdPath` - * must be specified for onCreate or onUpdate calls. - * - * @default - no path - */ - readonly physicalResourceIdPath?: string; - - /** - * The physical resource id of the custom resource for this call. Either - * `physicalResourceId` or `physicalResourceIdPath` must be specified for - * onCreate or onUpdate calls. + * The physical resource id of the custom resource for this call. + * Mandatory for onCreate or onUpdate calls. * * @default - no physical resource id */ - readonly physicalResourceId?: string; + readonly physicalResourceId?: PhysicalResourceId; /** * The regex pattern to use to catch API errors. The `code` property of the @@ -98,6 +115,11 @@ export interface AwsSdkCall { readonly outputPath?: string; } +/** + * Properties for AwsCustomResource. + * + * Note that at least onCreate, onUpdate or onDelete must be specified. + */ export interface AwsCustomResourceProps { /** * Cloudformation Resource type. @@ -108,7 +130,6 @@ export interface AwsCustomResourceProps { /** * The AWS SDK call to make when the resource is created. - * At least onCreate, onUpdate or onDelete must be specified. * * @default - the call when the resource is updated */ @@ -161,11 +182,20 @@ export interface AwsCustomResourceProps { readonly timeout?: cdk.Duration } +/** + * Defines a custom resource that is materialized using specific AWS API calls. + * + * Use this to bridge any gap that might exist in the CloudFormation Coverage. + * You can specify exactly which calls are invoked for the 'CREATE', 'UPDATE' and 'DELETE' life cycle events. + * + */ export class AwsCustomResource extends cdk.Construct implements iam.IGrantable { public readonly grantPrincipal: iam.IPrincipal; private readonly customResource: CustomResource; + // 'props' cannot be optional, even though all its properties are optional. + // this is because at least one sdk call must be provided. constructor(scope: cdk.Construct, id: string, props: AwsCustomResourceProps) { super(scope, id); @@ -174,8 +204,8 @@ export class AwsCustomResource extends cdk.Construct implements iam.IGrantable { } for (const call of [props.onCreate, props.onUpdate]) { - if (call && !call.physicalResourceId && !call.physicalResourceIdPath) { - throw new Error('Either `physicalResourceId` or `physicalResourceIdPath` must be specified for onCreate and onUpdate calls.'); + if (call && !call.physicalResourceId) { + throw new Error('`physicalResourceId` must be specified for onCreate and onUpdate calls.'); } } diff --git a/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/runtime/index.ts b/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/runtime/index.ts index 5794ad3f98e15..9507a8f9388b1 100644 --- a/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/runtime/index.ts +++ b/packages/@aws-cdk/custom-resources/lib/aws-custom-resource/runtime/index.ts @@ -90,14 +90,14 @@ export async function handler(event: AWSLambda.CloudFormationCustomResourceEvent let physicalResourceId: string; switch (event.RequestType) { case 'Create': - physicalResourceId = event.ResourceProperties.Create?.physicalResourceId ?? - event.ResourceProperties.Update?.physicalResourceId ?? - event.ResourceProperties.Delete?.physicalResourceId ?? + physicalResourceId = event.ResourceProperties.Create?.physicalResourceId?.id ?? + event.ResourceProperties.Update?.physicalResourceId?.id ?? + event.ResourceProperties.Delete?.physicalResourceId?.id ?? event.LogicalResourceId; break; case 'Update': case 'Delete': - physicalResourceId = event.ResourceProperties[event.RequestType]?.physicalResourceId ?? event.PhysicalResourceId; + physicalResourceId = event.ResourceProperties[event.RequestType]?.physicalResourceId?.id ?? event.PhysicalResourceId; break; } @@ -127,8 +127,8 @@ export async function handler(event: AWSLambda.CloudFormationCustomResourceEvent } } - if (call.physicalResourceIdPath) { - physicalResourceId = flatData[call.physicalResourceIdPath]; + if (call.physicalResourceId?.responsePath) { + physicalResourceId = flatData[call.physicalResourceId.responsePath]; } } diff --git a/packages/@aws-cdk/custom-resources/package.json b/packages/@aws-cdk/custom-resources/package.json index 3a94d3e4ce41c..4e4afeba674b3 100644 --- a/packages/@aws-cdk/custom-resources/package.json +++ b/packages/@aws-cdk/custom-resources/package.json @@ -73,13 +73,13 @@ "@types/aws-lambda": "^8.10.39", "@types/fs-extra": "^8.1.0", "@types/sinon": "^7.5.2", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "aws-sdk-mock": "^5.0.0", "cdk-build-tools": "0.0.0", "cdk-integ-tools": "0.0.0", "cfn2ts": "0.0.0", "fs-extra": "^8.1.0", - "nock": "^12.0.1", + "nock": "^12.0.2", "pkglint": "0.0.0", "sinon": "^9.0.0" }, @@ -125,11 +125,7 @@ "stability": "experimental", "awslint": { "exclude": [ - "construct-ctor-props-optional:@aws-cdk/custom-resources.AwsCustomResource", - "props-physical-name:@aws-cdk/custom-resources.AsyncCustomResourceProps", - "docs-public-apis:@aws-cdk/custom-resources.AwsCustomResource", - "docs-public-apis:@aws-cdk/custom-resources.AwsCustomResourceProps", - "props-default-doc:@aws-cdk/custom-resources.AwsSdkCall.parameters" + "construct-ctor-props-optional:@aws-cdk/custom-resources.AwsCustomResource" ] - } + } } \ No newline at end of file diff --git a/packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource-provider.test.ts b/packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource-provider.test.ts index 179fc07dbbd14..9fa7fbfd936d6 100644 --- a/packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource-provider.test.ts +++ b/packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource-provider.test.ts @@ -3,7 +3,7 @@ import * as AWS from 'aws-sdk-mock'; import * as fs from 'fs-extra'; import * as nock from 'nock'; import * as sinon from 'sinon'; -import { AwsSdkCall } from '../../lib'; +import { AwsSdkCall, PhysicalResourceId } from '../../lib'; import { flatten, handler } from '../../lib/aws-custom-resource/runtime'; AWS.setSDK(require.resolve('aws-sdk')); @@ -62,7 +62,7 @@ test('create event with physical resource id path', async () => { parameters: { Bucket: 'my-bucket' }, - physicalResourceIdPath: 'Contents.1.ETag' + physicalResourceId: PhysicalResourceId.fromResponse('Contents.1.ETag') } as AwsSdkCall } }; @@ -101,7 +101,7 @@ test('update event with physical resource id', async () => { Message: 'hello', TopicArn: 'topicarn' }, - physicalResourceId: 'topicarn' + physicalResourceId: PhysicalResourceId.of('topicarn') } as AwsSdkCall } }; @@ -133,7 +133,7 @@ test('delete event', async () => { parameters: { Bucket: 'my-bucket' }, - physicalResourceIdPath: 'Contents.1.ETag' + physicalResourceId: PhysicalResourceId.fromResponse('Contents.1.ETag') } as AwsSdkCall } }; @@ -236,7 +236,7 @@ test('catch errors', async () => { parameters: { Bucket: 'my-bucket' }, - physicalResourceId: 'physicalResourceId', + physicalResourceId: PhysicalResourceId.of('physicalResourceId'), catchErrorPattern: 'NoSuchBucket' } as AwsSdkCall } @@ -283,7 +283,7 @@ test('decodes booleans', async () => { }, } }, - physicalResourceId: 'put-item' + physicalResourceId: PhysicalResourceId.of('put-item') } as AwsSdkCall } }; @@ -342,7 +342,7 @@ test('restrict output path', async () => { parameters: { Bucket: 'my-bucket' }, - physicalResourceId: 'id', + physicalResourceId: PhysicalResourceId.of('id'), outputPath: 'Contents.0' } as AwsSdkCall } @@ -379,7 +379,7 @@ test('can specify apiVersion and region', async () => { }, apiVersion: '2010-03-31', region: 'eu-west-1', - physicalResourceId: 'id', + physicalResourceId: PhysicalResourceId.of('id'), } as AwsSdkCall } }; @@ -433,7 +433,7 @@ test('installs the latest SDK', async () => { Message: 'message', TopicArn: 'topic' }, - physicalResourceId: 'id', + physicalResourceId: PhysicalResourceId.of('id'), } as AwsSdkCall } }; diff --git a/packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource.test.ts b/packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource.test.ts index 5527f2923ab33..38fca5e4b5757 100644 --- a/packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource.test.ts +++ b/packages/@aws-cdk/custom-resources/test/aws-custom-resource/aws-custom-resource.test.ts @@ -1,7 +1,7 @@ import '@aws-cdk/assert/jest'; import * as iam from '@aws-cdk/aws-iam'; import * as cdk from '@aws-cdk/core'; -import { AwsCustomResource } from '../../lib'; +import { AwsCustomResource, PhysicalResourceId } from '../../lib'; // tslint:disable:object-literal-key-quotes @@ -19,7 +19,7 @@ test('aws sdk js custom resource with onCreate and onDelete', () => { logGroupName: '/aws/lambda/loggroup', retentionInDays: 90 }, - physicalResourceId: 'loggroup' + physicalResourceId: PhysicalResourceId.of('loggroup') }, onDelete: { service: 'CloudWatchLogs', @@ -39,7 +39,9 @@ test('aws sdk js custom resource with onCreate and onDelete', () => { "logGroupName": "/aws/lambda/loggroup", "retentionInDays": 90 }, - "physicalResourceId": "loggroup" + "physicalResourceId": { + "id": "loggroup" + } }, "Delete": { "service": "CloudWatchLogs", @@ -84,7 +86,7 @@ test('onCreate defaults to onUpdate', () => { Key: 'my-key', Body: 'my-body' }, - physicalResourceIdPath: 'ETag' + physicalResourceId: PhysicalResourceId.fromResponse('ETag') }, }); @@ -98,7 +100,9 @@ test('onCreate defaults to onUpdate', () => { "Key": "my-key", "Body": "my-body" }, - "physicalResourceIdPath": "ETag" + "physicalResourceId": { + "responsePath": "ETag" + } }, "Update": { "service": "s3", @@ -108,7 +112,9 @@ test('onCreate defaults to onUpdate', () => { "Key": "my-key", "Body": "my-body" }, - "physicalResourceIdPath": "ETag" + "physicalResourceId": { + "responsePath": "ETag" + } }, }); }); @@ -127,7 +133,7 @@ test('with custom policyStatements', () => { Key: 'my-key', Body: 'my-body' }, - physicalResourceIdPath: 'ETag' + physicalResourceId: PhysicalResourceId.fromResponse('ETag') }, policyStatements: [ new iam.PolicyStatement({ @@ -169,7 +175,7 @@ test('fails when no physical resource method is specified', () => { retentionInDays: 90 } } - })).toThrow(/`physicalResourceId`.+`physicalResourceIdPath`/); + })).toThrow(/`physicalResourceId`/); }); test('encodes booleans', () => { @@ -188,7 +194,7 @@ test('encodes booleans', () => { falseBoolean: false, falseString: 'false' }, - physicalResourceId: 'id' + physicalResourceId: PhysicalResourceId.of('id') }, }); @@ -203,7 +209,9 @@ test('encodes booleans', () => { "falseBoolean": "FALSE:BOOLEAN", "falseString": "false" }, - "physicalResourceId": "id" + "physicalResourceId": { + "id": "id" + } }, }); }); @@ -217,7 +225,7 @@ test('timeout defaults to 2 minutes', () => { onCreate: { service: 'service', action: 'action', - physicalResourceId: 'id' + physicalResourceId: PhysicalResourceId.of('id') } }); @@ -236,7 +244,7 @@ test('can specify timeout', () => { onCreate: { service: 'service', action: 'action', - physicalResourceId: 'id' + physicalResourceId: PhysicalResourceId.of('id') }, timeout: cdk.Duration.minutes(15) }); @@ -257,7 +265,7 @@ test('implements IGrantable', () => { onCreate: { service: 'service', action: 'action', - physicalResourceId: 'id' + physicalResourceId: PhysicalResourceId.of('id') } }); @@ -298,7 +306,7 @@ test('can use existing role', () => { onCreate: { service: 'service', action: 'action', - physicalResourceId: 'id' + physicalResourceId: PhysicalResourceId.of('id') }, role }); @@ -318,7 +326,7 @@ test('getData', () => { onCreate: { service: 'service', action: 'action', - physicalResourceId: 'id' + physicalResourceId: PhysicalResourceId.of('id') } }); @@ -341,7 +349,7 @@ test('getDataString', () => { onCreate: { service: 'service', action: 'action', - physicalResourceId: 'id' + physicalResourceId: PhysicalResourceId.of('id') } }); @@ -353,7 +361,7 @@ test('getDataString', () => { parameters: { a: awsSdk.getDataString('Data') }, - physicalResourceId: 'id' + physicalResourceId: PhysicalResourceId.of('id') } }); @@ -370,7 +378,9 @@ test('getDataString', () => { ] } }, - physicalResourceId: 'id' + physicalResourceId: { + "id": 'id' + } } }); }); diff --git a/packages/@aws-cdk/custom-resources/test/aws-custom-resource/integ.aws-custom-resource.expected.json b/packages/@aws-cdk/custom-resources/test/aws-custom-resource/integ.aws-custom-resource.expected.json index 3bd2b19270e40..68bebdc9bc22d 100644 --- a/packages/@aws-cdk/custom-resources/test/aws-custom-resource/integ.aws-custom-resource.expected.json +++ b/packages/@aws-cdk/custom-resources/test/aws-custom-resource/integ.aws-custom-resource.expected.json @@ -22,7 +22,9 @@ } }, "physicalResourceId": { - "Ref": "TopicBFC7AF6E" + "id": { + "Ref": "TopicBFC7AF6E" + } } }, "Update": { @@ -35,7 +37,9 @@ } }, "physicalResourceId": { - "Ref": "TopicBFC7AF6E" + "id": { + "Ref": "TopicBFC7AF6E" + } } } }, @@ -109,7 +113,7 @@ "Properties": { "Code": { "S3Bucket": { - "Ref": "AssetParameters66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80cS3Bucket66DE4CD6" + "Ref": "AssetParameters6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748S3BucketFC283D1B" }, "S3Key": { "Fn::Join": [ @@ -122,7 +126,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80cS3VersionKeyE6A30774" + "Ref": "AssetParameters6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748S3VersionKey7E916B81" } ] } @@ -135,7 +139,7 @@ "Fn::Split": [ "||", { - "Ref": "AssetParameters66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80cS3VersionKeyE6A30774" + "Ref": "AssetParameters6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748S3VersionKey7E916B81" } ] } @@ -172,12 +176,16 @@ "Create": { "service": "SNS", "action": "listTopics", - "physicalResourceIdPath": "Topics.0.TopicArn" + "physicalResourceId": { + "responsePath": "Topics.0.TopicArn" + } }, "Update": { "service": "SNS", "action": "listTopics", - "physicalResourceIdPath": "Topics.0.TopicArn" + "physicalResourceId": { + "responsePath": "Topics.0.TopicArn" + } } }, "DependsOn": [ @@ -211,7 +219,9 @@ }, "WithDecryption": "TRUE:BOOLEAN" }, - "physicalResourceIdPath": "Parameter.ARN" + "physicalResourceId": { + "responsePath": "Parameter.ARN" + } }, "Update": { "service": "SSM", @@ -222,7 +232,9 @@ }, "WithDecryption": "TRUE:BOOLEAN" }, - "physicalResourceIdPath": "Parameter.ARN" + "physicalResourceId": { + "responsePath": "Parameter.ARN" + } } }, "UpdateReplacePolicy": "Delete", @@ -230,17 +242,17 @@ } }, "Parameters": { - "AssetParameters66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80cS3Bucket66DE4CD6": { + "AssetParameters6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748S3BucketFC283D1B": { "Type": "String", - "Description": "S3 bucket for asset \"66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80c\"" + "Description": "S3 bucket for asset \"6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748\"" }, - "AssetParameters66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80cS3VersionKeyE6A30774": { + "AssetParameters6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748S3VersionKey7E916B81": { "Type": "String", - "Description": "S3 key for asset version \"66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80c\"" + "Description": "S3 key for asset version \"6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748\"" }, - "AssetParameters66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80cArtifactHash89BF1AD1": { + "AssetParameters6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748ArtifactHashB96EE827": { "Type": "String", - "Description": "Artifact hash for asset \"66e21edb638c508d42940ac5560288d0e9666e592c8e3a4908b224ebf979d80c\"" + "Description": "Artifact hash for asset \"6bf0eac2bfd1c5dcd41b3cc53f24814f9dba9cce0cb7fe2e34d0ded661481748\"" } }, "Outputs": { diff --git a/packages/@aws-cdk/custom-resources/test/aws-custom-resource/integ.aws-custom-resource.ts b/packages/@aws-cdk/custom-resources/test/aws-custom-resource/integ.aws-custom-resource.ts index f736237e5bce1..3fd4f1b21f10a 100644 --- a/packages/@aws-cdk/custom-resources/test/aws-custom-resource/integ.aws-custom-resource.ts +++ b/packages/@aws-cdk/custom-resources/test/aws-custom-resource/integ.aws-custom-resource.ts @@ -2,7 +2,7 @@ import * as sns from '@aws-cdk/aws-sns'; import * as ssm from '@aws-cdk/aws-ssm'; import * as cdk from '@aws-cdk/core'; -import { AwsCustomResource } from '../../lib'; +import { AwsCustomResource, PhysicalResourceId } from '../../lib'; const app = new cdk.App(); @@ -19,7 +19,7 @@ const snsPublish = new AwsCustomResource(stack, 'Publish', { Message: 'hello', TopicArn: topic.topicArn }, - physicalResourceId: topic.topicArn, + physicalResourceId: PhysicalResourceId.of(topic.topicArn), } }); @@ -27,7 +27,7 @@ const listTopics = new AwsCustomResource(stack, 'ListTopics', { onUpdate: { service: 'SNS', action: 'listTopics', - physicalResourceIdPath: 'Topics.0.TopicArn' + physicalResourceId: PhysicalResourceId.fromResponse('Topics.0.TopicArn') } }); listTopics.node.addDependency(topic); @@ -44,7 +44,7 @@ const getParameter = new AwsCustomResource(stack, 'GetParameter', { Name: ssmParameter.parameterName, WithDecryption: true }, - physicalResourceIdPath: 'Parameter.ARN' + physicalResourceId: PhysicalResourceId.fromResponse('Parameter.ARN') } }); diff --git a/packages/@monocdk-experiment/rewrite-imports/package.json b/packages/@monocdk-experiment/rewrite-imports/package.json index 2a7db07373f5c..91ea548a128f5 100644 --- a/packages/@monocdk-experiment/rewrite-imports/package.json +++ b/packages/@monocdk-experiment/rewrite-imports/package.json @@ -27,11 +27,11 @@ }, "license": "Apache-2.0", "dependencies": { - "typescript": "^3.7.5" + "typescript": "^3.8.3" }, "devDependencies": { "cdk-build-tools": "0.0.0", "pkglint": "0.0.0", - "@types/node": "^13.7.1" + "@types/node": "^10.17.17" } } \ No newline at end of file diff --git a/packages/aws-cdk/package.json b/packages/aws-cdk/package.json index 5a41ac20a2228..9a0462e9588fb 100644 --- a/packages/aws-cdk/package.json +++ b/packages/aws-cdk/package.json @@ -48,7 +48,7 @@ "@types/jszip": "^3.1.7", "@types/minimatch": "^3.0.3", "@types/mockery": "^1.4.29", - "@types/node": "^10.17.15", + "@types/node": "^10.17.17", "@types/promptly": "^3.0.0", "@types/request": "^2.48.4", "@types/semver": "^7.1.0", @@ -71,7 +71,7 @@ "@aws-cdk/cx-api": "0.0.0", "@aws-cdk/region-info": "0.0.0", "archiver": "^3.1.1", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "camelcase": "^5.3.1", "colors": "^1.4.0", "decamelize": "^4.0.0", @@ -87,7 +87,7 @@ "table": "^5.4.6", "uuid": "^7.0.1", "yaml": "^1.7.2", - "yargs": "^15.0.2" + "yargs": "^15.2.0" }, "repository": { "url": "https://github.com/aws/aws-cdk.git", diff --git a/packages/cdk-assets/package.json b/packages/cdk-assets/package.json index 45b95a7494259..e17c77f6e099a 100644 --- a/packages/cdk-assets/package.json +++ b/packages/cdk-assets/package.json @@ -32,7 +32,7 @@ "@types/glob": "^7.1.1", "@types/jest": "^24.0.25", "@types/mock-fs": "^4.10.0", - "@types/node": "^10.17.13", + "@types/node": "^10.17.17", "@types/yargs": "^15.0.4", "cdk-build-tools": "0.0.0", "jest": "^24.9.0", @@ -42,9 +42,9 @@ "dependencies": { "@aws-cdk/cdk-assets-schema": "0.0.0", "archiver": "^3.1.1", - "aws-sdk": "^2.628.0", + "aws-sdk": "^2.630.0", "glob": "^7.1.6", - "yargs": "^15.0.2" + "yargs": "^15.2.0" }, "repository": { "url": "https://github.com/aws/aws-cdk.git", diff --git a/packages/decdk/package.json b/packages/decdk/package.json index 5bc15557ecd49..67557c0f9ab45 100644 --- a/packages/decdk/package.json +++ b/packages/decdk/package.json @@ -167,7 +167,7 @@ "jsii-reflect": "^1.0.0", "jsonschema": "^1.2.5", "yaml": "1.7.2", - "yargs": "^15.1.0" + "yargs": "^15.2.0" }, "devDependencies": { "@types/fs-extra": "^8.1.0", diff --git a/packages/monocdk-experiment/package.json b/packages/monocdk-experiment/package.json index b8a01db7599f1..905fc3009d753 100644 --- a/packages/monocdk-experiment/package.json +++ b/packages/monocdk-experiment/package.json @@ -158,7 +158,7 @@ "@aws-cdk/custom-resources": "0.0.0", "@aws-cdk/cx-api": "0.0.0", "@aws-cdk/region-info": "0.0.0", - "@types/node": "^10.17.15" + "@types/node": "^10.17.17" }, "homepage": "https://github.com/aws/aws-cdk", "engines": { diff --git a/tools/awslint/package.json b/tools/awslint/package.json index c2bfd6a9c657e..2763a93b69a91 100644 --- a/tools/awslint/package.json +++ b/tools/awslint/package.json @@ -21,13 +21,13 @@ "colors": "^1.4.0", "fs-extra": "^8.1.0", "jsii-reflect": "^1.0.0", - "yargs": "^15.1.0" + "yargs": "^15.2.0" }, "devDependencies": { "@types/fs-extra": "^8.1.0", "@types/yargs": "^15.0.4", "tslint": "^5.20.1", - "typescript": "~3.8.2" + "typescript": "~3.8.3" }, "repository": { "type": "git", diff --git a/tools/cdk-build-tools/package.json b/tools/cdk-build-tools/package.json index 78392ca3c800d..6cb83e043a61e 100644 --- a/tools/cdk-build-tools/package.json +++ b/tools/cdk-build-tools/package.json @@ -53,8 +53,8 @@ "nyc": "^15.0.0", "ts-jest": "^25.2.0", "tslint": "^5.20.1", - "typescript": "~3.8.2", - "yargs": "^15.1.0" + "typescript": "~3.8.3", + "yargs": "^15.2.0" }, "keywords": [ "aws", diff --git a/tools/cdk-integ-tools/package.json b/tools/cdk-integ-tools/package.json index a309b7fa3359f..3a30b98bab3b0 100644 --- a/tools/cdk-integ-tools/package.json +++ b/tools/cdk-integ-tools/package.json @@ -39,7 +39,7 @@ "@aws-cdk/cx-api": "0.0.0", "aws-cdk": "0.0.0", "fs-extra": "^8.1.0", - "yargs": "^15.1.0" + "yargs": "^15.2.0" }, "keywords": [ "aws", diff --git a/tools/cfn2ts/package.json b/tools/cfn2ts/package.json index 9eec0e4240c48..eebcea638d960 100644 --- a/tools/cfn2ts/package.json +++ b/tools/cfn2ts/package.json @@ -33,7 +33,7 @@ "codemaker": "^1.0.0", "fast-json-patch": "^3.0.0-1", "fs-extra": "^8.1.0", - "yargs": "^15.1.0" + "yargs": "^15.2.0" }, "devDependencies": { "@types/fs-extra": "^8.1.0", diff --git a/tools/pkglint/package.json b/tools/pkglint/package.json index 9e136eebc3266..52110d963a6da 100644 --- a/tools/pkglint/package.json +++ b/tools/pkglint/package.json @@ -43,6 +43,6 @@ "colors": "^1.4.0", "fs-extra": "^8.1.0", "semver": "^7.1.3", - "yargs": "^15.1.0" + "yargs": "^15.2.0" } } \ No newline at end of file diff --git a/tools/pkgtools/package.json b/tools/pkgtools/package.json index 3ac457ad43197..91478e8280483 100644 --- a/tools/pkgtools/package.json +++ b/tools/pkgtools/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "fs-extra": "^8.1.0", - "yargs": "^15.1.0" + "yargs": "^15.2.0" }, "keywords": [ "aws", diff --git a/yarn.lock b/yarn.lock index d9b15ee0f8a79..205e7b99c5ec0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2058,15 +2058,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.8.tgz#1d590429fe8187a02707720ecf38a6fe46ce294b" integrity sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A== -"@types/node@^10.17.13", "@types/node@^10.17.15": - version "10.17.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.16.tgz#ee96ddac1a38d98d2c8a71c7df0cdad5758e8993" - integrity sha512-A4283YSA1OmnIivcpy/4nN86YlnKRiQp8PYwI2KdPCONEBN093QTb0gCtERtkLyVNGKKIGazTZ2nAmVzQU51zA== - -"@types/node@^13.7.1": - version "13.7.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.4.tgz#76c3cb3a12909510f52e5dc04a6298cdf9504ffd" - integrity sha512-oVeL12C6gQS/GAExndigSaLxTrKpQPxewx9bOcwfvJiJge4rr7wNaph4J+ns5hrmIV2as5qxqN8YKthn9qh0jw== +"@types/node@^10.17.17": + version "10.17.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.17.tgz#7a183163a9e6ff720d86502db23ba4aade5999b8" + integrity sha512-gpNnRnZP3VWzzj5k3qrpRC6Rk3H/uclhAVo1aIvwzK5p5cOrs9yEyQ8H/HBsBY0u5rrWxXEiVPQ0dEB6pkjE8Q== "@types/nodeunit@^0.0.30": version "0.0.30" @@ -2651,10 +2646,10 @@ aws-sdk-mock@^5.0.0: sinon "^8.0.1" traverse "^0.6.6" -aws-sdk@^2.596.0, aws-sdk@^2.628.0: - version "2.628.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.628.0.tgz#bd4b54d3f8243af5c20bbd8aea5043aaef91c5ea" - integrity sha512-k0yQqqgTuwCWqPvLe09vGGSJ88oKaWPPCC6uyxQKv7pPQcz9cFZjmjLe6QdGJZeCmeb3rGIZlG+N4Z+9LnwCNg== +aws-sdk@^2.596.0, aws-sdk@^2.630.0: + version "2.630.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.630.0.tgz#108ccd50b585226db8d1798def73f7b873a2efa6" + integrity sha512-7BDPUIqmMZfZf+KN2Z3RpGDYGkEucQORLM2EqXuE91ETW5ySvoNd771+EaE3OS+FUx3JejfcVk8Rr2ZFU38RjA== dependencies: buffer "4.9.1" events "1.1.1" @@ -7942,7 +7937,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@^1.0.0: +mkdirp@*: version "1.0.3" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== @@ -8101,15 +8096,14 @@ nise@^4.0.1: just-extend "^4.0.2" path-to-regexp "^1.7.0" -nock@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-12.0.1.tgz#6d497d01f23cb52c733545c97e09e8318f6af801" - integrity sha512-f5u5k7O5D2YXH2WEFQVLLPa36D5C0dxU9Lrg6KOuaFCMDt7yd1W4S3hbZClCMczxc4EZ0k1bEhPeMWSewrxYNw== +nock@^12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/nock/-/nock-12.0.2.tgz#47617b34738e026b29d2294b4579e35b27e6a4d3" + integrity sha512-pTckyfP8QHvwXP/oX+zQuSIL3S/mWTd84ba4pOGZlS/FgRZyljv4C3ZyOjgMilvkydSaERML/aJEF13EBUuDTQ== dependencies: debug "^4.1.0" json-stringify-safe "^5.0.1" lodash "^4.17.13" - mkdirp "^1.0.0" propagate "^2.0.0" node-addon-api@^1.7.1: @@ -11591,10 +11585,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.3.3, typescript@^3.7.5, typescript@~3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.2.tgz#91d6868aaead7da74f493c553aeff76c0c0b1d5a" - integrity sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ== +typescript@^3.3.3, typescript@^3.8.3, typescript@~3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== typescript@~3.7.5: version "3.7.5" @@ -12237,6 +12231,14 @@ yargs-parser@^16.1.0: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-17.1.0.tgz#b95ff3201e98b89e86070f92bef636016a0b0766" + integrity sha512-67zLl4/kWtp9eyVuxX+fHZ2Ey4ySWh0awDJlk/EtT0vzspsXbzrFsh76WjYSP3L++zhSwHQRUE3MCBe754RuEg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" @@ -12295,10 +12297,10 @@ yargs@^14.0.0, yargs@^14.2.2: y18n "^4.0.0" yargs-parser "^15.0.0" -yargs@^15.0.2, yargs@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219" - integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg== +yargs@^15.0.2, yargs@^15.1.0, yargs@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.2.0.tgz#cb9fc7f7ec429f7e9329b623f5c707a62dae506a" + integrity sha512-E+o8C37U+M7N15rBJVxr0MoInp+O7XNhMqveSGWA5uhddqs8qtkZ+uvT9FI32QML0SKidXdDONr40Xe3tDO9FA== dependencies: cliui "^6.0.0" decamelize "^1.2.0" @@ -12310,7 +12312,7 @@ yargs@^15.0.2, yargs@^15.1.0: string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^16.1.0" + yargs-parser "^17.1.0" yargs@^4.7.1: version "4.8.1"