diff --git a/src/__tests__/__snapshots__/construct-hub.test.ts.snap b/src/__tests__/__snapshots__/construct-hub.test.ts.snap index b8df7bdce..98125395a 100644 --- a/src/__tests__/__snapshots__/construct-hub.test.ts.snap +++ b/src/__tests__/__snapshots__/construct-hub.test.ts.snap @@ -177,18 +177,6 @@ Object { "Description": "S3 key for asset version \\"8fb25fdd4f1ddeae2b028b9896c12ee4ce71b7b9a580a348a5d48a1459a2e064\\"", "Type": "String", }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdArtifactHashAFC7A638": Object { - "Description": "Artifact hash for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D": Object { - "Description": "S3 bucket for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB": Object { - "Description": "S3 key for asset version \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, "AssetParametersa3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8ArtifactHash238275D6": Object { "Description": "Artifact hash for asset \\"a3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8\\"", "Type": "String", @@ -297,6 +285,18 @@ Object { "Description": "S3 key for asset version \\"f18a713b43ae97178f0b9d01469e67337e7d8bd54a5ad25277658255bfce38f1\\"", "Type": "String", }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74ArtifactHashBEC47147": Object { + "Description": "Artifact hash for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA": Object { + "Description": "S3 bucket for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB": Object { + "Description": "S3 key for asset version \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, }, "Resources": Object { "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691": Object { @@ -1635,7 +1635,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA", }, "S3Key": Object { "Fn::Join": Array [ @@ -1648,7 +1648,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -1661,7 +1661,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -9455,18 +9455,6 @@ Object { "Description": "S3 key for asset version \\"8fb25fdd4f1ddeae2b028b9896c12ee4ce71b7b9a580a348a5d48a1459a2e064\\"", "Type": "String", }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdArtifactHashAFC7A638": Object { - "Description": "Artifact hash for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D": Object { - "Description": "S3 bucket for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB": Object { - "Description": "S3 key for asset version \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, "AssetParametersa3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8ArtifactHash238275D6": Object { "Description": "Artifact hash for asset \\"a3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8\\"", "Type": "String", @@ -9575,6 +9563,18 @@ Object { "Description": "S3 key for asset version \\"f18a713b43ae97178f0b9d01469e67337e7d8bd54a5ad25277658255bfce38f1\\"", "Type": "String", }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74ArtifactHashBEC47147": Object { + "Description": "Artifact hash for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA": Object { + "Description": "S3 bucket for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB": Object { + "Description": "S3 key for asset version \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, }, "Resources": Object { "AWS679f53fac002430cb0da5b7982bd22872D164C4C": Object { @@ -11202,7 +11202,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA", }, "S3Key": Object { "Fn::Join": Array [ @@ -11215,7 +11215,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -11228,7 +11228,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -19181,18 +19181,6 @@ Object { "Description": "S3 key for asset version \\"8fb25fdd4f1ddeae2b028b9896c12ee4ce71b7b9a580a348a5d48a1459a2e064\\"", "Type": "String", }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdArtifactHashAFC7A638": Object { - "Description": "Artifact hash for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D": Object { - "Description": "S3 bucket for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB": Object { - "Description": "S3 key for asset version \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, "AssetParametersa3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8ArtifactHash238275D6": Object { "Description": "Artifact hash for asset \\"a3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8\\"", "Type": "String", @@ -19301,6 +19289,18 @@ Object { "Description": "S3 key for asset version \\"f18a713b43ae97178f0b9d01469e67337e7d8bd54a5ad25277658255bfce38f1\\"", "Type": "String", }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74ArtifactHashBEC47147": Object { + "Description": "Artifact hash for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA": Object { + "Description": "S3 bucket for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB": Object { + "Description": "S3 key for asset version \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, }, "Resources": Object { "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691": Object { @@ -20639,7 +20639,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA", }, "S3Key": Object { "Fn::Join": Array [ @@ -20652,7 +20652,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -20665,7 +20665,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -28481,18 +28481,6 @@ Object { "Description": "S3 key for asset version \\"8fb25fdd4f1ddeae2b028b9896c12ee4ce71b7b9a580a348a5d48a1459a2e064\\"", "Type": "String", }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdArtifactHashAFC7A638": Object { - "Description": "Artifact hash for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D": Object { - "Description": "S3 bucket for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB": Object { - "Description": "S3 key for asset version \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, "AssetParametersa3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8ArtifactHash238275D6": Object { "Description": "Artifact hash for asset \\"a3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8\\"", "Type": "String", @@ -28601,6 +28589,18 @@ Object { "Description": "S3 key for asset version \\"f18a713b43ae97178f0b9d01469e67337e7d8bd54a5ad25277658255bfce38f1\\"", "Type": "String", }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74ArtifactHashBEC47147": Object { + "Description": "Artifact hash for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA": Object { + "Description": "S3 bucket for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB": Object { + "Description": "S3 key for asset version \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, }, "Resources": Object { "BucketNotificationsHandler050a0587b7544547bf325f094a3db8347ECC3691": Object { @@ -30088,7 +30088,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA", }, "S3Key": Object { "Fn::Join": Array [ @@ -30101,7 +30101,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -30114,7 +30114,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -38196,18 +38196,6 @@ Object { "Description": "S3 key for asset version \\"8fb25fdd4f1ddeae2b028b9896c12ee4ce71b7b9a580a348a5d48a1459a2e064\\"", "Type": "String", }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdArtifactHashAFC7A638": Object { - "Description": "Artifact hash for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D": Object { - "Description": "S3 bucket for asset \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, - "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB": Object { - "Description": "S3 key for asset version \\"97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd\\"", - "Type": "String", - }, "AssetParametersa3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8ArtifactHash238275D6": Object { "Description": "Artifact hash for asset \\"a3058ccb468d757ebb89df5363a1c20f5307c6911136f29d00e1a68c9b2aa7e8\\"", "Type": "String", @@ -38316,6 +38304,18 @@ Object { "Description": "S3 key for asset version \\"f18a713b43ae97178f0b9d01469e67337e7d8bd54a5ad25277658255bfce38f1\\"", "Type": "String", }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74ArtifactHashBEC47147": Object { + "Description": "Artifact hash for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA": Object { + "Description": "S3 bucket for asset \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, + "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB": Object { + "Description": "S3 key for asset version \\"f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74\\"", + "Type": "String", + }, }, "Resources": Object { "AWS679f53fac002430cb0da5b7982bd22872D164C4C": Object { @@ -39763,7 +39763,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Properties": Object { "Code": Object { "S3Bucket": Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA", }, "S3Key": Object { "Fn::Join": Array [ @@ -39776,7 +39776,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, @@ -39789,7 +39789,7 @@ def submit_response(event: dict, context, response_status: str, error_message: s "Fn::Split": Array [ "||", Object { - "Ref": "AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB", + "Ref": "AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB", }, ], }, diff --git a/src/__tests__/backend/ingestion/ingestion.lambda.test.ts b/src/__tests__/backend/ingestion/ingestion.lambda.test.ts index 7ad9188cf..8f95387ed 100644 --- a/src/__tests__/backend/ingestion/ingestion.lambda.test.ts +++ b/src/__tests__/backend/ingestion/ingestion.lambda.test.ts @@ -1,6 +1,6 @@ import { EventEmitter } from 'events'; import type { createGunzip } from 'zlib'; -import { Assembly, SchemaVersion } from '@jsii/spec'; +import { Assembly, CollectionKind, PrimitiveType, SchemaVersion, Stability, TypeKind } from '@jsii/spec'; import type { metricScope, MetricsLogger } from 'aws-embedded-metrics'; import { Context, SQSEvent } from 'aws-lambda'; import * as AWS from 'aws-sdk'; @@ -132,7 +132,11 @@ test('basic happy case', async () => { switch (req.Key) { case assemblyKey: expect(req.ContentType).toBe('application/json'); - expect(req.Body).toEqual(Buffer.from(fakeDotJsii)); + + // our service removes the "types" field from the assembly since it is not needed + // and takes up a lot of space. + assertAssembly(fakeDotJsii, req.Body?.toString()); + // Must be created strictly after the tarball and metadata files have been uploaded. expect(mockTarballCreated && mockMetadataCreated).toBeTruthy(); break; @@ -290,7 +294,7 @@ test('basic happy case with license file', async () => { switch (req.Key) { case assemblyKey: expect(req.ContentType).toBe('application/json'); - expect(req.Body).toEqual(Buffer.from(fakeDotJsii)); + assertAssembly(fakeDotJsii, req.Body?.toString()); // Must be created strictly after the tarball and metadata files have been uploaded. expect(mockTarballCreated && mockMetadataCreated).toBeTruthy(); break; @@ -479,7 +483,7 @@ test('basic happy case with custom package links', async () => { switch (req.Key) { case assemblyKey: expect(req.ContentType).toBe('application/json'); - expect(req.Body).toEqual(Buffer.from(fakeDotJsii)); + assertAssembly(fakeDotJsii, req.Body?.toString()); // Must be created strictly after the tarball and metadata files have been uploaded. expect(mockTarballCreated && mockMetadataCreated).toBeTruthy(); break; @@ -686,7 +690,7 @@ test('basic happy case with custom tags', async () => { switch (req.Key) { case assemblyKey: expect(req.ContentType).toBe('application/json'); - expect(req.Body).toEqual(Buffer.from(fakeDotJsii)); + assertAssembly(fakeDotJsii, req.Body?.toString()); // Must be created strictly after the tarball and metadata files have been uploaded. expect(mockTarballCreated && mockMetadataCreated).toBeTruthy(); break; @@ -852,7 +856,7 @@ for (const [frameworkName, frameworkPackage] of [['aws-cdk', '@aws-cdk/core'], [ switch (req.Key) { case assemblyKey: expect(req.ContentType).toBe('application/json'); - expect(req.Body).toEqual(Buffer.from(fakeDotJsii)); + assertAssembly(fakeDotJsii, req.Body?.toString()); // Must be created strictly after the tarball and metadata files have been uploaded. expect(mockTarballCreated && mockMetadataCreated).toBeTruthy(); break; @@ -1012,7 +1016,7 @@ for (const [frameworkName, frameworkPackage] of [['aws-cdk', '@aws-cdk/core'], [ switch (req.Key) { case assemblyKey: expect(req.ContentType).toBe('application/json'); - expect(req.Body).toEqual(Buffer.from(fakeDotJsii)); + assertAssembly(fakeDotJsii, req.Body?.toString()); // Must be created strictly after the tarball and metadata files have been uploaded. expect(mockTarballCreated && mockMetadataCreated).toBeTruthy(); break; @@ -1178,7 +1182,7 @@ for (const [frameworkName, frameworkPackage] of [['aws-cdk', '@aws-cdk/core'], [ switch (req.Key) { case assemblyKey: expect(req.ContentType).toBe('application/json'); - expect(req.Body).toEqual(Buffer.from(fakeDotJsii)); + assertAssembly(fakeDotJsii, req.Body?.toString()); // Must be created strictly after the tarball and metadata files have been uploaded. expect(mockTarballCreated && mockMetadataCreated).toBeTruthy(); break; @@ -1860,6 +1864,19 @@ class FakeStream extends EventEmitter { } } +function assertAssembly(expected: string, actual: string | undefined) { + const expectedAssembly = JSON.parse(expected); + const actualAssembly = JSON.parse(actual ?? '{}'); + + // sanity: we have 2 types in the fake assembly + expect(Object.keys(expectedAssembly.types).length).toBe(2); + + // service deletes "types" from the assembly to reduce size + delete expectedAssembly.types; + + expect(actualAssembly).toStrictEqual(expectedAssembly); +} + function fakeAssembly(name: string, version: string, license: string): Assembly { return { schema: SchemaVersion.LATEST, @@ -1872,5 +1889,375 @@ function fakeAssembly(name: string, version: string, license: string): Assembly description: 'This is a fake package assembly', jsiiVersion: '0.0.0+head', fingerprint: 'NOPE', + types: { + 'datadog-cdk-constructs.Datadog': { + assembly: 'datadog-cdk-constructs', + base: '@aws-cdk/core.Construct', + docs: { + stability: Stability.Stable, + }, + fqn: 'datadog-cdk-constructs.Datadog', + initializer: { + docs: { + stability: Stability.Stable, + }, + locationInModule: { + filename: 'src/datadog.ts', + line: 50, + }, + parameters: [ + { + name: 'scope', + type: { + fqn: '@aws-cdk/core.Construct', + }, + }, + { + name: 'id', + type: { + primitive: PrimitiveType.String, + }, + }, + { + name: 'props', + type: { + fqn: 'datadog-cdk-constructs.DatadogProps', + }, + }, + ], + }, + kind: TypeKind.Class, + locationInModule: { + filename: 'src/datadog.ts', + line: 46, + }, + methods: [ + { + docs: { + stability: Stability.Stable, + }, + locationInModule: { + filename: 'src/datadog.ts', + line: 125, + }, + name: 'addForwarderToNonLambdaLogGroups', + parameters: [ + { + name: 'logGroups', + type: { + collection: { + elementtype: { + fqn: '@aws-cdk/aws-logs.ILogGroup', + }, + kind: CollectionKind.Array, + }, + }, + }, + ], + }, + { + docs: { + stability: Stability.Stable, + }, + locationInModule: { + filename: 'src/datadog.ts', + line: 65, + }, + name: 'addLambdaFunctions', + parameters: [ + { + name: 'lambdaFunctions', + type: { + collection: { + elementtype: { + union: { + types: [ + { + fqn: '@aws-cdk/aws-lambda.Function', + }, + { + fqn: '@aws-cdk/aws-lambda-nodejs.NodejsFunction', + }, + { + fqn: '@aws-cdk/aws-lambda-python.PythonFunction', + }, + ], + }, + }, + kind: CollectionKind.Array, + }, + }, + }, + ], + }, + ], + name: 'Datadog', + properties: [ + { + docs: { + stability: Stability.Stable, + }, + locationInModule: { + filename: 'src/datadog.ts', + line: 48, + }, + name: 'props', + type: { + fqn: 'datadog-cdk-constructs.DatadogProps', + }, + }, + { + docs: { + stability: Stability.Stable, + }, + locationInModule: { + filename: 'src/datadog.ts', + line: 47, + }, + name: 'scope', + type: { + fqn: '@aws-cdk/core.Construct', + }, + }, + { + docs: { + stability: Stability.Stable, + }, + locationInModule: { + filename: 'src/datadog.ts', + line: 49, + }, + name: 'transport', + type: { + fqn: 'datadog-cdk-constructs.Transport', + }, + }, + ], + }, + 'datadog-cdk-constructs.DatadogProps': { + assembly: 'datadog-cdk-constructs', + datatype: true, + docs: { + stability: Stability.Stable, + }, + fqn: 'datadog-cdk-constructs.DatadogProps', + kind: TypeKind.Interface, + locationInModule: { + filename: 'src/datadog.ts', + line: 19, + }, + name: 'DatadogProps', + properties: [ + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 23, + }, + name: 'addLayers', + optional: true, + type: { + primitive: PrimitiveType.Boolean, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 27, + }, + name: 'apiKey', + optional: true, + type: { + primitive: PrimitiveType.String, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 28, + }, + name: 'apiKmsKey', + optional: true, + type: { + primitive: PrimitiveType.String, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 32, + }, + name: 'enableDatadogLogs', + optional: true, + type: { + primitive: PrimitiveType.Boolean, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 29, + }, + name: 'enableDatadogTracing', + optional: true, + type: { + primitive: PrimitiveType.Boolean, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 22, + }, + name: 'extensionLayerVersion', + optional: true, + type: { + primitive: PrimitiveType.Number, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 25, + }, + name: 'flushMetricsToLogs', + optional: true, + type: { + primitive: PrimitiveType.Boolean, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 24, + }, + name: 'forwarderArn', + optional: true, + type: { + primitive: PrimitiveType.String, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 30, + }, + name: 'injectLogContext', + optional: true, + type: { + primitive: PrimitiveType.Boolean, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 31, + }, + name: 'logLevel', + optional: true, + type: { + primitive: PrimitiveType.String, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 21, + }, + name: 'nodeLayerVersion', + optional: true, + type: { + primitive: PrimitiveType.Number, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 20, + }, + name: 'pythonLayerVersion', + optional: true, + type: { + primitive: PrimitiveType.Number, + }, + }, + { + abstract: true, + docs: { + stability: Stability.Stable, + }, + immutable: true, + locationInModule: { + filename: 'src/datadog.ts', + line: 26, + }, + name: 'site', + optional: true, + type: { + primitive: PrimitiveType.String, + }, + }, + ], + }, + }, }; } diff --git a/src/__tests__/devapp/__snapshots__/snapshot.test.ts.snap b/src/__tests__/devapp/__snapshots__/snapshot.test.ts.snap index 7994a2300..5b4726109 100644 --- a/src/__tests__/devapp/__snapshots__/snapshot.test.ts.snap +++ b/src/__tests__/devapp/__snapshots__/snapshot.test.ts.snap @@ -3668,7 +3668,7 @@ Resources: Properties: Code: S3Bucket: - Ref: AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D + Ref: AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA S3Key: Fn::Join: - "" @@ -3676,12 +3676,12 @@ Resources: - 0 - Fn::Split: - "||" - - Ref: AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB + - Ref: AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB - Fn::Select: - 1 - Fn::Split: - "||" - - Ref: AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB + - Ref: AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB Role: Fn::GetAtt: - ConstructHubIngestionServiceRole6380BAB6 @@ -6577,18 +6577,18 @@ Parameters: Type: String Description: Artifact hash for asset "b69f8e77829ba765ee3a37c088671f56d5982ab8e2a57c2f3103bea15181e67b" - AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3Bucket5DAED36D: + AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3Bucket487E9FDA: Type: String Description: S3 bucket for asset - "97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd" - AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdS3VersionKey139357FB: + "f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74" + AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74S3VersionKeyC18BFADB: Type: String Description: S3 key for asset version - "97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd" - AssetParameters97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cdArtifactHashAFC7A638: + "f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74" + AssetParametersf2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74ArtifactHashBEC47147: Type: String Description: Artifact hash for asset - "97fa5c16033ceba01215e251371382939c0ceebdf8716593f3504ded192457cd" + "f2a3d326ac522d5cc131a872a1e1fc96c33cb792ba27e7aaf61da4b94eb01e74" AssetParameters23e522ff2960a0ebd14be197c515eb6d1cc1259844dd083e908c6ad095a55432S3BucketA55F9986: Type: String Description: S3 bucket for asset diff --git a/src/backend/ingestion/ingestion.lambda.ts b/src/backend/ingestion/ingestion.lambda.ts index a2cc66813..7bde4cd06 100644 --- a/src/backend/ingestion/ingestion.lambda.ts +++ b/src/backend/ingestion/ingestion.lambda.ts @@ -92,16 +92,21 @@ export const handler = metricScope( return; } + + let parsedAssembly: Assembly; let constructFramework: ConstructFramework | undefined; let packageLicense: string; let packageName: string; let packageVersion: string; try { - const assembly = validateAssembly( - JSON.parse(dotJsii.toString('utf-8')), - ); - constructFramework = detectConstructFramework(assembly); - const { license, name, version } = assembly; + parsedAssembly = validateAssembly(JSON.parse(dotJsii.toString('utf-8'))); + + // "types" is huge and not needed downstream because doc generation happens in the backend, + // so we drop it. See https://github.com/cdklabs/construct-hub-webapp/issues/691 + delete parsedAssembly.types; + + constructFramework = detectConstructFramework(parsedAssembly); + const { license, name, version } = parsedAssembly; packageLicense = license; packageName = name; packageVersion = version; @@ -252,7 +257,7 @@ export const handler = metricScope( .putObject({ Bucket: BUCKET_NAME, Key: assemblyKey, - Body: dotJsii, + Body: Buffer.from(JSON.stringify(parsedAssembly), 'utf-8'), CacheControl: 'public, max-age: 86400, must-revalidate, s-maxage=300, proxy-revalidate', ContentType: 'application/json', Metadata: {