From e22dcf89de9421ce506c82c439ba9f4659e2e70b Mon Sep 17 00:00:00 2001 From: Ryan Parker Date: Tue, 30 Nov 2021 17:19:05 -0800 Subject: [PATCH 1/8] feat: Added `esbuildArgs` prop and updated test --- packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts | 1 + packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts | 9 ++++++++- .../@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts index 7994859706379..6ff9ded8fa26e 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts @@ -204,6 +204,7 @@ export class Bundling implements cdk.BundlingOptions { ...this.props.banner ? [`--banner:js=${JSON.stringify(this.props.banner)}`] : [], ...this.props.footer ? [`--footer:js=${JSON.stringify(this.props.footer)}`] : [], ...this.props.charset ? [`--charset=${this.props.charset}`] : [], + ...this.props.esbuildArgs ? [Object.keys(this.props.esbuildArgs).map((key) => `${key}=${this.props.esbuildArgs![key]}`).join(' ')] : [], ]; let depsCommand = ''; diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts index e16e9db8120b6..790935d09c020 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts @@ -202,12 +202,19 @@ export interface BundlingOptions { */ readonly esbuildVersion?: string; + /** + * Build arguments to pass into esbuild. + * + * @default - no additional build arguments are passed + */ + readonly esbuildArgs?: { [key: string]: string }; + /** * Build arguments to pass when building the bundling image. * * @default - no build arguments are passed */ - readonly buildArgs?: { [key:string] : string }; + readonly buildArgs?: { [key: string]: string }; /** * Force bundling in a Docker container even if local bundling is diff --git a/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts b/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts index 2f8b823dcce45..4e729e1424e90 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts @@ -207,6 +207,11 @@ test('esbuild bundling with esbuild options', () => { 'process.env.NUMBER': '7777', 'process.env.STRING': JSON.stringify('this is a "test"'), }, + esbuildArgs: { + '--main-fields': 'module,main', + '--log-limit': '0', + '--resolve-extensions': '.ts,.js', + }, }); // Correctly bundles with esbuild @@ -224,6 +229,7 @@ test('esbuild bundling with esbuild options', () => { '--log-level=silent --keep-names --tsconfig=/asset-input/lib/custom-tsconfig.ts', '--metafile=/asset-output/index.meta.json --banner:js="/* comments */" --footer:js="/* comments */"', '--charset=utf8', + '--main-fields=module,main --log-limit=0 --resolve-extensions=.ts,.js', ].join(' '), ], }), From deed531109f023da75fb0b46a57127a275bee09b Mon Sep 17 00:00:00 2001 From: Ryan Parker Date: Tue, 30 Nov 2021 17:30:21 -0800 Subject: [PATCH 2/8] Added example to docs --- packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts index 790935d09c020..23b070a19512f 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts @@ -205,6 +205,19 @@ export interface BundlingOptions { /** * Build arguments to pass into esbuild. * + * For example, to add the [--main-fields](https://esbuild.github.io/api/#main-fields) flag: + * + * ```text + * new NodejsFunction(scope, id, { + * ... + * bundling: { + * esbuildArgs: { + * "--main-fields": "module,main" + * } + * } + * }); + * ``` + * * @default - no additional build arguments are passed */ readonly esbuildArgs?: { [key: string]: string }; From ab98bae38d61c7bd48ebd2973da44f330bbfa6c4 Mon Sep 17 00:00:00 2001 From: Ryan Parker Date: Tue, 30 Nov 2021 17:40:11 -0800 Subject: [PATCH 3/8] Updated README --- packages/@aws-cdk/aws-lambda-nodejs/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/README.md b/packages/@aws-cdk/aws-lambda-nodejs/README.md index 81fb45b3b1f4a..b27309291be1a 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/README.md +++ b/packages/@aws-cdk/aws-lambda-nodejs/README.md @@ -165,7 +165,7 @@ Docker container even if `esbuild` is available in your environment. This can be ## Configuring `esbuild` -The `NodejsFunction` construct exposes some [esbuild options](https://esbuild.github.io/api/#build-api) +The `NodejsFunction` construct exposes [esbuild options](https://esbuild.github.io/api/#build-api) via properties under `bundling`: ```ts @@ -191,6 +191,9 @@ new lambda.NodejsFunction(this, 'my-handler', { banner: '/* comments */', // requires esbuild >= 0.9.0, defaults to none footer: '/* comments */', // requires esbuild >= 0.9.0, defaults to none charset: lambda.Charset.UTF8, // do not escape non-ASCII characters, defaults to Charset.ASCII + esbuildArgs: { // pass additional arguments to esbuild + "--main-fields": "module,main" + }, }, }); ``` @@ -251,7 +254,7 @@ new lambda.NodejsFunction(this, 'my-handler', { }); ``` -Note: A [`tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) is required +Note: A [`tsconfig.json` file](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) is required ## Customizing Docker bundling From 9401d81bd00b4933ff12222bd76faf0533b7d8bf Mon Sep 17 00:00:00 2001 From: Ryan Parker Date: Thu, 9 Dec 2021 16:32:33 -0800 Subject: [PATCH 4/8] Using `Object.entries()` and wrapped arg value in double quotes --- packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts | 2 +- packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts | 2 +- packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts index 6ff9ded8fa26e..df3debc75625e 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/bundling.ts @@ -204,7 +204,7 @@ export class Bundling implements cdk.BundlingOptions { ...this.props.banner ? [`--banner:js=${JSON.stringify(this.props.banner)}`] : [], ...this.props.footer ? [`--footer:js=${JSON.stringify(this.props.footer)}`] : [], ...this.props.charset ? [`--charset=${this.props.charset}`] : [], - ...this.props.esbuildArgs ? [Object.keys(this.props.esbuildArgs).map((key) => `${key}=${this.props.esbuildArgs![key]}`).join(' ')] : [], + ...this.props.esbuildArgs ? [Object.entries(this.props.esbuildArgs).map(([key, value]) => `${key}="${value}"`).join(' ')] : [], ]; let depsCommand = ''; diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts index 23b070a19512f..df1650e513083 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts @@ -218,7 +218,7 @@ export interface BundlingOptions { * }); * ``` * - * @default - no additional build arguments are passed + * @default - no additional esbuild arguments are passed */ readonly esbuildArgs?: { [key: string]: string }; diff --git a/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts b/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts index 4e729e1424e90..530292d5f8671 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts @@ -229,7 +229,7 @@ test('esbuild bundling with esbuild options', () => { '--log-level=silent --keep-names --tsconfig=/asset-input/lib/custom-tsconfig.ts', '--metafile=/asset-output/index.meta.json --banner:js="/* comments */" --footer:js="/* comments */"', '--charset=utf8', - '--main-fields=module,main --log-limit=0 --resolve-extensions=.ts,.js', + '--main-fields="module,main" --log-limit="0" --resolve-extensions=".ts,.js"', ].join(' '), ], }), From 74d6a11ad8d9ba36970490e1268eb5305cda11cf Mon Sep 17 00:00:00 2001 From: Ryan Parker Date: Wed, 9 Mar 2022 14:06:39 -0800 Subject: [PATCH 5/8] Update `esbuildArgs ` key: value type to include boolean --- packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts index 224b3d34fa150..22cb6af5b7745 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts @@ -221,7 +221,7 @@ export interface BundlingOptions { * * @default - no additional esbuild arguments are passed */ - readonly esbuildArgs?: { [key: string]: string }; + readonly esbuildArgs?: { [key: string]: string | boolean }; /** * Build arguments to pass when building the bundling image. From c8ea7eec025dbba05bc87573e188c94fcddb50b0 Mon Sep 17 00:00:00 2001 From: Ryan Parker Date: Wed, 9 Mar 2022 14:16:25 -0800 Subject: [PATCH 6/8] =?UTF-8?q?Updated=20`esbuildArgs`=20type=20doc=20exam?= =?UTF-8?q?ple=20to=20configure=20`=E2=80=94log-limit`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We added support for —main-fields so I replaced the example with —log-limit which we do not currently support. --- packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts index 22cb6af5b7745..c9bc8f1151035 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/lib/types.ts @@ -206,14 +206,14 @@ export interface BundlingOptions { /** * Build arguments to pass into esbuild. * - * For example, to add the [--main-fields](https://esbuild.github.io/api/#main-fields) flag: + * For example, to add the [--log-limit](https://esbuild.github.io/api/#log-limit) flag: * * ```text * new NodejsFunction(scope, id, { * ... * bundling: { * esbuildArgs: { - * "--main-fields": "module,main" + * "--log-limit": "0", * } * } * }); From 3e5d8591bfecec46b09d63a97835eff771f488ec Mon Sep 17 00:00:00 2001 From: Ryan Parker Date: Wed, 9 Mar 2022 14:47:33 -0800 Subject: [PATCH 7/8] =?UTF-8?q?fix=20tests=20and=20replaced=20example=20us?= =?UTF-8?q?es=20of=20`=E2=80=94keep-names`=20with=20`=E2=80=94splitting`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/@aws-cdk/aws-lambda-nodejs/README.md | 2 +- packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/README.md b/packages/@aws-cdk/aws-lambda-nodejs/README.md index 7f77084992a73..3bc1f2fc14c25 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/README.md +++ b/packages/@aws-cdk/aws-lambda-nodejs/README.md @@ -201,7 +201,7 @@ new lambda.NodejsFunction(this, 'my-handler', { inject: ['./my-shim.js', './other-shim.js'] // allows to automatically replace a global variable with an import from another file esbuildArgs: { // pass additional arguments to esbuild "--log-limit": "0" - "--keep-names": true + "--splitting": true } }, }); diff --git a/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts b/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts index 4f3d51ed39ffd..9ff0bd389e812 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts +++ b/packages/@aws-cdk/aws-lambda-nodejs/test/bundling.test.ts @@ -213,7 +213,7 @@ test('esbuild bundling with esbuild options', () => { esbuildArgs: { '--log-limit': '0', '--resolve-extensions': '.ts,.js', - '--keep-names': 'true', + '--splitting': 'true', }, }); @@ -223,7 +223,8 @@ test('esbuild bundling with esbuild options', () => { assetHashType: AssetHashType.OUTPUT, bundling: expect.objectContaining({ command: [ - 'bash', '-c', + 'bash', + '-c', [ 'esbuild --bundle "/asset-input/lib/handler.ts"', '--target=es2020 --platform=node --format=esm --outfile="/asset-output/index.mjs"', @@ -231,9 +232,8 @@ test('esbuild bundling with esbuild options', () => { defineInstructions, '--log-level=silent --keep-names --tsconfig=/asset-input/lib/custom-tsconfig.ts', '--metafile=/asset-output/index.meta.json --banner:js="/* comments */" --footer:js="/* comments */"', - '--charset=utf8', '--charset=utf8 --main-fields=module,main --inject:./my-shim.js', - '--log-limit="0" --resolve-extensions=".ts,.js" --keep-names="true"', + '--log-limit="0" --resolve-extensions=".ts,.js" --splitting="true"', ].join(' '), ], }), From 1784f0dd8792229c57e938f196ea16aa1fd51ace Mon Sep 17 00:00:00 2001 From: Ryan Parker Date: Wed, 9 Mar 2022 15:51:00 -0800 Subject: [PATCH 8/8] fix(README): JSON commas --- packages/@aws-cdk/aws-lambda-nodejs/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/@aws-cdk/aws-lambda-nodejs/README.md b/packages/@aws-cdk/aws-lambda-nodejs/README.md index 3bc1f2fc14c25..a21e5c9a6001d 100644 --- a/packages/@aws-cdk/aws-lambda-nodejs/README.md +++ b/packages/@aws-cdk/aws-lambda-nodejs/README.md @@ -198,11 +198,11 @@ new lambda.NodejsFunction(this, 'my-handler', { charset: lambda.Charset.UTF8, // do not escape non-ASCII characters, defaults to Charset.ASCII format: lambda.OutputFormat.ESM, // ECMAScript module output format, defaults to OutputFormat.CJS (OutputFormat.ESM requires Node.js 14.x) mainFields: ['module', 'main'], // prefer ECMAScript versions of dependencies - inject: ['./my-shim.js', './other-shim.js'] // allows to automatically replace a global variable with an import from another file - esbuildArgs: { // pass additional arguments to esbuild - "--log-limit": "0" - "--splitting": true - } + inject: ['./my-shim.js', './other-shim.js'], // allows to automatically replace a global variable with an import from another file + esbuildArgs: { // Pass additional arguments to esbuild + "--log-limit": "0", + "--splitting": true, + }, }, }); ```