From b8a1c8ecd016b91026d725177da77674a3c4e379 Mon Sep 17 00:00:00 2001 From: Michael Moussa Date: Fri, 14 Jun 2019 04:44:41 -0400 Subject: [PATCH] fix(cloudformation-diff): string.replace error on `cdk context` (#2870) `@aws-sdk/cloudformation-diff` depended on version `^2.1.1` of the `string-width` library in `v0.28.0` of `aws-sdk`. In `v0.29.0`, the dependency was bumped to `^4.1.0`, which inadvertently broke the `cdk context` command as reported in: https://github.com/awslabs/aws-cdk/issues/2854. The current version of `string-width` executes a [string replacement](https://github.com/sindresorhus/string-width/commit/0bc308a2903c15087d187aa2069a12f8210f3eee#diff-168726dbe96b3ce427e7fedce31bb0bcR7), which ends up failing when a non-string (such as the `int` row numbers of the `cdk context` values). This did not previously occur, as the typecheck for `string` would cause the function to return early and report zero-length. The easiest solution here is to cast these values to `string`, which has the beneficial side effect of ensuring that their character lengths are taken into consideration rather than being defaulted to `0` as they had previously been. Fixes #2854 --- packages/@aws-cdk/cloudformation-diff/lib/format-table.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/cloudformation-diff/lib/format-table.ts b/packages/@aws-cdk/cloudformation-diff/lib/format-table.ts index ada2614910857..a5399fc47acb5 100644 --- a/packages/@aws-cdk/cloudformation-diff/lib/format-table.ts +++ b/packages/@aws-cdk/cloudformation-diff/lib/format-table.ts @@ -54,7 +54,7 @@ function calculcateColumnWidths(rows: string[][], terminalWidth: number): number terminalWidth = Math.max(terminalWidth, 40); // use 'string-width' to not count ANSI chars as actual character width - const columns = rows[0].map((_, i) => Math.max(...rows.map(row => stringWidth(row[i])))); + const columns = rows[0].map((_, i) => Math.max(...rows.map(row => stringWidth(String(row[i]))))); // If we have no terminal width, do nothing const contentWidth = terminalWidth - 2 - columns.length * 3;