From 8965164d9064a7f0f0b3bf8178102097bb155043 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Jan 2023 20:28:33 +0100 Subject: [PATCH 1/4] docs: fixed install command --- docs/utilities/parameters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/utilities/parameters.md b/docs/utilities/parameters.md index 9c659e1293..c9d43e7ccc 100644 --- a/docs/utilities/parameters.md +++ b/docs/utilities/parameters.md @@ -43,7 +43,7 @@ Depending on the provider you want to use, install the library and the correspon === "DynamoDBProvider" ```bash - npm install @aws-lambda-powertools/parameters @aws-sdk/client-dynamodb + npm install @aws-lambda-powertools/parameters @aws-sdk/client-dynamodb @aws-sdk/util-dynamodb ``` ???+ tip From 745a016237ed5b68f8fdcda44e40848a44719c7c Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Jan 2023 20:30:11 +0100 Subject: [PATCH 2/4] build: restored @aws-sdk/util-base64-node as dependency --- package-lock.json | 30 ++++++++++++++++--- packages/parameters/package.json | 2 +- packages/parameters/src/BaseProvider.ts | 2 +- .../tests/unit/BaseProvider.test.ts | 2 +- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5988ec4416..0fef505458 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1862,6 +1862,19 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/util-base64-node": { + "version": "3.209.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.209.0.tgz", + "integrity": "sha512-U6pjb6uF/BameQLmzoSrqeiTxu5otwwGV7fO+TyE/3SJm/lyIsBaO+wr0qsoK0ae1VqggR+KCsUG13pWhdltpw==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/util-body-length-browser": { "version": "3.188.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", @@ -17240,7 +17253,7 @@ "version": "1.5.0", "license": "MIT-0", "dependencies": { - "@aws-sdk/util-base64": "^3.208.0" + "@aws-sdk/util-base64-node": "^3.209.0" }, "devDependencies": { "@aws-sdk/client-appconfigdata": "^3.241.0", @@ -17532,11 +17545,11 @@ "version": "file:packages/parameters", "requires": { "@aws-sdk/client-appconfigdata": "^3.241.0", - "@aws-sdk/client-dynamodb": "*", + "@aws-sdk/client-dynamodb": "^3.245.0", "@aws-sdk/client-secrets-manager": "^3.238.0", "@aws-sdk/client-ssm": "^3.244.0", - "@aws-sdk/util-base64": "^3.208.0", - "@aws-sdk/util-dynamodb": "*", + "@aws-sdk/util-base64-node": "^3.209.0", + "@aws-sdk/util-dynamodb": "^3.245.0", "aws-sdk-client-mock": "^2.0.1", "aws-sdk-client-mock-jest": "^2.0.1" }, @@ -18872,6 +18885,15 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/util-base64-node": { + "version": "3.209.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.209.0.tgz", + "integrity": "sha512-U6pjb6uF/BameQLmzoSrqeiTxu5otwwGV7fO+TyE/3SJm/lyIsBaO+wr0qsoK0ae1VqggR+KCsUG13pWhdltpw==", + "requires": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + } + }, "@aws-sdk/util-body-length-browser": { "version": "3.188.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", diff --git a/packages/parameters/package.json b/packages/parameters/package.json index 55afcf9166..bc1bf31e9b 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -60,6 +60,6 @@ "aws-sdk-client-mock-jest": "^2.0.1" }, "dependencies": { - "@aws-sdk/util-base64": "^3.208.0" + "@aws-sdk/util-base64-node": "^3.209.0" } } diff --git a/packages/parameters/src/BaseProvider.ts b/packages/parameters/src/BaseProvider.ts index 2d993c71a2..3e4b2a1474 100644 --- a/packages/parameters/src/BaseProvider.ts +++ b/packages/parameters/src/BaseProvider.ts @@ -1,4 +1,4 @@ -import { fromBase64 } from '@aws-sdk/util-base64'; +import { fromBase64 } from '@aws-sdk/util-base64-node'; import { GetOptions } from './GetOptions'; import { GetMultipleOptions } from './GetMultipleOptions'; import { ExpirableValue } from './ExpirableValue'; diff --git a/packages/parameters/tests/unit/BaseProvider.test.ts b/packages/parameters/tests/unit/BaseProvider.test.ts index bc64b55150..3b8f029d64 100644 --- a/packages/parameters/tests/unit/BaseProvider.test.ts +++ b/packages/parameters/tests/unit/BaseProvider.test.ts @@ -9,7 +9,7 @@ import { GetParameterError, TransformParameterError } from '../../src'; -import { toBase64 } from '@aws-sdk/util-base64'; +import { toBase64 } from '@aws-sdk/util-base64-node'; const encoder = new TextEncoder(); From 7fc71e801e39697084695328761443bb9f153c79 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Jan 2023 20:30:44 +0100 Subject: [PATCH 3/4] fix: projection names --- .../parameters/src/dynamodb/DynamoDBProvider.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/parameters/src/dynamodb/DynamoDBProvider.ts b/packages/parameters/src/dynamodb/DynamoDBProvider.ts index f99ab90651..7fb5152553 100644 --- a/packages/parameters/src/dynamodb/DynamoDBProvider.ts +++ b/packages/parameters/src/dynamodb/DynamoDBProvider.ts @@ -49,7 +49,10 @@ class DynamoDBProvider extends BaseProvider { ...(options?.sdkOptions || {}), TableName: this.tableName, Key: marshall({ [this.keyAttr]: name }), - ProjectionExpression: this.valueAttr, + ProjectionExpression: '#value', + ExpressionAttributeNames: { + '#value': this.valueAttr, + } }; const result = await this.client.send(new GetItemCommand(sdkOptions)); @@ -63,9 +66,14 @@ class DynamoDBProvider extends BaseProvider { const sdkOptions: QueryCommandInput = { ...(options?.sdkOptions || {}), TableName: this.tableName, - KeyConditionExpression: `${this.keyAttr} = :key`, + KeyConditionExpression: '#key = :key', ExpressionAttributeValues: marshall({ ':key': path }), - ProjectionExpression: `${this.sortAttr}, ${this.valueAttr}`, + ExpressionAttributeNames: { + '#key': this.keyAttr, + '#sk': this.sortAttr, + '#value': this.valueAttr, + }, + ProjectionExpression: '#sk, #value', }; const paginationOptions: PaginationConfiguration = { client: this.client, From 3a319764f97c51f39146cd9d00c262dd43ea827d Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Thu, 12 Jan 2023 20:35:34 +0100 Subject: [PATCH 4/4] tests: fixed unit tests after changes in prev commit --- .../tests/unit/DynamoDBProvider.test.ts | 56 +++++++++++++++---- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/packages/parameters/tests/unit/DynamoDBProvider.test.ts b/packages/parameters/tests/unit/DynamoDBProvider.test.ts index 2ecbd4dd44..05dae38d47 100644 --- a/packages/parameters/tests/unit/DynamoDBProvider.test.ts +++ b/packages/parameters/tests/unit/DynamoDBProvider.test.ts @@ -59,7 +59,10 @@ describe('Class: DynamoDBProvider', () => { Key: marshall({ id: parameterName, }), - ProjectionExpression: 'value', + ExpressionAttributeNames: { + '#value': 'value', + }, + ProjectionExpression: '#value', }); expect(parameter).toEqual(parameterValue); @@ -91,7 +94,10 @@ describe('Class: DynamoDBProvider', () => { Key: marshall({ key: parameterName, }), - ProjectionExpression: 'val', + ExpressionAttributeNames: { + '#value': 'val', + }, + ProjectionExpression: '#value', }); expect(parameter).toEqual(parameterValue); @@ -125,7 +131,10 @@ describe('Class: DynamoDBProvider', () => { Key: marshall({ id: parameterName, }), - ProjectionExpression: 'value', + ExpressionAttributeNames: { + '#value': 'value', + }, + ProjectionExpression: '#value', ConsistentRead: true, }); expect(parameter).toEqual(parameterValue); @@ -164,7 +173,10 @@ describe('Class: DynamoDBProvider', () => { Key: marshall({ id: parameterName, }), - ProjectionExpression: 'value', + ExpressionAttributeNames: { + '#value': 'value', + }, + ProjectionExpression: '#value', }); }); @@ -206,11 +218,16 @@ describe('Class: DynamoDBProvider', () => { // Assess expect(client).toReceiveCommandWith(QueryCommand, { TableName: 'test-table', - KeyConditionExpression: `id = :key`, + KeyConditionExpression: `#key = :key`, ExpressionAttributeValues: marshall({ ':key': parameterPath, }), - ProjectionExpression: 'sk, value', + ExpressionAttributeNames: { + '#key': 'id', + '#sk': 'sk', + '#value': 'value' + }, + ProjectionExpression: '#sk, #value', }); expect(parameters).toEqual({ a: 'parameter-a', @@ -256,11 +273,16 @@ describe('Class: DynamoDBProvider', () => { // Assess expect(client).toReceiveCommandWith(QueryCommand, { TableName: 'test-table', - KeyConditionExpression: `key = :key`, + KeyConditionExpression: `#key = :key`, ExpressionAttributeValues: marshall({ ':key': parameterPath, }), - ProjectionExpression: 'sort, val', + ExpressionAttributeNames: { + '#key': 'key', + '#sk': 'sort', + '#value': 'val' + }, + ProjectionExpression: '#sk, #value', }); expect(parameters).toEqual({ a: 'parameter-a', @@ -308,11 +330,16 @@ describe('Class: DynamoDBProvider', () => { // Assess expect(client).toReceiveCommandWith(QueryCommand, { TableName: 'test-table', - KeyConditionExpression: `id = :key`, + KeyConditionExpression: `#key = :key`, ExpressionAttributeValues: marshall({ ':key': parameterPath, }), - ProjectionExpression: 'sk, value', + ExpressionAttributeNames: { + '#key': 'id', + '#sk': 'sk', + '#value': 'value' + }, + ProjectionExpression: '#sk, #value', ConsistentRead: true, }); expect(parameters).toEqual({ @@ -419,11 +446,16 @@ describe('Class: DynamoDBProvider', () => { // Assess expect(client).toReceiveCommandWith(QueryCommand, { TableName: 'test-table', - KeyConditionExpression: `id = :key`, + KeyConditionExpression: `#key = :key`, ExpressionAttributeValues: marshall({ ':key': parameterPath, }), - ProjectionExpression: 'sk, value', + ExpressionAttributeNames: { + '#key': 'id', + '#sk': 'sk', + '#value': 'value' + }, + ProjectionExpression: '#sk, #value', ConsistentRead: true, Limit: 10, });