From 5f492b665ef693ff17767282556246a7e6933650 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 18 Jan 2021 17:53:08 +0000 Subject: [PATCH 01/26] feat: add intial cdk component --- .../__snapshots__/snapshots.test.ts.snap | 2031 +++++++++++++++++ .../next-boilerplate/api-lambda/index.js | 1 + .../next-boilerplate/api-lambda/manifest.json | 1 + .../api-lambda/pages/api/users.js | 1 + .../api-lambda/routes-manifest.json | 1 + .../fixtures/next-boilerplate/assets/BUILD_ID | 1 + .../assets/_next/data/stub.json | 0 .../assets/_next/static/stub.json | 1 + .../next-boilerplate/assets/public/stub.json | 0 .../assets/static-pages/stub.html | 11 + .../next-boilerplate/default-lambda/index.js | 1 + .../default-lambda/manifest.json | 1 + .../default-lambda/prerender-manifest.json | 1 + .../default-lambda/routes-manifest.json | 1 + .../image-lambda/images-manifest.json | 1 + .../next-boilerplate/image-lambda/index.js | 1 + .../image-lambda/manifest.json | 1 + .../image-lambda/routes-manifest.json | 1 + .../__tests__/snapshots.test.ts | 16 + .../__tests__/utils.test.ts | 14 + .../nextjs-cdk-construct/package.json | 48 + .../nextjs-cdk-construct/src/index.ts | 376 +++ .../nextjs-cdk-construct/src/props.ts | 65 + .../nextjs-cdk-construct/src/utils.ts | 18 + .../nextjs-cdk-construct/tsconfig.json | 16 + .../nextjs-cdk-construct/yarn.lock | 752 ++++++ yarn.lock | 156 +- 27 files changed, 3506 insertions(+), 11 deletions(-) create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/index.js create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/manifest.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/pages/api/users.js create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/routes-manifest.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/BUILD_ID create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/_next/data/stub.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/_next/static/stub.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/public/stub.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/static-pages/stub.html create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/index.js create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/manifest.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/prerender-manifest.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/routes-manifest.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/images-manifest.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/index.js create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/manifest.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/routes-manifest.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/snapshots.test.ts create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts create mode 100644 packages/serverless-components/nextjs-cdk-construct/package.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/src/index.ts create mode 100644 packages/serverless-components/nextjs-cdk-construct/src/props.ts create mode 100644 packages/serverless-components/nextjs-cdk-construct/src/utils.ts create mode 100644 packages/serverless-components/nextjs-cdk-construct/tsconfig.json create mode 100644 packages/serverless-components/nextjs-cdk-construct/yarn.lock diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap new file mode 100644 index 0000000000..3ab48edf0e --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap @@ -0,0 +1,2031 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`CDK Construct Snapshots creates boilerplate next app 1`] = ` +Object { + "Parameters": Object { + "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44ArtifactHashB7995E1D": Object { + "Description": "Artifact hash for asset \\"017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44\\"", + "Type": "String", + }, + "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3Bucket18618D63": Object { + "Description": "S3 bucket for asset \\"017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44\\"", + "Type": "String", + }, + "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3VersionKeyCB5488FF": Object { + "Description": "S3 key for asset version \\"017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44\\"", + "Type": "String", + }, + "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { + "Description": "Artifact hash for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "Type": "String", + }, + "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5": Object { + "Description": "S3 bucket for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "Type": "String", + }, + "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861": Object { + "Description": "S3 key for asset version \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "Type": "String", + }, + "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3ArtifactHash62C7B2C0": Object { + "Description": "Artifact hash for asset \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "Type": "String", + }, + "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5": Object { + "Description": "S3 bucket for asset \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "Type": "String", + }, + "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8": Object { + "Description": "S3 key for asset version \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "Type": "String", + }, + "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1ArtifactHash78F94626": Object { + "Description": "Artifact hash for asset \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "Type": "String", + }, + "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2": Object { + "Description": "S3 bucket for asset \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "Type": "String", + }, + "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8": Object { + "Description": "S3 key for asset version \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "Type": "String", + }, + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": Object { + "Description": "Artifact hash for asset \\"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\\"", + "Type": "String", + }, + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00": Object { + "Description": "S3 bucket for asset \\"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\\"", + "Type": "String", + }, + "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76": Object { + "Description": "S3 key for asset version \\"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\\"", + "Type": "String", + }, + "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819ArtifactHash002418CD": Object { + "Description": "Artifact hash for asset \\"969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819\\"", + "Type": "String", + }, + "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3Bucket928FA75E": Object { + "Description": "S3 bucket for asset \\"969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819\\"", + "Type": "String", + }, + "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3VersionKey3C8A639D": Object { + "Description": "S3 key for asset version \\"969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819\\"", + "Type": "String", + }, + "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fArtifactHashB137ECA9": Object { + "Description": "Artifact hash for asset \\"d5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308f\\"", + "Type": "String", + }, + "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3Bucket7C30CEE1": Object { + "Description": "S3 bucket for asset \\"d5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308f\\"", + "Type": "String", + }, + "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3VersionKey727F28C8": Object { + "Description": "S3 key for asset version \\"d5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308f\\"", + "Type": "String", + }, + "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68ArtifactHashD9A515C3": Object { + "Description": "Artifact hash for asset \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", + "Type": "String", + }, + "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7": Object { + "Description": "S3 bucket for asset \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", + "Type": "String", + }, + "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F": Object { + "Description": "S3 key for asset version \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", + "Type": "String", + }, + "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02ArtifactHash42AE7E30": Object { + "Description": "Artifact hash for asset \\"ec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02\\"", + "Type": "String", + }, + "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3BucketC0AB9189": Object { + "Description": "S3 bucket for asset \\"ec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02\\"", + "Type": "String", + }, + "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3VersionKey62882515": Object { + "Description": "S3 key for asset version \\"ec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02\\"", + "Type": "String", + }, + }, + "Resources": Object { + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536": Object { + "DependsOn": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "index.handler", + "Layers": Array [ + Object { + "Ref": "StackAssetDeploymentnextStaticFilesPathAwsCliLayer08C52E6E", + }, + ], + "Role": Object { + "Fn::GetAtt": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + "Arn", + ], + }, + "Runtime": "python3.6", + "Timeout": 900, + }, + "Type": "AWS::Lambda::Function", + }, + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + "s3:DeleteObject*", + "s3:PutObject*", + "s3:Abort*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "cloudfront:GetInvalidation", + "cloudfront:CreateInvalidation", + ], + "Effect": "Allow", + "Resource": "*", + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3Bucket18618D63", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3Bucket18618D63", + }, + "/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRoleDefaultPolicy88902FDF", + "Roles": Array [ + Object { + "Ref": "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756CServiceRole89A01265", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": Object { + "DependsOn": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + }, + "Type": "AWS::Lambda::Function", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + ], + }, + ], + }, + "Type": "AWS::IAM::Role", + }, + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB": Object { + "Properties": Object { + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": Array [ + "logs:PutRetentionPolicy", + "logs:DeleteRetentionPolicy", + ], + "Effect": "Allow", + "Resource": "*", + }, + ], + "Version": "2012-10-17", + }, + "PolicyName": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", + "Roles": Array [ + Object { + "Ref": "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRole9741ECFB", + }, + ], + }, + "Type": "AWS::IAM::Policy", + }, + "StackAssetDeploymenthtmlPagesPathAwsCliLayer36755759": Object { + "Properties": Object { + "Content": Object { + "S3Bucket": Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "/opt/awscli/aws", + }, + "Type": "AWS::Lambda::LayerVersion", + }, + "StackAssetDeploymenthtmlPagesPathCustomResource21E5289D": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DestinationBucketKeyPrefix": "static-pages", + "DestinationBucketName": Object { + "Ref": "StackPublicAssets8F0F4FE8", + }, + "DistributionId": Object { + "Ref": "StackNextJSDistribution03A07E47", + }, + "DistributionPaths": Array [ + "/*", + ], + "Prune": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "Arn", + ], + }, + "SourceBucketNames": Array [ + Object { + "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3Bucket18618D63", + }, + ], + "SourceObjectKeys": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3VersionKeyCB5488FF", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3VersionKeyCB5488FF", + }, + ], + }, + ], + }, + ], + ], + }, + ], + "SystemMetadata": Object { + "cache-control": "public, max-age=31536000, immutable", + }, + }, + "Type": "Custom::CDKBucketDeployment", + "UpdateReplacePolicy": "Delete", + }, + "StackAssetDeploymentnextDataFilesPathAwsCliLayer2B155E45": Object { + "Properties": Object { + "Content": Object { + "S3Bucket": Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "/opt/awscli/aws", + }, + "Type": "AWS::Lambda::LayerVersion", + }, + "StackAssetDeploymentnextDataFilesPathCustomResourceAB833872": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DestinationBucketKeyPrefix": "_next/data", + "DestinationBucketName": Object { + "Ref": "StackPublicAssets8F0F4FE8", + }, + "DistributionId": Object { + "Ref": "StackNextJSDistribution03A07E47", + }, + "DistributionPaths": Array [ + "/*", + ], + "Prune": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "Arn", + ], + }, + "SourceBucketNames": Array [ + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + }, + ], + "SourceObjectKeys": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + }, + ], + }, + ], + }, + ], + ], + }, + ], + "SystemMetadata": Object { + "cache-control": "public, max-age=31536000, immutable", + }, + }, + "Type": "Custom::CDKBucketDeployment", + "UpdateReplacePolicy": "Delete", + }, + "StackAssetDeploymentnextStaticFilesPathAwsCliLayer08C52E6E": Object { + "Properties": Object { + "Content": Object { + "S3Bucket": Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "/opt/awscli/aws", + }, + "Type": "AWS::Lambda::LayerVersion", + }, + "StackAssetDeploymentnextStaticFilesPathCustomResource2E97C399": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DestinationBucketKeyPrefix": "_next/static", + "DestinationBucketName": Object { + "Ref": "StackPublicAssets8F0F4FE8", + }, + "DistributionId": Object { + "Ref": "StackNextJSDistribution03A07E47", + }, + "DistributionPaths": Array [ + "/*", + ], + "Prune": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "Arn", + ], + }, + "SourceBucketNames": Array [ + Object { + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", + }, + ], + "SourceObjectKeys": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8", + }, + ], + }, + ], + }, + ], + ], + }, + ], + "SystemMetadata": Object { + "cache-control": "public, max-age=31536000, immutable", + }, + }, + "Type": "Custom::CDKBucketDeployment", + "UpdateReplacePolicy": "Delete", + }, + "StackAssetDeploymentpublicFilesPathAwsCliLayer49446A62": Object { + "Properties": Object { + "Content": Object { + "S3Bucket": Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "/opt/awscli/aws", + }, + "Type": "AWS::Lambda::LayerVersion", + }, + "StackAssetDeploymentpublicFilesPathCustomResource66C28015": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DestinationBucketKeyPrefix": "public", + "DestinationBucketName": Object { + "Ref": "StackPublicAssets8F0F4FE8", + }, + "DistributionId": Object { + "Ref": "StackNextJSDistribution03A07E47", + }, + "DistributionPaths": Array [ + "/*", + ], + "Prune": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "Arn", + ], + }, + "SourceBucketNames": Array [ + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + }, + ], + "SourceObjectKeys": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + }, + ], + }, + ], + }, + ], + ], + }, + ], + "SystemMetadata": Object { + "cache-control": "public, max-age=31536000, immutable", + }, + }, + "Type": "Custom::CDKBucketDeployment", + "UpdateReplacePolicy": "Delete", + }, + "StackImageOriginRequest30DFB17C": Object { + "Properties": Object { + "OriginRequestPolicyConfig": Object { + "CookiesConfig": Object { + "CookieBehavior": "none", + }, + "HeadersConfig": Object { + "HeaderBehavior": "none", + }, + "Name": "StackImageOriginRequestF06FCDA0", + "QueryStringsConfig": Object { + "QueryStringBehavior": "all", + }, + }, + }, + "Type": "AWS::CloudFront::OriginRequestPolicy", + }, + "StackNextApiLambda8BE78FBE": Object { + "DependsOn": Array [ + "StackNextEdgeLambdaRole02C429A6", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3Bucket7C30CEE1", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3VersionKey727F28C8", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3VersionKey727F28C8", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "Default Lambda@Edge for Next API CloudFront distribution", + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "StackNextEdgeLambdaRole02C429A6", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + }, + "Type": "AWS::Lambda::Function", + }, + "StackNextApiLambdaCurrentVersion09578A6Ab80145a30d19c6a0b5589dade547972d": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "FunctionName": Object { + "Ref": "StackNextApiLambda8BE78FBE", + }, + }, + "Type": "AWS::Lambda::Version", + "UpdateReplacePolicy": "Delete", + }, + "StackNextApiLambdaCurrentVersionAliaslive8AA37EB3": Object { + "Properties": Object { + "FunctionName": Object { + "Ref": "StackNextApiLambda8BE78FBE", + }, + "FunctionVersion": Object { + "Fn::GetAtt": Array [ + "StackNextApiLambdaCurrentVersion09578A6Ab80145a30d19c6a0b5589dade547972d", + "Version", + ], + }, + "Name": "live", + }, + "Type": "AWS::Lambda::Alias", + }, + "StackNextApiLambdaCurrentVersionEventInvokeConfig473B707A": Object { + "Properties": Object { + "FunctionName": Object { + "Ref": "StackNextApiLambda8BE78FBE", + }, + "MaximumRetryAttempts": 1, + "Qualifier": Object { + "Fn::GetAtt": Array [ + "StackNextApiLambdaCurrentVersion09578A6Ab80145a30d19c6a0b5589dade547972d", + "Version", + ], + }, + }, + "Type": "AWS::Lambda::EventInvokeConfig", + }, + "StackNextApiLambdaLogRetention2569EAED": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "StackNextApiLambda8BE78FBE", + }, + ], + ], + }, + "RetentionInDays": 3, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "StackNextEdgeLambdaRole02C429A6": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": Array [ + "lambda.amazonaws.com", + "edgelambda.amazonaws.com", + ], + }, + }, + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "edgelambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + ], + }, + "Type": "AWS::IAM::Role", + }, + "StackNextImageCache169F453D": Object { + "Properties": Object { + "CachePolicyConfig": Object { + "DefaultTTL": 86400, + "MaxTTL": 31536000, + "MinTTL": 0, + "Name": "StackNextImageCache78CE64D5", + "ParametersInCacheKeyAndForwardedToOrigin": Object { + "CookiesConfig": Object { + "CookieBehavior": "none", + }, + "EnableAcceptEncodingBrotli": true, + "EnableAcceptEncodingGzip": true, + "HeadersConfig": Object { + "HeaderBehavior": "whitelist", + "Headers": Array [ + "Accept", + ], + }, + "QueryStringsConfig": Object { + "QueryStringBehavior": "none", + }, + }, + }, + }, + "Type": "AWS::CloudFront::CachePolicy", + }, + "StackNextImageLambda2847952D": Object { + "DependsOn": Array [ + "StackNextEdgeLambdaRole02C429A6", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3BucketC0AB9189", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3VersionKey62882515", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3VersionKey62882515", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "Default Lambda@Edge for Next Image CloudFront distribution", + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "StackNextEdgeLambdaRole02C429A6", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + }, + "Type": "AWS::Lambda::Function", + }, + "StackNextImageLambdaCurrentVersionAliasliveE4A66187": Object { + "Properties": Object { + "FunctionName": Object { + "Ref": "StackNextImageLambda2847952D", + }, + "FunctionVersion": Object { + "Fn::GetAtt": Array [ + "StackNextImageLambdaCurrentVersionDEC920BCe0255405323cfb65d9fea7113c49b3ee", + "Version", + ], + }, + "Name": "live", + }, + "Type": "AWS::Lambda::Alias", + }, + "StackNextImageLambdaCurrentVersionDEC920BCe0255405323cfb65d9fea7113c49b3ee": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "FunctionName": Object { + "Ref": "StackNextImageLambda2847952D", + }, + }, + "Type": "AWS::Lambda::Version", + "UpdateReplacePolicy": "Delete", + }, + "StackNextImageLambdaCurrentVersionEventInvokeConfig3F977EB2": Object { + "Properties": Object { + "FunctionName": Object { + "Ref": "StackNextImageLambda2847952D", + }, + "MaximumRetryAttempts": 1, + "Qualifier": Object { + "Fn::GetAtt": Array [ + "StackNextImageLambdaCurrentVersionDEC920BCe0255405323cfb65d9fea7113c49b3ee", + "Version", + ], + }, + }, + "Type": "AWS::Lambda::EventInvokeConfig", + }, + "StackNextImageLambdaLogRetentionF781777A": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "StackNextImageLambda2847952D", + }, + ], + ], + }, + "RetentionInDays": 3, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "StackNextJSDistribution03A07E47": Object { + "Properties": Object { + "DistributionConfig": Object { + "CacheBehaviors": Array [ + Object { + "AllowedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + "PUT", + "PATCH", + "POST", + "DELETE", + ], + "CachePolicyId": Object { + "Ref": "StackNextImageCache169F453D", + }, + "CachedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "Compress": true, + "LambdaFunctionAssociations": Array [ + Object { + "EventType": "origin-request", + "LambdaFunctionARN": Object { + "Ref": "StackNextImageLambdaCurrentVersionDEC920BCe0255405323cfb65d9fea7113c49b3ee", + }, + }, + ], + "OriginRequestPolicyId": Object { + "Ref": "StackImageOriginRequest30DFB17C", + }, + "PathPattern": "_next/image*", + "TargetOriginId": "StackNextJSDistributionOrigin227291135", + "ViewerProtocolPolicy": "redirect-to-https", + }, + Object { + "AllowedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "CachePolicyId": Object { + "Ref": "StackNextLambdaCacheF214CEF2", + }, + "CachedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "Compress": true, + "LambdaFunctionAssociations": Array [ + Object { + "EventType": "origin-request", + "IncludeBody": true, + "LambdaFunctionARN": Object { + "Ref": "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + }, + }, + Object { + "EventType": "origin-response", + "LambdaFunctionARN": Object { + "Ref": "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + }, + }, + ], + "PathPattern": "_next/data/*", + "TargetOriginId": "StackNextJSDistributionOrigin33202980A", + "ViewerProtocolPolicy": "redirect-to-https", + }, + Object { + "AllowedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "CachePolicyId": Object { + "Ref": "StackNextStaticsCacheC4615915", + }, + "CachedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "Compress": true, + "PathPattern": "_next/*", + "TargetOriginId": "StackNextJSDistributionOrigin4BE563FB7", + "ViewerProtocolPolicy": "redirect-to-https", + }, + Object { + "AllowedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "CachePolicyId": Object { + "Ref": "StackNextStaticsCacheC4615915", + }, + "CachedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "Compress": true, + "PathPattern": "static/*", + "TargetOriginId": "StackNextJSDistributionOrigin5E99C79BE", + "ViewerProtocolPolicy": "redirect-to-https", + }, + Object { + "AllowedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "CachePolicyId": Object { + "Ref": "StackNextLambdaCacheF214CEF2", + }, + "CachedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "Compress": true, + "LambdaFunctionAssociations": Array [ + Object { + "EventType": "origin-request", + "LambdaFunctionARN": Object { + "Ref": "StackNextApiLambdaCurrentVersion09578A6Ab80145a30d19c6a0b5589dade547972d", + }, + }, + ], + "PathPattern": "api/*", + "TargetOriginId": "StackNextJSDistributionOrigin6F399DA4B", + "ViewerProtocolPolicy": "redirect-to-https", + }, + ], + "DefaultCacheBehavior": Object { + "AllowedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "CachePolicyId": Object { + "Ref": "StackNextLambdaCacheF214CEF2", + }, + "CachedMethods": Array [ + "GET", + "HEAD", + "OPTIONS", + ], + "Compress": true, + "LambdaFunctionAssociations": Array [ + Object { + "EventType": "origin-request", + "IncludeBody": true, + "LambdaFunctionARN": Object { + "Ref": "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + }, + }, + Object { + "EventType": "origin-response", + "LambdaFunctionARN": Object { + "Ref": "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + }, + }, + ], + "TargetOriginId": "StackNextJSDistributionOrigin164EFF789", + "ViewerProtocolPolicy": "redirect-to-https", + }, + "DefaultRootObject": "", + "Enabled": true, + "HttpVersion": "http2", + "IPV6Enabled": true, + "Origins": Array [ + Object { + "DomainName": Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "RegionalDomainName", + ], + }, + "Id": "StackNextJSDistributionOrigin164EFF789", + "S3OriginConfig": Object { + "OriginAccessIdentity": Object { + "Fn::Join": Array [ + "", + Array [ + "origin-access-identity/cloudfront/", + Object { + "Ref": "StackNextJSDistributionOrigin1S3OriginE5C3C6BA", + }, + ], + ], + }, + }, + }, + Object { + "DomainName": Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "RegionalDomainName", + ], + }, + "Id": "StackNextJSDistributionOrigin227291135", + "S3OriginConfig": Object { + "OriginAccessIdentity": Object { + "Fn::Join": Array [ + "", + Array [ + "origin-access-identity/cloudfront/", + Object { + "Ref": "StackNextJSDistributionOrigin2S3OriginBE3A92C1", + }, + ], + ], + }, + }, + }, + Object { + "DomainName": Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "RegionalDomainName", + ], + }, + "Id": "StackNextJSDistributionOrigin33202980A", + "S3OriginConfig": Object { + "OriginAccessIdentity": Object { + "Fn::Join": Array [ + "", + Array [ + "origin-access-identity/cloudfront/", + Object { + "Ref": "StackNextJSDistributionOrigin3S3Origin815895A3", + }, + ], + ], + }, + }, + }, + Object { + "DomainName": Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "RegionalDomainName", + ], + }, + "Id": "StackNextJSDistributionOrigin4BE563FB7", + "S3OriginConfig": Object { + "OriginAccessIdentity": Object { + "Fn::Join": Array [ + "", + Array [ + "origin-access-identity/cloudfront/", + Object { + "Ref": "StackNextJSDistributionOrigin4S3Origin25CF633C", + }, + ], + ], + }, + }, + }, + Object { + "DomainName": Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "RegionalDomainName", + ], + }, + "Id": "StackNextJSDistributionOrigin5E99C79BE", + "S3OriginConfig": Object { + "OriginAccessIdentity": Object { + "Fn::Join": Array [ + "", + Array [ + "origin-access-identity/cloudfront/", + Object { + "Ref": "StackNextJSDistributionOrigin5S3OriginF7CEDF65", + }, + ], + ], + }, + }, + }, + Object { + "DomainName": Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "RegionalDomainName", + ], + }, + "Id": "StackNextJSDistributionOrigin6F399DA4B", + "S3OriginConfig": Object { + "OriginAccessIdentity": Object { + "Fn::Join": Array [ + "", + Array [ + "origin-access-identity/cloudfront/", + Object { + "Ref": "StackNextJSDistributionOrigin6S3Origin922D99DB", + }, + ], + ], + }, + }, + }, + ], + }, + }, + "Type": "AWS::CloudFront::Distribution", + }, + "StackNextJSDistributionOrigin1S3OriginE5C3C6BA": Object { + "Properties": Object { + "CloudFrontOriginAccessIdentityConfig": Object { + "Comment": "Identity for StackNextJSDistributionOrigin164EFF789", + }, + }, + "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", + }, + "StackNextJSDistributionOrigin2S3OriginBE3A92C1": Object { + "Properties": Object { + "CloudFrontOriginAccessIdentityConfig": Object { + "Comment": "Identity for StackNextJSDistributionOrigin227291135", + }, + }, + "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", + }, + "StackNextJSDistributionOrigin3S3Origin815895A3": Object { + "Properties": Object { + "CloudFrontOriginAccessIdentityConfig": Object { + "Comment": "Identity for StackNextJSDistributionOrigin33202980A", + }, + }, + "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", + }, + "StackNextJSDistributionOrigin4S3Origin25CF633C": Object { + "Properties": Object { + "CloudFrontOriginAccessIdentityConfig": Object { + "Comment": "Identity for StackNextJSDistributionOrigin4BE563FB7", + }, + }, + "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", + }, + "StackNextJSDistributionOrigin5S3OriginF7CEDF65": Object { + "Properties": Object { + "CloudFrontOriginAccessIdentityConfig": Object { + "Comment": "Identity for StackNextJSDistributionOrigin5E99C79BE", + }, + }, + "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", + }, + "StackNextJSDistributionOrigin6S3Origin922D99DB": Object { + "Properties": Object { + "CloudFrontOriginAccessIdentityConfig": Object { + "Comment": "Identity for StackNextJSDistributionOrigin6F399DA4B", + }, + }, + "Type": "AWS::CloudFront::CloudFrontOriginAccessIdentity", + }, + "StackNextLambdaCacheF214CEF2": Object { + "Properties": Object { + "CachePolicyConfig": Object { + "DefaultTTL": 0, + "MaxTTL": 31536000, + "MinTTL": 0, + "Name": "StackNextLambdaCache86499DCE", + "ParametersInCacheKeyAndForwardedToOrigin": Object { + "CookiesConfig": Object { + "CookieBehavior": "all", + }, + "EnableAcceptEncodingBrotli": true, + "EnableAcceptEncodingGzip": true, + "HeadersConfig": Object { + "HeaderBehavior": "none", + }, + "QueryStringsConfig": Object { + "QueryStringBehavior": "all", + }, + }, + }, + }, + "Type": "AWS::CloudFront::CachePolicy", + }, + "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "FunctionName": Object { + "Ref": "StackNextLambdaF64DCE99", + }, + }, + "Type": "AWS::Lambda::Version", + "UpdateReplacePolicy": "Delete", + }, + "StackNextLambdaCurrentVersionAliasliveB07D2AA0": Object { + "Properties": Object { + "FunctionName": Object { + "Ref": "StackNextLambdaF64DCE99", + }, + "FunctionVersion": Object { + "Fn::GetAtt": Array [ + "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + "Version", + ], + }, + "Name": "live", + }, + "Type": "AWS::Lambda::Alias", + }, + "StackNextLambdaF64DCE99": Object { + "DependsOn": Array [ + "StackNextEdgeLambdaRole02C429A6", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3Bucket928FA75E", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3VersionKey3C8A639D", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3VersionKey3C8A639D", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "Default Lambda@Edge for Next CloudFront distribution", + "Handler": "index.handler", + "Role": Object { + "Fn::GetAtt": Array [ + "StackNextEdgeLambdaRole02C429A6", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + }, + "Type": "AWS::Lambda::Function", + }, + "StackNextLambdaLogRetention4645F5D1": Object { + "Properties": Object { + "LogGroupName": Object { + "Fn::Join": Array [ + "", + Array [ + "/aws/lambda/", + Object { + "Ref": "StackNextLambdaF64DCE99", + }, + ], + ], + }, + "RetentionInDays": 3, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A", + "Arn", + ], + }, + }, + "Type": "Custom::LogRetention", + }, + "StackNextStaticsCacheC4615915": Object { + "Properties": Object { + "CachePolicyConfig": Object { + "DefaultTTL": 2592000, + "MaxTTL": 2592000, + "MinTTL": 2592000, + "Name": "StackNextStaticsCacheBB90E053", + "ParametersInCacheKeyAndForwardedToOrigin": Object { + "CookiesConfig": Object { + "CookieBehavior": "none", + }, + "EnableAcceptEncodingBrotli": true, + "EnableAcceptEncodingGzip": true, + "HeadersConfig": Object { + "HeaderBehavior": "none", + }, + "QueryStringsConfig": Object { + "QueryStringBehavior": "none", + }, + }, + }, + }, + "Type": "AWS::CloudFront::CachePolicy", + }, + "StackPublicAssets8F0F4FE8": Object { + "DeletionPolicy": "Retain", + "Type": "AWS::S3::Bucket", + "UpdateReplacePolicy": "Retain", + }, + "StackPublicAssetsPolicy113B95FD": Object { + "Properties": Object { + "Bucket": Object { + "Ref": "StackPublicAssets8F0F4FE8", + }, + "PolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "s3:GetObject", + "Effect": "Allow", + "Principal": "*", + "Resource": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Principal": Object { + "CanonicalUser": Object { + "Fn::GetAtt": Array [ + "StackNextJSDistributionOrigin1S3OriginE5C3C6BA", + "S3CanonicalUserId", + ], + }, + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Principal": Object { + "CanonicalUser": Object { + "Fn::GetAtt": Array [ + "StackNextJSDistributionOrigin2S3OriginBE3A92C1", + "S3CanonicalUserId", + ], + }, + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Principal": Object { + "CanonicalUser": Object { + "Fn::GetAtt": Array [ + "StackNextJSDistributionOrigin3S3Origin815895A3", + "S3CanonicalUserId", + ], + }, + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Principal": Object { + "CanonicalUser": Object { + "Fn::GetAtt": Array [ + "StackNextJSDistributionOrigin4S3Origin25CF633C", + "S3CanonicalUserId", + ], + }, + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Principal": Object { + "CanonicalUser": Object { + "Fn::GetAtt": Array [ + "StackNextJSDistributionOrigin5S3OriginF7CEDF65", + "S3CanonicalUserId", + ], + }, + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Principal": Object { + "CanonicalUser": Object { + "Fn::GetAtt": Array [ + "StackNextJSDistributionOrigin6S3Origin922D99DB", + "S3CanonicalUserId", + ], + }, + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, + ], + "Version": "2012-10-17", + }, + }, + "Type": "AWS::S3::BucketPolicy", + }, + }, +} +`; diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/index.js b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/index.js new file mode 100644 index 0000000000..7a157c6ee6 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/index.js @@ -0,0 +1 @@ +exports.handler = async () => ({ statusCode: 200 }); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/manifest.json new file mode 100644 index 0000000000..6874c4a6a6 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/manifest.json @@ -0,0 +1 @@ +{"apis":{"dynamic":{},"nonDynamic":{"/api/users":"pages/api/users.js"}},"domainRedirects":{},"enableHTTPCompression":false} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/pages/api/users.js b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/pages/api/users.js new file mode 100644 index 0000000000..7a157c6ee6 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/pages/api/users.js @@ -0,0 +1 @@ +exports.handler = async () => ({ statusCode: 200 }); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/routes-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/routes-manifest.json new file mode 100644 index 0000000000..d6be64ffb3 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/routes-manifest.json @@ -0,0 +1 @@ +{"version":3,"pages404":true,"basePath":"","redirects":[],"rewrites":[],"headers":[],"dynamicRoutes":[{"page":"/users/[id]","regex":"^/users/([^/]+?)(?:/)?$","routeKeys":{"id":"id"},"namedRegex":"^/users/(?[^/]+?)(?:/)?$"}],"dataRoutes":[{"page":"/users","dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$"},{"page":"/users/[id]","routeKeys":{"id":"id"},"dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$","namedDataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$"}]} \ No newline at end of file diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/BUILD_ID b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/BUILD_ID new file mode 100644 index 0000000000..f24873cd5f --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/BUILD_ID @@ -0,0 +1 @@ +IOjzqKr7ylEZVL7Xy7FMd \ No newline at end of file diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/_next/data/stub.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/_next/data/stub.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/_next/static/stub.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/_next/static/stub.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/_next/static/stub.json @@ -0,0 +1 @@ +{} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/public/stub.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/public/stub.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/static-pages/stub.html b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/static-pages/stub.html new file mode 100644 index 0000000000..34759afa7b --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/static-pages/stub.html @@ -0,0 +1,11 @@ + + + + + + Stub + + +

Stub

+ + diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/index.js b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/index.js new file mode 100644 index 0000000000..7a157c6ee6 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/index.js @@ -0,0 +1 @@ +exports.handler = async () => ({ statusCode: 200 }); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/manifest.json new file mode 100644 index 0000000000..390383423c --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/manifest.json @@ -0,0 +1 @@ +{"buildId":"IOjzqKr7ylEZVL7Xy7FMd","logLambdaExecutionTimes":true,"pages":{"ssr":{"dynamic":{"/users/:id":{"file":"pages/users/[id].js","regex":"^\\/users(?:\\/([^\\/#\\?]+?))[\\/#\\?]?$"}},"nonDynamic":{"/users":"pages/users.js","/_error":"pages/_error.js"}},"html":{"dynamic":{},"nonDynamic":{"/about":"pages/about.html","/":"pages/index.html","/404":"pages/404.html"}}},"publicFiles":{"/planes.jpg":"planes.jpg"},"trailingSlash":false,"domainRedirects":{},"enableHTTPCompression":false} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/prerender-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/prerender-manifest.json new file mode 100644 index 0000000000..5baa163f38 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/prerender-manifest.json @@ -0,0 +1 @@ +{"version":2,"routes":{"/users":{"initialRevalidateSeconds":false,"srcRoute":null,"dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json"},"/users/101":{"initialRevalidateSeconds":false,"srcRoute":"/users/[id]","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/101.json"},"/users/102":{"initialRevalidateSeconds":false,"srcRoute":"/users/[id]","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/102.json"},"/users/103":{"initialRevalidateSeconds":false,"srcRoute":"/users/[id]","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/103.json"},"/users/104":{"initialRevalidateSeconds":false,"srcRoute":"/users/[id]","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/104.json"}},"dynamicRoutes":{"/users/[id]":{"routeRegex":"^/users/([^/]+?)(?:/)?$","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/[id].json","fallback":false,"dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$"}},"notFoundRoutes":[],"preview":{"previewModeId":"64a40f77826dd9cb91c1f640436433dd","previewModeSigningKey":"b362d55f91531d2c2a13bff0a008e47b4954b90ec8110e3607b6f810b174f8d1","previewModeEncryptionKey":"31bfd880a98a525f77d3edb3d7cc184b9ef10297f5b7db77d0b9a75057c84733"}} \ No newline at end of file diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/routes-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/routes-manifest.json new file mode 100644 index 0000000000..d6be64ffb3 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/routes-manifest.json @@ -0,0 +1 @@ +{"version":3,"pages404":true,"basePath":"","redirects":[],"rewrites":[],"headers":[],"dynamicRoutes":[{"page":"/users/[id]","regex":"^/users/([^/]+?)(?:/)?$","routeKeys":{"id":"id"},"namedRegex":"^/users/(?[^/]+?)(?:/)?$"}],"dataRoutes":[{"page":"/users","dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$"},{"page":"/users/[id]","routeKeys":{"id":"id"},"dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$","namedDataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$"}]} \ No newline at end of file diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/images-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/images-manifest.json new file mode 100644 index 0000000000..952c6a8ea9 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/images-manifest.json @@ -0,0 +1 @@ +{"version":1,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","domains":[],"sizes":[640,750,828,1080,1200,1920,2048,3840,16,32,48,64,96,128,256,384]}} \ No newline at end of file diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/index.js b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/index.js new file mode 100644 index 0000000000..7a157c6ee6 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/index.js @@ -0,0 +1 @@ +exports.handler = async () => ({ statusCode: 200 }); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/manifest.json new file mode 100644 index 0000000000..4ae59bb484 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/manifest.json @@ -0,0 +1 @@ +{"domainRedirects":{},"enableHTTPCompression":false} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/routes-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/routes-manifest.json new file mode 100644 index 0000000000..d6be64ffb3 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/routes-manifest.json @@ -0,0 +1 @@ +{"version":3,"pages404":true,"basePath":"","redirects":[],"rewrites":[],"headers":[],"dynamicRoutes":[{"page":"/users/[id]","regex":"^/users/([^/]+?)(?:/)?$","routeKeys":{"id":"id"},"namedRegex":"^/users/(?[^/]+?)(?:/)?$"}],"dataRoutes":[{"page":"/users","dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$"},{"page":"/users/[id]","routeKeys":{"id":"id"},"dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$","namedDataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$"}]} \ No newline at end of file diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/snapshots.test.ts b/packages/serverless-components/nextjs-cdk-construct/__tests__/snapshots.test.ts new file mode 100644 index 0000000000..a4b4d1f985 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/snapshots.test.ts @@ -0,0 +1,16 @@ +import { SynthUtils } from "@aws-cdk/assert"; +import { Stack } from "@aws-cdk/core"; +import path from "path"; +import { NextJSLambdaEdge } from "../src"; + +describe("CDK Construct Snapshots", () => { + it("creates boilerplate next app", () => { + const stack = new Stack(); + new NextJSLambdaEdge(stack, "Stack", { + serverlessBuildOutDir: path.join(__dirname, "fixtures/next-boilerplate") + }); + + const synthesizedStack = SynthUtils.toCloudFormation(stack); + expect(synthesizedStack).toMatchSnapshot(); + }); +}); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts b/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts new file mode 100644 index 0000000000..cb5af804f3 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts @@ -0,0 +1,14 @@ +import { toLambdaOption } from "../src/utils"; + +describe("CDK Utils", () => { + it.each` + args | expectedReturn + ${["defaultLambda", { defaultLambda: 1 }]} | ${1} + ${["apiLambda", { defaultLambda: 1 }]} | ${undefined} + ${["apiLambda", 1]} | ${1} + ${["imageLambda", { imageLambda: { foo: "bar" } }]} | ${{ foo: "bar" }} + ${["defaultLambda"]} | ${undefined} + `("toLambdaOption", ({ args: [key, option], expectedReturn }) => { + expect(toLambdaOption(key, option)).toStrictEqual(expectedReturn); + }); +}); diff --git a/packages/serverless-components/nextjs-cdk-construct/package.json b/packages/serverless-components/nextjs-cdk-construct/package.json new file mode 100644 index 0000000000..4fe7c80122 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/package.json @@ -0,0 +1,48 @@ +{ + "name": "@sls-next/cdk-construct", + "publishConfig": { + "access": "public" + }, + "description": "Serverless Next.js powered by AWS CDK", + "version": "1.19.0-alpha.27", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "author": "Henry Kirkness ", + "keywords": [ + "serverless", + "cdk", + "nextjs" + ], + "scripts": { + "prepare": "yarn build", + "build": "tsc -p tsconfig.json" + }, + "bugs": { + "url": "https://github.com/serverless-nextjs/serverless-next.js/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/serverless-nextjs/serverless-next.js.git", + "directory": "packages/serverless-components/nextjs-cdk-construct" + }, + "license": "MIT", + "dependencies": { + "@aws-cdk/aws-certificatemanager": ">=1.75.0 & < 2", + "@aws-cdk/aws-cloudfront": ">=1.75.0 & < 2", + "@aws-cdk/aws-cloudfront-origins": ">=1.75.0 & < 2", + "@aws-cdk/aws-iam": ">=1.75.0 & < 2", + "@aws-cdk/aws-lambda": ">=1.75.0 & < 2", + "@aws-cdk/aws-logs": ">=1.75.0 & < 2", + "@aws-cdk/aws-route53": ">=1.75.0 & < 2", + "@aws-cdk/aws-route53-targets": ">=1.75.0 & < 2", + "@aws-cdk/aws-s3": ">=1.75.0 & < 2", + "@aws-cdk/aws-s3-deployment": ">=1.75.0 & < 2", + "@aws-cdk/core": ">=1.75.0 & < 2", + "fs-extra": "^9.0.1" + }, + "devDependencies": { + "@aws-cdk/assert": ">=1.75.0 & < 2", + "@types/fs-extra": "^9.0.1", + "typescript": "^3.9.6" + } +} diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts new file mode 100644 index 0000000000..e2d7a171cd --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -0,0 +1,376 @@ +import * as cdk from "@aws-cdk/core"; +import * as lambda from "@aws-cdk/aws-lambda"; +import * as s3 from "@aws-cdk/aws-s3"; +import * as logs from "@aws-cdk/aws-logs"; +import * as s3Deploy from "@aws-cdk/aws-s3-deployment"; +import * as cloudfront from "@aws-cdk/aws-cloudfront"; +import * as origins from "@aws-cdk/aws-cloudfront-origins"; +import { ARecord, RecordTarget } from "@aws-cdk/aws-route53"; +import { + OriginRequestImageHandlerManifest, + OriginRequestApiHandlerManifest, + RoutesManifest +} from "@sls-next/lambda-at-edge"; +import * as fs from "fs-extra"; +import * as path from "path"; +import { + Role, + ManagedPolicy, + ServicePrincipal, + CompositePrincipal +} from "@aws-cdk/aws-iam"; +import { Duration, RemovalPolicy } from "@aws-cdk/core"; +import { CloudFrontTarget } from "@aws-cdk/aws-route53-targets"; +import { OriginRequestQueryStringBehavior } from "@aws-cdk/aws-cloudfront"; +import { Props } from "./props"; +import { toLambdaOption } from "./utils"; + +export * from "./props"; + +export class NextJSLambdaEdge extends cdk.Construct { + private routesManifest: RoutesManifest | null; + + private apiBuildManifest: OriginRequestApiHandlerManifest | null; + + private imageManifest: OriginRequestImageHandlerManifest | null; + + public distribution: cloudfront.Distribution; + + constructor(scope: cdk.Construct, id: string, private props: Props) { + super(scope, id); + this.apiBuildManifest = this.readApiBuildManifest(); + this.routesManifest = this.readRoutesManifest(); + this.imageManifest = this.readImageBuildManifest(); + const bucket = new s3.Bucket(this, "PublicAssets", { + publicReadAccess: true + }); + + const edgeLambdaRole = new Role(this, "NextEdgeLambdaRole", { + assumedBy: new CompositePrincipal( + new ServicePrincipal("lambda.amazonaws.com"), + new ServicePrincipal("edgelambda.amazonaws.com") + ), + managedPolicies: [ + ManagedPolicy.fromManagedPolicyArn( + this, + "NextApiLambdaPolicy", + "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" + ) + ] + }); + + const defaultNextLambda = new lambda.Function(this, "NextLambda", { + description: `Default Lambda@Edge for Next CloudFront distribution`, + handler: "index.handler", + currentVersionOptions: { + removalPolicy: RemovalPolicy.DESTROY // destroy old versions + }, + logRetention: logs.RetentionDays.THREE_DAYS, + code: lambda.Code.fromAsset( + path.join(this.props.serverlessBuildOutDir, "default-lambda") + ), + role: edgeLambdaRole, + runtime: + toLambdaOption("defaultLambda", props.runtime) || + lambda.Runtime.NODEJS_12_X, + memorySize: toLambdaOption("defaultLambda", props.memory), + timeout: toLambdaOption("defaultLambda", props.timeout) + }); + + defaultNextLambda.currentVersion.addAlias("live"); + + const apis = this.apiBuildManifest?.apis; + const hasAPIPages = + apis && + (Object.keys(apis.nonDynamic).length > 0 || + Object.keys(apis.dynamic).length > 0); + + let nextApiLambda = null; + if (hasAPIPages) { + nextApiLambda = new lambda.Function(this, "NextApiLambda", { + description: `Default Lambda@Edge for Next API CloudFront distribution`, + handler: "index.handler", + currentVersionOptions: { + removalPolicy: RemovalPolicy.DESTROY, // destroy old versions + retryAttempts: 1 // async retry attempts + }, + logRetention: logs.RetentionDays.THREE_DAYS, + code: lambda.Code.fromAsset( + path.join(this.props.serverlessBuildOutDir, "api-lambda") + ), + role: edgeLambdaRole, + runtime: + toLambdaOption("apiLambda", props.runtime) || + lambda.Runtime.NODEJS_12_X, + memorySize: toLambdaOption("apiLambda", props.memory), + timeout: toLambdaOption("apiLambda", props.timeout) + }); + nextApiLambda.currentVersion.addAlias("live"); + } + + let nextImageLambda = null; + if (this.imageManifest) { + nextImageLambda = new lambda.Function(this, "NextImageLambda", { + description: `Default Lambda@Edge for Next Image CloudFront distribution`, + handler: "index.handler", + currentVersionOptions: { + removalPolicy: RemovalPolicy.DESTROY, // destroy old versions + retryAttempts: 1 // async retry attempts + }, + logRetention: logs.RetentionDays.THREE_DAYS, + code: lambda.Code.fromAsset( + path.join(this.props.serverlessBuildOutDir, "image-lambda") + ), + role: edgeLambdaRole, + runtime: + toLambdaOption("imageLambda", props.runtime) || + lambda.Runtime.NODEJS_12_X, + memorySize: toLambdaOption("imageLambda", props.memory), + timeout: toLambdaOption("imageLambda", props.timeout) + }); + nextImageLambda.currentVersion.addAlias("live"); + } + + const nextStaticsCachePolicy = new cloudfront.CachePolicy( + this, + "NextStaticsCache", + { + queryStringBehavior: cloudfront.CacheQueryStringBehavior.none(), + headerBehavior: cloudfront.CacheHeaderBehavior.none(), + cookieBehavior: cloudfront.CacheCookieBehavior.none(), + defaultTtl: Duration.days(30), + maxTtl: Duration.days(30), + minTtl: Duration.days(30), + enableAcceptEncodingBrotli: true, + enableAcceptEncodingGzip: true + } + ); + + const nextImageCachePolicy = new cloudfront.CachePolicy( + this, + "NextImageCache", + { + queryStringBehavior: cloudfront.CacheQueryStringBehavior.none(), + headerBehavior: cloudfront.CacheHeaderBehavior.allowList("Accept"), + cookieBehavior: cloudfront.CacheCookieBehavior.none(), + defaultTtl: Duration.days(1), + maxTtl: Duration.days(365), + minTtl: Duration.days(0), + enableAcceptEncodingBrotli: true, + enableAcceptEncodingGzip: true + } + ); + + const nextLambdaCachePolicy = new cloudfront.CachePolicy( + this, + "NextLambdaCache", + { + queryStringBehavior: cloudfront.CacheQueryStringBehavior.all(), + headerBehavior: cloudfront.CacheHeaderBehavior.none(), + cookieBehavior: { + behavior: props.whiteListedCookies?.length ? "whitelist" : "all", + cookies: props.whiteListedCookies + }, + defaultTtl: Duration.seconds(0), + maxTtl: Duration.days(365), + minTtl: Duration.seconds(0), + enableAcceptEncodingBrotli: true, + enableAcceptEncodingGzip: true + } + ); + + const edgeLambdas = [ + { + includeBody: true, + eventType: cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST, + functionVersion: defaultNextLambda.currentVersion + }, + { + eventType: cloudfront.LambdaEdgeEventType.ORIGIN_RESPONSE, + functionVersion: defaultNextLambda.currentVersion + } + ]; + + this.distribution = new cloudfront.Distribution( + this, + "NextJSDistribution", + { + enableLogging: props.withLogging ? true : undefined, + certificate: props.domain?.certificate, + domainNames: props.domain ? [props.domain.domainName] : undefined, + defaultRootObject: "", + defaultBehavior: { + viewerProtocolPolicy: + cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + origin: new origins.S3Origin(bucket), + allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, + cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, + compress: true, + cachePolicy: nextLambdaCachePolicy, + edgeLambdas + }, + additionalBehaviors: { + ...(nextImageLambda + ? { + [this.pathPattern("_next/image*")]: { + viewerProtocolPolicy: + cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + origin: new origins.S3Origin(bucket), + allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL, + cachedMethods: + cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, + compress: true, + cachePolicy: nextImageCachePolicy, + originRequestPolicy: new cloudfront.OriginRequestPolicy( + this, + "ImageOriginRequest", + { + queryStringBehavior: OriginRequestQueryStringBehavior.all() + } + ), + edgeLambdas: [ + { + eventType: cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST, + functionVersion: nextImageLambda.currentVersion + } + ] + } + } + : {}), + [this.pathPattern("_next/data/*")]: { + viewerProtocolPolicy: + cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + origin: new origins.S3Origin(bucket), + allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, + cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, + compress: true, + cachePolicy: nextLambdaCachePolicy, + edgeLambdas + }, + [this.pathPattern("_next/*")]: { + viewerProtocolPolicy: + cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + origin: new origins.S3Origin(bucket), + allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, + cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, + compress: true, + cachePolicy: nextStaticsCachePolicy + }, + [this.pathPattern("static/*")]: { + viewerProtocolPolicy: + cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + origin: new origins.S3Origin(bucket), + allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, + cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, + compress: true, + cachePolicy: nextStaticsCachePolicy + }, + ...(nextApiLambda + ? { + [this.pathPattern("api/*")]: { + viewerProtocolPolicy: + cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, + origin: new origins.S3Origin(bucket), + allowedMethods: + cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, + cachedMethods: + cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, + compress: true, + cachePolicy: nextLambdaCachePolicy, + edgeLambdas: [ + { + eventType: cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST, + functionVersion: nextApiLambda.currentVersion + } + ] + } + } + : {}) + } + } + ); + + const staticAssets = this.getStaticAssetsFromBuild(); + Object.keys(staticAssets).forEach((staticAssetKey) => { + const staticAsset = + staticAssets[staticAssetKey as keyof typeof staticAssets]; + const assetPath = path.join( + this.props.serverlessBuildOutDir, + "assets", + staticAsset + ); + if (!fs.existsSync(assetPath)) return; + new s3Deploy.BucketDeployment(this, `AssetDeployment_${staticAssetKey}`, { + destinationBucket: bucket, + distribution: this.distribution, + destinationKeyPrefix: staticAsset, + distributionPaths: ["/*"], + sources: [s3Deploy.Source.asset(assetPath)], + cacheControl: [ + s3Deploy.CacheControl.setPublic(), + s3Deploy.CacheControl.maxAge(cdk.Duration.days(365)), + s3Deploy.CacheControl.fromString("immutable") + ] + }); + }); + + if (props.domain) { + new ARecord(this, "AliasRecord", { + recordName: props.domain.domainName, + zone: props.domain.hostedZone, + target: RecordTarget.fromAlias(new CloudFrontTarget(this.distribution)) + }); + } + } + + private pathPattern(pattern: string): string { + const { basePath } = this.routesManifest || {}; + return basePath && basePath.length > 0 + ? `${basePath.slice(1)}/${pattern}` + : pattern; + } + + private readRoutesManifest(): RoutesManifest { + return fs.readJSONSync( + path.join( + this.props.serverlessBuildOutDir, + "default-lambda/routes-manifest.json" + ) + ); + } + + private readApiBuildManifest(): OriginRequestApiHandlerManifest | null { + const apiPath = path.join( + this.props.serverlessBuildOutDir, + "api-lambda/manifest.json" + ); + if (!fs.existsSync(apiPath)) return null; + return fs.readJsonSync(apiPath); + } + + private readImageBuildManifest(): OriginRequestImageHandlerManifest | null { + const imageLambdaPath = path.join( + this.props.serverlessBuildOutDir, + "image-lambda/manifest.json" + ); + + return fs.existsSync(imageLambdaPath) + ? fs.readJSONSync(imageLambdaPath) + : null; + } + + private getStaticAssetsFromBuild() { + const nextStaticFilesPath = path.join("_next", "static"); + const nextDataFilesPath = path.join("_next", "data"); + const htmlPagesPath = path.join("static-pages"); + const publicFilesPath = path.join("public"); + const staticFilesPath = path.join("static"); + return { + nextStaticFilesPath, + nextDataFilesPath, + htmlPagesPath, + publicFilesPath, + staticFilesPath + }; + } +} diff --git a/packages/serverless-components/nextjs-cdk-construct/src/props.ts b/packages/serverless-components/nextjs-cdk-construct/src/props.ts new file mode 100644 index 0000000000..626c8aed0d --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/src/props.ts @@ -0,0 +1,65 @@ +import { ICertificate } from "@aws-cdk/aws-certificatemanager"; +import { Behavior } from "@aws-cdk/aws-cloudfront"; +import { Runtime } from "@aws-cdk/aws-lambda"; +import { IHostedZone } from "@aws-cdk/aws-route53"; +import { Duration, StackProps } from "@aws-cdk/core"; + +export type LambdaOption = + | T + | { defaultLambda?: T; apiLambda?: T; imageLambda?: T }; + +export interface Props extends StackProps { + /** + * The directory that holds the output from the serverless builder. + * + * i.e. `serverlessBuildOutDir: new Builder(entry, outDir, {...}).outputDir` + */ + serverlessBuildOutDir: string; + /** + * Is you'd like a custom domain for your site, you'll need to pass in a + * `hostedZone`, `certificate` and full `domainName` + */ + domain?: { + hostedZone: IHostedZone; + certificate: ICertificate; + domainName: string; + }; + /** + * Lambda memory limit(s) + */ + memory?: LambdaOption; + /** + * Lambda timeout(s) + */ + timeout?: LambdaOption; + /** + * Lambda name(s) + */ + name?: LambdaOption; + /** + * Lambda runtimes(s) + */ + runtime?: LambdaOption; + /** + * Enable logging on the cloudfront distribution + */ + withLogging?: boolean; + /** + * Provide a list of cookies to forward to the CloudFront origin. + * + * This is useful if your SSR page is different based on the user requesting + * it, so you might for example cache based on the user's authentication token. + * + * .e.g ['my-apps-auth-token-cookie-key'] + */ + whiteListedCookies?: string[]; + /** + * Optionally pass one or many custom CloudFront behaviours. + * + * This is handy if you want to adjust how certain assets are cached, or add + * another `lambda@edge` endpoint. + */ + behaviours?: Partial< + Omit + >[]; +} diff --git a/packages/serverless-components/nextjs-cdk-construct/src/utils.ts b/packages/serverless-components/nextjs-cdk-construct/src/utils.ts new file mode 100644 index 0000000000..f2e492b83d --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/src/utils.ts @@ -0,0 +1,18 @@ +import { LambdaOption } from "./props"; + +export const toLambdaOption = ( + key: "defaultLambda" | "apiLambda" | "imageLambda", + option?: LambdaOption +): T | undefined => { + if ( + typeof option !== "object" || + !( + "defaultLambda" in option || + "apiLambda" in option || + "imageLambda" in option + ) + ) { + return option as T | undefined; + } + return option[key]; +}; diff --git a/packages/serverless-components/nextjs-cdk-construct/tsconfig.json b/packages/serverless-components/nextjs-cdk-construct/tsconfig.json new file mode 100644 index 0000000000..fc1cdfe366 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "resolveJsonModule": true, + "esModuleInterop": true, + "declaration": true, + "target": "ES2015", + "module": "CommonJS", + "moduleResolution": "node", + "outDir": "dist", + "sourceMap": true, + "strict": true, + "allowJs": true + }, + "exclude": ["node_modules"], + "include": ["**/*.ts", ".d.ts"] +} diff --git a/packages/serverless-components/nextjs-cdk-construct/yarn.lock b/packages/serverless-components/nextjs-cdk-construct/yarn.lock new file mode 100644 index 0000000000..016a2df69b --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/yarn.lock @@ -0,0 +1,752 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aws-cdk/assert@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.85.0.tgz#f6b55102a6c593e0db9c46e5599def5598e9e767" + integrity sha512-4d+zLeRPd9g0lLSWFIREjQfssfwExe9oUU6pPLd+oExj7be/5/lP8RhOJswA5Dw+v3ncoBx5C4EI1Uee1vI+Ww== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.85.0" + "@aws-cdk/cloudformation-diff" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/assets@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.85.0.tgz#445aceaf1eff009760b9616fc6cd325edbb56769" + integrity sha512-34NPwgqwWDs70OsMJA6YeujI4RlYiVfG5fAA7ir54igLPDLCmR4b4UlFsUWl7XkznuMDgiShYe6yvmfmK8FEMg== + dependencies: + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-apigateway@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigateway/-/aws-apigateway-1.85.0.tgz#f6f1452703848aae3680859d36266bdef9cff3fc" + integrity sha512-oP0Y6a3wB+1rIke/gYjUtDiXqiS5Lpw5yZXEWxJXtiqfDYOtMqGoiFXvBdF03zEzxEPtORnvC0Z2kviNA1Zbiw== + dependencies: + "@aws-cdk/assets" "1.85.0" + "@aws-cdk/aws-certificatemanager" "1.85.0" + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/aws-logs" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/aws-s3-assets" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-apigatewayv2@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.85.0.tgz#a951326cca7d19576b2d5ea45a74f2bbb6a4b71d" + integrity sha512-e1zHGPM22lEKej+zHZvi7Jo8EyVQVVcvzcsgfmwDrrfAQLRfdcAVxylFRssvMbelLapYlG3blV8ANMo94pOGNg== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.85.0" + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-applicationautoscaling@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.85.0.tgz#e7c2dfa5ae8cadf069298218ea8a15fb31349a29" + integrity sha512-OO/rNJsJPD0lGAZfb+BBHp+8xrnsMB2so4YwEtqanf7n4DXR1Kfr2TzZLj77rOk+QApjJJR1uF4hTmR73qO7FA== + dependencies: + "@aws-cdk/aws-autoscaling-common" "1.85.0" + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-autoscaling-common@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.85.0.tgz#6c2cbbf4d3089635739fea956bc2c8a083d463b9" + integrity sha512-JatGmQpEtQLn4MFEXjD83Pi9le3UecaTONZplvKdP9LHoD5J8JC4v3WBsJlj0SR+haM1gdwGJgn4npbsGe7r9w== + dependencies: + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-certificatemanager@1.85.0", "@aws-cdk/aws-certificatemanager@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.85.0.tgz#2c9f186d989835f40900d9d0fa1529cbf95553ac" + integrity sha512-/udYNoBm0BRj5Hbq2gLAZNnIZf5nP7qy/bMYHsQNGW2OiAh5vLabSXFxEH8j6H00RMFsshlAGdtmXFDGSDFpXQ== + dependencies: + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/aws-route53" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudformation@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.85.0.tgz#98deb8a03e5e578bcb3fa4db18e7a5b229900568" + integrity sha512-NGfxt11L+C/C3SRtv2xmjm6Od1BhMJXzBDf2mSMLUkEcIYOsLpewj5wfEEAfC3Xi/avQVZlTW1Ev1rrltgHzlg== + dependencies: + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/aws-sns" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudfront-origins@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront-origins/-/aws-cloudfront-origins-1.85.0.tgz#ee9026f4f3346709945b8eef394ce324dca53da9" + integrity sha512-smK+tPxkTaiDfc3GtLsJDcBuhWH6eX2ngMwXmpf9iTLDAA2i6MJb/Ij3QOOWFSkcCjtQTCQD/58BwMRLog1oYQ== + dependencies: + "@aws-cdk/aws-cloudfront" "1.85.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudfront@1.85.0", "@aws-cdk/aws-cloudfront@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.85.0.tgz#aac11c305ee643db3c06d79c450bfc9fda7d76cb" + integrity sha512-fbyOj32ZAp/pFsSsvJAYrQsEDU++5O4ZI2unxt7CjtrbnimpltuGqkSWOczlzJSGFWD0Qqamp3eZC6UWidYMgA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.85.0" + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/aws-ssm" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cloudwatch@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.85.0.tgz#986b5df1f81c138334d398cae008a2726fdb3d26" + integrity sha512-vz+nPtvfeVc1EI+iRl7PIEIwiaqV7+aiM1pdkA1AcCPRELIWkBsiLOUIpHeVncHbNure/Jl12Djbgv20cFyU3g== + dependencies: + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-codeguruprofiler@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.85.0.tgz#e05a333252155bd48177e5448bfc4c20a8e523eb" + integrity sha512-Ag1tK9vi54fHXOK+yb+b4Lj2mmdnJRTqQDxUZPG8/LVfYvKWolt8pxCox6UrOr7eBcveH0tjGcBKqMexM9KK4A== + dependencies: + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-cognito@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.85.0.tgz#c2eafc045540ad1b85f6332044292a2a38cb259b" + integrity sha512-ODqUQMx0IqV3c/bGoJlNnG9WT1j4oVMYR+gJNe4osujeFAOHi3ycNDqPmkesdwI63RdH8fFIDt06u5xKni7WPQ== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/custom-resources" "1.85.0" + constructs "^3.2.0" + punycode "^2.1.1" + +"@aws-cdk/aws-ec2@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.85.0.tgz#40af637c29f18df020815a8d5167dde555c6cdd5" + integrity sha512-IHbIwsB3lFKMRT48hZBwD+5qaCkLbVTIvX83KMjvsUDAVLWdDl8UReo5P9dfE2dNdOAWf132v5Z3KbbYtU32vg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/aws-logs" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/aws-s3-assets" "1.85.0" + "@aws-cdk/aws-ssm" "1.85.0" + "@aws-cdk/cloud-assembly-schema" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + "@aws-cdk/region-info" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ecr-assets@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.85.0.tgz#10327cd86b749f92d84f43d0bc2020636b461719" + integrity sha512-xiXr+51EaPwu1gCFATO0YB73T6ImFxHVoix9nQFQ3Iqvd0ys8ZZawT63ziseccs2EQaGgoaVTc57MajOMudNyw== + dependencies: + "@aws-cdk/assets" "1.85.0" + "@aws-cdk/aws-ecr" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + minimatch "^3.0.4" + +"@aws-cdk/aws-ecr@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.85.0.tgz#73a327aa05f479c1be80a0fe0cf6030529798bea" + integrity sha512-ZV9NO2cElR5+VuH3SfAUBovgFACRzvyvppDP/yDhqXJ9eWwBwDlEJpmFtC5K6kc0txSOFXoO5sTAUXoO80Kj5w== + dependencies: + "@aws-cdk/aws-events" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-efs@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.85.0.tgz#29e60aafb494e7b36204aab8eedf8ab57aae4ffa" + integrity sha512-3CRlch6hA8YdPV0cAt2vpY6AELGLzxSgPmotQ99kbX13zuXk23gDUvn/oYDehZVtEHBfiBESBZIU6RvcWULFhQ== + dependencies: + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/cloud-assembly-schema" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-elasticloadbalancing@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.85.0.tgz#365f007877063c48f6aefc89877d47925266604a" + integrity sha512-zK4TShBo//BWInuI8mH1hJ+wrRCR6duZqP8A3Qqb0iJWE+Ai8aKcJWS5FbR8d7XkYLjlR/e/TYwMQIMlrhmW/Q== + dependencies: + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-elasticloadbalancingv2@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.85.0.tgz#4eb35b7f555dc531a0f4c9425bf337b2cf03d5f1" + integrity sha512-yM67QZ/IVmKYfuw82TlUYi+wbRtnRRk9FmDKUXKqwurXZbiC6fRrQg5iH+N7C5XkavJAGqaQJDpNSco1gFR2EQ== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.85.0" + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/cloud-assembly-schema" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + "@aws-cdk/region-info" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-events@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.85.0.tgz#17614058df1826ec5ba0ca41256867d90862ac23" + integrity sha512-8BCl2+9/5ArYZ4PWfaHRDnRiU3BLzCOp0nu05t4kfPt9wL75DTuNjzgQx9EjUtYxTm4WyTaUrwlDkWBo3ggyQw== + dependencies: + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-iam@1.85.0", "@aws-cdk/aws-iam@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.85.0.tgz#d32132159605e9476840944466289768b9857470" + integrity sha512-8ToYOfs4ATDHq96LzpSX8+HHZ8cvr3TBI4BS2an1wiNlYFeF857qV3Jwxn9pG3n6b6/vG7XpHqQQbqFdWETNzQ== + dependencies: + "@aws-cdk/core" "1.85.0" + "@aws-cdk/region-info" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-kms@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.85.0.tgz#5f1472114eb46b92d09724a03d5057c8f340bc91" + integrity sha512-57+XamcKt9GsUPowuYNavfUj/Eg47qFCUrCPb6IbRR2MzVbhqpQDTmlBHtITnihnnvM1pUdAwQiEOtfSdwmr8w== + dependencies: + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-lambda@1.85.0", "@aws-cdk/aws-lambda@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.85.0.tgz#153c0c9beaef8cf16d61e2954b4f1b2057ab2ecf" + integrity sha512-56OWAEU5ekMxU56P6MF1dKyahLB2Hri0rjdMDsVaWRxZet+gvvS3Q7rkP8Xc9AptbV55eDeiFr9gcLhTi6fnPQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.85.0" + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-codeguruprofiler" "1.85.0" + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-ecr" "1.85.0" + "@aws-cdk/aws-ecr-assets" "1.85.0" + "@aws-cdk/aws-efs" "1.85.0" + "@aws-cdk/aws-events" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/aws-logs" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/aws-s3-assets" "1.85.0" + "@aws-cdk/aws-sqs" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-logs@1.85.0", "@aws-cdk/aws-logs@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.85.0.tgz#4f8f683a2007ec65720e51f20f36ea0251c818c2" + integrity sha512-YpPS9HZGG9992n2od+KbxQOFxW3J4ckHooGshkQkkrRumetVnQnQgySnhJSsuGkQDaLQ7TbXWcAA2uWPMLt68g== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/aws-s3-assets" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-route53-targets@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.85.0.tgz#af2d1db341310bae9ef3c8f2cb1096a9d081a6d2" + integrity sha512-TmMo6kReBYxTGlsi6jpEwp8mkey8Kgq7aMjNX0kxzJuCnNNwufBbU31ggKgLYR+kl2xYykYTedcg5C36+EWLVQ== + dependencies: + "@aws-cdk/aws-apigateway" "1.85.0" + "@aws-cdk/aws-apigatewayv2" "1.85.0" + "@aws-cdk/aws-cloudfront" "1.85.0" + "@aws-cdk/aws-cognito" "1.85.0" + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-elasticloadbalancing" "1.85.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-route53" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/region-info" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-route53@1.85.0", "@aws-cdk/aws-route53@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.85.0.tgz#4bac1e370c6eb1f6ac63eb216f237ce4619dd44f" + integrity sha512-1kTzmBsYgwIXksfCAqUqeO98X6/GDGU2CsEcw1VEhRk9mBh4d1hR4o16tSfM0UePODZEo5WD2fIzEK9y1zznmQ== + dependencies: + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-logs" "1.85.0" + "@aws-cdk/cloud-assembly-schema" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/custom-resources" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-assets@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.85.0.tgz#3ec05f90f4a8387a498eda59f550b85eca005fa9" + integrity sha512-aOrkUJffNNHpQcKuEJnXIvIa6kM26yvhcYDU6vanOuSxhDe30DVVKMm7C9oIrti4KfTOK4whuoPgAjZbR1Z+Rw== + dependencies: + "@aws-cdk/assets" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3-deployment@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-deployment/-/aws-s3-deployment-1.85.0.tgz#6b949ca87f2f30049aff53071315c57b05e2fa78" + integrity sha512-BRlZayZGXl/Vjsp1F93hmritYrDX4sHhdnr2nUCikXHqx3uMFmuv1AWieEyhKF718sqMpkmPh0fnakhhD4APJQ== + dependencies: + "@aws-cdk/aws-cloudfront" "1.85.0" + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/aws-s3" "1.85.0" + "@aws-cdk/aws-s3-assets" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/lambda-layer-awscli" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-s3@1.85.0", "@aws-cdk/aws-s3@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.85.0.tgz#456a32048e7195afe1f1a549cba950176c52cd1f" + integrity sha512-ySqTuUz0yb6EZgfbKsnWQLvkiq7j5/gD/hK/Ufcpr49NtqlGPYoGlYeSlhqIHklfRmip55d8k4TnrOsa2Nl2aA== + dependencies: + "@aws-cdk/aws-events" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/core" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sns@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.85.0.tgz#9e81ac42e1d076c7e51fbbedf9d96872efa80ad3" + integrity sha512-4PiEtcVUu8VdZbnKVIcDs/1X+XKLFgX2ylqywi6PYN3nSPjWRIyt2YIxwEIkS4eI1appel62GwXPCl2Ys2L/Cg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-events" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/aws-sqs" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-sqs@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.85.0.tgz#5e73615ce3af84c665db72250b08f32425bf0b57" + integrity sha512-u4HQSg7YThETpdxdyfQ3izCSPLSBrycsp9m3Ekfxldfj8qKexwFJclxDrEvwhkhIbje05Tm0Vh/AQd/k5X5ifA== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/aws-ssm@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.85.0.tgz#432245d8aa3a7ad11a78e11f49d412d83e594998" + integrity sha512-cSRf41awerxxKxVMXg9C1JJ131Ke44UgcYHQw/QBQZ16i+OjVgGrv7vI6gXoLrK47Xynh98yw0E8RxNiO85a2w== + dependencies: + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-kms" "1.85.0" + "@aws-cdk/cloud-assembly-schema" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/cfnspec@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.85.0.tgz#1ed696d8d48ab77f7b0d936a765c578192cd3099" + integrity sha512-qqFk1mWVeFp+X+jlPbhmuEovfkaNe2PNSgGi/aosR/fJzJAeSHDZpwAkCSyb7c9TaMhAYVOQMgoOIQW0YHBg4g== + dependencies: + md5 "^2.3.0" + +"@aws-cdk/cloud-assembly-schema@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.85.0.tgz#b1bc11b1233e7696b64b70495255ad19e875a0b7" + integrity sha512-gDI1uGTy9/Cr1GvUGkKpEelMfSNccESv8ZNVNzf/2huSMF3Qu8ac549RU4iubF8ysYKuwuizGhIsJX2URDBlDA== + dependencies: + jsonschema "^1.4.0" + semver "^7.3.2" + +"@aws-cdk/cloudformation-diff@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.85.0.tgz#651a05f1d4fe51753bfe1a7f51be8861ac05389c" + integrity sha512-NbRQ8Ge8sZswSehfCGbN8WM9C1PR8jfNXvb2p7hgl9TEhvDi8VY+9jlkeKYgvI18wwt6iTFR2rPo0bd/2L3W5Q== + dependencies: + "@aws-cdk/cfnspec" "1.85.0" + colors "^1.4.0" + diff "^5.0.0" + fast-deep-equal "^3.1.3" + string-width "^4.2.0" + table "^6.0.7" + +"@aws-cdk/core@1.85.0", "@aws-cdk/core@>=1.75.0 & < 2": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.85.0.tgz#22fe776c51ff637ce909a933fa7c2d16e6384b68" + integrity sha512-L8fiMg4Dpe8qhV+dClBSQldLt0LBEyz7EOigL3YEi+yMxQ2dBZAeryroh609Cnn/WlzNPob795FWmvMqTbrdAw== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.85.0" + "@aws-cdk/cx-api" "1.85.0" + "@aws-cdk/region-info" "1.85.0" + "@balena/dockerignore" "^1.0.2" + constructs "^3.2.0" + fs-extra "^9.0.1" + ignore "^5.1.8" + minimatch "^3.0.4" + +"@aws-cdk/custom-resources@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.85.0.tgz#f38c5bebaa31c3142902713650b6d2b26bf6b46b" + integrity sha512-O9P5r4EoFnI4BCcVMOFjDaIhNgo+rEnB1m5jGlRsPSuwpFvgbRljwODGOqjYqZN5eyR8n7O0HA0fKxJlsHCvgQ== + dependencies: + "@aws-cdk/aws-cloudformation" "1.85.0" + "@aws-cdk/aws-ec2" "1.85.0" + "@aws-cdk/aws-iam" "1.85.0" + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/aws-logs" "1.85.0" + "@aws-cdk/aws-sns" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/cx-api@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.85.0.tgz#b87cddd465ee5999a02bddf3e828e0da0ff52a83" + integrity sha512-Vm0Fnci+o5AEI48/URsfWcvF6LhcRljFZ41usOqOVZuDHVGqD7E3O6nHD+TcVHvqW9Ack9cL8bXmVw7sgCvYJg== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.85.0" + semver "^7.3.2" + +"@aws-cdk/lambda-layer-awscli@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.85.0.tgz#260a752ba564eac7cdfd656fd22abce74d505d13" + integrity sha512-PnzYEcCKua17Ulkvwzy7rcvqhRTftjnol0AD81bGAzNeTUAiRNgYzL/lgb5jPM4DyIfgcyveFqZaZBTSZI1o+w== + dependencies: + "@aws-cdk/aws-lambda" "1.85.0" + "@aws-cdk/core" "1.85.0" + constructs "^3.2.0" + +"@aws-cdk/region-info@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.85.0.tgz#59d5ff0475af5ae17335d849025ffdd1c8d8b661" + integrity sha512-7GPJOcuORLkHniFrqsoB0YiMKlDGVUPAH5ZzidLSEnQqgnf67d9ZHFqarj8GEr4ZuV/lgAavUK5T/CxEqLfLcw== + +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + +"@types/fs-extra@^9.0.1": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.6.tgz#488e56b77299899a608b8269719c1d133027a6ab" + integrity sha512-ecNRHw4clCkowNOBJH1e77nvbPxHYnWIXMv1IAoG/9+MYGkgoyr3Ppxr7XYFNL41V422EDhyV4/4SSK8L2mlig== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "14.14.21" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz#d934aacc22424fe9622ebf6857370c052eae464e" + integrity sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A== + +ajv@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" + integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +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== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +charenc@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +constructs@^3.2.0: + version "3.2.107" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.107.tgz#2508a15974e7a7ff420c45ab5628c9279caeb175" + integrity sha512-iiXw36Q9EdOnBX5qNuGMlqh4ymSIMdQ/aeuVTWct/gF67ys/DUxoM8Oc4Rs9xw3g6RZGb/MKMyi7otLHZHGGgw== + +crypt@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + +diff@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "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== + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +ignore@^5.1.8: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +is-buffer@~1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +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== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + +lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +md5@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== + dependencies: + charenc "0.0.2" + crypt "0.0.2" + is-buffer "~1.1.6" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +semver@^7.3.2: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +table@^6.0.7: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + dependencies: + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + +typescript@^3.9.6: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== diff --git a/yarn.lock b/yarn.lock index 0d148ce6e2..a7ffab8124 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1810,6 +1810,14 @@ unique-filename "^1.1.1" which "^1.3.1" +"@hapi/accept@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" + integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + "@hapi/accept@^3.2.4": version "3.2.4" resolved "https://registry.npmjs.org/@hapi/accept/-/accept-3.2.4.tgz#687510529493fe1d7d47954c31aff360d9364bd1" @@ -1844,6 +1852,13 @@ dependencies: "@hapi/hoek" "8.x.x" +"@hapi/boom@9.x.x": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.1.tgz#89e6f0e01637c2a4228da0d113e8157c93677b04" + integrity sha512-VNR8eDbBrOxBgbkddRYIe7+8DZ+vSbV6qlmaN2x7eWjsUjy2VmQgChkOKcVZIeupEZYj+I0dqNg430OhwzagjA== + dependencies: + "@hapi/hoek" "9.x.x" + "@hapi/bounce@1.x.x": version "1.3.2" resolved "https://registry.npmjs.org/@hapi/bounce/-/bounce-1.3.2.tgz#3b096bb02f67de6115e6e4f0debc390be5a86bad" @@ -1955,6 +1970,11 @@ resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== +"@hapi/hoek@9.x.x": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" + integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== + "@hapi/iron@5.x.x": version "5.1.4" resolved "https://registry.npmjs.org/@hapi/iron/-/iron-5.1.4.tgz#7406f36847f798f52b92d1d97f855e27973832b7" @@ -6188,6 +6208,13 @@ dayjs@^1.8.32: resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.8.33.tgz#18bc4a2b6c1c6f4d67b4c4f2536c0b97e5b766f7" integrity sha512-881TDLZCdpJFKbraWRHcUG8zfMLLX400ENf9rFZDuWc5zYMss6xifo2PhlDX0ftOmR2NRmaIY47bAa4gKQfXqw== +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + debug@3.1.0, debug@=3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" @@ -6202,13 +6229,6 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: dependencies: ms "^2.1.1" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: version "3.2.6" resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -6386,6 +6406,11 @@ delegates@^1.0.0: resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + deprecation@^2.0.0, deprecation@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" @@ -6399,6 +6424,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" @@ -6640,6 +6670,11 @@ ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer "^5.0.1" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + electron-to-chromium@^1.3.488, electron-to-chromium@^1.3.523: version "1.3.533" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.533.tgz#d7e5ca4d57e9bc99af87efbe13e7be5dde729b0f" @@ -6690,6 +6725,11 @@ enabled@1.0.x: dependencies: env-variable "0.0.x" +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + encoding@^0.1.11: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -6895,6 +6935,11 @@ escape-goat@^2.0.0: resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -7062,6 +7107,11 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + event-emitter@^0.3.5, event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" @@ -7589,6 +7639,11 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fresh@0.5.2, fresh@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -8019,7 +8074,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -8221,6 +8276,17 @@ http-cache-semantics@^4.0.0: resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -8430,7 +8496,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -8532,6 +8598,11 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-animated@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-animated/-/is-animated-2.0.1.tgz#e523efd5a0ef0e6ac78a7307a2c8f311eb5298bc" + integrity sha512-f61go8/mYdl6g7JOLbi6YtiJ1AKM9TFdNv2bVP7JlAHm5MPjnvveOkKPlm51beF9ulb5hsGeoqdSXrjJ7RNKHg== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -9693,6 +9764,13 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +klaw@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" + integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== + dependencies: + graceful-fs "^4.1.9" + kleur@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -10388,9 +10466,9 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.44.0" -mime@^1.4.1: +mime@1.6.0, mime@^1.4.1: version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-fn@^1.0.0: @@ -10594,6 +10672,11 @@ ms@2.0.0: resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -10828,6 +10911,11 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-gyp-build@^4.2.2: version "4.2.3" resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" @@ -11189,6 +11277,13 @@ octokit-pagination-methods@^1.1.0: resolved "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -12183,6 +12278,11 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -12908,6 +13008,25 @@ semver@^7.1.3, semver@^7.2.1, semver@^7.3.2: resolved "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== +send@^0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -13034,6 +13153,11 @@ setimmediate@^1.0.4: resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -13441,6 +13565,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -14076,6 +14205,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" From 9c40bb4c1e2e031421baa8911d31a0ef337cc2f3 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 18 Jan 2021 18:20:04 +0000 Subject: [PATCH 02/26] fix: add @sls-next/lambda-at-edge dep link --- .../nextjs-cdk-construct/package.json | 1 + .../nextjs-cdk-construct/yarn.lock | 1644 ++++++++++++++++- 2 files changed, 1644 insertions(+), 1 deletion(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/package.json b/packages/serverless-components/nextjs-cdk-construct/package.json index 4fe7c80122..bcf621c00e 100644 --- a/packages/serverless-components/nextjs-cdk-construct/package.json +++ b/packages/serverless-components/nextjs-cdk-construct/package.json @@ -38,6 +38,7 @@ "@aws-cdk/aws-s3": ">=1.75.0 & < 2", "@aws-cdk/aws-s3-deployment": ">=1.75.0 & < 2", "@aws-cdk/core": ">=1.75.0 & < 2", + "@sls-next/lambda-at-edge": "link:../../libs/lambda-at-edge", "fs-extra": "^9.0.1" }, "devDependencies": { diff --git a/packages/serverless-components/nextjs-cdk-construct/yarn.lock b/packages/serverless-components/nextjs-cdk-construct/yarn.lock index 016a2df69b..837d836a7a 100644 --- a/packages/serverless-components/nextjs-cdk-construct/yarn.lock +++ b/packages/serverless-components/nextjs-cdk-construct/yarn.lock @@ -481,11 +481,683 @@ resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.85.0.tgz#59d5ff0475af5ae17335d849025ffdd1c8d8b661" integrity sha512-7GPJOcuORLkHniFrqsoB0YiMKlDGVUPAH5ZzidLSEnQqgnf67d9ZHFqarj8GEr4ZuV/lgAavUK5T/CxEqLfLcw== +"@aws-crypto/crc32@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-1.0.0.tgz#6a0164fd92bb365860ba6afb5dfef449701eb8ca" + integrity sha512-wr4EyCv3ZfLH3Sg7FErV6e/cLhpk9rUP/l5322y8PRgpQsItdieaLbtE4aDOR+dxl8U7BG9FIwWXH4TleTDZ9A== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-1.0.0.tgz#d3a6af29ba7f15458f79c41d1cd8cac3925e726a" + integrity sha512-kCKVhCF1oDxFYgQrxXmIrS5oaWulkvRcPz+QBDMsUr2crbF4VGgGT6+uQhSwJFdUAQ2A//Vq+uT83eJrkzFgXA== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-1.1.0.tgz#20092cc6c08d8f04db0ed57b6f05cff150384f77" + integrity sha512-VIpuLRDonMAHgomrsm/zKbeXTnxpr4aHDQmS4pF+NcpvBp64l675yjGA9hyUYs/QJwBjUl8WqMjh9tIRgi85Sg== + dependencies: + "@aws-crypto/ie11-detection" "^1.0.0" + "@aws-crypto/sha256-js" "^1.1.0" + "@aws-crypto/supports-web-crypto" "^1.0.0" + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@^1.0.0", "@aws-crypto/sha256-js@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.1.0.tgz#a58386ad18186e392e0f1d98d18831261d27b071" + integrity sha512-VIhuqbPgXDVr8sZe2yhgQcDRRmzf4CI8fmC1A3bHiRfE6wlz1d8KpeemqbuoEHotz/Dch9yOxlshyQDNjNFeHA== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-1.0.0.tgz#c40901bc17ac1e875e248df16a2b47ad8bfd9a93" + integrity sha512-IHLfv+WmVH89EW4n6a5eE8/hUlz6qkWGMn/v4r5ZgzcXdTC5nolii2z3k46y01hWRiC2PPhOdeSLzMUCUMco7g== + dependencies: + tslib "^1.11.1" + +"@aws-sdk/abort-controller@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-1.0.0-rc.3.tgz#c4cde5f1a1c0d3b6e6c5ddc04a0e423cb8bcc1f1" + integrity sha512-+os/c2PDtDzaeAMqH3f03EDwMAesxy3O5lFcT2vr43iiQkXRnYwaWFD4QPwDQGzKDjksPKSa6iag4OjzGf0ezA== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/chunked-blob-reader-native@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-1.0.0-rc.3.tgz#5a863d61f84ca0ff32e440f4c214e1929af05978" + integrity sha512-ouuN4cBmwfVPVVQeBhKm18BHkBK/ZVn0VDE4WXVMqu3WjNBxulKYCvJ7mkxi1oWWzp+RGa1TwIQuancB1IHrdA== + dependencies: + "@aws-sdk/util-base64-browser" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/chunked-blob-reader@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-1.0.0-rc.3.tgz#f704a8c6133931bbde3ee015936dc136763dd992" + integrity sha512-d4B6mOYxZqo+y2op5BwEsG0wxewyNhVmyvfdQfhaJowNjhZpQ6vhYkh3umOarLwyC72dNScKBQYLnOsf5chtDg== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/client-s3@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-1.0.0-rc.3.tgz#88ba3fe10308ffc0fe9bdd334071130ccd43eae7" + integrity sha512-/IYV2zoGo8SIId0VsJ/lSI6hkP0nSNvibjQtTIOu/E0edoeHtotXtuJ3SLpsuwGGm8mZtMuq1R6W1q0G/o/DrA== + dependencies: + "@aws-crypto/sha256-browser" "^1.0.0" + "@aws-crypto/sha256-js" "^1.0.0" + "@aws-sdk/config-resolver" "1.0.0-rc.3" + "@aws-sdk/credential-provider-node" "1.0.0-rc.3" + "@aws-sdk/eventstream-serde-browser" "1.0.0-rc.3" + "@aws-sdk/eventstream-serde-config-resolver" "1.0.0-rc.3" + "@aws-sdk/eventstream-serde-node" "1.0.0-rc.3" + "@aws-sdk/fetch-http-handler" "1.0.0-rc.3" + "@aws-sdk/hash-blob-browser" "1.0.0-rc.3" + "@aws-sdk/hash-node" "1.0.0-rc.3" + "@aws-sdk/hash-stream-node" "1.0.0-rc.3" + "@aws-sdk/invalid-dependency" "1.0.0-rc.3" + "@aws-sdk/md5-js" "1.0.0-rc.3" + "@aws-sdk/middleware-apply-body-checksum" "1.0.0-rc.3" + "@aws-sdk/middleware-bucket-endpoint" "1.0.0-rc.3" + "@aws-sdk/middleware-content-length" "1.0.0-rc.3" + "@aws-sdk/middleware-expect-continue" "1.0.0-rc.3" + "@aws-sdk/middleware-host-header" "1.0.0-rc.3" + "@aws-sdk/middleware-location-constraint" "1.0.0-rc.3" + "@aws-sdk/middleware-logger" "1.0.0-rc.3" + "@aws-sdk/middleware-retry" "1.0.0-rc.3" + "@aws-sdk/middleware-sdk-s3" "1.0.0-rc.3" + "@aws-sdk/middleware-serde" "1.0.0-rc.3" + "@aws-sdk/middleware-signing" "1.0.0-rc.3" + "@aws-sdk/middleware-ssec" "1.0.0-rc.3" + "@aws-sdk/middleware-stack" "1.0.0-rc.3" + "@aws-sdk/middleware-user-agent" "1.0.0-rc.3" + "@aws-sdk/node-config-provider" "1.0.0-rc.3" + "@aws-sdk/node-http-handler" "1.0.0-rc.3" + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/smithy-client" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + "@aws-sdk/url-parser-browser" "1.0.0-rc.3" + "@aws-sdk/url-parser-node" "1.0.0-rc.3" + "@aws-sdk/util-base64-browser" "1.0.0-rc.3" + "@aws-sdk/util-base64-node" "1.0.0-rc.3" + "@aws-sdk/util-body-length-browser" "1.0.0-rc.3" + "@aws-sdk/util-body-length-node" "1.0.0-rc.3" + "@aws-sdk/util-user-agent-browser" "1.0.0-rc.3" + "@aws-sdk/util-user-agent-node" "1.0.0-rc.3" + "@aws-sdk/util-utf8-browser" "1.0.0-rc.3" + "@aws-sdk/util-utf8-node" "1.0.0-rc.3" + "@aws-sdk/xml-builder" "1.0.0-rc.3" + fast-xml-parser "^3.16.0" + tslib "^2.0.0" + +"@aws-sdk/config-resolver@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-1.0.0-rc.3.tgz#0eb877cdabffb75ba3ed89f14e86301faeec12d2" + integrity sha512-twz204J+R5SFUOWe7VPYoF9yZA3HsMujnZKkm7QTunKUYRrrZcG1x6KeArIpk1mKFlrtm1tcab5BqUDUKgm23A== + dependencies: + "@aws-sdk/signature-v4" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/credential-provider-env@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-1.0.0-rc.3.tgz#9e7f21d1aa1d54e6a7f3f87626d2a46896ca7294" + integrity sha512-QG9YUDy1qjghL6MsXIE4wxXuTDeBsNWcXYIMpuvn5bJSVDmcSmXwVFMyCiYvDlN57zbomWaNvYiq9TS50aw0Ng== + dependencies: + "@aws-sdk/property-provider" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/credential-provider-imds@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-1.0.0-rc.3.tgz#d5709e1ef009b7c87387e0c377c8840a7a27b9db" + integrity sha512-vMRAlXdU4ZUeLGgtXh+MCzyZrdoXA8tJldR5n0glbODAym1Ap6ZQ9Y/apQvaHiMxyTd/PCcPg0cwSmhlnwdhTg== + dependencies: + "@aws-sdk/property-provider" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/credential-provider-ini@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-1.0.0-rc.3.tgz#23301a8cf39b004b4ba866d58469f766b819218e" + integrity sha512-3/dvnmtnjGSoBn9MSTtO6/Vpd0RxwA1oOeHlFhswr4ZDMI3Nn8almvUhjtC+wkKKSG+ushkEJaDDPy6P+7xqRA== + dependencies: + "@aws-sdk/property-provider" "1.0.0-rc.3" + "@aws-sdk/shared-ini-file-loader" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/credential-provider-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-1.0.0-rc.3.tgz#9f6ebecec5f1622ed1b9172c9ae43b147dbc75a9" + integrity sha512-UbtN7dMjyUgYyYKSQLAMmx1aGT9HD00bf0suvn9H4lo5piWuJ/30CoBqIl/l2l+6z0AdK2DcGoF5yuLyJSX0ww== + dependencies: + "@aws-sdk/credential-provider-env" "1.0.0-rc.3" + "@aws-sdk/credential-provider-imds" "1.0.0-rc.3" + "@aws-sdk/credential-provider-ini" "1.0.0-rc.3" + "@aws-sdk/credential-provider-process" "1.0.0-rc.3" + "@aws-sdk/property-provider" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/credential-provider-process@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-1.0.0-rc.3.tgz#8752ee9efb696d24c84cbd1da64ed76b93269820" + integrity sha512-gz98CXgAwtsW1CkK9F8SOW1EEHFFHsl3QCBs1i4CErYr08i/2sa1LHOjxyIJ9RMRM0WNPBCLH4btvpajOGtXBA== + dependencies: + "@aws-sdk/credential-provider-ini" "1.0.0-rc.3" + "@aws-sdk/property-provider" "1.0.0-rc.3" + "@aws-sdk/shared-ini-file-loader" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/eventstream-marshaller@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-marshaller/-/eventstream-marshaller-1.0.0-rc.3.tgz#ce4a190365ae949f6ad0639ab2285ce21d28046e" + integrity sha512-LBWqTd+VRVBdmBYm/K3ueBHLNOCUlj0uLQOExfvKFTugQ1t3i5JoZKLYNbTJyid8sMmbyq1y/nfM+kAHXguwAQ== + dependencies: + "@aws-crypto/crc32" "^1.0.0" + "@aws-sdk/types" "1.0.0-rc.3" + "@aws-sdk/util-hex-encoding" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/eventstream-serde-browser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-1.0.0-rc.3.tgz#ea9229e17317c457dd11206565a04dc1bbccb579" + integrity sha512-dMWtrnaOBLxEFvEtX7r66Pxh+XipRdDYHHNTSsg3Vaj+cDcCUkur2tplhKaBQY9bElfGB2Rb2R7XsfIxt9PZ0w== + dependencies: + "@aws-sdk/eventstream-marshaller" "1.0.0-rc.3" + "@aws-sdk/eventstream-serde-universal" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/eventstream-serde-config-resolver@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-1.0.0-rc.3.tgz#198f81974c4e5396d090c3d48826c6f5e2486819" + integrity sha512-hnp8DwEK64p2mwMDyBIgGq7yOaxDe3H1O7xoNmKb/owqQAcV8BxhhbrJYrsXNSeE/lO2zckPcL1imzuKHudTfA== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/eventstream-serde-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-1.0.0-rc.3.tgz#cb0d74f24b43cd14963a0ee8252cc47260ddf483" + integrity sha512-QTIygM8qoVfDv6paFTdyvuAdgUSm/VDFa36OZd+IXSgzoYYrI/psutpYCyt/27oiPH+rFPrOofs9A1mXIWWMhg== + dependencies: + "@aws-sdk/eventstream-marshaller" "1.0.0-rc.3" + "@aws-sdk/eventstream-serde-universal" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/eventstream-serde-universal@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-1.0.0-rc.3.tgz#b05d04171ae00b6f33ea1412979f78c1840ea410" + integrity sha512-YAQMuEI+J0LEf8tOISYSihkEiEH2YpQpvXkLlWyybmWEa1XjmGaZS5V1HP/xf5cA/HPtIsApCz2VYTY50A/Lxw== + dependencies: + "@aws-sdk/eventstream-marshaller" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/fetch-http-handler@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-1.0.0-rc.3.tgz#4ab211faf75c4b1d14dc36b85311519f4723fe97" + integrity sha512-1xd4DuW8Su7qHKg9wipVGhscvLsVRhZi9pRLxh13lIKEIt+ryxXzrex1YoxDUnDH3ZI7YhdeLhZIonlgaNT+Gw== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/querystring-builder" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + "@aws-sdk/util-base64-browser" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/hash-blob-browser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-blob-browser/-/hash-blob-browser-1.0.0-rc.3.tgz#2d1dcd1750b366817a0692424403edc808dc3cb8" + integrity sha512-2lgiclNMd3hiNBjoSh7UuzSY9ucpVF7Z6AmSmERWqN5Sm69u1q8p0RgyyWnKd0JZRelPlB8gBXk4EzxBPSTSLA== + dependencies: + "@aws-sdk/chunked-blob-reader" "1.0.0-rc.3" + "@aws-sdk/chunked-blob-reader-native" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/hash-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-1.0.0-rc.3.tgz#f46571f597dd8a301362dfef4c5dfd343116f9a4" + integrity sha512-Q3DikdeGA6pih2ftZajlNaHxsNUaKEXneZdxyoaSKyMppEni3eK2Z2ZjzyjDuXflYLkNtj4ylscure+uIKAApg== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + "@aws-sdk/util-buffer-from" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/hash-stream-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-stream-node/-/hash-stream-node-1.0.0-rc.3.tgz#8b4f668e5d482c509dfe402812b2a2f2a9e36b1b" + integrity sha512-ry78JhVXHIUdH/aokQ/YBxQ+26zC5VOgK2XLq9eDdxBTz2sefjwzk3Qs5eY1GZKfyUlKMwdRpCibo9FlPVPJeg== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/invalid-dependency@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-1.0.0-rc.3.tgz#857a44dcb666ec3be55ccde6f2912eff7dfddcad" + integrity sha512-Fl71S5Igd5Mi81QklxhhEWzwKbm+QP1kUYoc5nVK2sE+iLqdF9jwg7/ONBN8jISjTD8GPIW7NWL2SQNINNryMw== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/is-array-buffer@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-1.0.0-rc.3.tgz#47e47b7e5eb7e0ac9e7fa24f56a78550fbae63bc" + integrity sha512-tHFTBiXAgBZmAKaJIL2e2QPR9kA1tZTUJMqKaybWjhXckvb29EgUOLcdK+W2kMSqKIGqEINbAaV7S11ydBtYIg== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/md5-js@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/md5-js/-/md5-js-1.0.0-rc.3.tgz#c9ecabe2a7fccf017f6cfcb972c1cdb579da8f9c" + integrity sha512-UfHtEs5IWl39yU4X/95605bFMKErWRd+uPgtqEtCWDDGyw4uwUUrkyrhTfJKuUFvTj9ov0Lb03x5QPNDybAelQ== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + "@aws-sdk/util-utf8-browser" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-apply-body-checksum@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-apply-body-checksum/-/middleware-apply-body-checksum-1.0.0-rc.3.tgz#1ba3053e65a06fa093b72c45bd28f6053d12028c" + integrity sha512-f8CMcb1mxPWHJvLxegpjF1fwoa/vFjIaRIrXgUoPMhFNICRZPGnzim2o2mGyjWcS39VkM6G7vpmosNv2zc4EJg== + dependencies: + "@aws-sdk/is-array-buffer" "1.0.0-rc.3" + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-bucket-endpoint@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-1.0.0-rc.3.tgz#3dc26338bb8b631adb93c2ef2bce4bdddf29e01d" + integrity sha512-bC7Fx78spMF+5sQhjncOHdjEamNGIIZx6KBWN5Z2JkTTfrEoN24VtM6wWXkNRn3EtN7usWBaGT1bCx3/Vk+R0A== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + "@aws-sdk/util-arn-parser" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-content-length@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-1.0.0-rc.3.tgz#0410e78a508ec4ef8cb8987433ed621a7cfa7946" + integrity sha512-eQfeMwneYxxF6NMF5AokilQHm3HMUbtBVmybdrrM+vs027DRQBDqcZ2GXwVI93kcS4GaibNnzX804rG2xA2UwA== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-expect-continue@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-1.0.0-rc.3.tgz#54eb6e68b7e791febbee44fe107886ead02c47d0" + integrity sha512-rDs68vBn0sSWl3z1ecXSw7n+MeiSW//r6NSAWAmBE58BDjHSfwQ+aB3izpSHDGIiGZO4aasnwZAP7NjzYvxiWQ== + dependencies: + "@aws-sdk/middleware-header-default" "1.0.0-rc.3" + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-header-default@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-header-default/-/middleware-header-default-1.0.0-rc.3.tgz#3a6186aa0d0575626f07b92b774aa15b73b54230" + integrity sha512-h0zQFCaBzu7SoRRlKYws76C8q8hY/Ja7G6E69X7fGbrcmNFMjm4aZq0eipKvOIg7cGbrcFnyOnWqLlWaL76nwA== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-host-header@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-1.0.0-rc.3.tgz#d7dca9b683bacc0f985b4f1e86cef938d88ad52d" + integrity sha512-44aOjB9yd2TCDj8c9sr+8+rhQ63kkuIAcMdbt3P/fXKUWwTAW+bcvknaynya3hLa8B75tEQ112xVBb+HoDR//g== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-location-constraint@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-1.0.0-rc.3.tgz#22781315b246f426acde32e894acb3e59cb9d5bf" + integrity sha512-VdW0/g8SVckRQsz55DrPIzyrF+Qgat3qt+qE9c6Gk7u6XaF05BlG7rbjsStd3Eml+FsKG1KOO3RgDCWvgESmNw== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-logger@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-1.0.0-rc.3.tgz#a786bb90d3a5a184f9b8331ee90f05f3210b04b7" + integrity sha512-M1IfI6//hFgMKQXqXdXGNMf/qU4pkwzR9+Wz6TZ6iELtZaXce00ZzTK1szmO1pkWRVeXsCwr4fsbhj7OD4zZ8g== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-retry@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-1.0.0-rc.3.tgz#8b06fd8c49b3a3e7279551309e418533fac73d9b" + integrity sha512-Y8JhZPJM10H1KDobUP7aYM6ghBdVT4QM+04iAQBfYZPCc0ksyN+PKZLi97kxOrbg+a4HL593CG2UVnY4WI2tBQ== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/service-error-classification" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + react-native-get-random-values "^1.4.0" + tslib "^1.8.0" + uuid "^3.0.0" + +"@aws-sdk/middleware-sdk-s3@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-1.0.0-rc.3.tgz#1c9a26476887c464b5e52da116a752dc8975dddd" + integrity sha512-TDICHo5wONd4GUgLEtSjlygKRzXBfxkPQcNEGB2Mnbi+xbDa4FNd6XszkOrNMzxtmqD53ub/iDQewcBr9U9HJQ== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/util-arn-parser" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-serde@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-1.0.0-rc.3.tgz#81307310c51d50ec8425bee9fb08d35a7458dcfc" + integrity sha512-3IK4Hz8YV4+AIGJLjDu3QTKjfHGVIPrY5x4ubFzbGVc6EC9y69y+Yh3425ca3xeAVQFnORQn/707LiNKLlsD8g== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-signing@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-1.0.0-rc.3.tgz#34bad68f17052c298a09905728a35f8906fe55dc" + integrity sha512-RqIQwPaHvyY38rmIR+A9b3EwIaPPAKA4rmaTGAT1jeS7H65tXJeKc7aAXJWvDn9E1Fj56mOHTOd86FgP45MrUg== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/signature-v4" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-ssec@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-1.0.0-rc.3.tgz#45e77e8c1e998fe42bc290c7d4c65c84952e6f3b" + integrity sha512-sqv/TELHxAvpqOi7uhfCwLGVyOb1ihehfnSeqsyh2HPphg529ssmDUCF6jsi5maMc3lM/eHQ8LDPSXU9H58wwQ== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-stack@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-1.0.0-rc.3.tgz#e46193e696f15275e548e0cdbe1ca734e9e1c6b9" + integrity sha512-DV5RPf0rNsZVOtZA+nEDyWhfKUazUjWQppzXGjvCUSLaaPTINPUXf/go5M4S/62mn/9gxCftN5SShMP5yw1sNQ== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/middleware-user-agent@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-1.0.0-rc.3.tgz#de42837456482cd06596c0c5cebb80480d630e33" + integrity sha512-Zrp3kETrrWgJLlnjkSuetOH5cN5URqLd6WQmhZlEm0isvr+2RyDDOA4wP6JjmMhCmrG02/8/b4pMOPH/vUm/LQ== + dependencies: + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/node-config-provider@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-1.0.0-rc.3.tgz#b79fd5e95e4ca543b8d6aa2bf59b9ce2cc89c96a" + integrity sha512-1i0fjunUMYP479hAq7D8RugfMmC3KCUzvZA2xtjFQcE31d7YrlfGstwBq/kvNcIcw+yc3r7SC54KzwgqfSSvzA== + dependencies: + "@aws-sdk/property-provider" "1.0.0-rc.3" + "@aws-sdk/shared-ini-file-loader" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/node-http-handler@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-1.0.0-rc.3.tgz#da316daa5bcf536099e43d57cb136b8c2553a17f" + integrity sha512-hK0NM3PxGVCgKLZoAb8bXFQlOA1JGd2DwfjDdAn4XfIhEH4QfbuFZxjkQhNcDwkKIqzCmlYTbgJvWKRbbFkEXg== + dependencies: + "@aws-sdk/abort-controller" "1.0.0-rc.3" + "@aws-sdk/protocol-http" "1.0.0-rc.3" + "@aws-sdk/querystring-builder" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/property-provider@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-1.0.0-rc.3.tgz#4dce009bcc55d8779f721100462b8d6ac489606c" + integrity sha512-WrYlUVaq63k0fYdnIJziphfdTITaTlW0b1qrRzFsqKPRN1AnQenzFs27ZHaaecmFfGg3q1Y2fci3cpyNUBTruQ== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/protocol-http@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-1.0.0-rc.3.tgz#7759e6f96df292c01daaff42f2b921180df17c5d" + integrity sha512-paOSLmXvce84BRCx+JIYGpsVCtn3GCGvzLywaPCHeES2OekwD86PJQskCDAlshRPOy/LCdxYVdMt7FrEBuyQrg== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/querystring-builder@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-1.0.0-rc.3.tgz#d24135a0523a8d9645d874deeb0ba5a6f6c15428" + integrity sha512-PWTaV+0r/7FlPNjjKJQ/WyT4oRx4tG5efOuzQobb4/Bw2AFqVCzE2DMGx1V8YKqdq3QFckvRuoFDVqftyhF/Jw== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + "@aws-sdk/util-uri-escape" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/querystring-parser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-1.0.0-rc.3.tgz#9fdd79eb0a06846f25da5f97477e8d8f1255785a" + integrity sha512-TkA/4wM76WzsiMOs0Lxqk33rP+J0YtCjmpGzS+x4oqNbdVYQBpYtbwqN+9nsrOeieCFRWq9QWl6QM4IyJT9gRA== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/service-error-classification@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-1.0.0-rc.3.tgz#711f6769cabc7fbdac9f0d5270968824762fa29f" + integrity sha512-qE/gPzAoQF3DJEPyQk5iQyTZEbVx53a41T+UHEYKYMaGXuAJfoBKnsucDNxgAYXSwcp+3Wp7XA1TUfcygEiZ/Q== + +"@aws-sdk/shared-ini-file-loader@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-1.0.0-rc.3.tgz#05aa96572d78f0c4c5edcc7f42ed14076d1b16ea" + integrity sha512-wynHRRZENIZUS714NX9cu9BDbxAL7DzOJvPYAj2tgC3bJNt0jkbQxNTePpolwWx7QNwFfQgDbK76LPkIo30dJQ== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/signature-v4@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-1.0.0-rc.3.tgz#7ccc61f17d8f083dcbce5e30843c60f8b0388d67" + integrity sha512-ARfmXLW4NMmQF5/3xGiasi6nrlvddZauJOgG9t2STTog8gijn+y+V7wh26A7e4vgv1hyE0RdonylbakUH1R4Nw== + dependencies: + "@aws-sdk/is-array-buffer" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + "@aws-sdk/util-hex-encoding" "1.0.0-rc.3" + "@aws-sdk/util-uri-escape" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/smithy-client@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-1.0.0-rc.3.tgz#b96e97fa6b8bb3de8ecd918d842b2fb972fa0ac6" + integrity sha512-mlzpr5NLkaoPdTVrr3HIxuNbVJtq9IIrgfVXjqCNixOqJDRG46qiXubfaSsf4giwP8CE6zK9cDkvVDKyV0dl8A== + dependencies: + "@aws-sdk/middleware-stack" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/types@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-1.0.0-rc.3.tgz#98466080e07244d8f7406cc61ae7918d02b339a2" + integrity sha512-pKKR2SXG8IHbWcmVgFwLUrHqqqFOEuf5JiQmP7dEBjUXqavzDnqFUY7g9PGuM8928IQqL7IXrRsK7R+VbLgodQ== + +"@aws-sdk/types@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.1.0.tgz#04d77c37a80b422e8123f296338d129e51f3e1fc" + integrity sha512-4Az7cemXCN4Qp8EheNkZTJJqIG0dvCT2KAreJLoclcVTcEFw2rzlATUnSeia1YTRsVd6aNxD001Ug7f3vYcQkw== + +"@aws-sdk/url-parser-browser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser-browser/-/url-parser-browser-1.0.0-rc.3.tgz#d9e1da2acdfb7f2486a68e951dd185dd7b0764e8" + integrity sha512-bTCB4K1nxX3juaOSRdjUC+nq1KZX1Ipy5pMQoDiRWYCgMgUAcqeWuxlclF3dc8vuhYUWa2A86D5lT3zrP0Gqag== + dependencies: + "@aws-sdk/querystring-parser" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/url-parser-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser-node/-/url-parser-node-1.0.0-rc.3.tgz#0cdd48fa068a1cf243b46b4eb4c927f38499f63d" + integrity sha512-W2No+drp3jCjkr1edSReGNLyXF+a34qHOcy8cJ6ZtPe5eLzCroZ33+w1gJ01r5UboWwzo8Qyz7QPxD5J0zPVzw== + dependencies: + "@aws-sdk/querystring-parser" "1.0.0-rc.3" + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + url "^0.11.0" + +"@aws-sdk/util-arn-parser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-1.0.0-rc.3.tgz#738e945d2dfd009d78c4c07e3773d41c1c525262" + integrity sha512-mIXiyBYDAQa9EdaKKU4oQsWAvSWVXAumCH89N5VQfrlRCuaqRUdmE83CJx69wcLFbrZCZmCJD2gcPVG5Ywa+NQ== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-base64-browser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-browser/-/util-base64-browser-1.0.0-rc.3.tgz#49cb2a1c9f177327b66eb2a150e643334dd3ce0d" + integrity sha512-peqOSoOCTGlZVX9gC+4SxaSXQqSsjzNfKxKLZwcP/HhHIPU/I+tbnRbH4a2Cx29DsopTngu0GKLuPJEL67bvog== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-base64-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-node/-/util-base64-node-1.0.0-rc.3.tgz#ef68e130e7b42b673f93af4a68b46c1542702e64" + integrity sha512-gz/JScFQ9MMdI59VdJTbgZrnNdTPXOJKesMwoEMH8nMb6/Wi3+KL2NH/GC92hxhuE/JbA1vdrelvCFOED8E1Jg== + dependencies: + "@aws-sdk/util-buffer-from" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/util-body-length-browser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-1.0.0-rc.3.tgz#f3052599445e06081002788693ada1fb99ea4a51" + integrity sha512-xvMrCo+5DshN4Fu3zar2RxaqPJ/QRAEOChyWEGUqjE+9/cow+uWsqBX3FdeY84mV6dkdcAJLQvP8aVH+v+w+lw== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-body-length-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-1.0.0-rc.3.tgz#e7068c9feff896a3720f71eab5ca44c76e587764" + integrity sha512-q7n3IP5s9TIMao9sK4an+xxBubHqWXoeqCQ5haeDmqQTBiZQYcyQQq61YJRghj2/53SH5MMS1ACncw3kvnO92g== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-buffer-from@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-1.0.0-rc.3.tgz#6a18955cb422b5649c9675d64bc2defa6e1175ac" + integrity sha512-43FzXSA3356C/QRCKZSmGTVwH4BgObNJDvF4z5dwwrfqU+tXjnUdnFo5hLsHq+fwjtWuXLkAyi+vz07x3MphvA== + dependencies: + "@aws-sdk/is-array-buffer" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/util-hex-encoding@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-1.0.0-rc.3.tgz#4229f2495f3a5ef32c8c7ada7ab14bd6f983d269" + integrity sha512-GXHBBGdAH2HPn18RFMsvXAvBtO8pG0I2PlGHfKhn+ym+UT1lHHYpCd3/PawUVUYnFZrqIj+j48IjFFJ3XMPXyQ== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.1.0.tgz#a04058b8d1044521dda9ca77b81be0ffc26bf0d7" + integrity sha512-HAU9Sx3EJMGU4Cfq2m3t2QnkINNQx5KWa6xGctCLN2C8bNWOpKqQhWO6qcxsXalrdW5qiXY5sj8JZGRaLa3yyQ== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-uri-escape@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-1.0.0-rc.3.tgz#53b7ba5c353cef31f0d1f10c06d8dfc2118a3371" + integrity sha512-PW1Uh5nJ32VKysV6DxyO40gONJR8s0QFeS55apyPUeCYCrdEjwsNvftDWbRJIcVpvkRSrbDezWc5CJC0S8WXjQ== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-user-agent-browser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-1.0.0-rc.3.tgz#2b8d7a79c7e79099fe9a41976d4eeb39f5d83c21" + integrity sha512-ev7bjF6QejDTi/UTvBLfiUETrXtuBf5sJl8ocWRUcrCnje5DW5lat2LaC7KWeRppQ4NA//ldavF5ngAxsn8TzA== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/util-user-agent-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-1.0.0-rc.3.tgz#f9a7337b80e4118a12c4cc4f83512e9b5e48cb4e" + integrity sha512-5ELevKFFsHcyPSOrQ3mgdaNZ+Fr1I4J+/8aKoOiBO1Pnp15/xlVS4GkRiE0uUmAvBbUh1sByMvTo7ITeOBvlxA== + dependencies: + "@aws-sdk/types" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/util-utf8-browser@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-1.0.0-rc.3.tgz#ca2f1ee3c3774203675455e6cf6a52256d40849d" + integrity sha512-ypEJ2zsfm844dPSnES5lvS80Jb6hQ7D9iu0TUKQfIVu0LernJaAiSM05UEbktN+bEAoQBi9S64l8JjHVKFWu1Q== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.1.0.tgz#7be17b545af101c320d34aace47139cf9987d796" + integrity sha512-vJP20me+Wc1RJHq+Y+gFD25aWhbQte+Qkyh3SOKQ+YvNaMcaeVwOV7b3Y3ItBuMdutHLJWmbJ2wF6dhhpy1kOA== + dependencies: + tslib "^1.8.0" + +"@aws-sdk/util-utf8-node@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-1.0.0-rc.3.tgz#d6841823b949f4209fdcc405c5ad5d4b483e6e60" + integrity sha512-80BWIgYzdw/cKxUrXf+7IKp07saLfCl7p4Q+zitcTrng9bSbPhjntXBS+dOFrBU2fBUynfI2K+9k5taJRKgOTQ== + dependencies: + "@aws-sdk/util-buffer-from" "1.0.0-rc.3" + tslib "^1.8.0" + +"@aws-sdk/xml-builder@1.0.0-rc.3": + version "1.0.0-rc.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-1.0.0-rc.3.tgz#2b0b6b4c182b96245889f4c8e2004eef847401f4" + integrity sha512-WdW/bZLVMNrEdG++m4B4QmZ6KnYsF3V68CDkZKg8IgDOMON4YOqUPBYDHNR8Wtdd1JQFLMDzrcqnXQqLb5dWgA== + dependencies: + tslib "^1.8.0" + "@balena/dockerignore@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== +"@hapi/accept@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" + integrity sha512-fMr4d7zLzsAXo28PRRQPXR1o2Wmu+6z+VY1UzDp0iFo13Twj8WePakwXBiqn3E1aAlTpSNzCXdnnQXFhst8h8Q== + dependencies: + "@hapi/boom" "9.x.x" + "@hapi/hoek" "9.x.x" + +"@hapi/boom@9.x.x": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-9.1.1.tgz#89e6f0e01637c2a4228da0d113e8157c93677b04" + integrity sha512-VNR8eDbBrOxBgbkddRYIe7+8DZ+vSbV6qlmaN2x7eWjsUjy2VmQgChkOKcVZIeupEZYj+I0dqNg430OhwzagjA== + dependencies: + "@hapi/hoek" "9.x.x" + +"@hapi/hoek@9.x.x": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" + integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== + +"@sls-next/lambda-at-edge@link:../../libs/lambda-at-edge": + version "0.0.0" + uid "" + "@types/fs-extra@^9.0.1": version "9.0.6" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.6.tgz#488e56b77299899a608b8269719c1d133027a6ab" @@ -498,6 +1170,72 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz#d934aacc22424fe9622ebf6857370c052eae464e" integrity sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A== +"@vercel/nft@^0.9.3": + version "0.9.5" + resolved "https://registry.yarnpkg.com/@vercel/nft/-/nft-0.9.5.tgz#bf795944a4764ca49ca1a642f17ab32f9ac701d2" + integrity sha512-EhSFOYwqvH3KZyK1pKyFj/DRoCZ2KFu8sRaVaJ+KGlU4kroAWm8okeA2EtIY11+/fMX3YQkNno7kf5H4FZrDvg== + dependencies: + acorn "^7.1.1" + acorn-class-fields "^0.3.2" + acorn-export-ns-from "^0.1.0" + acorn-import-meta "^1.1.0" + acorn-numeric-separator "^0.3.0" + acorn-static-class-features "^0.2.1" + bindings "^1.4.0" + estree-walker "^0.6.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + micromatch "^4.0.2" + mkdirp "^0.5.1" + node-gyp-build "^4.2.2" + node-pre-gyp "^0.13.0" + resolve-from "^5.0.0" + rollup-pluginutils "^2.8.2" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-class-fields@^0.3.2: + version "0.3.7" + resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz#a35122f3cc6ad2bb33b1857e79215677fcfdd720" + integrity sha512-jdUWSFce0fuADUljmExz4TWpPkxmRW/ZCPRqeeUzbGf0vFUcpQYbyq52l75qGd0oSwwtAepeL6hgb/naRgvcKQ== + dependencies: + acorn-private-class-elements "^0.2.7" + +acorn-export-ns-from@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/acorn-export-ns-from/-/acorn-export-ns-from-0.1.0.tgz#192687869bba3bcb2ef1a1ba196486ea7e100e5c" + integrity sha512-QDQJBe2DfxNBIMxs+19XY2i/XXilJn+kPgX30HWNYK4IXoNj3ACNSWPU7szL0SzqjFyOG4zoZxG9P7JfNw5g7A== + +acorn-import-meta@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/acorn-import-meta/-/acorn-import-meta-1.1.0.tgz#c384423462ee7d4721d4de83231021a36cb09def" + integrity sha512-pshgiVR5mhpjFVdizKTN+kAGRqjJFUOEB3TvpQ6kiAutb1lvHrIVVcGoe5xzMpJkVNifCeymMG7/tsDkWn8CdQ== + +acorn-numeric-separator@^0.3.0: + version "0.3.6" + resolved "https://registry.yarnpkg.com/acorn-numeric-separator/-/acorn-numeric-separator-0.3.6.tgz#af7f0abaf8e74bd9ca1117602954d0a3b75804f3" + integrity sha512-jUr5esgChu4k7VzesH/Nww3EysuyGJJcTEEiXqILUFKpO96PNyEXmK21M6nE0TSqGA1PeEg1MzgqJaoFsn9JMw== + +acorn-private-class-elements@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-0.2.7.tgz#b14902c705bcff267adede1c9f61c1a317ef95d2" + integrity sha512-+GZH2wOKNZOBI4OOPmzpo4cs6mW297sn6fgIk1dUI08jGjhAaEwvC39mN2gJAg2lmAQJ1rBkFqKWonL3Zz6PVA== + +acorn-static-class-features@^0.2.1: + version "0.2.4" + resolved "https://registry.yarnpkg.com/acorn-static-class-features/-/acorn-static-class-features-0.2.4.tgz#a0f5261dd483f25196716854f2d7652a1deb39ee" + integrity sha512-5X4mpYq5J3pdndLmIB0+WtFd/mKWnNYpuTlTzj32wUu/PMmEGOiayQ5UrqgwdBNiaZBtDDh5kddpP7Yg2QaQYA== + dependencies: + acorn-private-class-elements "^0.2.7" + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + ajv@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" @@ -508,6 +1246,16 @@ ajv@^7.0.2: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" @@ -520,6 +1268,19 @@ ansi-styles@^4.0.0: dependencies: color-convert "^2.0.1" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -535,6 +1296,13 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +bindings@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -543,11 +1311,33 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + charenc@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -570,31 +1360,175 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + constructs@^3.2.0: version "3.2.107" resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.107.tgz#2508a15974e7a7ff420c45ab5628c9279caeb175" integrity sha512-iiXw36Q9EdOnBX5qNuGMlqh4ymSIMdQ/aeuVTWct/gF67ys/DUxoM8Oc4Rs9xw3g6RZGb/MKMyi7otLHZHGGgw== +cookie@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypt@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + diff@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +execa@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "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-xml-parser@^3.16.0: + version "3.17.6" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.17.6.tgz#4f5df8cf927c3e59a10362abcfb7335c34bc5c5f" + integrity sha512-40WHI/5d2MOzf1sD2bSaTXlPn1lueJLAX6j1xH5dSAr6tNeut8B9ktEL6sjAK9yVON4uNj9//axOdBJUuruCzw== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fresh@0.5.2, fresh@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" @@ -605,26 +1539,166 @@ fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^1.0.0" -graceful-fs@^4.1.6, graceful-fs@^4.2.0: +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.15, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +is-animated@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-animated/-/is-animated-2.0.1.tgz#e523efd5a0ef0e6ac78a7307a2c8f311eb5298bc" + integrity sha512-f61go8/mYdl6g7JOLbi6YtiJ1AKM9TFdNv2bVP7JlAHm5MPjnvveOkKPlm51beF9ulb5hsGeoqdSXrjJ7RNKHg== + is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" @@ -644,6 +1718,81 @@ jsonschema@^1.4.0: resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +klaw@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" + integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== + dependencies: + graceful-fs "^4.1.9" + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" @@ -665,6 +1814,29 @@ md5@^2.3.0: crypt "0.0.2" is-buffer "~1.1.6" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -672,16 +1844,310 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +needle@^2.2.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" + integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-gyp-build@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + +node-pre-gyp@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz#df9ab7b68dd6498137717838e4f92a33fc9daa42" + integrity sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +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 sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +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" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-to-regexp@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" + integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== + +picomatch@^2.0.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-native-get-random-values@^1.4.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/react-native-get-random-values/-/react-native-get-random-values-1.5.1.tgz#f335a37c09a4892deaf40187e73a888e14e82d60" + integrity sha512-L76sTcz3jdFmc7Gn41SHOxCioYY3m4rtuWEUI6X8IeWVmkflHXrSyAObOW4eNTM5qytH+45pgMCVKJzfB/Ik4A== + dependencies: + fast-base64-decode "^1.0.0" + +readable-stream@^2.0.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rollup-pluginutils@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +semver@^5.3.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^7.3.2: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" @@ -689,6 +2155,52 @@ semver@^7.3.2: dependencies: lru-cache "^6.0.0" +send@^0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +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== + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -698,6 +2210,28 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -707,6 +2241,27 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -714,6 +2269,16 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +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" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + table@^6.0.7: version "6.0.7" resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" @@ -724,6 +2289,41 @@ table@^6.0.7: slice-ansi "^4.0.0" string-width "^4.2.0" +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tslib@^1.11.1, tslib@^1.8.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + typescript@^3.9.6: version "3.9.7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" @@ -746,6 +2346,48 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^3.0.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" From 3799b10f8c3d04b65d6734e98d0fb6c6634a648d Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 18 Jan 2021 18:29:53 +0000 Subject: [PATCH 03/26] fix: add cdk assert lib --- .../serverless-components/nextjs-cdk-construct/package.json | 1 + .../serverless-components/nextjs-cdk-construct/tsconfig.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/package.json b/packages/serverless-components/nextjs-cdk-construct/package.json index bcf621c00e..6abb149416 100644 --- a/packages/serverless-components/nextjs-cdk-construct/package.json +++ b/packages/serverless-components/nextjs-cdk-construct/package.json @@ -27,6 +27,7 @@ }, "license": "MIT", "dependencies": { + "@aws-cdk/assert": ">=1.75.0 & < 2", "@aws-cdk/aws-certificatemanager": ">=1.75.0 & < 2", "@aws-cdk/aws-cloudfront": ">=1.75.0 & < 2", "@aws-cdk/aws-cloudfront-origins": ">=1.75.0 & < 2", diff --git a/packages/serverless-components/nextjs-cdk-construct/tsconfig.json b/packages/serverless-components/nextjs-cdk-construct/tsconfig.json index fc1cdfe366..a8c0e5df5b 100644 --- a/packages/serverless-components/nextjs-cdk-construct/tsconfig.json +++ b/packages/serverless-components/nextjs-cdk-construct/tsconfig.json @@ -12,5 +12,5 @@ "allowJs": true }, "exclude": ["node_modules"], - "include": ["**/*.ts", ".d.ts"] + "include": ["./src"] } From b12f6dbfa29e9780d180c3c5c090519032213e77 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 18 Jan 2021 18:48:12 +0000 Subject: [PATCH 04/26] fix: update failing snapshot --- .../__snapshots__/snapshots.test.ts.snap | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap index 3ab48edf0e..99e199fce4 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap @@ -15,6 +15,18 @@ Object { "Description": "S3 key for asset version \\"017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44\\"", "Type": "String", }, + "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962ArtifactHash4B94FD40": Object { + "Description": "Artifact hash for asset \\"4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962\\"", + "Type": "String", + }, + "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3Bucket63D53DF3": Object { + "Description": "S3 bucket for asset \\"4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962\\"", + "Type": "String", + }, + "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3VersionKey8F2AACCA": Object { + "Description": "S3 key for asset version \\"4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962\\"", + "Type": "String", + }, "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { "Description": "Artifact hash for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", "Type": "String", @@ -63,28 +75,16 @@ Object { "Description": "S3 key for asset version \\"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\\"", "Type": "String", }, - "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819ArtifactHash002418CD": Object { - "Description": "Artifact hash for asset \\"969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819\\"", - "Type": "String", - }, - "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3Bucket928FA75E": Object { - "Description": "S3 bucket for asset \\"969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819\\"", - "Type": "String", - }, - "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3VersionKey3C8A639D": Object { - "Description": "S3 key for asset version \\"969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819\\"", - "Type": "String", - }, - "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fArtifactHashB137ECA9": Object { - "Description": "Artifact hash for asset \\"d5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308f\\"", + "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308ArtifactHash388A1622": Object { + "Description": "Artifact hash for asset \\"9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308\\"", "Type": "String", }, - "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3Bucket7C30CEE1": Object { - "Description": "S3 bucket for asset \\"d5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308f\\"", + "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3Bucket79655A1B": Object { + "Description": "S3 bucket for asset \\"9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308\\"", "Type": "String", }, - "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3VersionKey727F28C8": Object { - "Description": "S3 key for asset version \\"d5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308f\\"", + "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3VersionKey2954262C": Object { + "Description": "S3 key for asset version \\"9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308\\"", "Type": "String", }, "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68ArtifactHashD9A515C3": Object { @@ -99,16 +99,16 @@ Object { "Description": "S3 key for asset version \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", "Type": "String", }, - "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02ArtifactHash42AE7E30": Object { - "Description": "Artifact hash for asset \\"ec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02\\"", + "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172ArtifactHash1E605512": Object { + "Description": "Artifact hash for asset \\"ede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172\\"", "Type": "String", }, - "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3BucketC0AB9189": Object { - "Description": "S3 bucket for asset \\"ec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02\\"", + "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3Bucket291AC00F": Object { + "Description": "S3 bucket for asset \\"ede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172\\"", "Type": "String", }, - "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3VersionKey62882515": Object { - "Description": "S3 key for asset version \\"ec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02\\"", + "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3VersionKey295F654E": Object { + "Description": "S3 key for asset version \\"ede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172\\"", "Type": "String", }, }, @@ -963,7 +963,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3Bucket7C30CEE1", + "Ref": "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3Bucket79655A1B", }, "S3Key": Object { "Fn::Join": Array [ @@ -976,7 +976,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3VersionKey727F28C8", + "Ref": "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3VersionKey2954262C", }, ], }, @@ -989,7 +989,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersd5197f93705642e64588211e91dadd3da88a5b21b70be2b3ce040a803599308fS3VersionKey727F28C8", + "Ref": "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3VersionKey2954262C", }, ], }, @@ -1011,7 +1011,7 @@ Object { }, "Type": "AWS::Lambda::Function", }, - "StackNextApiLambdaCurrentVersion09578A6Ab80145a30d19c6a0b5589dade547972d": Object { + "StackNextApiLambdaCurrentVersion09578A6Ae0d2a7330c27044360fe30236d6ed2e3": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1028,7 +1028,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextApiLambdaCurrentVersion09578A6Ab80145a30d19c6a0b5589dade547972d", + "StackNextApiLambdaCurrentVersion09578A6Ae0d2a7330c27044360fe30236d6ed2e3", "Version", ], }, @@ -1044,7 +1044,7 @@ Object { "MaximumRetryAttempts": 1, "Qualifier": Object { "Fn::GetAtt": Array [ - "StackNextApiLambdaCurrentVersion09578A6Ab80145a30d19c6a0b5589dade547972d", + "StackNextApiLambdaCurrentVersion09578A6Ae0d2a7330c27044360fe30236d6ed2e3", "Version", ], }, @@ -1138,7 +1138,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3BucketC0AB9189", + "Ref": "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3Bucket63D53DF3", }, "S3Key": Object { "Fn::Join": Array [ @@ -1151,7 +1151,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3VersionKey62882515", + "Ref": "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3VersionKey8F2AACCA", }, ], }, @@ -1164,7 +1164,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersec21642f95cbedf2c90bb32e49a60cbc2a73028e37e9aa0e777dfb8400e22c02S3VersionKey62882515", + "Ref": "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3VersionKey8F2AACCA", }, ], }, @@ -1193,7 +1193,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextImageLambdaCurrentVersionDEC920BCe0255405323cfb65d9fea7113c49b3ee", + "StackNextImageLambdaCurrentVersionDEC920BC7960e565994dd598be24b94c60200fea", "Version", ], }, @@ -1201,7 +1201,7 @@ Object { }, "Type": "AWS::Lambda::Alias", }, - "StackNextImageLambdaCurrentVersionDEC920BCe0255405323cfb65d9fea7113c49b3ee": Object { + "StackNextImageLambdaCurrentVersionDEC920BC7960e565994dd598be24b94c60200fea": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1219,7 +1219,7 @@ Object { "MaximumRetryAttempts": 1, "Qualifier": Object { "Fn::GetAtt": Array [ - "StackNextImageLambdaCurrentVersionDEC920BCe0255405323cfb65d9fea7113c49b3ee", + "StackNextImageLambdaCurrentVersionDEC920BC7960e565994dd598be24b94c60200fea", "Version", ], }, @@ -1276,7 +1276,7 @@ Object { Object { "EventType": "origin-request", "LambdaFunctionARN": Object { - "Ref": "StackNextImageLambdaCurrentVersionDEC920BCe0255405323cfb65d9fea7113c49b3ee", + "Ref": "StackNextImageLambdaCurrentVersionDEC920BC7960e565994dd598be24b94c60200fea", }, }, ], @@ -1307,13 +1307,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + "Ref": "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + "Ref": "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", }, }, ], @@ -1378,7 +1378,7 @@ Object { Object { "EventType": "origin-request", "LambdaFunctionARN": Object { - "Ref": "StackNextApiLambdaCurrentVersion09578A6Ab80145a30d19c6a0b5589dade547972d", + "Ref": "StackNextApiLambdaCurrentVersion09578A6Ae0d2a7330c27044360fe30236d6ed2e3", }, }, ], @@ -1407,13 +1407,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + "Ref": "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + "Ref": "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", }, }, ], @@ -1634,7 +1634,7 @@ Object { }, "Type": "AWS::CloudFront::CachePolicy", }, - "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0": Object { + "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1651,7 +1651,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextLambdaCurrentVersion21F01F87077afa049525c4925bcf4fa81225f1a0", + "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", "Version", ], }, @@ -1666,7 +1666,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3Bucket928FA75E", + "Ref": "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3Bucket291AC00F", }, "S3Key": Object { "Fn::Join": Array [ @@ -1679,7 +1679,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3VersionKey3C8A639D", + "Ref": "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3VersionKey295F654E", }, ], }, @@ -1692,7 +1692,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters969959d5c7481c6a955d9fbf8bcfcd76526c77035e15c1b30bdc19c58286d819S3VersionKey3C8A639D", + "Ref": "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3VersionKey295F654E", }, ], }, From ed731a2e90c7427cbfe2287612d3be7d6914ebc1 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 20 Jan 2021 21:49:26 +0000 Subject: [PATCH 05/26] fix: updates cdk asset caches to match sls-component caches --- packages/libs/s3-static-assets/package.json | 3 +- packages/libs/s3-static-assets/src/index.ts | 247 +++++++++--------- .../src/lib/filterOutDirectories.ts | 3 - .../src/lib/readDirectoryFiles.ts | 21 +- packages/libs/s3-static-assets/yarn.lock | 126 +++++++-- .../nextjs-cdk-construct/package.json | 1 + .../nextjs-cdk-construct/src/index.ts | 115 ++++---- .../nextjs-cdk-construct/yarn.lock | 181 ++++++++++++- 8 files changed, 496 insertions(+), 201 deletions(-) delete mode 100644 packages/libs/s3-static-assets/src/lib/filterOutDirectories.ts diff --git a/packages/libs/s3-static-assets/package.json b/packages/libs/s3-static-assets/package.json index 494365ddae..a756e94912 100644 --- a/packages/libs/s3-static-assets/package.json +++ b/packages/libs/s3-static-assets/package.json @@ -33,13 +33,12 @@ "homepage": "https://github.com/serverless-nextjs/serverless-next.js#readme", "dependencies": { "aws-sdk": "2.728.0", + "fast-glob": "^3.2.5", "fs-extra": "^9.0.1", - "klaw": "^3.0.0", "mime-types": "^2.1.27", "regex-parser": "^2.2.10" }, "devDependencies": { - "@types/klaw": "^3.0.1", "@types/mime-types": "^2.1.0", "typescript": "^3.9.6" } diff --git a/packages/libs/s3-static-assets/src/index.ts b/packages/libs/s3-static-assets/src/index.ts index e2bcb84ba1..800abb12fa 100644 --- a/packages/libs/s3-static-assets/src/index.ts +++ b/packages/libs/s3-static-assets/src/index.ts @@ -1,8 +1,7 @@ import AWS from "aws-sdk"; -import path, { join } from "path"; +import path from "path"; import fse from "fs-extra"; import readDirectoryFiles from "./lib/readDirectoryFiles"; -import filterOutDirectories from "./lib/filterOutDirectories"; import { IMMUTABLE_CACHE_CONTROL_HEADER, SERVER_NO_CACHE_CACHE_CONTROL_HEADER, @@ -24,33 +23,32 @@ type UploadStaticAssetsOptions = { publicDirectoryCache?: PublicDirectoryCache; }; +type AssetDirectoryFileCachePoliciesOptions = { + basePath: string; + // The directory containing the build output. + // .i.e. by default .serverless_nextjs + serverlessBuildOutDir: string; + nextStaticDir?: string; + publicDirectoryCache?: PublicDirectoryCache; +}; + /** - * Uploads from built assets folder in .serverless_nextjs/assets to S3. - * This is used to decouple a build from deployment. - * Currently this works for Lambda@Edge deployment. + * Returns an array of files with with their relevant cache policies. */ -const uploadStaticAssetsFromBuild = async ( - options: UploadStaticAssetsOptions -): Promise => { - const { - bucketName, - credentials, - basePath, - publicDirectoryCache, - nextConfigDir - } = options; - const s3 = await S3ClientFactory({ - bucketName, - credentials: credentials - }); +const getAssetDirectoryFileCachePolicies = ( + options: AssetDirectoryFileCachePoliciesOptions +): Array<{ + cacheControl: string | undefined; + path: { + relative: string; + absolute: string; + }; +}> => { + const { basePath, publicDirectoryCache, serverlessBuildOutDir } = options; const normalizedBasePath = basePath ? basePath.slice(1) : ""; - const assetsOutputDirectory = path.join( - nextConfigDir, - ".serverless_nextjs", - "assets" - ); + const assetsOutputDirectory = path.join(serverlessBuildOutDir, "assets"); // Upload BUILD_ID file to represent the current build ID to be uploaded. This is for metadata and also used for deleting old versioned files. const buildIdPath = path.join( @@ -58,115 +56,127 @@ const uploadStaticAssetsFromBuild = async ( normalizedBasePath, "BUILD_ID" ); - const buildIdUpload = s3.uploadFile({ - s3Key: pathToPosix(path.join(normalizedBasePath, "BUILD_ID")), - filePath: buildIdPath - }); + + const buildIdUpload = { + path: buildIdPath, + cacheControl: undefined + }; // Upload Next.js static files - const nextStaticFiles = await readDirectoryFiles( + const nextStaticFiles = readDirectoryFiles( path.join(assetsOutputDirectory, normalizedBasePath, "_next", "static") ); - const nextStaticFilesUploads = nextStaticFiles - .filter(filterOutDirectories) - .map(async (fileItem) => { - const s3Key = pathToPosix( - path.relative(assetsOutputDirectory, fileItem.path) - ); - - return s3.uploadFile({ - s3Key, - filePath: fileItem.path, - cacheControl: IMMUTABLE_CACHE_CONTROL_HEADER - }); - }); + const nextStaticFilesUploads = nextStaticFiles.map((fileItem) => ({ + path: fileItem.path, + cacheControl: IMMUTABLE_CACHE_CONTROL_HEADER + })); // Upload Next.js data files - const nextDataFiles = await readDirectoryFiles( + const nextDataFiles = readDirectoryFiles( path.join(assetsOutputDirectory, normalizedBasePath, "_next", "data") ); - const nextDataFilesUploads = nextDataFiles - .filter(filterOutDirectories) - .map(async (fileItem) => { - const s3Key = pathToPosix( - path.relative(assetsOutputDirectory, fileItem.path) - ); - - return s3.uploadFile({ - s3Key, - filePath: fileItem.path, - cacheControl: SERVER_CACHE_CONTROL_HEADER - }); - }); + const nextDataFilesUploads = nextDataFiles.map((fileItem) => ({ + path: fileItem.path, + cacheControl: SERVER_CACHE_CONTROL_HEADER + })); // Upload Next.js HTML pages - const htmlPages = await readDirectoryFiles( + const htmlPages = readDirectoryFiles( path.join(assetsOutputDirectory, normalizedBasePath, "static-pages") ); - const htmlPagesUploads = htmlPages - .filter(filterOutDirectories) - .map(async (fileItem) => { - const s3Key = pathToPosix( - path.relative(assetsOutputDirectory, fileItem.path) - ); - - // Dynamic fallback HTML pages should never be cached as it will override actual pages once generated and stored in S3. - const isDynamicFallback = /\[.*]/.test(s3Key); - if (isDynamicFallback) { - return s3.uploadFile({ - s3Key, - filePath: fileItem.path, - cacheControl: SERVER_NO_CACHE_CACHE_CONTROL_HEADER - }); - } else { - return s3.uploadFile({ - s3Key, - filePath: fileItem.path, - cacheControl: SERVER_CACHE_CONTROL_HEADER - }); - } - }); + const htmlPagesUploads = htmlPages.map((fileItem) => { + // Dynamic fallback HTML pages should never be cached as it will override actual pages once generated and stored in S3. + const isDynamicFallback = /\[.*]/.test(fileItem.path); + if (isDynamicFallback) { + return { + path: fileItem.path, + cacheControl: SERVER_NO_CACHE_CACHE_CONTROL_HEADER + }; + } else { + return { + path: fileItem.path, + cacheControl: SERVER_CACHE_CONTROL_HEADER + }; + } + }); // Upload user static and public files - const publicFiles = await readDirectoryFiles( + const publicFiles = readDirectoryFiles( path.join(assetsOutputDirectory, normalizedBasePath, "public") ); - const staticFiles = await readDirectoryFiles( + const staticFiles = readDirectoryFiles( path.join(assetsOutputDirectory, normalizedBasePath, "static") ); - const publicAndStaticUploads = [...publicFiles, ...staticFiles] - .filter(filterOutDirectories) - .map(async (fileItem) => { - const s3Key = pathToPosix( - path.relative(assetsOutputDirectory, fileItem.path) - ); - - return s3.uploadFile({ - filePath: fileItem.path, - s3Key: s3Key, - cacheControl: getPublicAssetCacheControl( - fileItem.path, - publicDirectoryCache - ) - }); - }); + const publicAndStaticUploads = [...publicFiles, ...staticFiles].map( + (fileItem) => ({ + path: fileItem.path, + cacheControl: getPublicAssetCacheControl( + fileItem.path, + publicDirectoryCache + ) + }) + ); - return Promise.all([ + return [ ...nextStaticFilesUploads, ...nextDataFilesUploads, ...htmlPagesUploads, ...publicAndStaticUploads, buildIdUpload - ]); + ].map(({ cacheControl, path: absolutePath }) => ({ + cacheControl, + path: { + // Path relative to the assets folder, used for the S3 upload key + relative: path.relative(assetsOutputDirectory, absolutePath), + // Absolute path of local asset + absolute: absolutePath + } + })); +}; + +/** + * Uploads from built assets folder in .serverless_nextjs/assets to S3. + * This is used to decouple a build from deployment. + * Currently this works for Lambda@Edge deployment. + */ +const uploadStaticAssetsFromBuild = async ( + options: UploadStaticAssetsOptions +): Promise => { + const { + bucketName, + credentials, + basePath, + publicDirectoryCache, + nextConfigDir + } = options; + const files = getAssetDirectoryFileCachePolicies({ + basePath, + publicDirectoryCache, + serverlessBuildOutDir: path.join(nextConfigDir, ".serverless_nextjs") + }); + const s3 = await S3ClientFactory({ + bucketName, + credentials: credentials + }); + + return Promise.all( + files.map((file) => + s3.uploadFile({ + s3Key: pathToPosix(file.path.relative), + filePath: file.path.absolute, + cacheControl: file.cacheControl + }) + ) + ); }; /** @@ -193,29 +203,27 @@ const uploadStaticAssets = async ( const s3BasePath = basePath ? basePath.slice(1) : ""; - const buildStaticFiles = await readDirectoryFiles( + const buildStaticFiles = readDirectoryFiles( path.join(dotNextDirectory, "static") ); const withBasePath = (key: string): string => path.join(s3BasePath, key); - const buildStaticFileUploads = buildStaticFiles - .filter(filterOutDirectories) - .map(async (fileItem) => { - const s3Key = pathToPosix( - withBasePath( - path - .relative(path.resolve(nextConfigDir), fileItem.path) - .replace(/^.next/, "_next") - ) - ); + const buildStaticFileUploads = buildStaticFiles.map(async (fileItem) => { + const s3Key = pathToPosix( + withBasePath( + path + .relative(path.resolve(nextConfigDir), fileItem.path) + .replace(/^.next/, "_next") + ) + ); - return s3.uploadFile({ - s3Key, - filePath: fileItem.path, - cacheControl: IMMUTABLE_CACHE_CONTROL_HEADER - }); + return s3.uploadFile({ + s3Key, + filePath: fileItem.path, + cacheControl: IMMUTABLE_CACHE_CONTROL_HEADER }); + }); const pagesManifest = await fse.readJSON( path.join(dotNextDirectory, "serverless/pages-manifest.json") @@ -317,9 +325,9 @@ const uploadStaticAssets = async ( return Promise.resolve([]); } - const files = await readDirectoryFiles(directoryPath); + const files = readDirectoryFiles(directoryPath); - return files.filter(filterOutDirectories).map((fileItem) => + return files.map((fileItem) => s3.uploadFile({ filePath: fileItem.path, s3Key: pathToPosix( @@ -381,7 +389,7 @@ const deleteOldStaticAssets = async ( }); // Get BUILD_ID file from S3 if it exists - let buildId = await s3.getFile({ + const buildId = await s3.getFile({ key: normalizedBasePathPrefix + "BUILD_ID" }); @@ -411,6 +419,7 @@ const deleteOldStaticAssets = async ( }; export { + getAssetDirectoryFileCachePolicies, deleteOldStaticAssets, uploadStaticAssetsFromBuild, uploadStaticAssets diff --git a/packages/libs/s3-static-assets/src/lib/filterOutDirectories.ts b/packages/libs/s3-static-assets/src/lib/filterOutDirectories.ts deleted file mode 100644 index 82758286ef..0000000000 --- a/packages/libs/s3-static-assets/src/lib/filterOutDirectories.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Item } from "klaw"; - -export default (fileItem: Item): boolean => !fileItem.stats.isDirectory(); diff --git a/packages/libs/s3-static-assets/src/lib/readDirectoryFiles.ts b/packages/libs/s3-static-assets/src/lib/readDirectoryFiles.ts index f2298f4940..5aff944053 100644 --- a/packages/libs/s3-static-assets/src/lib/readDirectoryFiles.ts +++ b/packages/libs/s3-static-assets/src/lib/readDirectoryFiles.ts @@ -1,21 +1,16 @@ -import klaw, { Item } from "klaw"; - import fse from "fs-extra"; +import path from "path"; +import glob, { Entry } from "fast-glob"; -const readDirectoryFiles = async (directory: string): Promise> => { - const directoryExists = await fse.pathExists(directory); +const readDirectoryFiles = (directory: string): Array => { + const directoryExists = fse.pathExistsSync(directory); if (!directoryExists) { - return Promise.resolve([]); + return []; } - const items: Item[] = []; - return new Promise((resolve, reject) => { - klaw(directory.trim()) - .on("data", (item) => items.push(item)) - .on("end", () => { - resolve(items); - }) - .on("error", reject); + return glob.sync(path.join(directory, "**/*"), { + onlyFiles: true, + stats: true }); }; diff --git a/packages/libs/s3-static-assets/yarn.lock b/packages/libs/s3-static-assets/yarn.lock index 768327e368..a5305c42ad 100644 --- a/packages/libs/s3-static-assets/yarn.lock +++ b/packages/libs/s3-static-assets/yarn.lock @@ -2,23 +2,32 @@ # yarn lockfile v1 -"@types/klaw@^3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/klaw/-/klaw-3.0.1.tgz#29f90021c0234976aa4eb97efced9cb6db9fa8b3" - integrity sha512-acnF3n9mYOr1aFJKFyvfNX0am9EtPUsYPq22QUCGdJE+MVt6UyAN1jwo+PmOPqXD4K7ZS9MtxDEp/un0lxFccA== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: - "@types/node" "*" + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" "@types/mime-types@^2.1.0": version "2.1.0" resolved "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73" integrity sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM= -"@types/node@*": - version "14.0.27" - resolved "https://registry.npmjs.org/@types/node/-/node-14.0.27.tgz#a151873af5a5e851b51b3b065c9e63390a9e0eb1" - integrity sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -44,6 +53,13 @@ base64-js@^1.0.2: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + buffer@4.9.2: version "4.9.2" resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" @@ -58,6 +74,32 @@ events@1.1.1: resolved "https://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= +fast-glob@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fastq@^1.6.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" @@ -68,7 +110,14 @@ fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^1.0.0" -graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: +glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -78,6 +127,23 @@ ieee754@1.1.13, ieee754@^1.1.4: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + isarray@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -97,12 +163,18 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -klaw@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz#b11bec9cf2492f06756d6e809ab73a2910259146" - integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== dependencies: - graceful-fs "^4.1.9" + braces "^3.0.1" + picomatch "^2.0.5" mime-db@1.44.0: version "1.44.0" @@ -116,6 +188,11 @@ mime-types@^2.1.27: dependencies: mime-db "1.44.0" +picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + punycode@1.3.2: version "1.3.2" resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -131,6 +208,16 @@ regex-parser@^2.2.10: resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== +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== + +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + sax@1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" @@ -141,6 +228,13 @@ sax@>=0.6.0: resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + typescript@^3.9.6: version "3.9.7" resolved "https://registry.npmjs.org/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" diff --git a/packages/serverless-components/nextjs-cdk-construct/package.json b/packages/serverless-components/nextjs-cdk-construct/package.json index 6abb149416..7ce647dfb9 100644 --- a/packages/serverless-components/nextjs-cdk-construct/package.json +++ b/packages/serverless-components/nextjs-cdk-construct/package.json @@ -40,6 +40,7 @@ "@aws-cdk/aws-s3-deployment": ">=1.75.0 & < 2", "@aws-cdk/core": ">=1.75.0 & < 2", "@sls-next/lambda-at-edge": "link:../../libs/lambda-at-edge", + "@sls-next/s3-static-assets": "link:../../libs/s3-static-assets", "fs-extra": "^9.0.1" }, "devDependencies": { diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index e2d7a171cd..67d09ca818 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -11,6 +11,7 @@ import { OriginRequestApiHandlerManifest, RoutesManifest } from "@sls-next/lambda-at-edge"; +import { getAssetDirectoryFileCachePolicies } from "@sls-next/s3-static-assets"; import * as fs from "fs-extra"; import * as path from "path"; import { @@ -36,15 +37,16 @@ export class NextJSLambdaEdge extends cdk.Construct { public distribution: cloudfront.Distribution; + public bucket: s3.Bucket; + constructor(scope: cdk.Construct, id: string, private props: Props) { super(scope, id); this.apiBuildManifest = this.readApiBuildManifest(); this.routesManifest = this.readRoutesManifest(); this.imageManifest = this.readImageBuildManifest(); - const bucket = new s3.Bucket(this, "PublicAssets", { + this.bucket = new s3.Bucket(this, "PublicAssets", { publicReadAccess: true }); - const edgeLambdaRole = new Role(this, "NextEdgeLambdaRole", { assumedBy: new CompositePrincipal( new ServicePrincipal("lambda.amazonaws.com"), @@ -202,7 +204,7 @@ export class NextJSLambdaEdge extends cdk.Construct { defaultBehavior: { viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, - origin: new origins.S3Origin(bucket), + origin: new origins.S3Origin(this.bucket), allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, compress: true, @@ -215,7 +217,7 @@ export class NextJSLambdaEdge extends cdk.Construct { [this.pathPattern("_next/image*")]: { viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, - origin: new origins.S3Origin(bucket), + origin: new origins.S3Origin(this.bucket), allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL, cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, @@ -240,7 +242,7 @@ export class NextJSLambdaEdge extends cdk.Construct { [this.pathPattern("_next/data/*")]: { viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, - origin: new origins.S3Origin(bucket), + origin: new origins.S3Origin(this.bucket), allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, compress: true, @@ -250,7 +252,7 @@ export class NextJSLambdaEdge extends cdk.Construct { [this.pathPattern("_next/*")]: { viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, - origin: new origins.S3Origin(bucket), + origin: new origins.S3Origin(this.bucket), allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, compress: true, @@ -259,7 +261,7 @@ export class NextJSLambdaEdge extends cdk.Construct { [this.pathPattern("static/*")]: { viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, - origin: new origins.S3Origin(bucket), + origin: new origins.S3Origin(this.bucket), allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, compress: true, @@ -270,7 +272,7 @@ export class NextJSLambdaEdge extends cdk.Construct { [this.pathPattern("api/*")]: { viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, - origin: new origins.S3Origin(bucket), + origin: new origins.S3Origin(this.bucket), allowedMethods: cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, cachedMethods: @@ -290,30 +292,13 @@ export class NextJSLambdaEdge extends cdk.Construct { } ); - const staticAssets = this.getStaticAssetsFromBuild(); - Object.keys(staticAssets).forEach((staticAssetKey) => { - const staticAsset = - staticAssets[staticAssetKey as keyof typeof staticAssets]; - const assetPath = path.join( - this.props.serverlessBuildOutDir, - "assets", - staticAsset - ); - if (!fs.existsSync(assetPath)) return; - new s3Deploy.BucketDeployment(this, `AssetDeployment_${staticAssetKey}`, { - destinationBucket: bucket, - distribution: this.distribution, - destinationKeyPrefix: staticAsset, - distributionPaths: ["/*"], - sources: [s3Deploy.Source.asset(assetPath)], - cacheControl: [ - s3Deploy.CacheControl.setPublic(), - s3Deploy.CacheControl.maxAge(cdk.Duration.days(365)), - s3Deploy.CacheControl.fromString("immutable") - ] - }); + const staticAssets = getAssetDirectoryFileCachePolicies({ + basePath: "", + serverlessBuildOutDir: props.serverlessBuildOutDir }); + this.createStaticAssetDeployments(staticAssets); + if (props.domain) { new ARecord(this, "AliasRecord", { recordName: props.domain.domainName, @@ -323,6 +308,61 @@ export class NextJSLambdaEdge extends cdk.Construct { } } + /** + * Creates 'Deployments' for files in `/assets`, where each deployment has a + * different cache control header. + * + * CDK allows us to create a 'deployment' with a single cache-header config + * but with many files. So we take the out put from + * `getAssetDirectoryFileCachePolicies`, group them by cache-header and pass + * all files to be uploaded within the deployment. + */ + private createStaticAssetDeployments( + staticAssets: ReturnType + ) { + const NO_CACHE = "NO_CACHE"; + const staticAssetsGroupedByCache = staticAssets.reduce( + (groupedAssets, nextStaticAsset) => { + const key = nextStaticAsset.cacheControl || NO_CACHE; + return { + ...groupedAssets, + [key]: [...(groupedAssets[key] || []), nextStaticAsset] + }; + }, + {} as Record + ); + + const assetsPath = path.join(this.props.serverlessBuildOutDir, "assets"); + Object.keys(staticAssetsGroupedByCache).forEach((cacheKey) => { + const assets = staticAssetsGroupedByCache[cacheKey]; + // We have a unique BucketDeployment per cache-control header, so we + // reformat the cache key to be compatible as a construct ID + const cacheHash = cacheKey.replace(/[^0-9a-z]/gi, ""); + new s3Deploy.BucketDeployment(this, `AssetDeployment${cacheHash}`, { + destinationBucket: this.bucket, + sources: [ + // Slight ergonomic issue with the Asset API that we can't pass an + // array of files, only a single directory. as a work around + // we pass the entire assets directory, but `exclude` all and + // whitelist all the files under the directory that we want to upload + // for this cache-control key. + s3Deploy.Source.asset(assetsPath, { + exclude: [ + "**", + ...assets.map((staticAsset) => { + return `!${staticAsset.path.relative}`; + }) + ] + }) + ], + cacheControl: + cacheKey == NO_CACHE + ? [] + : [s3Deploy.CacheControl.fromString(cacheKey)] + }); + }); + } + private pathPattern(pattern: string): string { const { basePath } = this.routesManifest || {}; return basePath && basePath.length > 0 @@ -358,19 +398,4 @@ export class NextJSLambdaEdge extends cdk.Construct { ? fs.readJSONSync(imageLambdaPath) : null; } - - private getStaticAssetsFromBuild() { - const nextStaticFilesPath = path.join("_next", "static"); - const nextDataFilesPath = path.join("_next", "data"); - const htmlPagesPath = path.join("static-pages"); - const publicFilesPath = path.join("public"); - const staticFilesPath = path.join("static"); - return { - nextStaticFilesPath, - nextDataFilesPath, - htmlPagesPath, - publicFilesPath, - staticFilesPath - }; - } } diff --git a/packages/serverless-components/nextjs-cdk-construct/yarn.lock b/packages/serverless-components/nextjs-cdk-construct/yarn.lock index 837d836a7a..9a8c3a2795 100644 --- a/packages/serverless-components/nextjs-cdk-construct/yarn.lock +++ b/packages/serverless-components/nextjs-cdk-construct/yarn.lock @@ -1154,10 +1154,35 @@ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== + dependencies: + "@nodelib/fs.stat" "2.0.4" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + dependencies: + "@nodelib/fs.scandir" "2.1.4" + fastq "^1.6.0" + "@sls-next/lambda-at-edge@link:../../libs/lambda-at-edge": version "0.0.0" uid "" +"@sls-next/s3-static-assets@link:../../libs/s3-static-assets": + version "0.0.0" + uid "" + "@types/fs-extra@^9.0.1": version "9.0.6" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.6.tgz#488e56b77299899a608b8269719c1d133027a6ab" @@ -1291,11 +1316,31 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +aws-sdk@2.728.0: + version "2.728.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.728.0.tgz#381805dcac7835b5686694e9468d104595bfce42" + integrity sha512-pUVSxb+04urr6BMHg32Op+kT1IWGmwbelrQKMdLnvgcgysmBu1P4XbGBg8/SmAXWfuqqWjz8YnmFNY46VJE43A== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.15.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + uuid "3.3.2" + xml2js "0.4.19" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + bindings@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -1323,6 +1368,15 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + charenc@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" @@ -1482,6 +1536,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + execa@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" @@ -1507,11 +1566,30 @@ 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.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + fast-xml-parser@^3.16.0: version "3.17.6" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.17.6.tgz#4f5df8cf927c3e59a10362abcfb7335c34bc5c5f" integrity sha512-40WHI/5d2MOzf1sD2bSaTXlPn1lueJLAX6j1xH5dSAr6tNeut8B9ktEL6sjAK9yVON4uNj9//axOdBJUuruCzw== +fastq@^1.6.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" + integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== + dependencies: + reusify "^1.0.4" + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" @@ -1577,6 +1655,13 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== +glob-parent@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -1622,6 +1707,16 @@ iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -1662,6 +1757,11 @@ is-buffer@~1.1.6: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -1679,6 +1779,13 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1689,7 +1796,7 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -isarray@~1.0.0: +isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -1699,6 +1806,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +jmespath@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" + integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= + json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" @@ -1819,6 +1931,11 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" @@ -1827,6 +1944,18 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +mime-db@1.45.0: + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-types@^2.1.27: + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== + dependencies: + mime-db "1.45.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -2031,7 +2160,7 @@ path-to-regexp@^6.1.0: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.0.tgz#f7b3803336104c346889adece614669230645f38" integrity sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg== -picomatch@^2.0.5: +picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== @@ -2099,6 +2228,11 @@ readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +regex-parser@^2.2.10: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -2109,6 +2243,11 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +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== + rimraf@^2.6.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -2123,6 +2262,11 @@ rollup-pluginutils@^2.8.2: dependencies: estree-walker "^0.6.1" +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -2138,7 +2282,12 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4: +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o= + +sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -2346,6 +2495,14 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -2359,6 +2516,11 @@ util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +uuid@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + uuid@^3.0.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -2383,6 +2545,19 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" From ea6cc1605efab672a2aa586fe43cd3de8fec38d2 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 24 Jan 2021 14:20:02 +0000 Subject: [PATCH 06/26] refactor: run prettier on fixture files --- .../next-boilerplate/api-lambda/manifest.json | 11 ++++- .../api-lambda/routes-manifest.json | 29 +++++++++++- .../assets/static-pages/stub.html | 16 +++---- .../default-lambda/prerender-manifest.json | 45 ++++++++++++++++++- .../default-lambda/routes-manifest.json | 29 +++++++++++- .../image-lambda/images-manifest.json | 29 +++++++++++- .../image-lambda/routes-manifest.json | 29 +++++++++++- 7 files changed, 174 insertions(+), 14 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/manifest.json index 6874c4a6a6..64443e7037 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/manifest.json +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/manifest.json @@ -1 +1,10 @@ -{"apis":{"dynamic":{},"nonDynamic":{"/api/users":"pages/api/users.js"}},"domainRedirects":{},"enableHTTPCompression":false} +{ + "apis": { + "dynamic": {}, + "nonDynamic": { + "/api/users": "pages/api/users.js" + } + }, + "domainRedirects": {}, + "enableHTTPCompression": false +} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/routes-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/routes-manifest.json index d6be64ffb3..1c38fb2ec7 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/routes-manifest.json +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/routes-manifest.json @@ -1 +1,28 @@ -{"version":3,"pages404":true,"basePath":"","redirects":[],"rewrites":[],"headers":[],"dynamicRoutes":[{"page":"/users/[id]","regex":"^/users/([^/]+?)(?:/)?$","routeKeys":{"id":"id"},"namedRegex":"^/users/(?[^/]+?)(?:/)?$"}],"dataRoutes":[{"page":"/users","dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$"},{"page":"/users/[id]","routeKeys":{"id":"id"},"dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$","namedDataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$"}]} \ No newline at end of file +{ + "version": 3, + "pages404": true, + "basePath": "", + "redirects": [], + "rewrites": [], + "headers": [], + "dynamicRoutes": [ + { + "page": "/users/[id]", + "regex": "^/users/([^/]+?)(?:/)?$", + "routeKeys": { "id": "id" }, + "namedRegex": "^/users/(?[^/]+?)(?:/)?$" + } + ], + "dataRoutes": [ + { + "page": "/users", + "dataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$" + }, + { + "page": "/users/[id]", + "routeKeys": { "id": "id" }, + "dataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$", + "namedDataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$" + } + ] +} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/static-pages/stub.html b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/static-pages/stub.html index 34759afa7b..bed791c441 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/static-pages/stub.html +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/assets/static-pages/stub.html @@ -1,11 +1,11 @@ - - - - Stub - - -

Stub

- + + + + Stub + + +

Stub

+ diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/prerender-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/prerender-manifest.json index 5baa163f38..8e497074bb 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/prerender-manifest.json +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/prerender-manifest.json @@ -1 +1,44 @@ -{"version":2,"routes":{"/users":{"initialRevalidateSeconds":false,"srcRoute":null,"dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json"},"/users/101":{"initialRevalidateSeconds":false,"srcRoute":"/users/[id]","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/101.json"},"/users/102":{"initialRevalidateSeconds":false,"srcRoute":"/users/[id]","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/102.json"},"/users/103":{"initialRevalidateSeconds":false,"srcRoute":"/users/[id]","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/103.json"},"/users/104":{"initialRevalidateSeconds":false,"srcRoute":"/users/[id]","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/104.json"}},"dynamicRoutes":{"/users/[id]":{"routeRegex":"^/users/([^/]+?)(?:/)?$","dataRoute":"/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/[id].json","fallback":false,"dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$"}},"notFoundRoutes":[],"preview":{"previewModeId":"64a40f77826dd9cb91c1f640436433dd","previewModeSigningKey":"b362d55f91531d2c2a13bff0a008e47b4954b90ec8110e3607b6f810b174f8d1","previewModeEncryptionKey":"31bfd880a98a525f77d3edb3d7cc184b9ef10297f5b7db77d0b9a75057c84733"}} \ No newline at end of file +{ + "version": 2, + "routes": { + "/users": { + "initialRevalidateSeconds": false, + "srcRoute": null, + "dataRoute": "/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json" + }, + "/users/101": { + "initialRevalidateSeconds": false, + "srcRoute": "/users/[id]", + "dataRoute": "/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/101.json" + }, + "/users/102": { + "initialRevalidateSeconds": false, + "srcRoute": "/users/[id]", + "dataRoute": "/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/102.json" + }, + "/users/103": { + "initialRevalidateSeconds": false, + "srcRoute": "/users/[id]", + "dataRoute": "/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/103.json" + }, + "/users/104": { + "initialRevalidateSeconds": false, + "srcRoute": "/users/[id]", + "dataRoute": "/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/104.json" + } + }, + "dynamicRoutes": { + "/users/[id]": { + "routeRegex": "^/users/([^/]+?)(?:/)?$", + "dataRoute": "/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/[id].json", + "fallback": false, + "dataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$" + } + }, + "notFoundRoutes": [], + "preview": { + "previewModeId": "64a40f77826dd9cb91c1f640436433dd", + "previewModeSigningKey": "b362d55f91531d2c2a13bff0a008e47b4954b90ec8110e3607b6f810b174f8d1", + "previewModeEncryptionKey": "31bfd880a98a525f77d3edb3d7cc184b9ef10297f5b7db77d0b9a75057c84733" + } +} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/routes-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/routes-manifest.json index d6be64ffb3..1c38fb2ec7 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/routes-manifest.json +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/routes-manifest.json @@ -1 +1,28 @@ -{"version":3,"pages404":true,"basePath":"","redirects":[],"rewrites":[],"headers":[],"dynamicRoutes":[{"page":"/users/[id]","regex":"^/users/([^/]+?)(?:/)?$","routeKeys":{"id":"id"},"namedRegex":"^/users/(?[^/]+?)(?:/)?$"}],"dataRoutes":[{"page":"/users","dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$"},{"page":"/users/[id]","routeKeys":{"id":"id"},"dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$","namedDataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$"}]} \ No newline at end of file +{ + "version": 3, + "pages404": true, + "basePath": "", + "redirects": [], + "rewrites": [], + "headers": [], + "dynamicRoutes": [ + { + "page": "/users/[id]", + "regex": "^/users/([^/]+?)(?:/)?$", + "routeKeys": { "id": "id" }, + "namedRegex": "^/users/(?[^/]+?)(?:/)?$" + } + ], + "dataRoutes": [ + { + "page": "/users", + "dataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$" + }, + { + "page": "/users/[id]", + "routeKeys": { "id": "id" }, + "dataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$", + "namedDataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$" + } + ] +} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/images-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/images-manifest.json index 952c6a8ea9..9b1a2ac3e7 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/images-manifest.json +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/images-manifest.json @@ -1 +1,28 @@ -{"version":1,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[16,32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","domains":[],"sizes":[640,750,828,1080,1200,1920,2048,3840,16,32,48,64,96,128,256,384]}} \ No newline at end of file +{ + "version": 1, + "images": { + "deviceSizes": [640, 750, 828, 1080, 1200, 1920, 2048, 3840], + "imageSizes": [16, 32, 48, 64, 96, 128, 256, 384], + "path": "/_next/image", + "loader": "default", + "domains": [], + "sizes": [ + 640, + 750, + 828, + 1080, + 1200, + 1920, + 2048, + 3840, + 16, + 32, + 48, + 64, + 96, + 128, + 256, + 384 + ] + } +} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/routes-manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/routes-manifest.json index d6be64ffb3..1c38fb2ec7 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/routes-manifest.json +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/routes-manifest.json @@ -1 +1,28 @@ -{"version":3,"pages404":true,"basePath":"","redirects":[],"rewrites":[],"headers":[],"dynamicRoutes":[{"page":"/users/[id]","regex":"^/users/([^/]+?)(?:/)?$","routeKeys":{"id":"id"},"namedRegex":"^/users/(?[^/]+?)(?:/)?$"}],"dataRoutes":[{"page":"/users","dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$"},{"page":"/users/[id]","routeKeys":{"id":"id"},"dataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$","namedDataRouteRegex":"^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$"}]} \ No newline at end of file +{ + "version": 3, + "pages404": true, + "basePath": "", + "redirects": [], + "rewrites": [], + "headers": [], + "dynamicRoutes": [ + { + "page": "/users/[id]", + "regex": "^/users/([^/]+?)(?:/)?$", + "routeKeys": { "id": "id" }, + "namedRegex": "^/users/(?[^/]+?)(?:/)?$" + } + ], + "dataRoutes": [ + { + "page": "/users", + "dataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users.json$" + }, + { + "page": "/users/[id]", + "routeKeys": { "id": "id" }, + "dataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/([^/]+?)\\.json$", + "namedDataRouteRegex": "^/_next/data/IOjzqKr7ylEZVL7Xy7FMd/users/(?[^/]+?)\\.json$" + } + ] +} From 2a3ef61be6a45f1ae191e0efc48a5dfbf16342b5 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 24 Jan 2021 16:24:28 +0000 Subject: [PATCH 07/26] docs: add intial cdk documentation --- documentation/docs/cdkconstruct.md | 93 ++++++++++++++++++++++++++++++ documentation/sidebars.js | 35 ++++++----- 2 files changed, 114 insertions(+), 14 deletions(-) create mode 100644 documentation/docs/cdkconstruct.md diff --git a/documentation/docs/cdkconstruct.md b/documentation/docs/cdkconstruct.md new file mode 100644 index 0000000000..6068a4956d --- /dev/null +++ b/documentation/docs/cdkconstruct.md @@ -0,0 +1,93 @@ +--- +id: cdkconstruct +title: CDK Construct (experimental) +sidebar_label: CDK Construct +--- + +AWS CDK (Cloud Development Kit) makes it possible to write infrastructure in +code using familiar languages such as JavaScript or Python, and provision via +Cloudformation. The tool is growing in popularity and so it seems fitting to +enable Next.js users to be able to deploy their apps using it. The +`NextJSLambdaEdge` construct will provision the same infrastructure as the +`serverless-component`. + +It's simple to include the Next.js construct in your app, the following will +deploy your Next app using a Cloudfront domain: + +```ts +// stack.ts +import { NextJSLambdaEdge } from "@sls-next/cdk-construct"; +import * as cdk from "@aws-cdk/core"; + +export class MyStack extends cdk.Stack { + constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) { + super(scope, id, props); + new NextJSLambdaEdge(this, "NextJsApp", { + serverlessBuildOutDir: "./build" + }); + } +} + +// bin.ts +import * as cdk from "@aws-cdk/core"; +import { Builder } from "@sls-next/lambda-at-edge"; +import { MyStack } from "./stack"; + +// Run the serverless builder, this could be done elsewhere in your workflow +const builder = new Builder(".", "./build"); + +builder + .build() + .then(() => { + const app = new cdk.App(); + new MyStack(app, `MyStack`); + }) + .catch((e) => { + console.log(e); + process.exit(1); + }); +``` + +To deploy your stack, use the `cdk` CLI as normal. + +## Adding a Custom Domain + +Now you've deployed your app, you'll likely want to add a custom domain: + +```tsx +new NextJSLambdaEdge(this, "NextJsApp", { + serverlessBuildOutDir: "./build", + // `Certificate.fromCertificateArn` & `HostedZone.fromHostedZoneAttributes` + // retrieve existing resources, however you could create a new ones in your + // stack via the relevant constructs + domain: { + domainName: "example.com", + hostedZone: HostedZone.fromHostedZoneAttributes(this, "Zone", { + hostedZoneId: "123ABC", + zoneName: "example.com" + }), + certificate: Certificate.fromCertificateArn(this, "Cert", "...arn...") + } +}); +``` + +## Available Props + +- `serverlessBuildOutDir` - the output directory of the `Builder`. +- `domain?: Object` - if yoou'd like to add a custom domain, provide the + following three fields on the `domain` object. + - `hostedZone: IHostedZone;` + - `certificate: ICertificate;` + - `domainName: string;` +- `memory?: number | Record` - configure memory on all lambdas + or individually. +- `timeout?: number | Record` - configure timeout on all lambdas + or individually. +- `name?: string | Record` - configure the name of all lambdas + or individually. +- `runtime?: lambda.Runtime | Record` - configure the runtime of all lambdas + or individually. +- `withLogging?: boolean` - set debug logging on the lambda. +- `whiteListedCookies?: string[]` - provide a list of cookies to forward to the CloudFront origin. +- `behaviours?: Array` - an array of Cloudfront + distribution behaviours. diff --git a/documentation/sidebars.js b/documentation/sidebars.js index cc9b616989..20b83637f3 100644 --- a/documentation/sidebars.js +++ b/documentation/sidebars.js @@ -1,18 +1,25 @@ module.exports = { someSidebar: { - Introduction: ['basics', 'motivation', 'design', 'features', 'contributing'], - 'Getting Started': [ - 'installation', - 'customdomain', - 'customcloudfrontconfig', - 'staticpagecache', - 'publicdirectorycache', - 'awspermissions', - 'lambdaatedgeconfig', - 'architecture', - 'inputs', - 'faq', - 'examples' + Introduction: [ + "basics", + "motivation", + "design", + "features", + "contributing" + ], + "Getting Started": [ + "installation", + "customdomain", + "customcloudfrontconfig", + "staticpagecache", + "publicdirectorycache", + "awspermissions", + "lambdaatedgeconfig", + "architecture", + "inputs", + "faq", + "examples", + "cdkconstruct" ] - }, + } }; From 2fd625881c8bd47f54d52aa5988af18b1cf24b54 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 24 Jan 2021 16:28:02 +0000 Subject: [PATCH 08/26] test: update test snapshots --- .../__snapshots__/snapshots.test.ts.snap | 330 +++++------------- 1 file changed, 95 insertions(+), 235 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap index 99e199fce4..72592a8778 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap @@ -3,64 +3,64 @@ exports[`CDK Construct Snapshots creates boilerplate next app 1`] = ` Object { "Parameters": Object { - "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44ArtifactHashB7995E1D": Object { - "Description": "Artifact hash for asset \\"017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44\\"", + "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508ArtifactHash2E8FEA97": Object { + "Description": "Artifact hash for asset \\"3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508\\"", "Type": "String", }, - "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3Bucket18618D63": Object { - "Description": "S3 bucket for asset \\"017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44\\"", + "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3Bucket27DED49E": Object { + "Description": "S3 bucket for asset \\"3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508\\"", "Type": "String", }, - "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3VersionKeyCB5488FF": Object { - "Description": "S3 key for asset version \\"017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44\\"", + "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3VersionKey427BBA4F": Object { + "Description": "S3 key for asset version \\"3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508\\"", "Type": "String", }, - "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962ArtifactHash4B94FD40": Object { - "Description": "Artifact hash for asset \\"4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962\\"", + "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90ArtifactHashC5E3199F": Object { + "Description": "Artifact hash for asset \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", "Type": "String", }, - "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3Bucket63D53DF3": Object { - "Description": "S3 bucket for asset \\"4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962\\"", + "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3Bucket0D7EE15F": Object { + "Description": "S3 bucket for asset \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", "Type": "String", }, - "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3VersionKey8F2AACCA": Object { - "Description": "S3 key for asset version \\"4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962\\"", + "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3VersionKeyF5955B10": Object { + "Description": "S3 key for asset version \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", "Type": "String", }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { - "Description": "Artifact hash for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363ArtifactHash0A4EDAB8": Object { + "Description": "Artifact hash for asset \\"66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363\\"", "Type": "String", }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5": Object { - "Description": "S3 bucket for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3Bucket08A0F370": Object { + "Description": "S3 bucket for asset \\"66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363\\"", "Type": "String", }, - "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861": Object { - "Description": "S3 key for asset version \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", + "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3VersionKey39BEFFA0": Object { + "Description": "S3 key for asset version \\"66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363\\"", "Type": "String", }, - "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3ArtifactHash62C7B2C0": Object { - "Description": "Artifact hash for asset \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { + "Description": "Artifact hash for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", "Type": "String", }, - "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5": Object { - "Description": "S3 bucket for asset \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3Bucket4D46ABB5": Object { + "Description": "S3 bucket for asset \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", "Type": "String", }, - "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8": Object { - "Description": "S3 key for asset version \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24S3VersionKeyB0F28861": Object { + "Description": "S3 key for asset version \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", "Type": "String", }, - "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1ArtifactHash78F94626": Object { - "Description": "Artifact hash for asset \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaArtifactHash6296D2A1": Object { + "Description": "Artifact hash for asset \\"8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cba\\"", "Type": "String", }, - "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2": Object { - "Description": "S3 bucket for asset \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3Bucket5FE5088F": Object { + "Description": "S3 bucket for asset \\"8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cba\\"", "Type": "String", }, - "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8": Object { - "Description": "S3 key for asset version \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3VersionKeyAADEFDBE": Object { + "Description": "S3 key for asset version \\"8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cba\\"", "Type": "String", }, "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": Object { @@ -75,18 +75,6 @@ Object { "Description": "S3 key for asset version \\"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\\"", "Type": "String", }, - "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308ArtifactHash388A1622": Object { - "Description": "Artifact hash for asset \\"9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308\\"", - "Type": "String", - }, - "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3Bucket79655A1B": Object { - "Description": "S3 bucket for asset \\"9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308\\"", - "Type": "String", - }, - "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3VersionKey2954262C": Object { - "Description": "S3 key for asset version \\"9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308\\"", - "Type": "String", - }, "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68ArtifactHashD9A515C3": Object { "Description": "Artifact hash for asset \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", "Type": "String", @@ -99,16 +87,28 @@ Object { "Description": "S3 key for asset version \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", "Type": "String", }, - "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172ArtifactHash1E605512": Object { - "Description": "Artifact hash for asset \\"ede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172\\"", + "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318ArtifactHash83640A85": Object { + "Description": "Artifact hash for asset \\"efb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318\\"", "Type": "String", }, - "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3Bucket291AC00F": Object { - "Description": "S3 bucket for asset \\"ede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172\\"", + "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3Bucket4D5AE26A": Object { + "Description": "S3 bucket for asset \\"efb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318\\"", "Type": "String", }, - "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3VersionKey295F654E": Object { - "Description": "S3 key for asset version \\"ede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172\\"", + "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3VersionKeyE6471D4A": Object { + "Description": "S3 key for asset version \\"efb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318\\"", + "Type": "String", + }, + "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18ArtifactHashFAD3C98C": Object { + "Description": "Artifact hash for asset \\"f7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18\\"", + "Type": "String", + }, + "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3BucketAEC538BC": Object { + "Description": "S3 bucket for asset \\"f7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18\\"", + "Type": "String", + }, + "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3VersionKey737B65E3": Object { + "Description": "S3 key for asset version \\"f7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18\\"", "Type": "String", }, }, @@ -160,7 +160,7 @@ Object { "Handler": "index.handler", "Layers": Array [ Object { - "Ref": "StackAssetDeploymentnextStaticFilesPathAwsCliLayer08C52E6E", + "Ref": "StackAssetDeploymentpublicmaxage31536000immutableAwsCliLayerEC7E7A34", }, ], "Role": Object { @@ -227,7 +227,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", + "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3Bucket27DED49E", }, ], ], @@ -242,7 +242,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", + "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3Bucket27DED49E", }, "/*", ], @@ -283,14 +283,6 @@ Object { }, ], }, - Object { - "Action": Array [ - "cloudfront:GetInvalidation", - "cloudfront:CreateInvalidation", - ], - "Effect": "Allow", - "Resource": "*", - }, Object { "Action": Array [ "s3:GetObject*", @@ -309,7 +301,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3Bucket08A0F370", }, ], ], @@ -324,7 +316,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3Bucket08A0F370", }, "/*", ], @@ -350,7 +342,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3Bucket18618D63", + "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3Bucket5FE5088F", }, ], ], @@ -365,7 +357,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3Bucket18618D63", + "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3Bucket5FE5088F", }, "/*", ], @@ -495,7 +487,7 @@ Object { }, "Type": "AWS::IAM::Policy", }, - "StackAssetDeploymenthtmlPagesPathAwsCliLayer36755759": Object { + "StackAssetDeploymentNOCACHEAwsCliLayerF225BBEB": Object { "Properties": Object { "Content": Object { "S3Bucket": Object { @@ -539,19 +531,12 @@ Object { }, "Type": "AWS::Lambda::LayerVersion", }, - "StackAssetDeploymenthtmlPagesPathCustomResource21E5289D": Object { + "StackAssetDeploymentNOCACHECustomResourceAC9B0FAF": Object { "DeletionPolicy": "Delete", "Properties": Object { - "DestinationBucketKeyPrefix": "static-pages", "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, - "DistributionId": Object { - "Ref": "StackNextJSDistribution03A07E47", - }, - "DistributionPaths": Array [ - "/*", - ], "Prune": true, "ServiceToken": Object { "Fn::GetAtt": Array [ @@ -561,7 +546,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3Bucket18618D63", + "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3Bucket5FE5088F", }, ], "SourceObjectKeys": Array [ @@ -576,7 +561,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3VersionKeyCB5488FF", + "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3VersionKeyAADEFDBE", }, ], }, @@ -589,7 +574,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters017e04cdff9f028d4cadfc53b73b785e35faad8558bae523643c0579dad36c44S3VersionKeyCB5488FF", + "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3VersionKeyAADEFDBE", }, ], }, @@ -600,13 +585,13 @@ Object { }, ], "SystemMetadata": Object { - "cache-control": "public, max-age=31536000, immutable", + "cache-control": "", }, }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, - "StackAssetDeploymentnextDataFilesPathAwsCliLayer2B155E45": Object { + "StackAssetDeploymentpublicmaxage0smaxage2678400mustrevalidateAwsCliLayer14B11A7B": Object { "Properties": Object { "Content": Object { "S3Bucket": Object { @@ -650,19 +635,12 @@ Object { }, "Type": "AWS::Lambda::LayerVersion", }, - "StackAssetDeploymentnextDataFilesPathCustomResourceAB833872": Object { + "StackAssetDeploymentpublicmaxage0smaxage2678400mustrevalidateCustomResource86D064A0": Object { "DeletionPolicy": "Delete", "Properties": Object { - "DestinationBucketKeyPrefix": "_next/data", "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, - "DistributionId": Object { - "Ref": "StackNextJSDistribution03A07E47", - }, - "DistributionPaths": Array [ - "/*", - ], "Prune": true, "ServiceToken": Object { "Fn::GetAtt": Array [ @@ -672,7 +650,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3Bucket08A0F370", }, ], "SourceObjectKeys": Array [ @@ -687,7 +665,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3VersionKey39BEFFA0", }, ], }, @@ -700,7 +678,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3VersionKey39BEFFA0", }, ], }, @@ -711,13 +689,13 @@ Object { }, ], "SystemMetadata": Object { - "cache-control": "public, max-age=31536000, immutable", + "cache-control": "public, max-age=0, s-maxage=2678400, must-revalidate", }, }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, - "StackAssetDeploymentnextStaticFilesPathAwsCliLayer08C52E6E": Object { + "StackAssetDeploymentpublicmaxage31536000immutableAwsCliLayerEC7E7A34": Object { "Properties": Object { "Content": Object { "S3Bucket": Object { @@ -761,130 +739,12 @@ Object { }, "Type": "AWS::Lambda::LayerVersion", }, - "StackAssetDeploymentnextStaticFilesPathCustomResource2E97C399": Object { + "StackAssetDeploymentpublicmaxage31536000immutableCustomResourceF7AF335E": Object { "DeletionPolicy": "Delete", "Properties": Object { - "DestinationBucketKeyPrefix": "_next/static", "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, - "DistributionId": Object { - "Ref": "StackNextJSDistribution03A07E47", - }, - "DistributionPaths": Array [ - "/*", - ], - "Prune": true, - "ServiceToken": Object { - "Fn::GetAtt": Array [ - "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", - "Arn", - ], - }, - "SourceBucketNames": Array [ - Object { - "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", - }, - ], - "SourceObjectKeys": Array [ - Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "||", - Object { - "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8", - }, - ], - }, - ], - }, - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "||", - Object { - "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8", - }, - ], - }, - ], - }, - ], - ], - }, - ], - "SystemMetadata": Object { - "cache-control": "public, max-age=31536000, immutable", - }, - }, - "Type": "Custom::CDKBucketDeployment", - "UpdateReplacePolicy": "Delete", - }, - "StackAssetDeploymentpublicFilesPathAwsCliLayer49446A62": Object { - "Properties": Object { - "Content": Object { - "S3Bucket": Object { - "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7", - }, - "S3Key": Object { - "Fn::Join": Array [ - "", - Array [ - Object { - "Fn::Select": Array [ - 0, - Object { - "Fn::Split": Array [ - "||", - Object { - "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", - }, - ], - }, - ], - }, - Object { - "Fn::Select": Array [ - 1, - Object { - "Fn::Split": Array [ - "||", - Object { - "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", - }, - ], - }, - ], - }, - ], - ], - }, - }, - "Description": "/opt/awscli/aws", - }, - "Type": "AWS::Lambda::LayerVersion", - }, - "StackAssetDeploymentpublicFilesPathCustomResource66C28015": Object { - "DeletionPolicy": "Delete", - "Properties": Object { - "DestinationBucketKeyPrefix": "public", - "DestinationBucketName": Object { - "Ref": "StackPublicAssets8F0F4FE8", - }, - "DistributionId": Object { - "Ref": "StackNextJSDistribution03A07E47", - }, - "DistributionPaths": Array [ - "/*", - ], "Prune": true, "ServiceToken": Object { "Fn::GetAtt": Array [ @@ -894,7 +754,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3Bucket27DED49E", }, ], "SourceObjectKeys": Array [ @@ -909,7 +769,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3VersionKey427BBA4F", }, ], }, @@ -922,7 +782,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3VersionKey427BBA4F", }, ], }, @@ -963,7 +823,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3Bucket79655A1B", + "Ref": "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3Bucket4D5AE26A", }, "S3Key": Object { "Fn::Join": Array [ @@ -976,7 +836,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3VersionKey2954262C", + "Ref": "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3VersionKeyE6471D4A", }, ], }, @@ -989,7 +849,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters9155d04cd93fbad1d685011eaf30b47b133e0f4e26b0f034395f95d46806b308S3VersionKey2954262C", + "Ref": "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3VersionKeyE6471D4A", }, ], }, @@ -1011,7 +871,7 @@ Object { }, "Type": "AWS::Lambda::Function", }, - "StackNextApiLambdaCurrentVersion09578A6Ae0d2a7330c27044360fe30236d6ed2e3": Object { + "StackNextApiLambdaCurrentVersion09578A6Ac956849642ad279abf220e630e91f02d": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1028,7 +888,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextApiLambdaCurrentVersion09578A6Ae0d2a7330c27044360fe30236d6ed2e3", + "StackNextApiLambdaCurrentVersion09578A6Ac956849642ad279abf220e630e91f02d", "Version", ], }, @@ -1044,7 +904,7 @@ Object { "MaximumRetryAttempts": 1, "Qualifier": Object { "Fn::GetAtt": Array [ - "StackNextApiLambdaCurrentVersion09578A6Ae0d2a7330c27044360fe30236d6ed2e3", + "StackNextApiLambdaCurrentVersion09578A6Ac956849642ad279abf220e630e91f02d", "Version", ], }, @@ -1138,7 +998,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3Bucket63D53DF3", + "Ref": "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3BucketAEC538BC", }, "S3Key": Object { "Fn::Join": Array [ @@ -1151,7 +1011,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3VersionKey8F2AACCA", + "Ref": "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3VersionKey737B65E3", }, ], }, @@ -1164,7 +1024,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters4edd49de0d6eabce56a2ffe811866c58bb46c973236bf9db3eb679008b523962S3VersionKey8F2AACCA", + "Ref": "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3VersionKey737B65E3", }, ], }, @@ -1193,7 +1053,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextImageLambdaCurrentVersionDEC920BC7960e565994dd598be24b94c60200fea", + "StackNextImageLambdaCurrentVersionDEC920BCe2501626653e5ed9d4294595a21900c2", "Version", ], }, @@ -1201,7 +1061,7 @@ Object { }, "Type": "AWS::Lambda::Alias", }, - "StackNextImageLambdaCurrentVersionDEC920BC7960e565994dd598be24b94c60200fea": Object { + "StackNextImageLambdaCurrentVersionDEC920BCe2501626653e5ed9d4294595a21900c2": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1219,7 +1079,7 @@ Object { "MaximumRetryAttempts": 1, "Qualifier": Object { "Fn::GetAtt": Array [ - "StackNextImageLambdaCurrentVersionDEC920BC7960e565994dd598be24b94c60200fea", + "StackNextImageLambdaCurrentVersionDEC920BCe2501626653e5ed9d4294595a21900c2", "Version", ], }, @@ -1276,7 +1136,7 @@ Object { Object { "EventType": "origin-request", "LambdaFunctionARN": Object { - "Ref": "StackNextImageLambdaCurrentVersionDEC920BC7960e565994dd598be24b94c60200fea", + "Ref": "StackNextImageLambdaCurrentVersionDEC920BCe2501626653e5ed9d4294595a21900c2", }, }, ], @@ -1307,13 +1167,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", + "Ref": "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", + "Ref": "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", }, }, ], @@ -1378,7 +1238,7 @@ Object { Object { "EventType": "origin-request", "LambdaFunctionARN": Object { - "Ref": "StackNextApiLambdaCurrentVersion09578A6Ae0d2a7330c27044360fe30236d6ed2e3", + "Ref": "StackNextApiLambdaCurrentVersion09578A6Ac956849642ad279abf220e630e91f02d", }, }, ], @@ -1407,13 +1267,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", + "Ref": "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", + "Ref": "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", }, }, ], @@ -1634,7 +1494,7 @@ Object { }, "Type": "AWS::CloudFront::CachePolicy", }, - "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb": Object { + "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1651,7 +1511,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextLambdaCurrentVersion21F01F87445ff37f52f759132c4c7a2a370feceb", + "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", "Version", ], }, @@ -1666,7 +1526,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3Bucket291AC00F", + "Ref": "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3Bucket0D7EE15F", }, "S3Key": Object { "Fn::Join": Array [ @@ -1679,7 +1539,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3VersionKey295F654E", + "Ref": "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3VersionKeyF5955B10", }, ], }, @@ -1692,7 +1552,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersede62c1d4e2e81f62bf595047c5d2ea5ae5c61d3efdde0028822bfe6138ab172S3VersionKey295F654E", + "Ref": "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3VersionKeyF5955B10", }, ], }, From bdfcd5c84c9b9868cc74e33c8a8f6fb1193030e5 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 24 Jan 2021 17:46:31 +0000 Subject: [PATCH 09/26] docs: add cdk info to readmes --- README.md | 13 +++++++++++-- .../nextjs-cdk-construct/README.md | 4 ++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/serverless-components/nextjs-cdk-construct/README.md diff --git a/README.md b/README.md index 84c98ada83..c07790c958 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Please review [features](https://github.com/serverless-nextjs/serverless-next.js - [AWS Permissions](#aws-permissions) - [Architecture](#architecture) - [Inputs](#inputs) +- [CDK Construct](#cdk-construct) - [FAQ](#faq) > :warning: This README reflects the latest changes on the `master` branch. It may or may not yet be published to the `latest` (stable) or `alpha` release in npm. Please go to [Releases](https://github.com/serverless-nextjs/serverless-next.js/releases), find the correct `@sls-next/serverless-component` version you are using, and open the README for that release for more accurate information. If a feature is listed in this README but not working, please first try upgrading to the most recent `alpha` release in npm. @@ -525,6 +526,14 @@ myNextApp: bucketName: my-bucket ``` +### CDK Construct + +> (experimental) - more work required to bring this construct up to speed and +> also to reuse some of the serverless logic. As a result the construct is +> likely to adapt/change accordingly. + +[Documentation can be found here.](https://serverless-nextjs.com/docs/cdkconstruct) + ### FAQ #### My component doesn't deploy @@ -681,10 +690,10 @@ It seems to be a bug in Serverless Components - it may be due to not using the l ```yml stage: ${env.STAGE} my-app: - component: '@sls-next/serverless-component@1.18.0' + component: "@sls-next/serverless-component@1.18.0" inputs: domain: - - '${stage}-front-end' + - "${stage}-front-end" - mydomain.com ``` diff --git a/packages/serverless-components/nextjs-cdk-construct/README.md b/packages/serverless-components/nextjs-cdk-construct/README.md new file mode 100644 index 0000000000..53d389596c --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/README.md @@ -0,0 +1,4 @@ +# @sls-next/cdk-construct + +Deploy Next.js to AWS via CDK, documentation can be found +[here](https://serverless-nextjs.com/docs/cdkconstruct). From b86e3c0f7ff81611ccd2aa5e64b2ab7a6b50c4bb Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 24 Jan 2021 17:48:04 +0000 Subject: [PATCH 10/26] docs: fix syntax on docs --- documentation/docs/cdkconstruct.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/docs/cdkconstruct.md b/documentation/docs/cdkconstruct.md index 6068a4956d..70f2a36a16 100644 --- a/documentation/docs/cdkconstruct.md +++ b/documentation/docs/cdkconstruct.md @@ -54,7 +54,7 @@ To deploy your stack, use the `cdk` CLI as normal. Now you've deployed your app, you'll likely want to add a custom domain: -```tsx +```ts new NextJSLambdaEdge(this, "NextJsApp", { serverlessBuildOutDir: "./build", // `Certificate.fromCertificateArn` & `HostedZone.fromHostedZoneAttributes` From 9fe27fd85cc1e5313b5076396fa495663597f789 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 24 Jan 2021 18:03:56 +0000 Subject: [PATCH 11/26] test: add unit tests for readDirectoryFiles --- .../libs/s3-static-assets/tests/utils.test.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 packages/libs/s3-static-assets/tests/utils.test.ts diff --git a/packages/libs/s3-static-assets/tests/utils.test.ts b/packages/libs/s3-static-assets/tests/utils.test.ts new file mode 100644 index 0000000000..78d0d4f8aa --- /dev/null +++ b/packages/libs/s3-static-assets/tests/utils.test.ts @@ -0,0 +1,21 @@ +import readDirectoryFiles from "../src/lib/readDirectoryFiles"; +import * as path from "path"; + +describe("readDirectoryFiles", () => { + it("returns an empty array when the file is not found", async () => { + const files = readDirectoryFiles("/this/path/does/not/exist"); + expect(files).toStrictEqual([]); + }); + + it("returns all files from fixture without directories", async () => { + const files = readDirectoryFiles( + path.join(__dirname, "./fixtures/app-basic") + ); + expect(files.map((file) => file.path)).toStrictEqual([ + path.join(__dirname, "fixtures/app-basic/public/robots.txt"), + path.join(__dirname, "fixtures/app-basic/static/robots.txt"), + path.join(__dirname, "fixtures/app-basic/public/scripts/test-script.js"), + path.join(__dirname, "fixtures/app-basic/static/scripts/test-script.js") + ]); + }); +}); From a9a221033f06d81781f24bd813989308d05b4b60 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 25 Jan 2021 16:02:32 +0000 Subject: [PATCH 12/26] test: add tests to CDK construct --- .../__tests__/construct.test.ts | 169 ++++++++++++++++++ .../nextjs-cdk-construct/src/index.ts | 6 + 2 files changed, 175 insertions(+) create mode 100644 packages/serverless-components/nextjs-cdk-construct/__tests__/construct.test.ts diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/construct.test.ts b/packages/serverless-components/nextjs-cdk-construct/__tests__/construct.test.ts new file mode 100644 index 0000000000..724fba947d --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/construct.test.ts @@ -0,0 +1,169 @@ +import "@aws-cdk/assert/jest"; +import { SynthUtils } from "@aws-cdk/assert"; +import { Stack } from "@aws-cdk/core"; +import path from "path"; +import { NextJSLambdaEdge } from "../src"; +import { Runtime } from "@aws-cdk/aws-lambda"; +import { Certificate } from "@aws-cdk/aws-certificatemanager"; +import { HostedZone } from "@aws-cdk/aws-route53"; + +describe("CDK Construct", () => { + it("passes correct lambda options to underlying lambdas when single value passed", () => { + const stack = new Stack(); + new NextJSLambdaEdge(stack, "Stack", { + serverlessBuildOutDir: path.join(__dirname, "fixtures/next-boilerplate"), + runtime: Runtime.NODEJS_10_X + }); + + const synthesizedStack = SynthUtils.toCloudFormation(stack); + expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { + FunctionName: "NextLambda", + Runtime: Runtime.NODEJS_10_X.name + }); + expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { + FunctionName: "NextApiLambda", + Runtime: Runtime.NODEJS_10_X.name + }); + expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { + FunctionName: "NextImageLambda", + Runtime: Runtime.NODEJS_10_X.name + }); + }); + + it("passes correct lambda options to underlying lambdas when object passed", () => { + const stack = new Stack(); + new NextJSLambdaEdge(stack, "Stack", { + serverlessBuildOutDir: path.join(__dirname, "fixtures/next-boilerplate"), + runtime: { + defaultLambda: Runtime.PYTHON_3_8, + apiLambda: Runtime.GO_1_X, + imageLambda: Runtime.JAVA_8_CORRETTO + } + }); + + const synthesizedStack = SynthUtils.toCloudFormation(stack); + expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { + FunctionName: "NextLambda", + Runtime: Runtime.PYTHON_3_8.name + }); + expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { + FunctionName: "NextApiLambda", + Runtime: Runtime.GO_1_X.name + }); + expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { + FunctionName: "NextImageLambda", + Runtime: Runtime.JAVA_8_CORRETTO.name + }); + }); + + it("lambda cache policy passes correct cookies to origin when specified", () => { + const stack = new Stack(); + new NextJSLambdaEdge(stack, "Stack", { + serverlessBuildOutDir: path.join(__dirname, "fixtures/next-boilerplate"), + whiteListedCookies: ["my-cookie"] + }); + + const synthesizedStack = SynthUtils.toCloudFormation(stack); + expect(synthesizedStack).toHaveResourceLike( + "AWS::CloudFront::CachePolicy", + { + CachePolicyConfig: { + Name: "NextLambdaCache", + ParametersInCacheKeyAndForwardedToOrigin: { + CookiesConfig: { + CookieBehavior: "whitelist", + Cookies: ["my-cookie"] + } + } + } + } + ); + }); + + it("lambda cache policy passes all cookies to origin when not specified", () => { + const stack = new Stack(); + new NextJSLambdaEdge(stack, "Stack", { + serverlessBuildOutDir: path.join(__dirname, "fixtures/next-boilerplate") + }); + + const synthesizedStack = SynthUtils.toCloudFormation(stack); + expect(synthesizedStack).toHaveResourceLike( + "AWS::CloudFront::CachePolicy", + { + CachePolicyConfig: { + Name: "NextLambdaCache", + ParametersInCacheKeyAndForwardedToOrigin: { + CookiesConfig: { + CookieBehavior: "all" + } + } + } + } + ); + }); + + it("creates resources required for a custom domain when specified", () => { + const stack = new Stack(); + const certificate = Certificate.fromCertificateArn( + stack, + "Cert", + "arn:partition:service:us-east-1:1234578:abc" + ); + const domainName = "domain.com"; + const hostedZone = HostedZone.fromHostedZoneAttributes(stack, "Zone", { + hostedZoneId: "123", + zoneName: domainName + }); + new NextJSLambdaEdge(stack, "Stack", { + serverlessBuildOutDir: path.join(__dirname, "fixtures/next-boilerplate"), + domain: { + certificate, + domainName, + hostedZone + } + }); + + const synthesizedStack = SynthUtils.toCloudFormation(stack); + expect(synthesizedStack).toHaveResourceLike( + "AWS::CloudFront::Distribution", + { + DistributionConfig: { + Aliases: ["domain.com"], + ViewerCertificate: { + AcmCertificateArn: "arn:partition:service:us-east-1:1234578:abc" + } + } + } + ); + + expect(synthesizedStack).toHaveResourceLike("AWS::Route53::RecordSet", { + Name: "domain.com.", + Type: "A", + AliasTarget: { + DNSName: { + "Fn::GetAtt": ["StackNextJSDistribution03A07E47", "DomainName"] + }, + HostedZoneId: { + "Fn::FindInMap": [ + "AWSCloudFrontPartitionHostedZoneIdMap", + { + Ref: "AWS::Partition" + }, + "zoneId" + ] + } + }, + HostedZoneId: "123" + }); + }); + + it("does not create Route53 records when no domain specified", () => { + const stack = new Stack(); + new NextJSLambdaEdge(stack, "Stack", { + serverlessBuildOutDir: path.join(__dirname, "fixtures/next-boilerplate") + }); + + const synthesizedStack = SynthUtils.toCloudFormation(stack); + expect(synthesizedStack).toCountResources("AWS::Route53::RecordSet", 0); + }); +}); diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index 67d09ca818..e87a9b14dc 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -62,6 +62,7 @@ export class NextJSLambdaEdge extends cdk.Construct { }); const defaultNextLambda = new lambda.Function(this, "NextLambda", { + functionName: "NextLambda", description: `Default Lambda@Edge for Next CloudFront distribution`, handler: "index.handler", currentVersionOptions: { @@ -90,6 +91,7 @@ export class NextJSLambdaEdge extends cdk.Construct { let nextApiLambda = null; if (hasAPIPages) { nextApiLambda = new lambda.Function(this, "NextApiLambda", { + functionName: "NextApiLambda", description: `Default Lambda@Edge for Next API CloudFront distribution`, handler: "index.handler", currentVersionOptions: { @@ -113,6 +115,7 @@ export class NextJSLambdaEdge extends cdk.Construct { let nextImageLambda = null; if (this.imageManifest) { nextImageLambda = new lambda.Function(this, "NextImageLambda", { + functionName: "NextImageLambda", description: `Default Lambda@Edge for Next Image CloudFront distribution`, handler: "index.handler", currentVersionOptions: { @@ -137,6 +140,7 @@ export class NextJSLambdaEdge extends cdk.Construct { this, "NextStaticsCache", { + cachePolicyName: "NextStaticsCache", queryStringBehavior: cloudfront.CacheQueryStringBehavior.none(), headerBehavior: cloudfront.CacheHeaderBehavior.none(), cookieBehavior: cloudfront.CacheCookieBehavior.none(), @@ -152,6 +156,7 @@ export class NextJSLambdaEdge extends cdk.Construct { this, "NextImageCache", { + cachePolicyName: "NextImageCache", queryStringBehavior: cloudfront.CacheQueryStringBehavior.none(), headerBehavior: cloudfront.CacheHeaderBehavior.allowList("Accept"), cookieBehavior: cloudfront.CacheCookieBehavior.none(), @@ -167,6 +172,7 @@ export class NextJSLambdaEdge extends cdk.Construct { this, "NextLambdaCache", { + cachePolicyName: "NextLambdaCache", queryStringBehavior: cloudfront.CacheQueryStringBehavior.all(), headerBehavior: cloudfront.CacheHeaderBehavior.none(), cookieBehavior: { From 156770ca564f588a7ddc60926f48230c8c1d5aa3 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 25 Jan 2021 18:22:35 +0000 Subject: [PATCH 13/26] fix: update snapshot with new res names --- .../__snapshots__/snapshots.test.ts.snap | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap index 72592a8778..1c6aafafe4 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap @@ -860,6 +860,7 @@ Object { }, }, "Description": "Default Lambda@Edge for Next API CloudFront distribution", + "FunctionName": "NextApiLambda", "Handler": "index.handler", "Role": Object { "Fn::GetAtt": Array [ @@ -871,7 +872,7 @@ Object { }, "Type": "AWS::Lambda::Function", }, - "StackNextApiLambdaCurrentVersion09578A6Ac956849642ad279abf220e630e91f02d": Object { + "StackNextApiLambdaCurrentVersion09578A6A0413e0b28857d1f30d0c4a4098d3a319": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -888,7 +889,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextApiLambdaCurrentVersion09578A6Ac956849642ad279abf220e630e91f02d", + "StackNextApiLambdaCurrentVersion09578A6A0413e0b28857d1f30d0c4a4098d3a319", "Version", ], }, @@ -904,7 +905,7 @@ Object { "MaximumRetryAttempts": 1, "Qualifier": Object { "Fn::GetAtt": Array [ - "StackNextApiLambdaCurrentVersion09578A6Ac956849642ad279abf220e630e91f02d", + "StackNextApiLambdaCurrentVersion09578A6A0413e0b28857d1f30d0c4a4098d3a319", "Version", ], }, @@ -970,7 +971,7 @@ Object { "DefaultTTL": 86400, "MaxTTL": 31536000, "MinTTL": 0, - "Name": "StackNextImageCache78CE64D5", + "Name": "NextImageCache", "ParametersInCacheKeyAndForwardedToOrigin": Object { "CookiesConfig": Object { "CookieBehavior": "none", @@ -1035,6 +1036,7 @@ Object { }, }, "Description": "Default Lambda@Edge for Next Image CloudFront distribution", + "FunctionName": "NextImageLambda", "Handler": "index.handler", "Role": Object { "Fn::GetAtt": Array [ @@ -1053,7 +1055,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextImageLambdaCurrentVersionDEC920BCe2501626653e5ed9d4294595a21900c2", + "StackNextImageLambdaCurrentVersionDEC920BC5ba4b84decce2136b4556635ae07c0bd", "Version", ], }, @@ -1061,7 +1063,7 @@ Object { }, "Type": "AWS::Lambda::Alias", }, - "StackNextImageLambdaCurrentVersionDEC920BCe2501626653e5ed9d4294595a21900c2": Object { + "StackNextImageLambdaCurrentVersionDEC920BC5ba4b84decce2136b4556635ae07c0bd": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1079,7 +1081,7 @@ Object { "MaximumRetryAttempts": 1, "Qualifier": Object { "Fn::GetAtt": Array [ - "StackNextImageLambdaCurrentVersionDEC920BCe2501626653e5ed9d4294595a21900c2", + "StackNextImageLambdaCurrentVersionDEC920BC5ba4b84decce2136b4556635ae07c0bd", "Version", ], }, @@ -1136,7 +1138,7 @@ Object { Object { "EventType": "origin-request", "LambdaFunctionARN": Object { - "Ref": "StackNextImageLambdaCurrentVersionDEC920BCe2501626653e5ed9d4294595a21900c2", + "Ref": "StackNextImageLambdaCurrentVersionDEC920BC5ba4b84decce2136b4556635ae07c0bd", }, }, ], @@ -1167,13 +1169,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", + "Ref": "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", + "Ref": "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", }, }, ], @@ -1238,7 +1240,7 @@ Object { Object { "EventType": "origin-request", "LambdaFunctionARN": Object { - "Ref": "StackNextApiLambdaCurrentVersion09578A6Ac956849642ad279abf220e630e91f02d", + "Ref": "StackNextApiLambdaCurrentVersion09578A6A0413e0b28857d1f30d0c4a4098d3a319", }, }, ], @@ -1267,13 +1269,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", + "Ref": "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", + "Ref": "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", }, }, ], @@ -1476,7 +1478,7 @@ Object { "DefaultTTL": 0, "MaxTTL": 31536000, "MinTTL": 0, - "Name": "StackNextLambdaCache86499DCE", + "Name": "NextLambdaCache", "ParametersInCacheKeyAndForwardedToOrigin": Object { "CookiesConfig": Object { "CookieBehavior": "all", @@ -1494,7 +1496,7 @@ Object { }, "Type": "AWS::CloudFront::CachePolicy", }, - "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d": Object { + "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1511,7 +1513,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextLambdaCurrentVersion21F01F87cd1be1cb4ec0c171fef876c51376ee8d", + "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", "Version", ], }, @@ -1563,6 +1565,7 @@ Object { }, }, "Description": "Default Lambda@Edge for Next CloudFront distribution", + "FunctionName": "NextLambda", "Handler": "index.handler", "Role": Object { "Fn::GetAtt": Array [ @@ -1603,7 +1606,7 @@ Object { "DefaultTTL": 2592000, "MaxTTL": 2592000, "MinTTL": 2592000, - "Name": "StackNextStaticsCacheBB90E053", + "Name": "NextStaticsCache", "ParametersInCacheKeyAndForwardedToOrigin": Object { "CookiesConfig": Object { "CookieBehavior": "none", From 578fe7b824eb00481dcc9fb8afc44a8994021937 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 27 Jan 2021 13:53:08 +0000 Subject: [PATCH 14/26] fix: pass custom behaviours, fix image lambda policy and remove pruning --- .../nextjs-cdk-construct/package.json | 26 +- .../nextjs-cdk-construct/src/index.ts | 13 +- .../nextjs-cdk-construct/src/props.ts | 6 +- .../nextjs-cdk-construct/yarn.lock | 726 +++++++++--------- 4 files changed, 388 insertions(+), 383 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/package.json b/packages/serverless-components/nextjs-cdk-construct/package.json index 7ce647dfb9..c9feff428c 100644 --- a/packages/serverless-components/nextjs-cdk-construct/package.json +++ b/packages/serverless-components/nextjs-cdk-construct/package.json @@ -27,24 +27,24 @@ }, "license": "MIT", "dependencies": { - "@aws-cdk/assert": ">=1.75.0 & < 2", - "@aws-cdk/aws-certificatemanager": ">=1.75.0 & < 2", - "@aws-cdk/aws-cloudfront": ">=1.75.0 & < 2", - "@aws-cdk/aws-cloudfront-origins": ">=1.75.0 & < 2", - "@aws-cdk/aws-iam": ">=1.75.0 & < 2", - "@aws-cdk/aws-lambda": ">=1.75.0 & < 2", - "@aws-cdk/aws-logs": ">=1.75.0 & < 2", - "@aws-cdk/aws-route53": ">=1.75.0 & < 2", - "@aws-cdk/aws-route53-targets": ">=1.75.0 & < 2", - "@aws-cdk/aws-s3": ">=1.75.0 & < 2", - "@aws-cdk/aws-s3-deployment": ">=1.75.0 & < 2", - "@aws-cdk/core": ">=1.75.0 & < 2", + "@aws-cdk/assert": "^1.75.0", + "@aws-cdk/aws-certificatemanager": "^1.75.0", + "@aws-cdk/aws-cloudfront": "^1.75.0", + "@aws-cdk/aws-cloudfront-origins": "^1.75.0", + "@aws-cdk/aws-iam": "^1.75.0", + "@aws-cdk/aws-lambda": "^1.75.0", + "@aws-cdk/aws-logs": "^1.75.0", + "@aws-cdk/aws-route53": "^1.75.0", + "@aws-cdk/aws-route53-targets": "^1.75.0", + "@aws-cdk/aws-s3": "^1.75.0", + "@aws-cdk/aws-s3-deployment": "^1.75.0", + "@aws-cdk/core": "^1.75.0", "@sls-next/lambda-at-edge": "link:../../libs/lambda-at-edge", "@sls-next/s3-static-assets": "link:../../libs/s3-static-assets", "fs-extra": "^9.0.1" }, "devDependencies": { - "@aws-cdk/assert": ">=1.75.0 & < 2", + "@aws-cdk/assert": "1.75.0", "@types/fs-extra": "^9.0.1", "typescript": "^3.9.6" } diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index e87a9b14dc..9334d70bfa 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -157,7 +157,7 @@ export class NextJSLambdaEdge extends cdk.Construct { "NextImageCache", { cachePolicyName: "NextImageCache", - queryStringBehavior: cloudfront.CacheQueryStringBehavior.none(), + queryStringBehavior: cloudfront.CacheQueryStringBehavior.all(), headerBehavior: cloudfront.CacheHeaderBehavior.allowList("Accept"), cookieBehavior: cloudfront.CacheCookieBehavior.none(), defaultTtl: Duration.days(1), @@ -293,7 +293,8 @@ export class NextJSLambdaEdge extends cdk.Construct { ] } } - : {}) + : {}), + ...(props.behaviours || {}) } } ); @@ -339,13 +340,19 @@ export class NextJSLambdaEdge extends cdk.Construct { ); const assetsPath = path.join(this.props.serverlessBuildOutDir, "assets"); + Object.keys(staticAssetsGroupedByCache).forEach((cacheKey) => { const assets = staticAssetsGroupedByCache[cacheKey]; // We have a unique BucketDeployment per cache-control header, so we // reformat the cache key to be compatible as a construct ID const cacheHash = cacheKey.replace(/[^0-9a-z]/gi, ""); new s3Deploy.BucketDeployment(this, `AssetDeployment${cacheHash}`, { + // Unfortunately we can't rely on `prune` as we have multiple + // distributions from the same source, each with a different behaviour. + // https://docs.aws.amazon.com/cdk/api/latest/docs/aws-s3-deployment-readme.html#prune + prune: false, destinationBucket: this.bucket, + distribution: this.distribution, sources: [ // Slight ergonomic issue with the Asset API that we can't pass an // array of files, only a single directory. as a work around @@ -354,7 +361,7 @@ export class NextJSLambdaEdge extends cdk.Construct { // for this cache-control key. s3Deploy.Source.asset(assetsPath, { exclude: [ - "**", + "*.*", ...assets.map((staticAsset) => { return `!${staticAsset.path.relative}`; }) diff --git a/packages/serverless-components/nextjs-cdk-construct/src/props.ts b/packages/serverless-components/nextjs-cdk-construct/src/props.ts index 626c8aed0d..4ab70cf5f1 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/props.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/props.ts @@ -1,5 +1,5 @@ import { ICertificate } from "@aws-cdk/aws-certificatemanager"; -import { Behavior } from "@aws-cdk/aws-cloudfront"; +import { Behavior, BehaviorOptions } from "@aws-cdk/aws-cloudfront"; import { Runtime } from "@aws-cdk/aws-lambda"; import { IHostedZone } from "@aws-cdk/aws-route53"; import { Duration, StackProps } from "@aws-cdk/core"; @@ -59,7 +59,5 @@ export interface Props extends StackProps { * This is handy if you want to adjust how certain assets are cached, or add * another `lambda@edge` endpoint. */ - behaviours?: Partial< - Omit - >[]; + behaviours?: Record; } diff --git a/packages/serverless-components/nextjs-cdk-construct/yarn.lock b/packages/serverless-components/nextjs-cdk-construct/yarn.lock index 9a8c3a2795..c986c4688b 100644 --- a/packages/serverless-components/nextjs-cdk-construct/yarn.lock +++ b/packages/serverless-components/nextjs-cdk-construct/yarn.lock @@ -2,484 +2,484 @@ # yarn lockfile v1 -"@aws-cdk/assert@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.85.0.tgz#f6b55102a6c593e0db9c46e5599def5598e9e767" - integrity sha512-4d+zLeRPd9g0lLSWFIREjQfssfwExe9oUU6pPLd+oExj7be/5/lP8RhOJswA5Dw+v3ncoBx5C4EI1Uee1vI+Ww== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.85.0" - "@aws-cdk/cloudformation-diff" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" +"@aws-cdk/assert@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.86.0.tgz#3faf5cc911d76d50a50a4779c724c1041fb1e866" + integrity sha512-2XXhM8hXQQKB5luFiMae2mtWns1529piawBo9gBa6R79Lwbi2F0qodS7BFaDbyOUD8wNwUX6XDgi8sznIPRtew== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.86.0" + "@aws-cdk/cloudformation-diff" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/assets@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.85.0.tgz#445aceaf1eff009760b9616fc6cd325edbb56769" - integrity sha512-34NPwgqwWDs70OsMJA6YeujI4RlYiVfG5fAA7ir54igLPDLCmR4b4UlFsUWl7XkznuMDgiShYe6yvmfmK8FEMg== +"@aws-cdk/assets@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.86.0.tgz#bd228239834c69febb4f9a0ec3f7b280e4e03753" + integrity sha512-vF4L0eVLFYrJdGVaptm20Grpc0BDb0XkkO8jzGDpGLA2NIPvwjRVWIRE5SY32++WaJrVE/TZpIdQNgLTKQIhAQ== dependencies: - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-apigateway@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigateway/-/aws-apigateway-1.85.0.tgz#f6f1452703848aae3680859d36266bdef9cff3fc" - integrity sha512-oP0Y6a3wB+1rIke/gYjUtDiXqiS5Lpw5yZXEWxJXtiqfDYOtMqGoiFXvBdF03zEzxEPtORnvC0Z2kviNA1Zbiw== - dependencies: - "@aws-cdk/assets" "1.85.0" - "@aws-cdk/aws-certificatemanager" "1.85.0" - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/aws-logs" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/aws-s3-assets" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" +"@aws-cdk/aws-apigateway@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigateway/-/aws-apigateway-1.86.0.tgz#bdfa708238a95a57579afaf7464d2eb99ed8e7ad" + integrity sha512-krxclhRjIsL+4iJKBI544aqvnUWcyRkUFxPn1pw/1akSPspRtLetvcdLyZ0DOqr61WiGYWcfpiW2ygen0ROEPg== + dependencies: + "@aws-cdk/assets" "1.86.0" + "@aws-cdk/aws-certificatemanager" "1.86.0" + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/aws-logs" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/aws-s3-assets" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-apigatewayv2@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.85.0.tgz#a951326cca7d19576b2d5ea45a74f2bbb6a4b71d" - integrity sha512-e1zHGPM22lEKej+zHZvi7Jo8EyVQVVcvzcsgfmwDrrfAQLRfdcAVxylFRssvMbelLapYlG3blV8ANMo94pOGNg== +"@aws-cdk/aws-apigatewayv2@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.86.0.tgz#661ca18487730db36bdaaf03da8dc43e90c33315" + integrity sha512-DATgKAdZS2P/yHWm4AoDAzEIaNEz0yrEv7e1GmEGCxawRrbsWhP/7TAm/CvLjbaq726XnyBTL9TEJaQWU9L6Cg== dependencies: - "@aws-cdk/aws-certificatemanager" "1.85.0" - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-certificatemanager" "1.86.0" + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-applicationautoscaling@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.85.0.tgz#e7c2dfa5ae8cadf069298218ea8a15fb31349a29" - integrity sha512-OO/rNJsJPD0lGAZfb+BBHp+8xrnsMB2so4YwEtqanf7n4DXR1Kfr2TzZLj77rOk+QApjJJR1uF4hTmR73qO7FA== +"@aws-cdk/aws-applicationautoscaling@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.86.0.tgz#a96649e50bb40d04c5df83ed3c7e1ec3e583002a" + integrity sha512-YenaOnE8dAA0Rz6H+LOoPgnINkPIbuBbJx4i7QUKh+BOPbKMjIaCp8zM1N3Q+AYECaWK/kB9mwEQmkPdp6jaEQ== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.85.0" - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-autoscaling-common" "1.86.0" + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-autoscaling-common@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.85.0.tgz#6c2cbbf4d3089635739fea956bc2c8a083d463b9" - integrity sha512-JatGmQpEtQLn4MFEXjD83Pi9le3UecaTONZplvKdP9LHoD5J8JC4v3WBsJlj0SR+haM1gdwGJgn4npbsGe7r9w== +"@aws-cdk/aws-autoscaling-common@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.86.0.tgz#ea71b9177ffd1ee7b61e3843342e6c4b84848801" + integrity sha512-IEclDXJG34XFbadAJM6JyMGrbO6asl188aY81cpiR16qdqly1FVHxbGVLp2qlKejxaCW3WxxDsiAlSnFN3FfdQ== dependencies: - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-certificatemanager@1.85.0", "@aws-cdk/aws-certificatemanager@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.85.0.tgz#2c9f186d989835f40900d9d0fa1529cbf95553ac" - integrity sha512-/udYNoBm0BRj5Hbq2gLAZNnIZf5nP7qy/bMYHsQNGW2OiAh5vLabSXFxEH8j6H00RMFsshlAGdtmXFDGSDFpXQ== +"@aws-cdk/aws-certificatemanager@1.86.0", "@aws-cdk/aws-certificatemanager@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.86.0.tgz#27256837a0a49aa878224f17193f4e080f77594b" + integrity sha512-fXuQSreEsxTQXYc++4/LoPeOcRlmjvBiqmVzC80xS5AvKRf4uaXKhrgppkUv1DGsuq3LcFRFoz4qpOBcTexy8g== dependencies: - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/aws-route53" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/aws-route53" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudformation@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.85.0.tgz#98deb8a03e5e578bcb3fa4db18e7a5b229900568" - integrity sha512-NGfxt11L+C/C3SRtv2xmjm6Od1BhMJXzBDf2mSMLUkEcIYOsLpewj5wfEEAfC3Xi/avQVZlTW1Ev1rrltgHzlg== - dependencies: - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/aws-sns" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" +"@aws-cdk/aws-cloudformation@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.86.0.tgz#ba322b38992f926b89ef9271efcf8fd81a5492e5" + integrity sha512-VbV9LuYq/ecgHQF9T6VqZfRlA6nY/FDwhM1qo1meG/+2Noyy3kimQ+J8LZPNkOk8R1gusgD16U8xLsjxZaYvmg== + dependencies: + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/aws-sns" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudfront-origins@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront-origins/-/aws-cloudfront-origins-1.85.0.tgz#ee9026f4f3346709945b8eef394ce324dca53da9" - integrity sha512-smK+tPxkTaiDfc3GtLsJDcBuhWH6eX2ngMwXmpf9iTLDAA2i6MJb/Ij3QOOWFSkcCjtQTCQD/58BwMRLog1oYQ== +"@aws-cdk/aws-cloudfront-origins@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront-origins/-/aws-cloudfront-origins-1.86.0.tgz#ea34e9cef45bdfdb7f52ce845ea29fccd4553d72" + integrity sha512-ph0e/vky8MP/dNzd6R8KMLBuSLx3sKtxDea8xxcDuHoRFx4cx72/PTQMAvV6vvhK1yAHxsnDoJHeZNo2mbhghQ== dependencies: - "@aws-cdk/aws-cloudfront" "1.85.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-cloudfront" "1.86.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudfront@1.85.0", "@aws-cdk/aws-cloudfront@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.85.0.tgz#aac11c305ee643db3c06d79c450bfc9fda7d76cb" - integrity sha512-fbyOj32ZAp/pFsSsvJAYrQsEDU++5O4ZI2unxt7CjtrbnimpltuGqkSWOczlzJSGFWD0Qqamp3eZC6UWidYMgA== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.85.0" - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/aws-ssm" "1.85.0" - "@aws-cdk/core" "1.85.0" +"@aws-cdk/aws-cloudfront@1.86.0", "@aws-cdk/aws-cloudfront@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.86.0.tgz#84bb3102752de21124730279eca768b8fe4b9593" + integrity sha512-G0n1vDFuXGZ4MskK1XFE8PWMfXxuXlH+8/Jz68hxSja6WuAU7wXb2Z6jFw57Em2FGs6Y6d0tpaQDI7GtmqDhtg== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.86.0" + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/aws-ssm" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-cloudwatch@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.85.0.tgz#986b5df1f81c138334d398cae008a2726fdb3d26" - integrity sha512-vz+nPtvfeVc1EI+iRl7PIEIwiaqV7+aiM1pdkA1AcCPRELIWkBsiLOUIpHeVncHbNure/Jl12Djbgv20cFyU3g== +"@aws-cdk/aws-cloudwatch@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.86.0.tgz#47c246c649557bf6ad959274fac4157d848251b8" + integrity sha512-3kPfiArb3QgD3BYu+6xcP/vo0c7PP4HFMSO+0apobwgBg0PHnzw4HL9lQY3K8rBrT1yRoaf/R7MeMdoCdyfCVA== dependencies: - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-codeguruprofiler@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.85.0.tgz#e05a333252155bd48177e5448bfc4c20a8e523eb" - integrity sha512-Ag1tK9vi54fHXOK+yb+b4Lj2mmdnJRTqQDxUZPG8/LVfYvKWolt8pxCox6UrOr7eBcveH0tjGcBKqMexM9KK4A== +"@aws-cdk/aws-codeguruprofiler@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.86.0.tgz#db47ab9364aaef0e927a181fe796390eab4e1c64" + integrity sha512-+52oNB7jBeAD+RKhF47Q5eadeUm+K2KJRZGzrsNX8g6tC46aoYnAFTaPFmsUzh/zq8c0TpWiPLOpTfGgGop9Qw== dependencies: - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-cognito@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.85.0.tgz#c2eafc045540ad1b85f6332044292a2a38cb259b" - integrity sha512-ODqUQMx0IqV3c/bGoJlNnG9WT1j4oVMYR+gJNe4osujeFAOHi3ycNDqPmkesdwI63RdH8fFIDt06u5xKni7WPQ== +"@aws-cdk/aws-cognito@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.86.0.tgz#5239e2c9ca368c69621100712921042dff328f40" + integrity sha512-x781zqLKkJgdEBn6sIngAMdSkzJjKF43H65sUipZlWMG+nkxt44z0QTon4en/FJoIcuSm1hzHFk3mEFG/O9FGw== dependencies: - "@aws-cdk/aws-certificatemanager" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/custom-resources" "1.85.0" + "@aws-cdk/aws-certificatemanager" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/custom-resources" "1.86.0" constructs "^3.2.0" punycode "^2.1.1" -"@aws-cdk/aws-ec2@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.85.0.tgz#40af637c29f18df020815a8d5167dde555c6cdd5" - integrity sha512-IHbIwsB3lFKMRT48hZBwD+5qaCkLbVTIvX83KMjvsUDAVLWdDl8UReo5P9dfE2dNdOAWf132v5Z3KbbYtU32vg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/aws-logs" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/aws-s3-assets" "1.85.0" - "@aws-cdk/aws-ssm" "1.85.0" - "@aws-cdk/cloud-assembly-schema" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" - "@aws-cdk/region-info" "1.85.0" +"@aws-cdk/aws-ec2@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.86.0.tgz#f7927f18e2852760ffb7d3c6ddd86b88b90e8361" + integrity sha512-HHrdbp6/htQeNBAhEy0Swm3Zd0gQp+lxzr2Y6yl+Lql5zfCA64Dh1jR9/NXDVQuK5aXkJUmCwCa0GLxeTEwduQ== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/aws-logs" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/aws-s3-assets" "1.86.0" + "@aws-cdk/aws-ssm" "1.86.0" + "@aws-cdk/cloud-assembly-schema" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" + "@aws-cdk/region-info" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-ecr-assets@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.85.0.tgz#10327cd86b749f92d84f43d0bc2020636b461719" - integrity sha512-xiXr+51EaPwu1gCFATO0YB73T6ImFxHVoix9nQFQ3Iqvd0ys8ZZawT63ziseccs2EQaGgoaVTc57MajOMudNyw== - dependencies: - "@aws-cdk/assets" "1.85.0" - "@aws-cdk/aws-ecr" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" +"@aws-cdk/aws-ecr-assets@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.86.0.tgz#b90229de3bacce858d5fbc85ce6de20c845ca6fe" + integrity sha512-fP4esO4QiHh+bSD6AJzmBBw7SJhSBYAsXIxeRBmWeAjPiJumWW++xiNwFymF+S1U44+xAEPfRPlx1s6CGhQp8g== + dependencies: + "@aws-cdk/assets" "1.86.0" + "@aws-cdk/aws-ecr" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" minimatch "^3.0.4" -"@aws-cdk/aws-ecr@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.85.0.tgz#73a327aa05f479c1be80a0fe0cf6030529798bea" - integrity sha512-ZV9NO2cElR5+VuH3SfAUBovgFACRzvyvppDP/yDhqXJ9eWwBwDlEJpmFtC5K6kc0txSOFXoO5sTAUXoO80Kj5w== +"@aws-cdk/aws-ecr@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.86.0.tgz#8ec38d16c608d111a199c2ae1ec3f4b4cd50c3ef" + integrity sha512-g6WkLzJ4RM0XEYs/CRaVB8vaBFKRVD7VfrMLO9VOtDo8RAX9uokp4d+bFhtw+Ez6lgKdUdFrdGjV+KnkosfwBA== dependencies: - "@aws-cdk/aws-events" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-events" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-efs@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.85.0.tgz#29e60aafb494e7b36204aab8eedf8ab57aae4ffa" - integrity sha512-3CRlch6hA8YdPV0cAt2vpY6AELGLzxSgPmotQ99kbX13zuXk23gDUvn/oYDehZVtEHBfiBESBZIU6RvcWULFhQ== +"@aws-cdk/aws-efs@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.86.0.tgz#e85caa1660a00e7ccfcf8db905f534ade14e18d0" + integrity sha512-32DjWMpwE9TJMF2RWP72yDefHlQ5umWSa/bT5THGWKleuh8j/GJ6oYpskEdP7bzrTAYCJ05v7pSY5mCBrZL7gw== dependencies: - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/cloud-assembly-schema" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/cloud-assembly-schema" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-elasticloadbalancing@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.85.0.tgz#365f007877063c48f6aefc89877d47925266604a" - integrity sha512-zK4TShBo//BWInuI8mH1hJ+wrRCR6duZqP8A3Qqb0iJWE+Ai8aKcJWS5FbR8d7XkYLjlR/e/TYwMQIMlrhmW/Q== +"@aws-cdk/aws-elasticloadbalancing@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.86.0.tgz#ae2782e14011f32f6f57a2f2f955281b71e3a42a" + integrity sha512-QnA0Oenz3/s1p4MI83Tl2RPmbB9iowupe4APMfHR8VyeX+A4xLnL06PqdHbjc64Sb+FJM3lx9b4chzzmW5YuYQ== dependencies: - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-elasticloadbalancingv2@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.85.0.tgz#4eb35b7f555dc531a0f4c9425bf337b2cf03d5f1" - integrity sha512-yM67QZ/IVmKYfuw82TlUYi+wbRtnRRk9FmDKUXKqwurXZbiC6fRrQg5iH+N7C5XkavJAGqaQJDpNSco1gFR2EQ== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.85.0" - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/cloud-assembly-schema" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" - "@aws-cdk/region-info" "1.85.0" +"@aws-cdk/aws-elasticloadbalancingv2@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.86.0.tgz#763ddcbd7b3f386ee2fc61b34404361421fd02b9" + integrity sha512-jGZWjYAluj9/17m8TG8GwpD69UH1Dd0ShsvtwLgT6o6vauJktyiVBrPSWxFn5j00rj0qFO4gynyj2bnx7mf19A== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.86.0" + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/cloud-assembly-schema" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" + "@aws-cdk/region-info" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-events@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.85.0.tgz#17614058df1826ec5ba0ca41256867d90862ac23" - integrity sha512-8BCl2+9/5ArYZ4PWfaHRDnRiU3BLzCOp0nu05t4kfPt9wL75DTuNjzgQx9EjUtYxTm4WyTaUrwlDkWBo3ggyQw== +"@aws-cdk/aws-events@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.86.0.tgz#1e19d49c8d2f16aaa74a85d8c6a359fe9cc71a47" + integrity sha512-oycdFqVr/LndoFOsXdHllToBqt/ylsYRmTNWIz0BB2NQ5n+0iMGklTePmL1VDy931jkPjqE/ZTL3Q67NkBgdFg== dependencies: - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-iam@1.85.0", "@aws-cdk/aws-iam@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.85.0.tgz#d32132159605e9476840944466289768b9857470" - integrity sha512-8ToYOfs4ATDHq96LzpSX8+HHZ8cvr3TBI4BS2an1wiNlYFeF857qV3Jwxn9pG3n6b6/vG7XpHqQQbqFdWETNzQ== +"@aws-cdk/aws-iam@1.86.0", "@aws-cdk/aws-iam@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.86.0.tgz#aaa24cd87af5f9fc21565052e7048445f0539dc1" + integrity sha512-eGd4kx9ZvQPze5iJQa+n3PlOFb42pUz9nCpJGNr+st7eK9CP6lDllrGq3MBTx5fAxswFkY+gE7MDlDymHIGmTg== dependencies: - "@aws-cdk/core" "1.85.0" - "@aws-cdk/region-info" "1.85.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/region-info" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-kms@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.85.0.tgz#5f1472114eb46b92d09724a03d5057c8f340bc91" - integrity sha512-57+XamcKt9GsUPowuYNavfUj/Eg47qFCUrCPb6IbRR2MzVbhqpQDTmlBHtITnihnnvM1pUdAwQiEOtfSdwmr8w== +"@aws-cdk/aws-kms@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.86.0.tgz#bd922853213dbef83ae254037a9ff8c42be0d16b" + integrity sha512-wuXQ2ZuQGuMI57cv+Nfo9rBZ0bQ6kzqAk4NAiHDK7md1/Afmz6X1m4laPMuLfR5xqeYM3HrY8FNR2NuTu/OZOg== dependencies: - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-lambda@1.85.0", "@aws-cdk/aws-lambda@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.85.0.tgz#153c0c9beaef8cf16d61e2954b4f1b2057ab2ecf" - integrity sha512-56OWAEU5ekMxU56P6MF1dKyahLB2Hri0rjdMDsVaWRxZet+gvvS3Q7rkP8Xc9AptbV55eDeiFr9gcLhTi6fnPQ== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.85.0" - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-codeguruprofiler" "1.85.0" - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-ecr" "1.85.0" - "@aws-cdk/aws-ecr-assets" "1.85.0" - "@aws-cdk/aws-efs" "1.85.0" - "@aws-cdk/aws-events" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/aws-logs" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/aws-s3-assets" "1.85.0" - "@aws-cdk/aws-sqs" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" +"@aws-cdk/aws-lambda@1.86.0", "@aws-cdk/aws-lambda@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.86.0.tgz#000f4ab62f54b806c253bd94d8b4431764b5d5cb" + integrity sha512-e1kIUUWLU9nZd15efuCJZI49/BIIsNaltpdeIKbfEuSOSkbUCW337mxF2LKKhoBL/WFyGuXy6pFu/bnnW2xd8g== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.86.0" + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-codeguruprofiler" "1.86.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-ecr" "1.86.0" + "@aws-cdk/aws-ecr-assets" "1.86.0" + "@aws-cdk/aws-efs" "1.86.0" + "@aws-cdk/aws-events" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/aws-logs" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/aws-s3-assets" "1.86.0" + "@aws-cdk/aws-sqs" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-logs@1.85.0", "@aws-cdk/aws-logs@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.85.0.tgz#4f8f683a2007ec65720e51f20f36ea0251c818c2" - integrity sha512-YpPS9HZGG9992n2od+KbxQOFxW3J4ckHooGshkQkkrRumetVnQnQgySnhJSsuGkQDaLQ7TbXWcAA2uWPMLt68g== +"@aws-cdk/aws-logs@1.86.0", "@aws-cdk/aws-logs@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.86.0.tgz#e289bc134f9591393227b70c4a5379503da98ae1" + integrity sha512-IXLUSvco7KAp2dmWd7SEONxhYzGI05j76iLIkcf7JrELSy1bHU4vatpFJajc4a6XY3GPc24fRn+CgMh6O+rexQ== dependencies: - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/aws-s3-assets" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/aws-s3-assets" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-route53-targets@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.85.0.tgz#af2d1db341310bae9ef3c8f2cb1096a9d081a6d2" - integrity sha512-TmMo6kReBYxTGlsi6jpEwp8mkey8Kgq7aMjNX0kxzJuCnNNwufBbU31ggKgLYR+kl2xYykYTedcg5C36+EWLVQ== - dependencies: - "@aws-cdk/aws-apigateway" "1.85.0" - "@aws-cdk/aws-apigatewayv2" "1.85.0" - "@aws-cdk/aws-cloudfront" "1.85.0" - "@aws-cdk/aws-cognito" "1.85.0" - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-elasticloadbalancing" "1.85.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-route53" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/region-info" "1.85.0" +"@aws-cdk/aws-route53-targets@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.86.0.tgz#f83143cf0193a3073a1e555c136e783837610959" + integrity sha512-+N+Wqm+AsKHuoPQC64LNGF8dugqBEdxxPSjJOfiAP/AezBL6GjSUp3TtZRmo4aRFix1rC0olSBBIuVAkX3Abgw== + dependencies: + "@aws-cdk/aws-apigateway" "1.86.0" + "@aws-cdk/aws-apigatewayv2" "1.86.0" + "@aws-cdk/aws-cloudfront" "1.86.0" + "@aws-cdk/aws-cognito" "1.86.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-elasticloadbalancing" "1.86.0" + "@aws-cdk/aws-elasticloadbalancingv2" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-route53" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/region-info" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-route53@1.85.0", "@aws-cdk/aws-route53@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.85.0.tgz#4bac1e370c6eb1f6ac63eb216f237ce4619dd44f" - integrity sha512-1kTzmBsYgwIXksfCAqUqeO98X6/GDGU2CsEcw1VEhRk9mBh4d1hR4o16tSfM0UePODZEo5WD2fIzEK9y1zznmQ== +"@aws-cdk/aws-route53@1.86.0", "@aws-cdk/aws-route53@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.86.0.tgz#6049b17b4074ec97fad8ed7df8ee30560fd79c23" + integrity sha512-5nMfZDkvjLs2sYoFD6dtWbHB/2RJP4BKF0TPWeef+CdcRXsZsUxj6od0AauE+Zf126XuJ/RbciMtm8V/EychvQ== dependencies: - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-logs" "1.85.0" - "@aws-cdk/cloud-assembly-schema" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/custom-resources" "1.85.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-logs" "1.86.0" + "@aws-cdk/cloud-assembly-schema" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/custom-resources" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-s3-assets@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.85.0.tgz#3ec05f90f4a8387a498eda59f550b85eca005fa9" - integrity sha512-aOrkUJffNNHpQcKuEJnXIvIa6kM26yvhcYDU6vanOuSxhDe30DVVKMm7C9oIrti4KfTOK4whuoPgAjZbR1Z+Rw== - dependencies: - "@aws-cdk/assets" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" +"@aws-cdk/aws-s3-assets@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.86.0.tgz#78e37255e3c6a29abb1cd9527550bd90f840366a" + integrity sha512-X8EcNasUKzMeX52TSVBwDpPrUL6Blp8fAG2AAl/16cR9JfeBtd8OA1VQ1rc7FQgPpWLAsmmzLP7ZthDlVUy5FQ== + dependencies: + "@aws-cdk/assets" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-s3-deployment@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-deployment/-/aws-s3-deployment-1.85.0.tgz#6b949ca87f2f30049aff53071315c57b05e2fa78" - integrity sha512-BRlZayZGXl/Vjsp1F93hmritYrDX4sHhdnr2nUCikXHqx3uMFmuv1AWieEyhKF718sqMpkmPh0fnakhhD4APJQ== - dependencies: - "@aws-cdk/aws-cloudfront" "1.85.0" - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/aws-s3" "1.85.0" - "@aws-cdk/aws-s3-assets" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/lambda-layer-awscli" "1.85.0" +"@aws-cdk/aws-s3-deployment@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-deployment/-/aws-s3-deployment-1.86.0.tgz#5a417bbafff9ece5b61a576d59de184777a21aba" + integrity sha512-JnPXKyqyI2pzqbKAA1ELkph9fsJ82BKw+amOuvEDOC2DrEeEfTcmcoGBgCmGSAKtDCP+ihKof6J9xY7l5W/60Q== + dependencies: + "@aws-cdk/aws-cloudfront" "1.86.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/aws-s3" "1.86.0" + "@aws-cdk/aws-s3-assets" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/lambda-layer-awscli" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-s3@1.85.0", "@aws-cdk/aws-s3@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.85.0.tgz#456a32048e7195afe1f1a549cba950176c52cd1f" - integrity sha512-ySqTuUz0yb6EZgfbKsnWQLvkiq7j5/gD/hK/Ufcpr49NtqlGPYoGlYeSlhqIHklfRmip55d8k4TnrOsa2Nl2aA== +"@aws-cdk/aws-s3@1.86.0", "@aws-cdk/aws-s3@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.86.0.tgz#0f0fdd7d8c893882c8348092815b33c4ad9acde0" + integrity sha512-4Rk3ohJwrKQ49L53Zk2eby9AEzkf6ljrs12y479ece+tMEzrve9Qu3PXiTQaGFf60eRm/8l/hm7AWYDc7BXhwg== dependencies: - "@aws-cdk/aws-events" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/core" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" + "@aws-cdk/aws-events" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/core" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-sns@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.85.0.tgz#9e81ac42e1d076c7e51fbbedf9d96872efa80ad3" - integrity sha512-4PiEtcVUu8VdZbnKVIcDs/1X+XKLFgX2ylqywi6PYN3nSPjWRIyt2YIxwEIkS4eI1appel62GwXPCl2Ys2L/Cg== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-events" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/aws-sqs" "1.85.0" - "@aws-cdk/core" "1.85.0" +"@aws-cdk/aws-sns@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.86.0.tgz#0eb6b48b617f753a53a1e3b70dc62c66255771c3" + integrity sha512-2LnH3iEAw2hDZwyegi+gHW8tqng/U2Ldb6wjCkntyuaD3IABC1etrttgGV0z86dKMNUATdsqXgv45hQwR2M9ag== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-events" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/aws-sqs" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-sqs@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.85.0.tgz#5e73615ce3af84c665db72250b08f32425bf0b57" - integrity sha512-u4HQSg7YThETpdxdyfQ3izCSPLSBrycsp9m3Ekfxldfj8qKexwFJclxDrEvwhkhIbje05Tm0Vh/AQd/k5X5ifA== +"@aws-cdk/aws-sqs@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.86.0.tgz#9d096f1f42d0214117e89b57d6e49bf82da0cfa3" + integrity sha512-rYuRDiq75DvB3BhRBAi1T9eGj2HYHpUt2yvTLV3Cvye/OcVEFAIvnl3LEyKrJuyqgWa0DWq8toj8gG2h96ytxw== dependencies: - "@aws-cdk/aws-cloudwatch" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-cloudwatch" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/aws-ssm@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.85.0.tgz#432245d8aa3a7ad11a78e11f49d412d83e594998" - integrity sha512-cSRf41awerxxKxVMXg9C1JJ131Ke44UgcYHQw/QBQZ16i+OjVgGrv7vI6gXoLrK47Xynh98yw0E8RxNiO85a2w== +"@aws-cdk/aws-ssm@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.86.0.tgz#ec33bc6de5337f4f76aac921f29849d341594be6" + integrity sha512-8PFzkDXrdJ4AK7qDxkv3qjQZX+B4ldEMHx2ArcWYNh7gPGOOtg8VJajLY5w68MCvbtst8UnS7AP2PEk8cPj2xA== dependencies: - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-kms" "1.85.0" - "@aws-cdk/cloud-assembly-schema" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-kms" "1.86.0" + "@aws-cdk/cloud-assembly-schema" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/cfnspec@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.85.0.tgz#1ed696d8d48ab77f7b0d936a765c578192cd3099" - integrity sha512-qqFk1mWVeFp+X+jlPbhmuEovfkaNe2PNSgGi/aosR/fJzJAeSHDZpwAkCSyb7c9TaMhAYVOQMgoOIQW0YHBg4g== +"@aws-cdk/cfnspec@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.86.0.tgz#d388179f4fee239a37c50a17d8adb6c7a24fc082" + integrity sha512-lILSMiaUT/rHxOFnAAxmZVrBo6i8b3Oqs50k1+nAcoOSmfXTKMR/8O7IFbzHqJgLJEiOIEXtlg6mC7qf+14TWA== dependencies: md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.85.0.tgz#b1bc11b1233e7696b64b70495255ad19e875a0b7" - integrity sha512-gDI1uGTy9/Cr1GvUGkKpEelMfSNccESv8ZNVNzf/2huSMF3Qu8ac549RU4iubF8ysYKuwuizGhIsJX2URDBlDA== +"@aws-cdk/cloud-assembly-schema@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.86.0.tgz#9bdba964c2d0d2264876f96f540d09c6fcd1c3ff" + integrity sha512-3EKvoirgB+2dIX83Pdbi0QUh0JJuYkIssB+KnnCncRZDTl4NU1mlzJtAbZACPJjI7NCJOAxuAS/h+m5LulIqIQ== dependencies: jsonschema "^1.4.0" semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.85.0.tgz#651a05f1d4fe51753bfe1a7f51be8861ac05389c" - integrity sha512-NbRQ8Ge8sZswSehfCGbN8WM9C1PR8jfNXvb2p7hgl9TEhvDi8VY+9jlkeKYgvI18wwt6iTFR2rPo0bd/2L3W5Q== +"@aws-cdk/cloudformation-diff@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.86.0.tgz#67065e4b9eaf1957cdc3b81577fc2c6ffbde5535" + integrity sha512-3Vc93PYBz9aXy7Y/PFd78F62n6k7mt84kKQniHIKyb+LvIKwvGUGLu7cemjySQqzKGFH+wWS13SG39YhbDyyQQ== dependencies: - "@aws-cdk/cfnspec" "1.85.0" + "@aws-cdk/cfnspec" "1.86.0" colors "^1.4.0" diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" table "^6.0.7" -"@aws-cdk/core@1.85.0", "@aws-cdk/core@>=1.75.0 & < 2": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.85.0.tgz#22fe776c51ff637ce909a933fa7c2d16e6384b68" - integrity sha512-L8fiMg4Dpe8qhV+dClBSQldLt0LBEyz7EOigL3YEi+yMxQ2dBZAeryroh609Cnn/WlzNPob795FWmvMqTbrdAw== +"@aws-cdk/core@1.86.0", "@aws-cdk/core@^1.75.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.86.0.tgz#b510fd60d30cfae68fd28593cf102de5f63c6f78" + integrity sha512-3wdvXta/XU2nKVxpr3rFJ0gKAVfiLuNp7nrarh/nyC+sS2ZtOLNOuHG8Zg0Adpzzb4YWqXknz60KLhSDVAAMsQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.85.0" - "@aws-cdk/cx-api" "1.85.0" - "@aws-cdk/region-info" "1.85.0" + "@aws-cdk/cloud-assembly-schema" "1.86.0" + "@aws-cdk/cx-api" "1.86.0" + "@aws-cdk/region-info" "1.86.0" "@balena/dockerignore" "^1.0.2" constructs "^3.2.0" fs-extra "^9.0.1" ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.85.0.tgz#f38c5bebaa31c3142902713650b6d2b26bf6b46b" - integrity sha512-O9P5r4EoFnI4BCcVMOFjDaIhNgo+rEnB1m5jGlRsPSuwpFvgbRljwODGOqjYqZN5eyR8n7O0HA0fKxJlsHCvgQ== - dependencies: - "@aws-cdk/aws-cloudformation" "1.85.0" - "@aws-cdk/aws-ec2" "1.85.0" - "@aws-cdk/aws-iam" "1.85.0" - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/aws-logs" "1.85.0" - "@aws-cdk/aws-sns" "1.85.0" - "@aws-cdk/core" "1.85.0" +"@aws-cdk/custom-resources@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.86.0.tgz#aef83e4fe1e9f922e1d222b9f4bafc9e92bb80ed" + integrity sha512-AUq4WN2mVtQLWWDtE4aYXW537qHBQcRp+9ULz9PW9L1fWfncKHjCksRfZ5nYS3QZQNJKl/1XMFV4kitZPUDdag== + dependencies: + "@aws-cdk/aws-cloudformation" "1.86.0" + "@aws-cdk/aws-ec2" "1.86.0" + "@aws-cdk/aws-iam" "1.86.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/aws-logs" "1.86.0" + "@aws-cdk/aws-sns" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/cx-api@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.85.0.tgz#b87cddd465ee5999a02bddf3e828e0da0ff52a83" - integrity sha512-Vm0Fnci+o5AEI48/URsfWcvF6LhcRljFZ41usOqOVZuDHVGqD7E3O6nHD+TcVHvqW9Ack9cL8bXmVw7sgCvYJg== +"@aws-cdk/cx-api@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.86.0.tgz#b53d479dba02c7d72abbc43777c2f8a151145bbd" + integrity sha512-wxPf1VHwl+joIdZ/KPdUnphZ8VWpL9BuzXGv6ZZXKACsSOh71AD0Hs4XQpFB9akNgadbZfESuUOOKNygt8B8KA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.85.0" + "@aws-cdk/cloud-assembly-schema" "1.86.0" semver "^7.3.2" -"@aws-cdk/lambda-layer-awscli@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.85.0.tgz#260a752ba564eac7cdfd656fd22abce74d505d13" - integrity sha512-PnzYEcCKua17Ulkvwzy7rcvqhRTftjnol0AD81bGAzNeTUAiRNgYzL/lgb5jPM4DyIfgcyveFqZaZBTSZI1o+w== +"@aws-cdk/lambda-layer-awscli@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.86.0.tgz#5ca3914fda94b05a40f554870e622f3c422904b8" + integrity sha512-JeCGKLvYQ65YkAVYN43nqnWbX05iNOZ3MI8MiKL8lQg5FFTlI8IfdCOatkCQP8wT5Pgm6WcNKaZJZvzCm1tW1g== dependencies: - "@aws-cdk/aws-lambda" "1.85.0" - "@aws-cdk/core" "1.85.0" + "@aws-cdk/aws-lambda" "1.86.0" + "@aws-cdk/core" "1.86.0" constructs "^3.2.0" -"@aws-cdk/region-info@1.85.0": - version "1.85.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.85.0.tgz#59d5ff0475af5ae17335d849025ffdd1c8d8b661" - integrity sha512-7GPJOcuORLkHniFrqsoB0YiMKlDGVUPAH5ZzidLSEnQqgnf67d9ZHFqarj8GEr4ZuV/lgAavUK5T/CxEqLfLcw== +"@aws-cdk/region-info@1.86.0": + version "1.86.0" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.86.0.tgz#d5bff6718180e769d6b505efe81875ef9ec2d28d" + integrity sha512-enKCy9FJSOkySR1ouev6+cXmGFHHc0rkImtr4xESIlfGK17FsdUvBKp7+oW067Q57NXqP4J0jovX57TXMu/v3Q== "@aws-crypto/crc32@^1.0.0": version "1.0.0" From a8dd7a1b568daa606df90bc52d209936cbe26aee Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 27 Jan 2021 18:04:55 +0000 Subject: [PATCH 15/26] fix: api should allow all methods --- .../serverless-components/nextjs-cdk-construct/src/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index 9334d70bfa..310e0fcc89 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -279,8 +279,7 @@ export class NextJSLambdaEdge extends cdk.Construct { viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS, origin: new origins.S3Origin(this.bucket), - allowedMethods: - cloudfront.AllowedMethods.ALLOW_GET_HEAD_OPTIONS, + allowedMethods: cloudfront.AllowedMethods.ALLOW_ALL, cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, compress: true, From e649bfe11bbb7fa9d711228a5620844ab9657fce Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 29 Jan 2021 11:24:07 +0000 Subject: [PATCH 16/26] feat: add ability to override the deault behavior props --- documentation/docs/cdkconstruct.md | 5 ++++- .../nextjs-cdk-construct/src/index.ts | 14 +++++++++++--- .../nextjs-cdk-construct/src/props.ts | 5 +++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/documentation/docs/cdkconstruct.md b/documentation/docs/cdkconstruct.md index 70f2a36a16..8c43754ee1 100644 --- a/documentation/docs/cdkconstruct.md +++ b/documentation/docs/cdkconstruct.md @@ -88,6 +88,9 @@ new NextJSLambdaEdge(this, "NextJsApp", { - `runtime?: lambda.Runtime | Record` - configure the runtime of all lambdas or individually. - `withLogging?: boolean` - set debug logging on the lambda. -- `whiteListedCookies?: string[]` - provide a list of cookies to forward to the CloudFront origin. +- `whiteListedCookies?: string[]` - provide a list of cookies to forward to the + CloudFront origin. +- `defaultBehavior?: Partial` - provide overrides for the + default behavior - `behaviours?: Array` - an array of Cloudfront distribution behaviours. diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index 310e0fcc89..cef518159e 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -11,7 +11,7 @@ import { OriginRequestApiHandlerManifest, RoutesManifest } from "@sls-next/lambda-at-edge"; -import { getAssetDirectoryFileCachePolicies } from "@sls-next/s3-static-assets"; +import { getAssetDirectoryFileCachePolicies } from "@planes/s3-static-assets"; import * as fs from "fs-extra"; import * as path from "path"; import { @@ -45,8 +45,15 @@ export class NextJSLambdaEdge extends cdk.Construct { this.routesManifest = this.readRoutesManifest(); this.imageManifest = this.readImageBuildManifest(); this.bucket = new s3.Bucket(this, "PublicAssets", { - publicReadAccess: true + publicReadAccess: true, + + // Given this resource is created internally and also should only contain + // assets uploaded by this library we should be able to safely delete all + // contents along with the bucket its self upon stack deletion. + autoDeleteObjects: true, + removalPolicy: cdk.RemovalPolicy.DESTROY }); + const edgeLambdaRole = new Role(this, "NextEdgeLambdaRole", { assumedBy: new CompositePrincipal( new ServicePrincipal("lambda.amazonaws.com"), @@ -215,7 +222,8 @@ export class NextJSLambdaEdge extends cdk.Construct { cachedMethods: cloudfront.CachedMethods.CACHE_GET_HEAD_OPTIONS, compress: true, cachePolicy: nextLambdaCachePolicy, - edgeLambdas + edgeLambdas, + ...(props.defaultBehavior || {}) }, additionalBehaviors: { ...(nextImageLambda diff --git a/packages/serverless-components/nextjs-cdk-construct/src/props.ts b/packages/serverless-components/nextjs-cdk-construct/src/props.ts index 4ab70cf5f1..8f67c73136 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/props.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/props.ts @@ -53,6 +53,11 @@ export interface Props extends StackProps { * .e.g ['my-apps-auth-token-cookie-key'] */ whiteListedCookies?: string[]; + /** + * Provide a subset (or all) of the props to override the CloudFront + * distributions default props. + */ + defaultBehavior?: Partial; /** * Optionally pass one or many custom CloudFront behaviours. * From 3a3f345d4df7c7dd615662b5221d86a84688d11d Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 29 Jan 2021 11:53:41 +0000 Subject: [PATCH 17/26] fix: allo name overrides --- .../nextjs-cdk-construct/src/index.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index cef518159e..023f2c933d 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -69,7 +69,8 @@ export class NextJSLambdaEdge extends cdk.Construct { }); const defaultNextLambda = new lambda.Function(this, "NextLambda", { - functionName: "NextLambda", + functionName: + toLambdaOption("defaultLambda", props.name) || "NextDefaultLambda", description: `Default Lambda@Edge for Next CloudFront distribution`, handler: "index.handler", currentVersionOptions: { @@ -98,7 +99,8 @@ export class NextJSLambdaEdge extends cdk.Construct { let nextApiLambda = null; if (hasAPIPages) { nextApiLambda = new lambda.Function(this, "NextApiLambda", { - functionName: "NextApiLambda", + functionName: + toLambdaOption("apiLambda", props.name) || "NextApiLambda", description: `Default Lambda@Edge for Next API CloudFront distribution`, handler: "index.handler", currentVersionOptions: { @@ -122,7 +124,8 @@ export class NextJSLambdaEdge extends cdk.Construct { let nextImageLambda = null; if (this.imageManifest) { nextImageLambda = new lambda.Function(this, "NextImageLambda", { - functionName: "NextImageLambda", + functionName: + toLambdaOption("imageLambda", props.name) || "NextImageLambda", description: `Default Lambda@Edge for Next Image CloudFront distribution`, handler: "index.handler", currentVersionOptions: { From 5b17e6fcf24988f6da05078ed3184cecad455789 Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 29 Jan 2021 11:56:35 +0000 Subject: [PATCH 18/26] fix: tests, update snapshots and construct tests using new lambda name --- .../__snapshots__/snapshots.test.ts.snap | 273 ++++++++++++++---- .../__tests__/construct.test.ts | 4 +- 2 files changed, 223 insertions(+), 54 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap index 1c6aafafe4..942dbd1825 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap @@ -3,40 +3,40 @@ exports[`CDK Construct Snapshots creates boilerplate next app 1`] = ` Object { "Parameters": Object { - "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508ArtifactHash2E8FEA97": Object { - "Description": "Artifact hash for asset \\"3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508\\"", + "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eArtifactHashEA6D0F73": Object { + "Description": "Artifact hash for asset \\"10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222e\\"", "Type": "String", }, - "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3Bucket27DED49E": Object { - "Description": "S3 bucket for asset \\"3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508\\"", + "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3Bucket37B66C5D": Object { + "Description": "S3 bucket for asset \\"10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222e\\"", "Type": "String", }, - "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3VersionKey427BBA4F": Object { - "Description": "S3 key for asset version \\"3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508\\"", + "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3VersionKey827A63FF": Object { + "Description": "S3 key for asset version \\"10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222e\\"", "Type": "String", }, - "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90ArtifactHashC5E3199F": Object { - "Description": "Artifact hash for asset \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", + "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392ArtifactHashE56CD69A": Object { + "Description": "Artifact hash for asset \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", "Type": "String", }, - "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3Bucket0D7EE15F": Object { - "Description": "S3 bucket for asset \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", + "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3BucketBF7A7F3F": Object { + "Description": "S3 bucket for asset \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", "Type": "String", }, - "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3VersionKeyF5955B10": Object { - "Description": "S3 key for asset version \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", + "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626": Object { + "Description": "S3 key for asset version \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", "Type": "String", }, - "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363ArtifactHash0A4EDAB8": Object { - "Description": "Artifact hash for asset \\"66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363\\"", + "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90ArtifactHashC5E3199F": Object { + "Description": "Artifact hash for asset \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", "Type": "String", }, - "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3Bucket08A0F370": Object { - "Description": "S3 bucket for asset \\"66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363\\"", + "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3Bucket0D7EE15F": Object { + "Description": "S3 bucket for asset \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", "Type": "String", }, - "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3VersionKey39BEFFA0": Object { - "Description": "S3 key for asset version \\"66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363\\"", + "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3VersionKeyF5955B10": Object { + "Description": "S3 key for asset version \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", "Type": "String", }, "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { @@ -51,16 +51,16 @@ Object { "Description": "S3 key for asset version \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", "Type": "String", }, - "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaArtifactHash6296D2A1": Object { - "Description": "Artifact hash for asset \\"8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cba\\"", + "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36ArtifactHashF05A69F1": Object { + "Description": "Artifact hash for asset \\"8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36\\"", "Type": "String", }, - "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3Bucket5FE5088F": Object { - "Description": "S3 bucket for asset \\"8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cba\\"", + "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3Bucket5608D29B": Object { + "Description": "S3 bucket for asset \\"8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36\\"", "Type": "String", }, - "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3VersionKeyAADEFDBE": Object { - "Description": "S3 key for asset version \\"8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cba\\"", + "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3VersionKeyBD2A49A2": Object { + "Description": "S3 key for asset version \\"8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36\\"", "Type": "String", }, "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": Object { @@ -99,6 +99,18 @@ Object { "Description": "S3 key for asset version \\"efb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318\\"", "Type": "String", }, + "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cArtifactHashA6E373EE": Object { + "Description": "Artifact hash for asset \\"f6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4c\\"", + "Type": "String", + }, + "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3BucketEB56A23B": Object { + "Description": "S3 bucket for asset \\"f6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4c\\"", + "Type": "String", + }, + "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3VersionKeyFAB0432C": Object { + "Description": "S3 key for asset version \\"f6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4c\\"", + "Type": "String", + }, "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18ArtifactHashFAD3C98C": Object { "Description": "Artifact hash for asset \\"f7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18\\"", "Type": "String", @@ -227,7 +239,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3Bucket27DED49E", + "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3BucketEB56A23B", }, ], ], @@ -242,7 +254,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3Bucket27DED49E", + "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3BucketEB56A23B", }, "/*", ], @@ -283,6 +295,14 @@ Object { }, ], }, + Object { + "Action": Array [ + "cloudfront:GetInvalidation", + "cloudfront:CreateInvalidation", + ], + "Effect": "Allow", + "Resource": "*", + }, Object { "Action": Array [ "s3:GetObject*", @@ -301,7 +321,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3Bucket08A0F370", + "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3Bucket5608D29B", }, ], ], @@ -316,7 +336,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3Bucket08A0F370", + "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3Bucket5608D29B", }, "/*", ], @@ -342,7 +362,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3Bucket5FE5088F", + "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3Bucket37B66C5D", }, ], ], @@ -357,7 +377,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3Bucket5FE5088F", + "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3Bucket37B66C5D", }, "/*", ], @@ -377,6 +397,84 @@ Object { }, "Type": "AWS::IAM::Policy", }, + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F": Object { + "DependsOn": Array [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + ], + "Properties": Object { + "Code": Object { + "S3Bucket": Object { + "Ref": "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3BucketBF7A7F3F", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Handler": "__entrypoint__.handler", + "MemorySize": 128, + "Role": Object { + "Fn::GetAtt": Array [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn", + ], + }, + "Runtime": "nodejs12.x", + "Timeout": 900, + }, + "Type": "AWS::Lambda::Function", + }, + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092": Object { + "Properties": Object { + "AssumeRolePolicyDocument": Object { + "Statement": Array [ + Object { + "Action": "sts:AssumeRole", + "Effect": "Allow", + "Principal": Object { + "Service": "lambda.amazonaws.com", + }, + }, + ], + "Version": "2012-10-17", + }, + "ManagedPolicyArns": Array [ + Object { + "Fn::Sub": "arn:\${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + }, + ], + }, + "Type": "AWS::IAM::Role", + }, "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aFD4BFC8A": Object { "DependsOn": Array [ "LogRetentionaae0aa3c5b4d4f87b02d85b201efdd8aServiceRoleDefaultPolicyADDA7DEB", @@ -537,7 +635,10 @@ Object { "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, - "Prune": true, + "DistributionId": Object { + "Ref": "StackNextJSDistribution03A07E47", + }, + "Prune": false, "ServiceToken": Object { "Fn::GetAtt": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", @@ -546,7 +647,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3Bucket5FE5088F", + "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3Bucket37B66C5D", }, ], "SourceObjectKeys": Array [ @@ -561,7 +662,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3VersionKeyAADEFDBE", + "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3VersionKey827A63FF", }, ], }, @@ -574,7 +675,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters8458ce357df30ff07b9163a244ed3208a4a1f641cb39b78abafe4556cf1f7cbaS3VersionKeyAADEFDBE", + "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3VersionKey827A63FF", }, ], }, @@ -641,7 +742,10 @@ Object { "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, - "Prune": true, + "DistributionId": Object { + "Ref": "StackNextJSDistribution03A07E47", + }, + "Prune": false, "ServiceToken": Object { "Fn::GetAtt": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", @@ -650,7 +754,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3Bucket08A0F370", + "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3Bucket5608D29B", }, ], "SourceObjectKeys": Array [ @@ -665,7 +769,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3VersionKey39BEFFA0", + "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3VersionKeyBD2A49A2", }, ], }, @@ -678,7 +782,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters66bf4b6b1ef54d5df68ef520d27ab9cb83f2a10e55635df4fe027d546e6b9363S3VersionKey39BEFFA0", + "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3VersionKeyBD2A49A2", }, ], }, @@ -745,7 +849,10 @@ Object { "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, - "Prune": true, + "DistributionId": Object { + "Ref": "StackNextJSDistribution03A07E47", + }, + "Prune": false, "ServiceToken": Object { "Fn::GetAtt": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", @@ -754,7 +861,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3Bucket27DED49E", + "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3BucketEB56A23B", }, ], "SourceObjectKeys": Array [ @@ -769,7 +876,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3VersionKey427BBA4F", + "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3VersionKeyFAB0432C", }, ], }, @@ -782,7 +889,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters3e79c2bd068329bec5f29d7ee09474b9203075d87a1e7355dd2206a14960f508S3VersionKey427BBA4F", + "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3VersionKeyFAB0432C", }, ], }, @@ -985,7 +1092,7 @@ Object { ], }, "QueryStringsConfig": Object { - "QueryStringBehavior": "none", + "QueryStringBehavior": "all", }, }, }, @@ -1169,13 +1276,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", + "Ref": "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", + "Ref": "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", }, }, ], @@ -1226,6 +1333,10 @@ Object { "GET", "HEAD", "OPTIONS", + "PUT", + "PATCH", + "POST", + "DELETE", ], "CachePolicyId": Object { "Ref": "StackNextLambdaCacheF214CEF2", @@ -1269,13 +1380,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", + "Ref": "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", + "Ref": "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", }, }, ], @@ -1496,7 +1607,7 @@ Object { }, "Type": "AWS::CloudFront::CachePolicy", }, - "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861": Object { + "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1513,7 +1624,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextLambdaCurrentVersion21F01F874c522519087c7a9996899c945b7af861", + "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", "Version", ], }, @@ -1565,7 +1676,7 @@ Object { }, }, "Description": "Default Lambda@Edge for Next CloudFront distribution", - "FunctionName": "NextLambda", + "FunctionName": "NextDefaultLambda", "Handler": "index.handler", "Role": Object { "Fn::GetAtt": Array [ @@ -1625,9 +1736,28 @@ Object { "Type": "AWS::CloudFront::CachePolicy", }, "StackPublicAssets8F0F4FE8": Object { - "DeletionPolicy": "Retain", + "DeletionPolicy": "Delete", "Type": "AWS::S3::Bucket", - "UpdateReplacePolicy": "Retain", + "UpdateReplacePolicy": "Delete", + }, + "StackPublicAssetsAutoDeleteObjectsCustomResource55D84E66": Object { + "DeletionPolicy": "Delete", + "DependsOn": Array [ + "StackPublicAssetsPolicy113B95FD", + ], + "Properties": Object { + "BucketName": Object { + "Ref": "StackPublicAssets8F0F4FE8", + }, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F", + "Arn", + ], + }, + }, + "Type": "Custom::S3AutoDeleteObjects", + "UpdateReplacePolicy": "Delete", }, "StackPublicAssetsPolicy113B95FD": Object { "Properties": Object { @@ -1655,6 +1785,45 @@ Object { ], }, }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + "s3:DeleteObject*", + ], + "Effect": "Allow", + "Principal": Object { + "AWS": Object { + "Fn::GetAtt": Array [ + "CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092", + "Arn", + ], + }, + }, + "Resource": Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::GetAtt": Array [ + "StackPublicAssets8F0F4FE8", + "Arn", + ], + }, + "/*", + ], + ], + }, + ], + }, Object { "Action": Array [ "s3:GetObject*", diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/construct.test.ts b/packages/serverless-components/nextjs-cdk-construct/__tests__/construct.test.ts index 724fba947d..9ba209444d 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/construct.test.ts +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/construct.test.ts @@ -17,7 +17,7 @@ describe("CDK Construct", () => { const synthesizedStack = SynthUtils.toCloudFormation(stack); expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { - FunctionName: "NextLambda", + FunctionName: "NextDefaultLambda", Runtime: Runtime.NODEJS_10_X.name }); expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { @@ -43,7 +43,7 @@ describe("CDK Construct", () => { const synthesizedStack = SynthUtils.toCloudFormation(stack); expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { - FunctionName: "NextLambda", + FunctionName: "NextDefaultLambda", Runtime: Runtime.PYTHON_3_8.name }); expect(synthesizedStack).toHaveResourceLike("AWS::Lambda::Function", { From 1538a8db836802f21e1b312355129ac902d671f8 Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 30 Jan 2021 13:34:37 +0000 Subject: [PATCH 19/26] fix: revert to determining cache internally rather than using s3-static-assets --- .../__snapshots__/snapshots.test.ts.snap | 409 ++++++++-- .../__tests__/utils.test.ts | 2 +- .../nextjs-cdk-construct/package.json | 7 +- .../nextjs-cdk-construct/src/index.ts | 119 ++- .../nextjs-cdk-construct/src/props.ts | 2 +- .../src/utils/readAssetsDirectory.ts | 63 ++ .../readInvalidationPathsFromManifest.ts | 22 + .../src/{utils.ts => utils/toLambdaOption.ts} | 2 +- .../nextjs-cdk-construct/yarn.lock | 772 +++++++++--------- 9 files changed, 863 insertions(+), 535 deletions(-) create mode 100644 packages/serverless-components/nextjs-cdk-construct/src/utils/readAssetsDirectory.ts create mode 100644 packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts rename packages/serverless-components/nextjs-cdk-construct/src/{utils.ts => utils/toLambdaOption.ts} (90%) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap index 942dbd1825..91d65a5a29 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap @@ -3,18 +3,6 @@ exports[`CDK Construct Snapshots creates boilerplate next app 1`] = ` Object { "Parameters": Object { - "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eArtifactHashEA6D0F73": Object { - "Description": "Artifact hash for asset \\"10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222e\\"", - "Type": "String", - }, - "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3Bucket37B66C5D": Object { - "Description": "S3 bucket for asset \\"10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222e\\"", - "Type": "String", - }, - "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3VersionKey827A63FF": Object { - "Description": "S3 key for asset version \\"10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222e\\"", - "Type": "String", - }, "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392ArtifactHashE56CD69A": Object { "Description": "Artifact hash for asset \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", "Type": "String", @@ -51,28 +39,64 @@ Object { "Description": "S3 key for asset version \\"67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24\\"", "Type": "String", }, - "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36ArtifactHashF05A69F1": Object { - "Description": "Artifact hash for asset \\"8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36\\"", + "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3ArtifactHash62C7B2C0": Object { + "Description": "Artifact hash for asset \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "Type": "String", + }, + "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5": Object { + "Description": "S3 bucket for asset \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "Type": "String", + }, + "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8": Object { + "Description": "S3 key for asset version \\"75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3\\"", + "Type": "String", + }, + "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1ArtifactHash78F94626": Object { + "Description": "Artifact hash for asset \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "Type": "String", + }, + "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2": Object { + "Description": "S3 bucket for asset \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "Type": "String", + }, + "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8": Object { + "Description": "S3 key for asset version \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", + "Type": "String", + }, + "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dArtifactHash2788C1DC": Object { + "Description": "Artifact hash for asset \\"aecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61d\\"", + "Type": "String", + }, + "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dS3Bucket09B7E9DC": Object { + "Description": "S3 bucket for asset \\"aecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61d\\"", + "Type": "String", + }, + "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dS3VersionKey99B046A5": Object { + "Description": "S3 key for asset version \\"aecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61d\\"", "Type": "String", }, - "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3Bucket5608D29B": Object { - "Description": "S3 bucket for asset \\"8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36\\"", + "AssetParametersbc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389ArtifactHashA466D3F1": Object { + "Description": "Artifact hash for asset \\"bc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389\\"", "Type": "String", }, - "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3VersionKeyBD2A49A2": Object { - "Description": "S3 key for asset version \\"8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36\\"", + "AssetParametersbc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389S3Bucket33190633": Object { + "Description": "S3 bucket for asset \\"bc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389\\"", "Type": "String", }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aArtifactHash595EC1E7": Object { - "Description": "Artifact hash for asset \\"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\\"", + "AssetParametersbc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389S3VersionKey8DBC717C": Object { + "Description": "S3 key for asset version \\"bc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389\\"", "Type": "String", }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00": Object { - "Description": "S3 bucket for asset \\"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\\"", + "AssetParametersc24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cfArtifactHash85F58E48": Object { + "Description": "Artifact hash for asset \\"c24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cf\\"", "Type": "String", }, - "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76": Object { - "Description": "S3 key for asset version \\"8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59a\\"", + "AssetParametersc24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cfS3Bucket55EFA30C": Object { + "Description": "S3 bucket for asset \\"c24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cf\\"", + "Type": "String", + }, + "AssetParametersc24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cfS3VersionKey60329B70": Object { + "Description": "S3 key for asset version \\"c24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cf\\"", "Type": "String", }, "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68ArtifactHashD9A515C3": Object { @@ -99,18 +123,6 @@ Object { "Description": "S3 key for asset version \\"efb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318\\"", "Type": "String", }, - "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cArtifactHashA6E373EE": Object { - "Description": "Artifact hash for asset \\"f6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4c\\"", - "Type": "String", - }, - "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3BucketEB56A23B": Object { - "Description": "S3 bucket for asset \\"f6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4c\\"", - "Type": "String", - }, - "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3VersionKeyFAB0432C": Object { - "Description": "S3 key for asset version \\"f6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4c\\"", - "Type": "String", - }, "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18ArtifactHashFAD3C98C": Object { "Description": "Artifact hash for asset \\"f7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18\\"", "Type": "String", @@ -133,7 +145,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3BucketFD1BBE00", + "Ref": "AssetParametersc24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cfS3Bucket55EFA30C", }, "S3Key": Object { "Fn::Join": Array [ @@ -146,7 +158,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76", + "Ref": "AssetParametersc24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cfS3VersionKey60329B70", }, ], }, @@ -159,7 +171,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters8bda025b845a88fbeb54ef75e52048aa9f3378463116cb413f12f6014673a59aS3VersionKey6E54DC76", + "Ref": "AssetParametersc24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cfS3VersionKey60329B70", }, ], }, @@ -172,7 +184,7 @@ Object { "Handler": "index.handler", "Layers": Array [ Object { - "Ref": "StackAssetDeploymentpublicmaxage31536000immutableAwsCliLayerEC7E7A34", + "Ref": "StackAssetDeploymentBuildIDAwsCliLayer055D8C68", }, ], "Role": Object { @@ -239,7 +251,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3BucketEB56A23B", + "Ref": "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dS3Bucket09B7E9DC", }, ], ], @@ -254,7 +266,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3BucketEB56A23B", + "Ref": "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dS3Bucket09B7E9DC", }, "/*", ], @@ -321,7 +333,48 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3Bucket5608D29B", + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + }, + ], + ], + }, + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + }, + "/*", + ], + ], + }, + ], + }, + Object { + "Action": Array [ + "s3:GetObject*", + "s3:GetBucket*", + "s3:List*", + ], + "Effect": "Allow", + "Resource": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + "arn:", + Object { + "Ref": "AWS::Partition", + }, + ":s3:::", + Object { + "Ref": "AssetParametersbc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389S3Bucket33190633", }, ], ], @@ -336,7 +389,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3Bucket5608D29B", + "Ref": "AssetParametersbc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389S3Bucket33190633", }, "/*", ], @@ -362,7 +415,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3Bucket37B66C5D", + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", }, ], ], @@ -377,7 +430,7 @@ Object { }, ":s3:::", Object { - "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3Bucket37B66C5D", + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", }, "/*", ], @@ -585,7 +638,7 @@ Object { }, "Type": "AWS::IAM::Policy", }, - "StackAssetDeploymentNOCACHEAwsCliLayerF225BBEB": Object { + "StackAssetDeploymentBuildIDAwsCliLayer055D8C68": Object { "Properties": Object { "Content": Object { "S3Bucket": Object { @@ -629,16 +682,25 @@ Object { }, "Type": "AWS::Lambda::LayerVersion", }, - "StackAssetDeploymentNOCACHECustomResourceAC9B0FAF": Object { + "StackAssetDeploymentBuildIDCustomResourceC7EB618F": Object { "DeletionPolicy": "Delete", "Properties": Object { + "DestinationBucketKeyPrefix": "/BUILD_ID", "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, "DistributionId": Object { "Ref": "StackNextJSDistribution03A07E47", }, - "Prune": false, + "DistributionPaths": Array [ + "/about", + "/", + "/404", + "/users/*", + "/users", + "/_error", + ], + "Prune": true, "ServiceToken": Object { "Fn::GetAtt": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", @@ -647,7 +709,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3Bucket37B66C5D", + "Ref": "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dS3Bucket09B7E9DC", }, ], "SourceObjectKeys": Array [ @@ -662,7 +724,51 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3VersionKey827A63FF", + "Ref": "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dS3VersionKey99B046A5", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dS3VersionKey99B046A5", + }, + ], + }, + ], + }, + ], + ], + }, + ], + }, + "Type": "Custom::CDKBucketDeployment", + "UpdateReplacePolicy": "Delete", + }, + "StackAssetDeploymentnextDataAwsCliLayerC32F288B": Object { + "Properties": Object { + "Content": Object { + "S3Bucket": Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", }, ], }, @@ -675,7 +781,65 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters10d874af8778757977cab05fd9f84d0f50591c58dd830492ac97fa70bdb6222eS3VersionKey827A63FF", + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "/opt/awscli/aws", + }, + "Type": "AWS::Lambda::LayerVersion", + }, + "StackAssetDeploymentnextDataCustomResource445B0AAE": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DestinationBucketKeyPrefix": "_next/data", + "DestinationBucketName": Object { + "Ref": "StackPublicAssets8F0F4FE8", + }, + "Prune": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "Arn", + ], + }, + "SourceBucketNames": Array [ + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + }, + ], + "SourceObjectKeys": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", }, ], }, @@ -686,13 +850,13 @@ Object { }, ], "SystemMetadata": Object { - "cache-control": "", + "cache-control": "public, max-age=0, s-maxage=2678400, must-revalidate", }, }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, - "StackAssetDeploymentpublicmaxage0smaxage2678400mustrevalidateAwsCliLayer14B11A7B": Object { + "StackAssetDeploymentnextStaticAwsCliLayerD5D627D4": Object { "Properties": Object { "Content": Object { "S3Bucket": Object { @@ -736,16 +900,14 @@ Object { }, "Type": "AWS::Lambda::LayerVersion", }, - "StackAssetDeploymentpublicmaxage0smaxage2678400mustrevalidateCustomResource86D064A0": Object { + "StackAssetDeploymentnextStaticCustomResource9DCCD3BE": Object { "DeletionPolicy": "Delete", "Properties": Object { + "DestinationBucketKeyPrefix": "_next/static", "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, - "DistributionId": Object { - "Ref": "StackNextJSDistribution03A07E47", - }, - "Prune": false, + "Prune": true, "ServiceToken": Object { "Fn::GetAtt": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", @@ -754,7 +916,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3Bucket5608D29B", + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3BucketF78D27D5", }, ], "SourceObjectKeys": Array [ @@ -769,7 +931,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3VersionKeyBD2A49A2", + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8", }, ], }, @@ -782,7 +944,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters8711156deba7b1dc2c279b852af41ba6db371f45f1bc039e518a1cf39f0a5a36S3VersionKeyBD2A49A2", + "Ref": "AssetParameters75747c01c8238f97cfebdb953d5cea88564b7e08ec0e4fe04619bc1df9792ce3S3VersionKeyDC7D66D8", }, ], }, @@ -793,13 +955,13 @@ Object { }, ], "SystemMetadata": Object { - "cache-control": "public, max-age=0, s-maxage=2678400, must-revalidate", + "cache-control": "public, max-age=31536000, immutable", }, }, "Type": "Custom::CDKBucketDeployment", "UpdateReplacePolicy": "Delete", }, - "StackAssetDeploymentpublicmaxage31536000immutableAwsCliLayerEC7E7A34": Object { + "StackAssetDeploymentpublicFilesAwsCliLayerB1EEF9A7": Object { "Properties": Object { "Content": Object { "S3Bucket": Object { @@ -843,16 +1005,119 @@ Object { }, "Type": "AWS::Lambda::LayerVersion", }, - "StackAssetDeploymentpublicmaxage31536000immutableCustomResourceF7AF335E": Object { + "StackAssetDeploymentpublicFilesCustomResourceC1AC84CF": Object { "DeletionPolicy": "Delete", "Properties": Object { + "DestinationBucketKeyPrefix": "public", "DestinationBucketName": Object { "Ref": "StackPublicAssets8F0F4FE8", }, - "DistributionId": Object { - "Ref": "StackNextJSDistribution03A07E47", + "Prune": true, + "ServiceToken": Object { + "Fn::GetAtt": Array [ + "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", + "Arn", + ], }, - "Prune": false, + "SourceBucketNames": Array [ + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3Bucket0004C4F2", + }, + ], + "SourceObjectKeys": Array [ + Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameters7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1S3VersionKey684177A8", + }, + ], + }, + ], + }, + ], + ], + }, + ], + "SystemMetadata": Object { + "cache-control": "public, max-age=31536000, must-revalidate", + }, + }, + "Type": "Custom::CDKBucketDeployment", + "UpdateReplacePolicy": "Delete", + }, + "StackAssetDeploymentstaticPagesAwsCliLayerB0258334": Object { + "Properties": Object { + "Content": Object { + "S3Bucket": Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7", + }, + "S3Key": Object { + "Fn::Join": Array [ + "", + Array [ + Object { + "Fn::Select": Array [ + 0, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + Object { + "Fn::Select": Array [ + 1, + Object { + "Fn::Split": Array [ + "||", + Object { + "Ref": "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F", + }, + ], + }, + ], + }, + ], + ], + }, + }, + "Description": "/opt/awscli/aws", + }, + "Type": "AWS::Lambda::LayerVersion", + }, + "StackAssetDeploymentstaticPagesCustomResource9BDB9A03": Object { + "DeletionPolicy": "Delete", + "Properties": Object { + "DestinationBucketKeyPrefix": "static-pages", + "DestinationBucketName": Object { + "Ref": "StackPublicAssets8F0F4FE8", + }, + "Prune": true, "ServiceToken": Object { "Fn::GetAtt": Array [ "CustomCDKBucketDeployment8693BB64968944B69AAFB0CC9EB8756C81C01536", @@ -861,7 +1126,7 @@ Object { }, "SourceBucketNames": Array [ Object { - "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3BucketEB56A23B", + "Ref": "AssetParametersbc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389S3Bucket33190633", }, ], "SourceObjectKeys": Array [ @@ -876,7 +1141,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3VersionKeyFAB0432C", + "Ref": "AssetParametersbc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389S3VersionKey8DBC717C", }, ], }, @@ -889,7 +1154,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersf6b87cefcf3fadc100d937ad82a2ff996ff59c1b216a6bfff7e75a7e50918f4cS3VersionKeyFAB0432C", + "Ref": "AssetParametersbc06ddb828947dc2686bc7343dbed188fb4da2daa22d29b27448869653e68389S3VersionKey8DBC717C", }, ], }, @@ -900,7 +1165,7 @@ Object { }, ], "SystemMetadata": Object { - "cache-control": "public, max-age=31536000, immutable", + "cache-control": "public, max-age=0, s-maxage=2678400, must-revalidate", }, }, "Type": "Custom::CDKBucketDeployment", diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts b/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts index cb5af804f3..6d5c7f0a2a 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts @@ -1,4 +1,4 @@ -import { toLambdaOption } from "../src/utils"; +import { toLambdaOption } from "../src/utils/toLambdaOption"; describe("CDK Utils", () => { it.each` diff --git a/packages/serverless-components/nextjs-cdk-construct/package.json b/packages/serverless-components/nextjs-cdk-construct/package.json index c9feff428c..84714b627c 100644 --- a/packages/serverless-components/nextjs-cdk-construct/package.json +++ b/packages/serverless-components/nextjs-cdk-construct/package.json @@ -27,7 +27,6 @@ }, "license": "MIT", "dependencies": { - "@aws-cdk/assert": "^1.75.0", "@aws-cdk/aws-certificatemanager": "^1.75.0", "@aws-cdk/aws-cloudfront": "^1.75.0", "@aws-cdk/aws-cloudfront-origins": "^1.75.0", @@ -40,11 +39,11 @@ "@aws-cdk/aws-s3-deployment": "^1.75.0", "@aws-cdk/core": "^1.75.0", "@sls-next/lambda-at-edge": "link:../../libs/lambda-at-edge", - "@sls-next/s3-static-assets": "link:../../libs/s3-static-assets", - "fs-extra": "^9.0.1" + "fs-extra": "^9.0.1", + "fast-glob": "^3.2.5" }, "devDependencies": { - "@aws-cdk/assert": "1.75.0", + "@aws-cdk/assert": "^1.75.0", "@types/fs-extra": "^9.0.1", "typescript": "^3.9.6" } diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index 023f2c933d..ea6f6e036a 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -9,9 +9,9 @@ import { ARecord, RecordTarget } from "@aws-cdk/aws-route53"; import { OriginRequestImageHandlerManifest, OriginRequestApiHandlerManifest, + OriginRequestDefaultHandlerManifest, RoutesManifest } from "@sls-next/lambda-at-edge"; -import { getAssetDirectoryFileCachePolicies } from "@planes/s3-static-assets"; import * as fs from "fs-extra"; import * as path from "path"; import { @@ -24,7 +24,9 @@ import { Duration, RemovalPolicy } from "@aws-cdk/core"; import { CloudFrontTarget } from "@aws-cdk/aws-route53-targets"; import { OriginRequestQueryStringBehavior } from "@aws-cdk/aws-cloudfront"; import { Props } from "./props"; -import { toLambdaOption } from "./utils"; +import { toLambdaOption } from "./utils/toLambdaOption"; +import { readAssetsDirectory } from "./utils/readAssetsDirectory"; +import { readInvalidationPathsFromManifest } from "./utils/readInvalidationPathsFromManifest"; export * from "./props"; @@ -35,6 +37,8 @@ export class NextJSLambdaEdge extends cdk.Construct { private imageManifest: OriginRequestImageHandlerManifest | null; + private defaultManifest: OriginRequestDefaultHandlerManifest; + public distribution: cloudfront.Distribution; public bucket: s3.Bucket; @@ -44,6 +48,7 @@ export class NextJSLambdaEdge extends cdk.Construct { this.apiBuildManifest = this.readApiBuildManifest(); this.routesManifest = this.readRoutesManifest(); this.imageManifest = this.readImageBuildManifest(); + this.defaultManifest = this.readDefaultManifest(); this.bucket = new s3.Bucket(this, "PublicAssets", { publicReadAccess: true, @@ -309,12 +314,44 @@ export class NextJSLambdaEdge extends cdk.Construct { } ); - const staticAssets = getAssetDirectoryFileCachePolicies({ - basePath: "", - serverlessBuildOutDir: props.serverlessBuildOutDir + const assetsDirectory = path.join(props.serverlessBuildOutDir, "assets"); + const assets = readAssetsDirectory({ assetsDirectory }); + + // This `BucketDeployment` deploys just the BUILD_ID file. We don't actually + // use the BUILD_ID file at runtime, however in this case we use it as a + // file to allow us to create an invalidation of all the routes as evaluated + // in the function `readInvalidationPathsFromManifest`. + new s3Deploy.BucketDeployment(this, `AssetDeploymentBuildID`, { + destinationBucket: this.bucket, + sources: [ + s3Deploy.Source.asset(assetsDirectory, { exclude: ["**", "!BUILD_ID"] }) + ], + // This will actually cause the file to exist at BUILD_ID, we do this so + // that the prune will only prune /BUILD_ID/*, rather than all files fromm + // the root upwards. + destinationKeyPrefix: "/BUILD_ID", + distribution: this.distribution, + distributionPaths: readInvalidationPathsFromManifest(this.defaultManifest) }); - this.createStaticAssetDeployments(staticAssets); + Object.keys(assets).forEach((key) => { + const { path: assetPath, cacheControl } = assets[key]; + new s3Deploy.BucketDeployment(this, `AssetDeployment_${key}`, { + destinationBucket: this.bucket, + sources: [s3Deploy.Source.asset(assetPath)], + cacheControl: [s3Deploy.CacheControl.fromString(cacheControl)], + + // The source contents will be unzipped to and loaded into the S3 bucket + // at the root '/', we don't want this, we want to maintain the same + // path on S3 as their local path. + destinationKeyPrefix: path.relative(assetsDirectory, assetPath), + + // Source directories are uploaded with `--sync` this means that any + // files that don't exist in the source directory, but do in the S3 + // bucket, will be removed. + prune: true + }); + }); if (props.domain) { new ARecord(this, "AliasRecord", { @@ -325,67 +362,6 @@ export class NextJSLambdaEdge extends cdk.Construct { } } - /** - * Creates 'Deployments' for files in `/assets`, where each deployment has a - * different cache control header. - * - * CDK allows us to create a 'deployment' with a single cache-header config - * but with many files. So we take the out put from - * `getAssetDirectoryFileCachePolicies`, group them by cache-header and pass - * all files to be uploaded within the deployment. - */ - private createStaticAssetDeployments( - staticAssets: ReturnType - ) { - const NO_CACHE = "NO_CACHE"; - const staticAssetsGroupedByCache = staticAssets.reduce( - (groupedAssets, nextStaticAsset) => { - const key = nextStaticAsset.cacheControl || NO_CACHE; - return { - ...groupedAssets, - [key]: [...(groupedAssets[key] || []), nextStaticAsset] - }; - }, - {} as Record - ); - - const assetsPath = path.join(this.props.serverlessBuildOutDir, "assets"); - - Object.keys(staticAssetsGroupedByCache).forEach((cacheKey) => { - const assets = staticAssetsGroupedByCache[cacheKey]; - // We have a unique BucketDeployment per cache-control header, so we - // reformat the cache key to be compatible as a construct ID - const cacheHash = cacheKey.replace(/[^0-9a-z]/gi, ""); - new s3Deploy.BucketDeployment(this, `AssetDeployment${cacheHash}`, { - // Unfortunately we can't rely on `prune` as we have multiple - // distributions from the same source, each with a different behaviour. - // https://docs.aws.amazon.com/cdk/api/latest/docs/aws-s3-deployment-readme.html#prune - prune: false, - destinationBucket: this.bucket, - distribution: this.distribution, - sources: [ - // Slight ergonomic issue with the Asset API that we can't pass an - // array of files, only a single directory. as a work around - // we pass the entire assets directory, but `exclude` all and - // whitelist all the files under the directory that we want to upload - // for this cache-control key. - s3Deploy.Source.asset(assetsPath, { - exclude: [ - "*.*", - ...assets.map((staticAsset) => { - return `!${staticAsset.path.relative}`; - }) - ] - }) - ], - cacheControl: - cacheKey == NO_CACHE - ? [] - : [s3Deploy.CacheControl.fromString(cacheKey)] - }); - }); - } - private pathPattern(pattern: string): string { const { basePath } = this.routesManifest || {}; return basePath && basePath.length > 0 @@ -402,6 +378,15 @@ export class NextJSLambdaEdge extends cdk.Construct { ); } + private readDefaultManifest(): OriginRequestDefaultHandlerManifest { + return fs.readJSONSync( + path.join( + this.props.serverlessBuildOutDir, + "default-lambda/manifest.json" + ) + ); + } + private readApiBuildManifest(): OriginRequestApiHandlerManifest | null { const apiPath = path.join( this.props.serverlessBuildOutDir, diff --git a/packages/serverless-components/nextjs-cdk-construct/src/props.ts b/packages/serverless-components/nextjs-cdk-construct/src/props.ts index 8f67c73136..30523b289d 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/props.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/props.ts @@ -1,5 +1,5 @@ import { ICertificate } from "@aws-cdk/aws-certificatemanager"; -import { Behavior, BehaviorOptions } from "@aws-cdk/aws-cloudfront"; +import { BehaviorOptions } from "@aws-cdk/aws-cloudfront"; import { Runtime } from "@aws-cdk/aws-lambda"; import { IHostedZone } from "@aws-cdk/aws-route53"; import { Duration, StackProps } from "@aws-cdk/core"; diff --git a/packages/serverless-components/nextjs-cdk-construct/src/utils/readAssetsDirectory.ts b/packages/serverless-components/nextjs-cdk-construct/src/utils/readAssetsDirectory.ts new file mode 100644 index 0000000000..dc46cbe8e3 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/src/utils/readAssetsDirectory.ts @@ -0,0 +1,63 @@ +import path from "path"; +import fs from "fs-extra"; + +const IMMUTABLE_CACHE_CONTROL_HEADER = "public, max-age=31536000, immutable"; + +const SERVER_CACHE_CONTROL_HEADER = + "public, max-age=0, s-maxage=2678400, must-revalidate"; + +const DEFAULT_PUBLIC_DIR_CACHE_CONTROL = + "public, max-age=31536000, must-revalidate"; + +type CacheConfig = Record< + string, + { + cacheControl: string; + path: string; + } +>; + +const filterNonExistentPathKeys = (config: CacheConfig) => { + return Object.keys(config).reduce( + (newConfig, nextConfigKey) => ({ + ...newConfig, + ...(fs.pathExistsSync(config[nextConfigKey].path) + ? { [nextConfigKey]: config[nextConfigKey] } + : {}) + }), + {} as CacheConfig + ); +}; + +const readAssetsDirectory = (options: { + assetsDirectory: string; +}): CacheConfig => { + const { assetsDirectory } = options; + const publicFiles = path.join(assetsDirectory, "public"); + const staticFiles = path.join(assetsDirectory, "static"); + const staticPages = path.join(assetsDirectory, "static-pages"); + const nextData = path.join(assetsDirectory, "_next", "data"); + const nextStatic = path.join(assetsDirectory, "_next", "static"); + + return filterNonExistentPathKeys({ + publicFiles: { + path: publicFiles, + cacheControl: DEFAULT_PUBLIC_DIR_CACHE_CONTROL + }, + staticFiles: { + path: staticFiles, + cacheControl: DEFAULT_PUBLIC_DIR_CACHE_CONTROL + }, + staticPages: { + path: staticPages, + cacheControl: SERVER_CACHE_CONTROL_HEADER + }, + nextData: { path: nextData, cacheControl: SERVER_CACHE_CONTROL_HEADER }, + nextStatic: { + path: nextStatic, + cacheControl: IMMUTABLE_CACHE_CONTROL_HEADER + } + }); +}; + +export { readAssetsDirectory }; diff --git a/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts b/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts new file mode 100644 index 0000000000..d6458072d1 --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts @@ -0,0 +1,22 @@ +import * as path from "path"; +import { OriginRequestDefaultHandlerManifest } from "@sls-next/lambda-at-edge"; + +const dynamicPathToInvalidationPath = (dynamicPath: string) => { + const [firstSegment] = dynamicPath.split("/:"); + return path.join(firstSegment, "*"); +}; + +export const readInvalidationPathsFromManifest = ( + manifest: OriginRequestDefaultHandlerManifest +): string[] => { + return [ + ...Object.keys(manifest.pages.html.dynamic).map( + dynamicPathToInvalidationPath + ), + ...Object.keys(manifest.pages.html.nonDynamic), + ...Object.keys(manifest.pages.ssr.dynamic).map( + dynamicPathToInvalidationPath + ), + ...Object.keys(manifest.pages.ssr.nonDynamic) + ]; +}; diff --git a/packages/serverless-components/nextjs-cdk-construct/src/utils.ts b/packages/serverless-components/nextjs-cdk-construct/src/utils/toLambdaOption.ts similarity index 90% rename from packages/serverless-components/nextjs-cdk-construct/src/utils.ts rename to packages/serverless-components/nextjs-cdk-construct/src/utils/toLambdaOption.ts index f2e492b83d..3fa7641f02 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/utils.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/utils/toLambdaOption.ts @@ -1,4 +1,4 @@ -import { LambdaOption } from "./props"; +import { LambdaOption } from "../props"; export const toLambdaOption = ( key: "defaultLambda" | "apiLambda" | "imageLambda", diff --git a/packages/serverless-components/nextjs-cdk-construct/yarn.lock b/packages/serverless-components/nextjs-cdk-construct/yarn.lock index c986c4688b..76d3de345a 100644 --- a/packages/serverless-components/nextjs-cdk-construct/yarn.lock +++ b/packages/serverless-components/nextjs-cdk-construct/yarn.lock @@ -3,483 +3,482 @@ "@aws-cdk/assert@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.86.0.tgz#3faf5cc911d76d50a50a4779c724c1041fb1e866" - integrity sha512-2XXhM8hXQQKB5luFiMae2mtWns1529piawBo9gBa6R79Lwbi2F0qodS7BFaDbyOUD8wNwUX6XDgi8sznIPRtew== - dependencies: - "@aws-cdk/cloud-assembly-schema" "1.86.0" - "@aws-cdk/cloudformation-diff" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/assert/-/assert-1.87.1.tgz#947f56c438e1f125e770c947d828372ee7ccb601" + integrity sha512-X1Cv1LBdkdHQXtgrw8rRSW2PuAmODq1mKUtnGVgyNf0hGGhHvU/N0Y//SG6Rw6iMxA4orj7IKQXUTiGchsqiSQ== + dependencies: + "@aws-cdk/cloud-assembly-schema" "1.87.1" + "@aws-cdk/cloudformation-diff" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" -"@aws-cdk/assets@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.86.0.tgz#bd228239834c69febb4f9a0ec3f7b280e4e03753" - integrity sha512-vF4L0eVLFYrJdGVaptm20Grpc0BDb0XkkO8jzGDpGLA2NIPvwjRVWIRE5SY32++WaJrVE/TZpIdQNgLTKQIhAQ== +"@aws-cdk/assets@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/assets/-/assets-1.87.1.tgz#c3d6fbd24bab54001998895636aa932798d92726" + integrity sha512-JPSJ+/Ofu6gLq/mHM8nV8LYqdHmXPVv46M1yOniY5i/s+hWHTBS4gPxZ/F69dVvfVlV2ibLsd1bXRvuLH2Zsfw== dependencies: - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-apigateway@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigateway/-/aws-apigateway-1.86.0.tgz#bdfa708238a95a57579afaf7464d2eb99ed8e7ad" - integrity sha512-krxclhRjIsL+4iJKBI544aqvnUWcyRkUFxPn1pw/1akSPspRtLetvcdLyZ0DOqr61WiGYWcfpiW2ygen0ROEPg== - dependencies: - "@aws-cdk/assets" "1.86.0" - "@aws-cdk/aws-certificatemanager" "1.86.0" - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/aws-logs" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/aws-s3-assets" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" +"@aws-cdk/aws-apigateway@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigateway/-/aws-apigateway-1.87.1.tgz#1c174c9380b444f219babb98185f515c8a7384aa" + integrity sha512-QKhfBxxDEQNgiwv3JVckvrvJj+TPBfeuN/sCSM769EHMZZmyxYa4Ln6te1cKpcNv1aSxUeqBb45YsgiUJn8wOg== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.87.1" + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-elasticloadbalancingv2" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/aws-logs" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/aws-s3-assets" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-apigatewayv2@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.86.0.tgz#661ca18487730db36bdaaf03da8dc43e90c33315" - integrity sha512-DATgKAdZS2P/yHWm4AoDAzEIaNEz0yrEv7e1GmEGCxawRrbsWhP/7TAm/CvLjbaq726XnyBTL9TEJaQWU9L6Cg== +"@aws-cdk/aws-apigatewayv2@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-apigatewayv2/-/aws-apigatewayv2-1.87.1.tgz#a8b6f0f9fd42d0e0d57d2bac4950422eae9de928" + integrity sha512-/RHcoOojeTDm2d8cDOi+t9Co27MGW82J624IIwNgfAIMpyLMiFHjcZNnpHY7hEjlQf5PnTP4lMcZYAvWS0mFfA== dependencies: - "@aws-cdk/aws-certificatemanager" "1.86.0" - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-certificatemanager" "1.87.1" + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-applicationautoscaling@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.86.0.tgz#a96649e50bb40d04c5df83ed3c7e1ec3e583002a" - integrity sha512-YenaOnE8dAA0Rz6H+LOoPgnINkPIbuBbJx4i7QUKh+BOPbKMjIaCp8zM1N3Q+AYECaWK/kB9mwEQmkPdp6jaEQ== +"@aws-cdk/aws-applicationautoscaling@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-applicationautoscaling/-/aws-applicationautoscaling-1.87.1.tgz#43d476b384d790ad0a5f227675dcfc6998ff47c1" + integrity sha512-HqYMHYHDzGmYMR6yevHIjQlBzYPUy+kgfp43WsVn/uJQNirIlfGt+Qi9Q0pMnQqTNlwncKgYlI+IqRDeNtfNBg== dependencies: - "@aws-cdk/aws-autoscaling-common" "1.86.0" - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-autoscaling-common" "1.87.1" + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-autoscaling-common@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.86.0.tgz#ea71b9177ffd1ee7b61e3843342e6c4b84848801" - integrity sha512-IEclDXJG34XFbadAJM6JyMGrbO6asl188aY81cpiR16qdqly1FVHxbGVLp2qlKejxaCW3WxxDsiAlSnFN3FfdQ== +"@aws-cdk/aws-autoscaling-common@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-autoscaling-common/-/aws-autoscaling-common-1.87.1.tgz#650d17d3e335f47d690db87ef5e99469fe099bff" + integrity sha512-O9pHrIMtb64tFWPLUnSoatNA9RUwr4+vm6GcpJ0uWs1igkNtKn/lQg0etOVStQa01VQIF+Zs5n4Xo0QOXUQrZg== dependencies: - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-certificatemanager@1.86.0", "@aws-cdk/aws-certificatemanager@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.86.0.tgz#27256837a0a49aa878224f17193f4e080f77594b" - integrity sha512-fXuQSreEsxTQXYc++4/LoPeOcRlmjvBiqmVzC80xS5AvKRf4uaXKhrgppkUv1DGsuq3LcFRFoz4qpOBcTexy8g== +"@aws-cdk/aws-certificatemanager@1.87.1", "@aws-cdk/aws-certificatemanager@^1.75.0": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-certificatemanager/-/aws-certificatemanager-1.87.1.tgz#70b962a25b312ff713954d13ce7932e62da3b29f" + integrity sha512-MD2tPosafkR2M/PjdwB+elkIUYNg3um8WLKhmv1OvXYPYRQi+/P0AH8DnjNY5bZWL0a3br1C0s5jPXEIHiGaMg== dependencies: - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/aws-route53" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/aws-route53" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-cloudformation@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.86.0.tgz#ba322b38992f926b89ef9271efcf8fd81a5492e5" - integrity sha512-VbV9LuYq/ecgHQF9T6VqZfRlA6nY/FDwhM1qo1meG/+2Noyy3kimQ+J8LZPNkOk8R1gusgD16U8xLsjxZaYvmg== - dependencies: - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/aws-sns" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" +"@aws-cdk/aws-cloudformation@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudformation/-/aws-cloudformation-1.87.1.tgz#e2a0a6d90db00781bdc67a188def4b1583cbe509" + integrity sha512-cN3MmAj7rf1btSanY3RArxYZH0eBhB5uQOWTsrre6CoKuS3qoiyn73lBB1JhTwz8t49tIFGLudIkI1fYdDNjlg== + dependencies: + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/aws-sns" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" "@aws-cdk/aws-cloudfront-origins@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront-origins/-/aws-cloudfront-origins-1.86.0.tgz#ea34e9cef45bdfdb7f52ce845ea29fccd4553d72" - integrity sha512-ph0e/vky8MP/dNzd6R8KMLBuSLx3sKtxDea8xxcDuHoRFx4cx72/PTQMAvV6vvhK1yAHxsnDoJHeZNo2mbhghQ== - dependencies: - "@aws-cdk/aws-cloudfront" "1.86.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/core" "1.86.0" + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront-origins/-/aws-cloudfront-origins-1.87.1.tgz#07b792e674a58188f04c2c36cb4e2c9e79edd4be" + integrity sha512-fCObnePlt66paLFYPefNZWgLlUPlr3NuxtSyAlMML6xZzBe1fJVfWDzd5lC5DOcVHGsPs9wzq8ObwgVIe6YvxQ== + dependencies: + "@aws-cdk/aws-cloudfront" "1.87.1" + "@aws-cdk/aws-elasticloadbalancingv2" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-cloudfront@1.86.0", "@aws-cdk/aws-cloudfront@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.86.0.tgz#84bb3102752de21124730279eca768b8fe4b9593" - integrity sha512-G0n1vDFuXGZ4MskK1XFE8PWMfXxuXlH+8/Jz68hxSja6WuAU7wXb2Z6jFw57Em2FGs6Y6d0tpaQDI7GtmqDhtg== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.86.0" - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/aws-ssm" "1.86.0" - "@aws-cdk/core" "1.86.0" +"@aws-cdk/aws-cloudfront@1.87.1", "@aws-cdk/aws-cloudfront@^1.75.0": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudfront/-/aws-cloudfront-1.87.1.tgz#31079797a790d1df0daca4f2d6e82f6cbbc184e6" + integrity sha512-snwBt1jus7+cpy+Kiiy7hVmbHkef6Oxaqz98OiLoPM3WHHGSO/VX5BHeRRRlbzPisHas/EscWUr6kh/G0Njttw== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.87.1" + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/aws-ssm" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-cloudwatch@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.86.0.tgz#47c246c649557bf6ad959274fac4157d848251b8" - integrity sha512-3kPfiArb3QgD3BYu+6xcP/vo0c7PP4HFMSO+0apobwgBg0PHnzw4HL9lQY3K8rBrT1yRoaf/R7MeMdoCdyfCVA== +"@aws-cdk/aws-cloudwatch@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cloudwatch/-/aws-cloudwatch-1.87.1.tgz#6b4fe829ebdf257439e4798fe62fb23f65c9bd38" + integrity sha512-/d4cS5/99bQ5WNzFvPv9ap2trnj6Hb94n/vveICA23oaM1oE4kx9SnMT8EmftVEVfMp/oYXGVyZKBsN4ZdDh7g== dependencies: - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-codeguruprofiler@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.86.0.tgz#db47ab9364aaef0e927a181fe796390eab4e1c64" - integrity sha512-+52oNB7jBeAD+RKhF47Q5eadeUm+K2KJRZGzrsNX8g6tC46aoYnAFTaPFmsUzh/zq8c0TpWiPLOpTfGgGop9Qw== +"@aws-cdk/aws-codeguruprofiler@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-codeguruprofiler/-/aws-codeguruprofiler-1.87.1.tgz#8d634f800752ff4c4d5ab612d25ea45580f53aa9" + integrity sha512-38LuPRmB1J+NQ5ijA0/vGYJA07kVkWkZzKzWhIsKjWHAfCrumVQ36yWRQrZT3a+EhC61NtB/lO9au8sy6c3o3A== dependencies: - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-cognito@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.86.0.tgz#5239e2c9ca368c69621100712921042dff328f40" - integrity sha512-x781zqLKkJgdEBn6sIngAMdSkzJjKF43H65sUipZlWMG+nkxt44z0QTon4en/FJoIcuSm1hzHFk3mEFG/O9FGw== +"@aws-cdk/aws-cognito@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-cognito/-/aws-cognito-1.87.1.tgz#f27e26937878818457594e3b0c23783abeb399f0" + integrity sha512-f9YBkDu8VdAsyKKlyfu4pRT3zX0pI10nffzYRR1lRXj41PGgXdJacJRm8Ng8jxlHTiK0Uum0Rg5QUvEYOxX5xQ== dependencies: - "@aws-cdk/aws-certificatemanager" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/custom-resources" "1.86.0" + "@aws-cdk/aws-certificatemanager" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/custom-resources" "1.87.1" constructs "^3.2.0" punycode "^2.1.1" -"@aws-cdk/aws-ec2@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.86.0.tgz#f7927f18e2852760ffb7d3c6ddd86b88b90e8361" - integrity sha512-HHrdbp6/htQeNBAhEy0Swm3Zd0gQp+lxzr2Y6yl+Lql5zfCA64Dh1jR9/NXDVQuK5aXkJUmCwCa0GLxeTEwduQ== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/aws-logs" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/aws-s3-assets" "1.86.0" - "@aws-cdk/aws-ssm" "1.86.0" - "@aws-cdk/cloud-assembly-schema" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" - "@aws-cdk/region-info" "1.86.0" +"@aws-cdk/aws-ec2@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ec2/-/aws-ec2-1.87.1.tgz#2f2fc0ceff92918e37d50806afed3bdb616779de" + integrity sha512-HGIbxH3kwhtQiA+bCR0Pjfx1u3siNotRwPeakOeWtVsSB0mbcPHIpYDL8pHyILcSEjw6gLshP6GLmZJJOQ7cHg== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/aws-logs" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/aws-s3-assets" "1.87.1" + "@aws-cdk/aws-ssm" "1.87.1" + "@aws-cdk/cloud-assembly-schema" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" + "@aws-cdk/region-info" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-ecr-assets@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.86.0.tgz#b90229de3bacce858d5fbc85ce6de20c845ca6fe" - integrity sha512-fP4esO4QiHh+bSD6AJzmBBw7SJhSBYAsXIxeRBmWeAjPiJumWW++xiNwFymF+S1U44+xAEPfRPlx1s6CGhQp8g== - dependencies: - "@aws-cdk/assets" "1.86.0" - "@aws-cdk/aws-ecr" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" +"@aws-cdk/aws-ecr-assets@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr-assets/-/aws-ecr-assets-1.87.1.tgz#2dc645058ec5286ca5be974f2e4fff73a82a6f8c" + integrity sha512-+EdHkmJcddi4BtOjfaB01zwOJMXI1ZWM/N0y5uHm/EgGckVXbcSMS3lDDBASx/fY6vWblkABG6d+46vXmV9tAg== + dependencies: + "@aws-cdk/assets" "1.87.1" + "@aws-cdk/aws-ecr" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" minimatch "^3.0.4" -"@aws-cdk/aws-ecr@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.86.0.tgz#8ec38d16c608d111a199c2ae1ec3f4b4cd50c3ef" - integrity sha512-g6WkLzJ4RM0XEYs/CRaVB8vaBFKRVD7VfrMLO9VOtDo8RAX9uokp4d+bFhtw+Ez6lgKdUdFrdGjV+KnkosfwBA== +"@aws-cdk/aws-ecr@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ecr/-/aws-ecr-1.87.1.tgz#7ec21cc74e9564f03bd1c2e415a77c0b0bf890cc" + integrity sha512-xFCVBoyvBsLKLudOkY4V8T3LDW8OGm/AKElgVar7OtmD75jjd8Y3QKAas+L27ONauPJ78ECyxcd2nzXRBigX7g== dependencies: - "@aws-cdk/aws-events" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-events" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-efs@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.86.0.tgz#e85caa1660a00e7ccfcf8db905f534ade14e18d0" - integrity sha512-32DjWMpwE9TJMF2RWP72yDefHlQ5umWSa/bT5THGWKleuh8j/GJ6oYpskEdP7bzrTAYCJ05v7pSY5mCBrZL7gw== +"@aws-cdk/aws-efs@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-efs/-/aws-efs-1.87.1.tgz#af3aa7d29ae35fea3337ea2ca462c22d752931c9" + integrity sha512-RQq3qnSMsLJrFzUECBgpCDgOxPPe/6XLFtNDL749UUqpbRDHqcJQqSs0a1ecWLxQUafJ1bd/DCiIJ7SvRXJ+2A== dependencies: - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/cloud-assembly-schema" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/cloud-assembly-schema" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-elasticloadbalancing@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.86.0.tgz#ae2782e14011f32f6f57a2f2f955281b71e3a42a" - integrity sha512-QnA0Oenz3/s1p4MI83Tl2RPmbB9iowupe4APMfHR8VyeX+A4xLnL06PqdHbjc64Sb+FJM3lx9b4chzzmW5YuYQ== +"@aws-cdk/aws-elasticloadbalancing@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancing/-/aws-elasticloadbalancing-1.87.1.tgz#09b03f6d4326b633289faaa5f0581f583a584f8f" + integrity sha512-UtWmJk3S5ciiou8KWdXTrM+Q3NhpZwMDlFhecdqc36+EZk1c+qFjaUwl1TRqhoYykY3ksfiewiqYRQ3tasnqWA== dependencies: - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-elasticloadbalancingv2@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.86.0.tgz#763ddcbd7b3f386ee2fc61b34404361421fd02b9" - integrity sha512-jGZWjYAluj9/17m8TG8GwpD69UH1Dd0ShsvtwLgT6o6vauJktyiVBrPSWxFn5j00rj0qFO4gynyj2bnx7mf19A== - dependencies: - "@aws-cdk/aws-certificatemanager" "1.86.0" - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/cloud-assembly-schema" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" - "@aws-cdk/region-info" "1.86.0" +"@aws-cdk/aws-elasticloadbalancingv2@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-elasticloadbalancingv2/-/aws-elasticloadbalancingv2-1.87.1.tgz#edad05188e40b5954df6f958d2482a648ca11a2a" + integrity sha512-AaoChHUrb1/NtPN8oJXTkxvttvefewF3TNCAb7L5BZuCdfIesC9Pi+NVqjR3uDTezSZLccemDO8d01dDagTqBA== + dependencies: + "@aws-cdk/aws-certificatemanager" "1.87.1" + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/cloud-assembly-schema" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" + "@aws-cdk/region-info" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-events@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.86.0.tgz#1e19d49c8d2f16aaa74a85d8c6a359fe9cc71a47" - integrity sha512-oycdFqVr/LndoFOsXdHllToBqt/ylsYRmTNWIz0BB2NQ5n+0iMGklTePmL1VDy931jkPjqE/ZTL3Q67NkBgdFg== +"@aws-cdk/aws-events@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-events/-/aws-events-1.87.1.tgz#7016acdf7a3f9a42fd28604752765208bbe2c93a" + integrity sha512-P2IJtCwX0tM7iz6YApK7iAWboPrbUmlzB7fnEbmhZ183TzWXZdFFOCn/ONHl9VDcAvqr2BfaCC+yi1fKVx+Kjg== dependencies: - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-iam@1.86.0", "@aws-cdk/aws-iam@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.86.0.tgz#aaa24cd87af5f9fc21565052e7048445f0539dc1" - integrity sha512-eGd4kx9ZvQPze5iJQa+n3PlOFb42pUz9nCpJGNr+st7eK9CP6lDllrGq3MBTx5fAxswFkY+gE7MDlDymHIGmTg== +"@aws-cdk/aws-iam@1.87.1", "@aws-cdk/aws-iam@^1.75.0": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-iam/-/aws-iam-1.87.1.tgz#80d1d32c1e094cf964acddd7c2dbef27f9bb0657" + integrity sha512-wA0wdyQ3tgR/4db26gJF1STY5uzbo80OwK4RRnFAB0/vc26NlEg8cfuQUl8Ekuw+IzwFmsk8MP0t1yzBTZd+BA== dependencies: - "@aws-cdk/core" "1.86.0" - "@aws-cdk/region-info" "1.86.0" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/region-info" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-kms@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.86.0.tgz#bd922853213dbef83ae254037a9ff8c42be0d16b" - integrity sha512-wuXQ2ZuQGuMI57cv+Nfo9rBZ0bQ6kzqAk4NAiHDK7md1/Afmz6X1m4laPMuLfR5xqeYM3HrY8FNR2NuTu/OZOg== +"@aws-cdk/aws-kms@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-kms/-/aws-kms-1.87.1.tgz#2702e9ac508e7d10bfac2e8e4f84701e65f3eb4c" + integrity sha512-mB7QRW43bCdITPqp2LOH/fd7bxZ6d1Xs3Mqkk8MifOqlWde6icTRVvvMSMdu46QYsh1fuD0eOJFj0OLHAhal8Q== dependencies: - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-lambda@1.86.0", "@aws-cdk/aws-lambda@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.86.0.tgz#000f4ab62f54b806c253bd94d8b4431764b5d5cb" - integrity sha512-e1kIUUWLU9nZd15efuCJZI49/BIIsNaltpdeIKbfEuSOSkbUCW337mxF2LKKhoBL/WFyGuXy6pFu/bnnW2xd8g== - dependencies: - "@aws-cdk/aws-applicationautoscaling" "1.86.0" - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-codeguruprofiler" "1.86.0" - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-ecr" "1.86.0" - "@aws-cdk/aws-ecr-assets" "1.86.0" - "@aws-cdk/aws-efs" "1.86.0" - "@aws-cdk/aws-events" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/aws-logs" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/aws-s3-assets" "1.86.0" - "@aws-cdk/aws-sqs" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" +"@aws-cdk/aws-lambda@1.87.1", "@aws-cdk/aws-lambda@^1.75.0": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-lambda/-/aws-lambda-1.87.1.tgz#4637c7e14a77f110026ae2f40a54d40fcfcfe38b" + integrity sha512-i7KK+t6o9WhdbP6Tmb+KKcCMMPLUnJ2xxFMLARzznSH926Pv+nZ7R8EaznI9sBK8xRifYUMtCGy5hoOMNAiJdQ== + dependencies: + "@aws-cdk/aws-applicationautoscaling" "1.87.1" + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-codeguruprofiler" "1.87.1" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-ecr" "1.87.1" + "@aws-cdk/aws-ecr-assets" "1.87.1" + "@aws-cdk/aws-efs" "1.87.1" + "@aws-cdk/aws-events" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/aws-logs" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/aws-s3-assets" "1.87.1" + "@aws-cdk/aws-sqs" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-logs@1.86.0", "@aws-cdk/aws-logs@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.86.0.tgz#e289bc134f9591393227b70c4a5379503da98ae1" - integrity sha512-IXLUSvco7KAp2dmWd7SEONxhYzGI05j76iLIkcf7JrELSy1bHU4vatpFJajc4a6XY3GPc24fRn+CgMh6O+rexQ== +"@aws-cdk/aws-logs@1.87.1", "@aws-cdk/aws-logs@^1.75.0": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-logs/-/aws-logs-1.87.1.tgz#6a89248a132e60fa1a84df80ce9778643fc40e48" + integrity sha512-UqJWpKrGULPoGDfERfk2VUj8QjVUhrNern2zsJ3NOlQWlAu9DgVNPubyfOwPbL37ScbeduPzhu9atJVB72qUKA== dependencies: - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/aws-s3-assets" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/aws-s3-assets" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" "@aws-cdk/aws-route53-targets@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.86.0.tgz#f83143cf0193a3073a1e555c136e783837610959" - integrity sha512-+N+Wqm+AsKHuoPQC64LNGF8dugqBEdxxPSjJOfiAP/AezBL6GjSUp3TtZRmo4aRFix1rC0olSBBIuVAkX3Abgw== - dependencies: - "@aws-cdk/aws-apigateway" "1.86.0" - "@aws-cdk/aws-apigatewayv2" "1.86.0" - "@aws-cdk/aws-cloudfront" "1.86.0" - "@aws-cdk/aws-cognito" "1.86.0" - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-elasticloadbalancing" "1.86.0" - "@aws-cdk/aws-elasticloadbalancingv2" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-route53" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/region-info" "1.86.0" + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53-targets/-/aws-route53-targets-1.87.1.tgz#de7cb3747891bfbc227b016d3e61d0e8f87f06a3" + integrity sha512-uYwUh6A3LPko7yIwo3ARzB4aJFQlLY5ppT7N3ZCFvV8fLF3YZZv1vOdRYyT52xMM0RaftAf3dt2gwxg7Cvr12Q== + dependencies: + "@aws-cdk/aws-apigateway" "1.87.1" + "@aws-cdk/aws-apigatewayv2" "1.87.1" + "@aws-cdk/aws-cloudfront" "1.87.1" + "@aws-cdk/aws-cognito" "1.87.1" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-elasticloadbalancing" "1.87.1" + "@aws-cdk/aws-elasticloadbalancingv2" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-route53" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/region-info" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-route53@1.86.0", "@aws-cdk/aws-route53@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.86.0.tgz#6049b17b4074ec97fad8ed7df8ee30560fd79c23" - integrity sha512-5nMfZDkvjLs2sYoFD6dtWbHB/2RJP4BKF0TPWeef+CdcRXsZsUxj6od0AauE+Zf126XuJ/RbciMtm8V/EychvQ== +"@aws-cdk/aws-route53@1.87.1", "@aws-cdk/aws-route53@^1.75.0": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-route53/-/aws-route53-1.87.1.tgz#d0e22f619878119ebe9384181f01e97cf413d231" + integrity sha512-dYyYbExXfZ4LsGMRKKaQMBBnEfgiviDISMq9nH8q5XzsGSthQJdy9k9lehePPUlyo99B1wWSXvMjL66kouuulA== dependencies: - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-logs" "1.86.0" - "@aws-cdk/cloud-assembly-schema" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/custom-resources" "1.86.0" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-logs" "1.87.1" + "@aws-cdk/cloud-assembly-schema" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/custom-resources" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-s3-assets@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.86.0.tgz#78e37255e3c6a29abb1cd9527550bd90f840366a" - integrity sha512-X8EcNasUKzMeX52TSVBwDpPrUL6Blp8fAG2AAl/16cR9JfeBtd8OA1VQ1rc7FQgPpWLAsmmzLP7ZthDlVUy5FQ== - dependencies: - "@aws-cdk/assets" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" +"@aws-cdk/aws-s3-assets@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-assets/-/aws-s3-assets-1.87.1.tgz#a2f24499ab7ab93e78b9dc18dde3f2df396d17e2" + integrity sha512-t8EwLiLwbfEATG0jucX9LjCo0D+QbPmswLBMaVEeNb3BXdqv+WOhprl/7cR8IZlQZE/saMIFl0zUXBqzqOJUJA== + dependencies: + "@aws-cdk/assets" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" "@aws-cdk/aws-s3-deployment@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-deployment/-/aws-s3-deployment-1.86.0.tgz#5a417bbafff9ece5b61a576d59de184777a21aba" - integrity sha512-JnPXKyqyI2pzqbKAA1ELkph9fsJ82BKw+amOuvEDOC2DrEeEfTcmcoGBgCmGSAKtDCP+ihKof6J9xY7l5W/60Q== - dependencies: - "@aws-cdk/aws-cloudfront" "1.86.0" - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/aws-s3" "1.86.0" - "@aws-cdk/aws-s3-assets" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/lambda-layer-awscli" "1.86.0" + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3-deployment/-/aws-s3-deployment-1.87.1.tgz#d0bf09d41dba8545e69bdd6e5c6533d2a3bc7c03" + integrity sha512-YiUuZoEhBxy/fwtD76KpAFj40O1IMUfnx5c4EBQvF99BqZs0vL6UzOwiUROO2RFuvJs6ulKSSb1xNJfn2k1aNA== + dependencies: + "@aws-cdk/aws-cloudfront" "1.87.1" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/aws-s3" "1.87.1" + "@aws-cdk/aws-s3-assets" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/lambda-layer-awscli" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-s3@1.86.0", "@aws-cdk/aws-s3@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.86.0.tgz#0f0fdd7d8c893882c8348092815b33c4ad9acde0" - integrity sha512-4Rk3ohJwrKQ49L53Zk2eby9AEzkf6ljrs12y479ece+tMEzrve9Qu3PXiTQaGFf60eRm/8l/hm7AWYDc7BXhwg== +"@aws-cdk/aws-s3@1.87.1", "@aws-cdk/aws-s3@^1.75.0": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-s3/-/aws-s3-1.87.1.tgz#f3cc4e71be1772001a1e27f81bc4e8cbf309ef11" + integrity sha512-ooNf3Afw5upEpickbqu7vflhXnY0CMdiTwuD3ko7u5KghU1TXzmtQAtuZZ/7GlDJR3HrvXULPte3WMKlJoGJDg== dependencies: - "@aws-cdk/aws-events" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/core" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" + "@aws-cdk/aws-events" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/core" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-sns@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.86.0.tgz#0eb6b48b617f753a53a1e3b70dc62c66255771c3" - integrity sha512-2LnH3iEAw2hDZwyegi+gHW8tqng/U2Ldb6wjCkntyuaD3IABC1etrttgGV0z86dKMNUATdsqXgv45hQwR2M9ag== - dependencies: - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-events" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/aws-sqs" "1.86.0" - "@aws-cdk/core" "1.86.0" +"@aws-cdk/aws-sns@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sns/-/aws-sns-1.87.1.tgz#f0b25b5fb02b86568f7ecd3225e9357ed67d2cc5" + integrity sha512-4IXantX2x63ZryU7x5uvtdUmn5qPMGKm3QKxXRkYZ12aipwLE22bwhU7XFdgAfLiSCcSsXNjV4PgNYI+oXSWzw== + dependencies: + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-events" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/aws-sqs" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-sqs@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.86.0.tgz#9d096f1f42d0214117e89b57d6e49bf82da0cfa3" - integrity sha512-rYuRDiq75DvB3BhRBAi1T9eGj2HYHpUt2yvTLV3Cvye/OcVEFAIvnl3LEyKrJuyqgWa0DWq8toj8gG2h96ytxw== +"@aws-cdk/aws-sqs@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-sqs/-/aws-sqs-1.87.1.tgz#722e268e501a47b78cfb448661f81389839d7b00" + integrity sha512-PCoToe/Q5ghzkfUm39RsifdcGD8cGGaMx3wptMIxIGeKqxeotGH6uihXFHHm6SPU7U+T6UCPL3SM2IrEFe6aBw== dependencies: - "@aws-cdk/aws-cloudwatch" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-cloudwatch" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/aws-ssm@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.86.0.tgz#ec33bc6de5337f4f76aac921f29849d341594be6" - integrity sha512-8PFzkDXrdJ4AK7qDxkv3qjQZX+B4ldEMHx2ArcWYNh7gPGOOtg8VJajLY5w68MCvbtst8UnS7AP2PEk8cPj2xA== +"@aws-cdk/aws-ssm@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/aws-ssm/-/aws-ssm-1.87.1.tgz#ea962154334c9112bf8768165d6844b210f459ca" + integrity sha512-uQEBX6/yYVxKB8nDYe3bTnUDg6ACqZdFnn4gZFNL8hPtZnIRsOFkJefiV2l1DxXxHv3hupSaZZLo92H5xWoNiQ== dependencies: - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-kms" "1.86.0" - "@aws-cdk/cloud-assembly-schema" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-kms" "1.87.1" + "@aws-cdk/cloud-assembly-schema" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/cfnspec@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.86.0.tgz#d388179f4fee239a37c50a17d8adb6c7a24fc082" - integrity sha512-lILSMiaUT/rHxOFnAAxmZVrBo6i8b3Oqs50k1+nAcoOSmfXTKMR/8O7IFbzHqJgLJEiOIEXtlg6mC7qf+14TWA== +"@aws-cdk/cfnspec@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/cfnspec/-/cfnspec-1.87.1.tgz#86b26be37e00dde11187ae4ce7f8131f3906e018" + integrity sha512-7bD49ah8+2TT1/Jl/DF5YcSqXMn6qL6JMs+edmC2nx6drkXdmtKIT4K4uk7m81bljSreIgyuk1OoXASXoJ9VWw== dependencies: md5 "^2.3.0" -"@aws-cdk/cloud-assembly-schema@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.86.0.tgz#9bdba964c2d0d2264876f96f540d09c6fcd1c3ff" - integrity sha512-3EKvoirgB+2dIX83Pdbi0QUh0JJuYkIssB+KnnCncRZDTl4NU1mlzJtAbZACPJjI7NCJOAxuAS/h+m5LulIqIQ== +"@aws-cdk/cloud-assembly-schema@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloud-assembly-schema/-/cloud-assembly-schema-1.87.1.tgz#9936941c0659781e42ca6fb9903e206db776dcea" + integrity sha512-v9OIifMbExngoJnKxQw7Fbnl3ykUPbTjoIkP52RrCP5QoD3fSdbZ6jQKTXIMzmgRf3RIolXWIzEZD8hKeE4GKg== dependencies: jsonschema "^1.4.0" semver "^7.3.2" -"@aws-cdk/cloudformation-diff@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.86.0.tgz#67065e4b9eaf1957cdc3b81577fc2c6ffbde5535" - integrity sha512-3Vc93PYBz9aXy7Y/PFd78F62n6k7mt84kKQniHIKyb+LvIKwvGUGLu7cemjySQqzKGFH+wWS13SG39YhbDyyQQ== +"@aws-cdk/cloudformation-diff@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/cloudformation-diff/-/cloudformation-diff-1.87.1.tgz#7078048e06672b56c97150d47989e0ce3dc485bc" + integrity sha512-qWuitGav73o4HX3ZaiE3jwG+x8FOJxZsYIZc7y0mXurDQQ/8TY/c10eemTyIGXRAfSNRcUJIfIkLrt051fV1zQ== dependencies: - "@aws-cdk/cfnspec" "1.86.0" + "@aws-cdk/cfnspec" "1.87.1" colors "^1.4.0" diff "^5.0.0" fast-deep-equal "^3.1.3" string-width "^4.2.0" table "^6.0.7" -"@aws-cdk/core@1.86.0", "@aws-cdk/core@^1.75.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.86.0.tgz#b510fd60d30cfae68fd28593cf102de5f63c6f78" - integrity sha512-3wdvXta/XU2nKVxpr3rFJ0gKAVfiLuNp7nrarh/nyC+sS2ZtOLNOuHG8Zg0Adpzzb4YWqXknz60KLhSDVAAMsQ== +"@aws-cdk/core@1.87.1", "@aws-cdk/core@^1.75.0": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/core/-/core-1.87.1.tgz#8b686b014edcfc117e06e2c9e03cefe3171c19ca" + integrity sha512-zfXl5AjRGxfXU23HfTxuxW+NNm9cLMy/NguLF6/prRGv9TBWHH5GTwNafMLbT3FyFjedL7IWVl9Af1XlMli4AA== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.86.0" - "@aws-cdk/cx-api" "1.86.0" - "@aws-cdk/region-info" "1.86.0" + "@aws-cdk/cloud-assembly-schema" "1.87.1" + "@aws-cdk/cx-api" "1.87.1" + "@aws-cdk/region-info" "1.87.1" "@balena/dockerignore" "^1.0.2" constructs "^3.2.0" - fs-extra "^9.0.1" + fs-extra "^9.1.0" ignore "^5.1.8" minimatch "^3.0.4" -"@aws-cdk/custom-resources@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.86.0.tgz#aef83e4fe1e9f922e1d222b9f4bafc9e92bb80ed" - integrity sha512-AUq4WN2mVtQLWWDtE4aYXW537qHBQcRp+9ULz9PW9L1fWfncKHjCksRfZ5nYS3QZQNJKl/1XMFV4kitZPUDdag== - dependencies: - "@aws-cdk/aws-cloudformation" "1.86.0" - "@aws-cdk/aws-ec2" "1.86.0" - "@aws-cdk/aws-iam" "1.86.0" - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/aws-logs" "1.86.0" - "@aws-cdk/aws-sns" "1.86.0" - "@aws-cdk/core" "1.86.0" +"@aws-cdk/custom-resources@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/custom-resources/-/custom-resources-1.87.1.tgz#8520cf75d766b7dc2c249b3dd173414833d315b2" + integrity sha512-D0Esq65dCzYrlaCt459ZkPalK9xta1C5HZ6OJt72x2GOMo4xfPrSTeAKp+XT5hX8T4VV40+uIL0maHRBEN+6Nw== + dependencies: + "@aws-cdk/aws-cloudformation" "1.87.1" + "@aws-cdk/aws-ec2" "1.87.1" + "@aws-cdk/aws-iam" "1.87.1" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/aws-logs" "1.87.1" + "@aws-cdk/aws-sns" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/cx-api@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.86.0.tgz#b53d479dba02c7d72abbc43777c2f8a151145bbd" - integrity sha512-wxPf1VHwl+joIdZ/KPdUnphZ8VWpL9BuzXGv6ZZXKACsSOh71AD0Hs4XQpFB9akNgadbZfESuUOOKNygt8B8KA== +"@aws-cdk/cx-api@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/cx-api/-/cx-api-1.87.1.tgz#27be6f760332849149941af072f43809bd941b95" + integrity sha512-yZeo1rw/DUaw0EKwTq4VptWSNHZHgN+2fTFcbcSWdkNYC+yfXQ1FMAMkJKXDR1ZZsrB8M4f45HsM7LEoTPfZjQ== dependencies: - "@aws-cdk/cloud-assembly-schema" "1.86.0" + "@aws-cdk/cloud-assembly-schema" "1.87.1" semver "^7.3.2" -"@aws-cdk/lambda-layer-awscli@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.86.0.tgz#5ca3914fda94b05a40f554870e622f3c422904b8" - integrity sha512-JeCGKLvYQ65YkAVYN43nqnWbX05iNOZ3MI8MiKL8lQg5FFTlI8IfdCOatkCQP8wT5Pgm6WcNKaZJZvzCm1tW1g== +"@aws-cdk/lambda-layer-awscli@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/lambda-layer-awscli/-/lambda-layer-awscli-1.87.1.tgz#a05c79874af919162e74fd43381f28c48fa3cda7" + integrity sha512-johSMuUYlFIxRumpY0KFTcu3xb4r5R+0oIqPQxD9lahnqPlrkji50SY9Y7A7e3/4Lr0qyRfKZB3Zyw8cQH6WJA== dependencies: - "@aws-cdk/aws-lambda" "1.86.0" - "@aws-cdk/core" "1.86.0" + "@aws-cdk/aws-lambda" "1.87.1" + "@aws-cdk/core" "1.87.1" constructs "^3.2.0" -"@aws-cdk/region-info@1.86.0": - version "1.86.0" - resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.86.0.tgz#d5bff6718180e769d6b505efe81875ef9ec2d28d" - integrity sha512-enKCy9FJSOkySR1ouev6+cXmGFHHc0rkImtr4xESIlfGK17FsdUvBKp7+oW067Q57NXqP4J0jovX57TXMu/v3Q== +"@aws-cdk/region-info@1.87.1": + version "1.87.1" + resolved "https://registry.yarnpkg.com/@aws-cdk/region-info/-/region-info-1.87.1.tgz#7a290e809c8cefc0d2573de70518603725ca6dd7" + integrity sha512-ZqDWZTtGNOx8SWtWsXM/CIMEzkkz2e3sC/UjIm8G1lS39rk/16IuNZR+YKilSdovzSQKiVBWxHXCuNFD3jikdA== "@aws-crypto/crc32@^1.0.0": version "1.0.0" @@ -996,9 +995,9 @@ integrity sha512-pKKR2SXG8IHbWcmVgFwLUrHqqqFOEuf5JiQmP7dEBjUXqavzDnqFUY7g9PGuM8928IQqL7IXrRsK7R+VbLgodQ== "@aws-sdk/types@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.1.0.tgz#04d77c37a80b422e8123f296338d129e51f3e1fc" - integrity sha512-4Az7cemXCN4Qp8EheNkZTJJqIG0dvCT2KAreJLoclcVTcEFw2rzlATUnSeia1YTRsVd6aNxD001Ug7f3vYcQkw== + version "3.4.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.4.0.tgz#614327d882e7de8db0338de7fc1a139908aead59" + integrity sha512-IXXnTujY2NtC/5vCz7+6Ks7uG+0FS+G4jggta6t4Yj/HWZleQe81wvix6NV1PGKiMMHYVu/yYgVGUs/2sq6ztw== "@aws-sdk/url-parser-browser@1.0.0-rc.3": version "1.0.0-rc.3" @@ -1071,9 +1070,9 @@ tslib "^1.8.0" "@aws-sdk/util-locate-window@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.1.0.tgz#a04058b8d1044521dda9ca77b81be0ffc26bf0d7" - integrity sha512-HAU9Sx3EJMGU4Cfq2m3t2QnkINNQx5KWa6xGctCLN2C8bNWOpKqQhWO6qcxsXalrdW5qiXY5sj8JZGRaLa3yyQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.4.0.tgz#13ac23f00a03cef65bd02eadea45de262e85c04b" + integrity sha512-S2ngjd5ZaHEJYAJpbLpbszyJqweJ1NXRPxNIKGIZ+NWkKpKSIz35dRvh3cLMepFhBIxGwelhWnIPWuex3lsG6A== dependencies: tslib "^1.8.0" @@ -1108,9 +1107,9 @@ tslib "^1.8.0" "@aws-sdk/util-utf8-browser@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.1.0.tgz#7be17b545af101c320d34aace47139cf9987d796" - integrity sha512-vJP20me+Wc1RJHq+Y+gFD25aWhbQte+Qkyh3SOKQ+YvNaMcaeVwOV7b3Y3ItBuMdutHLJWmbJ2wF6dhhpy1kOA== + version "3.4.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.4.0.tgz#e34e66b186f9df16de4d0fa6ad98c7e31de47b32" + integrity sha512-oQMCPYdn8+NA96c7PT6ZzvQ/TDpi2Q7wZ5cb8x14WFeGd7AnSR7o4KbSgdi2DE2cYBJbVz+fsHvscTaf6caOyw== dependencies: tslib "^1.8.0" @@ -1191,9 +1190,9 @@ "@types/node" "*" "@types/node@*": - version "14.14.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz#d934aacc22424fe9622ebf6857370c052eae464e" - integrity sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A== + version "14.14.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" + integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== "@vercel/nft@^0.9.3": version "0.9.5" @@ -1420,9 +1419,9 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= constructs@^3.2.0: - version "3.2.107" - resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.107.tgz#2508a15974e7a7ff420c45ab5628c9279caeb175" - integrity sha512-iiXw36Q9EdOnBX5qNuGMlqh4ymSIMdQ/aeuVTWct/gF67ys/DUxoM8Oc4Rs9xw3g6RZGb/MKMyi7otLHZHGGgw== + version "3.2.117" + resolved "https://registry.yarnpkg.com/constructs/-/constructs-3.2.117.tgz#d6f29d822f99530f4cb5c79089dc2e1bd0d0e9d3" + integrity sha512-zYDlALAHWdopUzMGr3aZPlPR8f+OEYr1+QZCkLqi/eyUjbOmlPQ6xwrlDoOaJNgpMf727T9Yo+hokCjIRsZweQ== cookie@^0.4.1: version "0.4.1" @@ -1584,9 +1583,9 @@ fast-xml-parser@^3.16.0: integrity sha512-40WHI/5d2MOzf1sD2bSaTXlPn1lueJLAX6j1xH5dSAr6tNeut8B9ktEL6sjAK9yVON4uNj9//axOdBJUuruCzw== fastq@^1.6.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.0.tgz#74dbefccade964932cdf500473ef302719c652bb" - integrity sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA== + version "1.10.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" + integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== dependencies: reusify "^1.0.4" @@ -1607,15 +1606,15 @@ fresh@0.5.2, fresh@^0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== +fs-extra@^9.0.1, fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" graceful-fs "^4.2.0" jsonfile "^6.0.1" - universalify "^1.0.0" + universalify "^2.0.0" fs-minipass@^1.2.5: version "1.2.7" @@ -2478,11 +2477,6 @@ typescript@^3.9.6: resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" From 7ba318e597c078e3f9a8b6854f6f1d36c0f57d7e Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 30 Jan 2021 16:01:13 +0000 Subject: [PATCH 20/26] test: add test for readInvalidationPathsFromManifest --- .../__tests__/utils.test.ts | 50 +++++++++++++++++++ .../readInvalidationPathsFromManifest.ts | 8 ++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts b/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts index 6d5c7f0a2a..e490c0d624 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts @@ -1,4 +1,6 @@ import { toLambdaOption } from "../src/utils/toLambdaOption"; +import { readInvalidationPathsFromManifest } from "../src/utils/readInvalidationPathsFromManifest"; +import { OriginRequestDefaultHandlerManifest } from "@sls-next/lambda-at-edge"; describe("CDK Utils", () => { it.each` @@ -11,4 +13,52 @@ describe("CDK Utils", () => { `("toLambdaOption", ({ args: [key, option], expectedReturn }) => { expect(toLambdaOption(key, option)).toStrictEqual(expectedReturn); }); + + const file = { file: "", regex: "" }; + const ssgRoute = { + dataRoute: "", + dataRouteRegex: "", + fallback: null, + routeRegex: "" + }; + const nonDynamicSsgRoute = { + dataRoute: "", + initialRevalidateSeconds: false, + srcRoute: "" + }; + test("readInvalidationPathsFromManifest", () => { + expect( + readInvalidationPathsFromManifest({ + pages: { + html: { + dynamic: { + "/:id": file, + "/:id/test": file, + "/test/:id/test": file + }, + nonDynamic: { "/id": "" } + }, + ssr: { + dynamic: { "/ssr/:id": file }, + nonDynamic: { "/ssr-page": "" } + }, + ssg: { + dynamic: { "/ssg/:id": ssgRoute }, + nonDynamic: { "/ssg-page": nonDynamicSsgRoute } + } + } as OriginRequestDefaultHandlerManifest["pages"] + } as any).sort() + ).toStrictEqual( + [ + "/*", // /:id + "/*", // /:id/test + "/test/*", // /test/:id/test + "/id", // /id + "/ssr/*", // /ssr/:id + "/ssr-page", // /ssr-page + "/ssg/*", // /ssg/:id + "/ssg-page" // /ssg-page + ].sort() + ); + }); }); diff --git a/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts b/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts index d6458072d1..45a7ac2567 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/utils/readInvalidationPathsFromManifest.ts @@ -3,7 +3,7 @@ import { OriginRequestDefaultHandlerManifest } from "@sls-next/lambda-at-edge"; const dynamicPathToInvalidationPath = (dynamicPath: string) => { const [firstSegment] = dynamicPath.split("/:"); - return path.join(firstSegment, "*"); + return path.join(firstSegment || "/", "*"); }; export const readInvalidationPathsFromManifest = ( @@ -17,6 +17,10 @@ export const readInvalidationPathsFromManifest = ( ...Object.keys(manifest.pages.ssr.dynamic).map( dynamicPathToInvalidationPath ), - ...Object.keys(manifest.pages.ssr.nonDynamic) + ...Object.keys(manifest.pages.ssr.nonDynamic), + ...Object.keys(manifest.pages.ssg?.dynamic || {}).map( + dynamicPathToInvalidationPath + ), + ...Object.keys(manifest.pages.ssg?.nonDynamic || {}) ]; }; From e5696c64d47288c2c47edc121b61d8824adeb043 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 2 Feb 2021 14:50:17 +0000 Subject: [PATCH 21/26] fix: include body in api origin request --- packages/serverless-components/nextjs-cdk-construct/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index ea6f6e036a..38fbe3e03d 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -302,6 +302,7 @@ export class NextJSLambdaEdge extends cdk.Construct { cachePolicy: nextLambdaCachePolicy, edgeLambdas: [ { + includeBody: true, eventType: cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST, functionVersion: nextApiLambda.currentVersion } From b918d1ebb304f98bc8fdde56ecfa1ba92f9b0f94 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 10 Feb 2021 13:11:52 +0000 Subject: [PATCH 22/26] fix: remove unneeded async from test --- packages/libs/s3-static-assets/tests/utils.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/libs/s3-static-assets/tests/utils.test.ts b/packages/libs/s3-static-assets/tests/utils.test.ts index 78d0d4f8aa..6372b33a40 100644 --- a/packages/libs/s3-static-assets/tests/utils.test.ts +++ b/packages/libs/s3-static-assets/tests/utils.test.ts @@ -2,12 +2,12 @@ import readDirectoryFiles from "../src/lib/readDirectoryFiles"; import * as path from "path"; describe("readDirectoryFiles", () => { - it("returns an empty array when the file is not found", async () => { + it("returns an empty array when the file is not found", () => { const files = readDirectoryFiles("/this/path/does/not/exist"); expect(files).toStrictEqual([]); }); - it("returns all files from fixture without directories", async () => { + it("returns all files from fixture without directories", () => { const files = readDirectoryFiles( path.join(__dirname, "./fixtures/app-basic") ); From b81105897047ff2f27a4faab65ad7f42cb55c97f Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 10 Feb 2021 13:27:55 +0000 Subject: [PATCH 23/26] fix: format all remaning fixture files --- .../next-boilerplate/api-lambda/index.js | 4 ++- .../api-lambda/pages/api/users.js | 4 ++- .../next-boilerplate/default-lambda/index.js | 4 ++- .../default-lambda/manifest.json | 33 ++++++++++++++++++- .../next-boilerplate/image-lambda/index.js | 4 ++- .../image-lambda/manifest.json | 5 ++- 6 files changed, 48 insertions(+), 6 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/index.js b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/index.js index 7a157c6ee6..a4da533215 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/index.js +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/index.js @@ -1 +1,3 @@ -exports.handler = async () => ({ statusCode: 200 }); +exports.handler = async () => ({ + statusCode: 200 +}); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/pages/api/users.js b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/pages/api/users.js index 7a157c6ee6..a4da533215 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/pages/api/users.js +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/api-lambda/pages/api/users.js @@ -1 +1,3 @@ -exports.handler = async () => ({ statusCode: 200 }); +exports.handler = async () => ({ + statusCode: 200 +}); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/index.js b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/index.js index 7a157c6ee6..a4da533215 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/index.js +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/index.js @@ -1 +1,3 @@ -exports.handler = async () => ({ statusCode: 200 }); +exports.handler = async () => ({ + statusCode: 200 +}); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/manifest.json index 390383423c..3dc6a31aa9 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/manifest.json +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/default-lambda/manifest.json @@ -1 +1,32 @@ -{"buildId":"IOjzqKr7ylEZVL7Xy7FMd","logLambdaExecutionTimes":true,"pages":{"ssr":{"dynamic":{"/users/:id":{"file":"pages/users/[id].js","regex":"^\\/users(?:\\/([^\\/#\\?]+?))[\\/#\\?]?$"}},"nonDynamic":{"/users":"pages/users.js","/_error":"pages/_error.js"}},"html":{"dynamic":{},"nonDynamic":{"/about":"pages/about.html","/":"pages/index.html","/404":"pages/404.html"}}},"publicFiles":{"/planes.jpg":"planes.jpg"},"trailingSlash":false,"domainRedirects":{},"enableHTTPCompression":false} +{ + "buildId": "IOjzqKr7ylEZVL7Xy7FMd", + "logLambdaExecutionTimes": true, + "pages": { + "ssr": { + "dynamic": { + "/users/:id": { + "file": "pages/users/[id].js", + "regex": "^\\/users(?:\\/([^\\/#\\?]+?))[\\/#\\?]?$" + } + }, + "nonDynamic": { + "/users": "pages/users.js", + "/_error": "pages/_error.js" + } + }, + "html": { + "dynamic": {}, + "nonDynamic": { + "/about": "pages/about.html", + "/": "pages/index.html", + "/404": "pages/404.html" + } + } + }, + "publicFiles": { + "/planes.jpg": "planes.jpg" + }, + "trailingSlash": false, + "domainRedirects": {}, + "enableHTTPCompression": false +} diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/index.js b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/index.js index 7a157c6ee6..a4da533215 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/index.js +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/index.js @@ -1 +1,3 @@ -exports.handler = async () => ({ statusCode: 200 }); +exports.handler = async () => ({ + statusCode: 200 +}); diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/manifest.json b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/manifest.json index 4ae59bb484..21b66bd721 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/manifest.json +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/fixtures/next-boilerplate/image-lambda/manifest.json @@ -1 +1,4 @@ -{"domainRedirects":{},"enableHTTPCompression":false} +{ + "domainRedirects": {}, + "enableHTTPCompression": false +} From a2af6f7f96ea06ffe765aaf560a1e52cd77244ad Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 11 Feb 2021 09:40:21 +0000 Subject: [PATCH 24/26] test: update cdk snapshots --- .../__snapshots__/snapshots.test.ts.snap | 119 +++++++++--------- 1 file changed, 60 insertions(+), 59 deletions(-) diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap index 91d65a5a29..cbb3b9c37d 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/__snapshots__/snapshots.test.ts.snap @@ -3,28 +3,28 @@ exports[`CDK Construct Snapshots creates boilerplate next app 1`] = ` Object { "Parameters": Object { - "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392ArtifactHashE56CD69A": Object { - "Description": "Artifact hash for asset \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", + "AssetParameters25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748ArtifactHashE2D1074E": Object { + "Description": "Artifact hash for asset \\"25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748\\"", "Type": "String", }, - "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3BucketBF7A7F3F": Object { - "Description": "S3 bucket for asset \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", + "AssetParameters25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748S3Bucket1B468E6A": Object { + "Description": "S3 bucket for asset \\"25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748\\"", "Type": "String", }, - "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626": Object { - "Description": "S3 key for asset version \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", + "AssetParameters25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748S3VersionKeyA7CF013C": Object { + "Description": "S3 key for asset version \\"25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748\\"", "Type": "String", }, - "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90ArtifactHashC5E3199F": Object { - "Description": "Artifact hash for asset \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", + "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392ArtifactHashE56CD69A": Object { + "Description": "Artifact hash for asset \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", "Type": "String", }, - "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3Bucket0D7EE15F": Object { - "Description": "S3 bucket for asset \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", + "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3BucketBF7A7F3F": Object { + "Description": "S3 bucket for asset \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", "Type": "String", }, - "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3VersionKeyF5955B10": Object { - "Description": "S3 key for asset version \\"4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90\\"", + "AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626": Object { + "Description": "S3 key for asset version \\"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\\"", "Type": "String", }, "AssetParameters67b7823b74bc135986aa72f889d6a8da058d0c4a20cbc2dfc6f78995fdd2fc24ArtifactHashBA91B77F": Object { @@ -63,6 +63,18 @@ Object { "Description": "S3 key for asset version \\"7a6ed021656ddea4e87a6e7003efc985b39a2f5e1d5b23c50d9c84a27c2fbcc1\\"", "Type": "String", }, + "AssetParameters7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6ArtifactHash5DD72BC7": Object { + "Description": "Artifact hash for asset \\"7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6\\"", + "Type": "String", + }, + "AssetParameters7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6S3Bucket5C3E4ABA": Object { + "Description": "S3 bucket for asset \\"7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6\\"", + "Type": "String", + }, + "AssetParameters7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6S3VersionKey96DFF457": Object { + "Description": "S3 key for asset version \\"7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6\\"", + "Type": "String", + }, "AssetParametersaecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61dArtifactHash2788C1DC": Object { "Description": "Artifact hash for asset \\"aecff88ec5fb6dcd1c5e3f1d6cf827ed17bd83a32dff1bcd10c08e335355d61d\\"", "Type": "String", @@ -99,40 +111,28 @@ Object { "Description": "S3 key for asset version \\"c24b999656e4fe6c609c31bae56a1cf4717a405619c3aa6ba1bc686b8c2c86cf\\"", "Type": "String", }, - "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68ArtifactHashD9A515C3": Object { - "Description": "Artifact hash for asset \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", - "Type": "String", - }, - "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7": Object { - "Description": "S3 bucket for asset \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", - "Type": "String", - }, - "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F": Object { - "Description": "S3 key for asset version \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", + "AssetParametersdab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6bArtifactHashC079BB46": Object { + "Description": "Artifact hash for asset \\"dab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6b\\"", "Type": "String", }, - "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318ArtifactHash83640A85": Object { - "Description": "Artifact hash for asset \\"efb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318\\"", + "AssetParametersdab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6bS3BucketB5EDC333": Object { + "Description": "S3 bucket for asset \\"dab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6b\\"", "Type": "String", }, - "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3Bucket4D5AE26A": Object { - "Description": "S3 bucket for asset \\"efb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318\\"", + "AssetParametersdab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6bS3VersionKeyAB92E59F": Object { + "Description": "S3 key for asset version \\"dab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6b\\"", "Type": "String", }, - "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3VersionKeyE6471D4A": Object { - "Description": "S3 key for asset version \\"efb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318\\"", - "Type": "String", - }, - "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18ArtifactHashFAD3C98C": Object { - "Description": "Artifact hash for asset \\"f7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18\\"", + "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68ArtifactHashD9A515C3": Object { + "Description": "Artifact hash for asset \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", "Type": "String", }, - "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3BucketAEC538BC": Object { - "Description": "S3 bucket for asset \\"f7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18\\"", + "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3BucketAEADE8C7": Object { + "Description": "S3 bucket for asset \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", "Type": "String", }, - "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3VersionKey737B65E3": Object { - "Description": "S3 key for asset version \\"f7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18\\"", + "AssetParameterse9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68S3VersionKeyE415415F": Object { + "Description": "S3 key for asset version \\"e9882ab123687399f934da0d45effe675ecc8ce13b40cb946f3e1d6141fe8d68\\"", "Type": "String", }, }, @@ -1195,7 +1195,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3Bucket4D5AE26A", + "Ref": "AssetParameters25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748S3Bucket1B468E6A", }, "S3Key": Object { "Fn::Join": Array [ @@ -1208,7 +1208,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3VersionKeyE6471D4A", + "Ref": "AssetParameters25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748S3VersionKeyA7CF013C", }, ], }, @@ -1221,7 +1221,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersefb20baaa561cf28dc906ba63915f3e411feb62597185201718c417c729be318S3VersionKeyE6471D4A", + "Ref": "AssetParameters25410cc84f19c90d1be36cf1ab651b490f5b65832cb03e0a63e1ae33d8fdf748S3VersionKeyA7CF013C", }, ], }, @@ -1244,7 +1244,7 @@ Object { }, "Type": "AWS::Lambda::Function", }, - "StackNextApiLambdaCurrentVersion09578A6A0413e0b28857d1f30d0c4a4098d3a319": Object { + "StackNextApiLambdaCurrentVersion09578A6A5311a139e9fe82bc7d38dbc3c95c1c42": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1261,7 +1261,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextApiLambdaCurrentVersion09578A6A0413e0b28857d1f30d0c4a4098d3a319", + "StackNextApiLambdaCurrentVersion09578A6A5311a139e9fe82bc7d38dbc3c95c1c42", "Version", ], }, @@ -1277,7 +1277,7 @@ Object { "MaximumRetryAttempts": 1, "Qualifier": Object { "Fn::GetAtt": Array [ - "StackNextApiLambdaCurrentVersion09578A6A0413e0b28857d1f30d0c4a4098d3a319", + "StackNextApiLambdaCurrentVersion09578A6A5311a139e9fe82bc7d38dbc3c95c1c42", "Version", ], }, @@ -1371,7 +1371,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3BucketAEC538BC", + "Ref": "AssetParameters7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6S3Bucket5C3E4ABA", }, "S3Key": Object { "Fn::Join": Array [ @@ -1384,7 +1384,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3VersionKey737B65E3", + "Ref": "AssetParameters7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6S3VersionKey96DFF457", }, ], }, @@ -1397,7 +1397,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParametersf7e234922c30cbd8b2148305c47b84da8c05989feaacc8645ad49c1c853f4e18S3VersionKey737B65E3", + "Ref": "AssetParameters7df364fb64536fbb8d727d8a675a2751a56fe1308e5ad5fccc8fa3d3e4be7ae6S3VersionKey96DFF457", }, ], }, @@ -1427,7 +1427,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextImageLambdaCurrentVersionDEC920BC5ba4b84decce2136b4556635ae07c0bd", + "StackNextImageLambdaCurrentVersionDEC920BC1d56bfaed68119713790df6382d78f27", "Version", ], }, @@ -1435,7 +1435,7 @@ Object { }, "Type": "AWS::Lambda::Alias", }, - "StackNextImageLambdaCurrentVersionDEC920BC5ba4b84decce2136b4556635ae07c0bd": Object { + "StackNextImageLambdaCurrentVersionDEC920BC1d56bfaed68119713790df6382d78f27": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1453,7 +1453,7 @@ Object { "MaximumRetryAttempts": 1, "Qualifier": Object { "Fn::GetAtt": Array [ - "StackNextImageLambdaCurrentVersionDEC920BC5ba4b84decce2136b4556635ae07c0bd", + "StackNextImageLambdaCurrentVersionDEC920BC1d56bfaed68119713790df6382d78f27", "Version", ], }, @@ -1510,7 +1510,7 @@ Object { Object { "EventType": "origin-request", "LambdaFunctionARN": Object { - "Ref": "StackNextImageLambdaCurrentVersionDEC920BC5ba4b84decce2136b4556635ae07c0bd", + "Ref": "StackNextImageLambdaCurrentVersionDEC920BC1d56bfaed68119713790df6382d78f27", }, }, ], @@ -1541,13 +1541,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", + "Ref": "StackNextLambdaCurrentVersion21F01F87b538799c93d1ce4981e01005070ac96f", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", + "Ref": "StackNextLambdaCurrentVersion21F01F87b538799c93d1ce4981e01005070ac96f", }, }, ], @@ -1615,8 +1615,9 @@ Object { "LambdaFunctionAssociations": Array [ Object { "EventType": "origin-request", + "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextApiLambdaCurrentVersion09578A6A0413e0b28857d1f30d0c4a4098d3a319", + "Ref": "StackNextApiLambdaCurrentVersion09578A6A5311a139e9fe82bc7d38dbc3c95c1c42", }, }, ], @@ -1645,13 +1646,13 @@ Object { "EventType": "origin-request", "IncludeBody": true, "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", + "Ref": "StackNextLambdaCurrentVersion21F01F87b538799c93d1ce4981e01005070ac96f", }, }, Object { "EventType": "origin-response", "LambdaFunctionARN": Object { - "Ref": "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", + "Ref": "StackNextLambdaCurrentVersion21F01F87b538799c93d1ce4981e01005070ac96f", }, }, ], @@ -1872,7 +1873,7 @@ Object { }, "Type": "AWS::CloudFront::CachePolicy", }, - "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50": Object { + "StackNextLambdaCurrentVersion21F01F87b538799c93d1ce4981e01005070ac96f": Object { "DeletionPolicy": "Delete", "Properties": Object { "FunctionName": Object { @@ -1889,7 +1890,7 @@ Object { }, "FunctionVersion": Object { "Fn::GetAtt": Array [ - "StackNextLambdaCurrentVersion21F01F876214028beab1131683e1df467efc2b50", + "StackNextLambdaCurrentVersion21F01F87b538799c93d1ce4981e01005070ac96f", "Version", ], }, @@ -1904,7 +1905,7 @@ Object { "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3Bucket0D7EE15F", + "Ref": "AssetParametersdab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6bS3BucketB5EDC333", }, "S3Key": Object { "Fn::Join": Array [ @@ -1917,7 +1918,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3VersionKeyF5955B10", + "Ref": "AssetParametersdab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6bS3VersionKeyAB92E59F", }, ], }, @@ -1930,7 +1931,7 @@ Object { "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters4fd50a3abaf6a4bce1cfc9c953d9e0a6e1b8628cb81073e676bb4c0050b83a90S3VersionKeyF5955B10", + "Ref": "AssetParametersdab825e6eb19a7b4d78ffba5120b7f3449a9b68c41e7c8a102eb95fbfb194c6bS3VersionKeyAB92E59F", }, ], }, From 7aeaec92c91f42f051b28c31863cb3cbe75e9966 Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 13 Feb 2021 09:56:40 +0000 Subject: [PATCH 25/26] fix: reduce number of invalidations created by stripping duplicates, also allow users to pass custom invalidationPaths --- documentation/docs/cdkconstruct.md | 2 ++ .../__tests__/utils.test.ts | 15 ++++++++++++- .../nextjs-cdk-construct/src/index.ts | 7 ++++++- .../nextjs-cdk-construct/src/props.ts | 9 ++++++++ .../src/utils/reduceInvalidationPaths.ts | 21 +++++++++++++++++++ 5 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 packages/serverless-components/nextjs-cdk-construct/src/utils/reduceInvalidationPaths.ts diff --git a/documentation/docs/cdkconstruct.md b/documentation/docs/cdkconstruct.md index 8c43754ee1..f0a12821a8 100644 --- a/documentation/docs/cdkconstruct.md +++ b/documentation/docs/cdkconstruct.md @@ -94,3 +94,5 @@ new NextJSLambdaEdge(this, "NextJsApp", { default behavior - `behaviours?: Array` - an array of Cloudfront distribution behaviours. +- `invalidationPaths?: string[]` - an array of invalidation paths, by default we + invalidate all pages found in manifest diff --git a/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts b/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts index e490c0d624..93b38b4d87 100644 --- a/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts +++ b/packages/serverless-components/nextjs-cdk-construct/__tests__/utils.test.ts @@ -1,9 +1,10 @@ import { toLambdaOption } from "../src/utils/toLambdaOption"; import { readInvalidationPathsFromManifest } from "../src/utils/readInvalidationPathsFromManifest"; import { OriginRequestDefaultHandlerManifest } from "@sls-next/lambda-at-edge"; +import { reduceInvalidationPaths } from "../src/utils/reduceInvalidationPaths"; describe("CDK Utils", () => { - it.each` + test.each` args | expectedReturn ${["defaultLambda", { defaultLambda: 1 }]} | ${1} ${["apiLambda", { defaultLambda: 1 }]} | ${undefined} @@ -61,4 +62,16 @@ describe("CDK Utils", () => { ].sort() ); }); + + test.each` + paths | expectedReturn + ${["/*", "/users", "/users/*"]} | ${["/*"]} + ${["/users", "/users/*"]} | ${["/users", "/users/*"]} + ${["/users", "/users/*", "/posts", "/posts/*"]} | ${["/users", "/users/*", "/posts", "/posts/*"]} + ${["/users", "/users/list", "/users/details/*", "/users/*"]} | ${["/users", "/users/*"]} + ${["/users", "/users/list", "/users/details/info", "/*"]} | ${["/*"]} + ${["/users*", "/users/*", "/users/test/*"]} | ${["/users*", "/users/*"]} + `("reduceInvalidationPaths", ({ paths, expectedReturn }) => { + expect(reduceInvalidationPaths(paths)).toStrictEqual(expectedReturn); + }); }); diff --git a/packages/serverless-components/nextjs-cdk-construct/src/index.ts b/packages/serverless-components/nextjs-cdk-construct/src/index.ts index 38fbe3e03d..65785ed2cb 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/index.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/index.ts @@ -27,6 +27,7 @@ import { Props } from "./props"; import { toLambdaOption } from "./utils/toLambdaOption"; import { readAssetsDirectory } from "./utils/readAssetsDirectory"; import { readInvalidationPathsFromManifest } from "./utils/readInvalidationPathsFromManifest"; +import { reduceInvalidationPaths } from "./utils/reduceInvalidationPaths"; export * from "./props"; @@ -332,7 +333,11 @@ export class NextJSLambdaEdge extends cdk.Construct { // the root upwards. destinationKeyPrefix: "/BUILD_ID", distribution: this.distribution, - distributionPaths: readInvalidationPathsFromManifest(this.defaultManifest) + distributionPaths: + props.invalidationPaths || + reduceInvalidationPaths( + readInvalidationPathsFromManifest(this.defaultManifest) + ) }); Object.keys(assets).forEach((key) => { diff --git a/packages/serverless-components/nextjs-cdk-construct/src/props.ts b/packages/serverless-components/nextjs-cdk-construct/src/props.ts index 30523b289d..833b0c9612 100644 --- a/packages/serverless-components/nextjs-cdk-construct/src/props.ts +++ b/packages/serverless-components/nextjs-cdk-construct/src/props.ts @@ -65,4 +65,13 @@ export interface Props extends StackProps { * another `lambda@edge` endpoint. */ behaviours?: Record; + /** + * Pass an array of invalidation paths. By default this construct will + * invalidate all paths found in your pages manifest. You can reduce the + * number of invalidations created by invalidating all paths using: + * ```ts + * invalidationPaths: ["/*"] + * ``` + */ + invalidationPaths?: string[]; } diff --git a/packages/serverless-components/nextjs-cdk-construct/src/utils/reduceInvalidationPaths.ts b/packages/serverless-components/nextjs-cdk-construct/src/utils/reduceInvalidationPaths.ts new file mode 100644 index 0000000000..a16b0aedde --- /dev/null +++ b/packages/serverless-components/nextjs-cdk-construct/src/utils/reduceInvalidationPaths.ts @@ -0,0 +1,21 @@ +/** + * We don't need to invalidate sub paths if a parent has a wild card + * invalidation. i.e. if `/users/*` exists, we don't need to invalidate `/users/details/*` + */ +export const reduceInvalidationPaths = ( + invalidationPaths: string[] +): string[] => { + const wildCardDirectories = invalidationPaths + .filter((invalidationPath) => invalidationPath.endsWith("/*")) + .map((invalidationPath) => invalidationPath.replace("/*", "")); + + return invalidationPaths.filter((invalidationPath) => { + return !wildCardDirectories.some( + (wildCardDirectory) => + invalidationPath.startsWith(wildCardDirectory) && + invalidationPath !== `${wildCardDirectory}*` && + invalidationPath !== `${wildCardDirectory}/*` && + wildCardDirectory !== invalidationPath + ); + }); +}; From 989c8a61476d56d423f61c9b291ff4dc812db10c Mon Sep 17 00:00:00 2001 From: Henry Date: Sat, 13 Feb 2021 10:19:35 +0000 Subject: [PATCH 26/26] fix: typo --- documentation/docs/cdkconstruct.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/docs/cdkconstruct.md b/documentation/docs/cdkconstruct.md index f0a12821a8..aa02303140 100644 --- a/documentation/docs/cdkconstruct.md +++ b/documentation/docs/cdkconstruct.md @@ -74,7 +74,7 @@ new NextJSLambdaEdge(this, "NextJsApp", { ## Available Props - `serverlessBuildOutDir` - the output directory of the `Builder`. -- `domain?: Object` - if yoou'd like to add a custom domain, provide the +- `domain?: Object` - if you'd like to add a custom domain, provide the following three fields on the `domain` object. - `hostedZone: IHostedZone;` - `certificate: ICertificate;`