From 0fc485b8b81e02b143c49bcf0d30918bb53a52fa Mon Sep 17 00:00:00 2001 From: Kaizen Conroy Date: Fri, 7 Jul 2023 13:06:43 -0400 Subject: [PATCH] chore(custom-resource-handlers): refactor minify and bundling step --- .../custom-resource-handlers/package.json | 2 +- ...ources.ts => minify-and-bundle-sources.ts} | 19 +++++++++++++++++-- .../aws-cdk-lib/aws-ecr/lib/repository.ts | 2 +- packages/aws-cdk-lib/aws-s3/lib/bucket.ts | 2 +- .../airlift-custom-resource-handlers.sh | 2 +- 5 files changed, 21 insertions(+), 6 deletions(-) rename packages/@aws-cdk/custom-resource-handlers/scripts/{minify-sources.ts => minify-and-bundle-sources.ts} (55%) diff --git a/packages/@aws-cdk/custom-resource-handlers/package.json b/packages/@aws-cdk/custom-resource-handlers/package.json index e3aee8203d5d5..f67a3cc881d38 100644 --- a/packages/@aws-cdk/custom-resource-handlers/package.json +++ b/packages/@aws-cdk/custom-resource-handlers/package.json @@ -4,7 +4,7 @@ "private": true, "version": "0.0.0", "scripts": { - "build": "tsc -b && node scripts/minify-sources.js", + "build": "tsc -b && node scripts/minify-and-bundle-sources.js", "integ": "integ-runner", "lint": "cdk-lint", "package": "cdk-package", diff --git a/packages/@aws-cdk/custom-resource-handlers/scripts/minify-sources.ts b/packages/@aws-cdk/custom-resource-handlers/scripts/minify-and-bundle-sources.ts similarity index 55% rename from packages/@aws-cdk/custom-resource-handlers/scripts/minify-sources.ts rename to packages/@aws-cdk/custom-resource-handlers/scripts/minify-and-bundle-sources.ts index c76ca4264292b..1bd7489d7c511 100644 --- a/packages/@aws-cdk/custom-resource-handlers/scripts/minify-sources.ts +++ b/packages/@aws-cdk/custom-resource-handlers/scripts/minify-and-bundle-sources.ts @@ -10,7 +10,11 @@ function recFolderStructure(fileOrDir: string) { recFolderStructure(path.join(fileOrDir, i)); } } else { - if (path.extname(fileOrDir) === '.ts' && !fileOrDir.includes('.d.ts') && !fileOrDir.includes('nodejs-entrypoint')) { + // Only minify + bundle 'index.ts' files. + // The reason why they are called 'index.ts' is that aws-cdk-lib expects that + // as the file name and it is more intuitive to keep the same name rather than + // rename as we copy it out. + if (fileOrDir.includes('index.ts')) { entryPoints.push(fileOrDir); } } @@ -23,7 +27,7 @@ recFolderStructure(bindingsDir); for (const ep of entryPoints) { void esbuild.build({ entryPoints: [ep], - outfile: `${ep.slice(0, ep.lastIndexOf('.'))}.js`, + outfile: calculateOutfile(ep), external: ['@aws-sdk/*'], format: 'cjs', platform: 'node', @@ -36,3 +40,14 @@ for (const ep of entryPoints) { tsconfig: 'tsconfig.json', }); } + +function calculateOutfile(file: string) { + // turn ts extension into js extension + file = path.join(path.dirname(file), path.basename(file, path.extname(file)) + '.js'); + + // replace /lib with /dist + const fileContents = file.split(path.sep); + fileContents[fileContents.lastIndexOf('lib')] = 'dist'; + + return fileContents.join(path.sep); +} diff --git a/packages/aws-cdk-lib/aws-ecr/lib/repository.ts b/packages/aws-cdk-lib/aws-ecr/lib/repository.ts index 536d142697c45..cefd1407f5851 100644 --- a/packages/aws-cdk-lib/aws-ecr/lib/repository.ts +++ b/packages/aws-cdk-lib/aws-ecr/lib/repository.ts @@ -860,7 +860,7 @@ export class Repository extends RepositoryBase { private enableAutoDeleteImages() { const firstTime = Stack.of(this).node.tryFindChild(`${AUTO_DELETE_IMAGES_RESOURCE_TYPE}CustomResourceProvider`) === undefined; const provider = CustomResourceProvider.getOrCreateProvider(this, AUTO_DELETE_IMAGES_RESOURCE_TYPE, { - codeDirectory: path.join(__dirname, '..', '..', 'custom-resource-handlers', 'lib', 'aws-ecr', 'auto-delete-images-handler'), + codeDirectory: path.join(__dirname, '..', '..', 'custom-resource-handlers', 'dist', 'aws-ecr', 'auto-delete-images-handler'), useCfnResponseWrapper: false, runtime: CustomResourceProviderRuntime.NODEJS_18_X, description: `Lambda function for auto-deleting images in ${this.repositoryName} repository.`, diff --git a/packages/aws-cdk-lib/aws-s3/lib/bucket.ts b/packages/aws-cdk-lib/aws-s3/lib/bucket.ts index 6107227a31993..3eb7cfce25a78 100644 --- a/packages/aws-cdk-lib/aws-s3/lib/bucket.ts +++ b/packages/aws-cdk-lib/aws-s3/lib/bucket.ts @@ -2427,7 +2427,7 @@ export class Bucket extends BucketBase { private enableAutoDeleteObjects() { const provider = CustomResourceProvider.getOrCreateProvider(this, AUTO_DELETE_OBJECTS_RESOURCE_TYPE, { - codeDirectory: path.join(__dirname, '..', '..', 'custom-resource-handlers', 'lib', 'aws-s3', 'auto-delete-objects-handler'), + codeDirectory: path.join(__dirname, '..', '..', 'custom-resource-handlers', 'dist', 'aws-s3', 'auto-delete-objects-handler'), useCfnResponseWrapper: false, runtime: CustomResourceProviderRuntime.NODEJS_18_X, description: `Lambda function for auto-deleting objects in ${this.bucketName} S3 bucket.`, diff --git a/packages/aws-cdk-lib/scripts/airlift-custom-resource-handlers.sh b/packages/aws-cdk-lib/scripts/airlift-custom-resource-handlers.sh index fac2ddf75e21c..066e38a17a4a8 100755 --- a/packages/aws-cdk-lib/scripts/airlift-custom-resource-handlers.sh +++ b/packages/aws-cdk-lib/scripts/airlift-custom-resource-handlers.sh @@ -5,7 +5,7 @@ customresourcedir=$(node -p "path.dirname(require.resolve('@aws-cdk/custom-resou awscdklibdir=${scriptdir}/.. list_custom_resources() { - for file in $customresourcedir/lib/*/*/index.js; do + for file in $customresourcedir/dist/*/*/index.js; do echo $file | rev | cut -d "/" -f 2-4 | rev done }