From 72066b3321e5320e28a050f8333424d43db76e53 Mon Sep 17 00:00:00 2001 From: Teddy Sterne Date: Wed, 6 Nov 2024 16:47:31 -0500 Subject: [PATCH 1/2] fix: multiValueQueryStringParameters should be null if empty --- src/adapters/helpers/lambdaEvent.ts | 5 ++++- test/lambda-event.test.ts | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/adapters/helpers/lambdaEvent.ts b/src/adapters/helpers/lambdaEvent.ts index 6155942..d659fd6 100644 --- a/src/adapters/helpers/lambdaEvent.ts +++ b/src/adapters/helpers/lambdaEvent.ts @@ -73,7 +73,10 @@ export const lambdaEvent = (config: AlphaOptions, relativeUrl?: string) => { userArn: null, }, }, - multiValueQueryStringParameters, + multiValueQueryStringParameters: + Object.keys(multiValueQueryStringParameters).length > 0 + ? multiValueQueryStringParameters + : null, }; if (Buffer.isBuffer(event.body)) { diff --git a/test/lambda-event.test.ts b/test/lambda-event.test.ts index 48498bf..bbf9431 100644 --- a/test/lambda-event.test.ts +++ b/test/lambda-event.test.ts @@ -57,7 +57,7 @@ test('Can parse URLs without duplicates', () => { pageSize: '25', test: 'diffValue', }, - multiValueQueryStringParameters: {}, + multiValueQueryStringParameters: null, })); assertRequestId(result); }); From 1731849c23b3ab5232b76e84bd210ebb1bdde109 Mon Sep 17 00:00:00 2001 From: Teddy Sterne Date: Thu, 7 Nov 2024 09:04:04 -0500 Subject: [PATCH 2/2] fix: Structure Multi-Value Params According to Docs --- src/adapters/helpers/lambdaEvent.ts | 25 ++++++++++++------------- test/lambda-event.test.ts | 2 ++ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/adapters/helpers/lambdaEvent.ts b/src/adapters/helpers/lambdaEvent.ts index d659fd6..c973567 100644 --- a/src/adapters/helpers/lambdaEvent.ts +++ b/src/adapters/helpers/lambdaEvent.ts @@ -13,16 +13,18 @@ export const lambdaEvent = (config: AlphaOptions, relativeUrl?: string) => { 'http://fake', querystringWithArraySupport, ); - const params = Object.assign({}, parts.query, config.params); - const multiValueQueryStringParameters: Record = { ...params }; + const params: Record = Object.assign({}, parts.query, config.params); + let multiValueParams: Record | null = null; - Object.keys(multiValueQueryStringParameters).forEach((key) => { - if (!Array.isArray(multiValueQueryStringParameters[key])) { - delete multiValueQueryStringParameters[key]; - } else { - delete params[key]; - } - }); + const hasMultiValueParams = Object.values(params).some((value) => Array.isArray(value)); + + if (hasMultiValueParams) { + Object.entries(params).forEach(([key, value]) => { + multiValueParams = multiValueParams || {}; + multiValueParams[key] = Array.isArray(value) ? value : [value]; + params[key] = Array.isArray(value) ? value.join(',') : value; + }); + } const httpMethod = (config.method as string).toUpperCase(); const requestTime = new Date(); @@ -73,10 +75,7 @@ export const lambdaEvent = (config: AlphaOptions, relativeUrl?: string) => { userArn: null, }, }, - multiValueQueryStringParameters: - Object.keys(multiValueQueryStringParameters).length > 0 - ? multiValueQueryStringParameters - : null, + multiValueQueryStringParameters: multiValueParams, }; if (Buffer.isBuffer(event.body)) { diff --git a/test/lambda-event.test.ts b/test/lambda-event.test.ts index bbf9431..658d706 100644 --- a/test/lambda-event.test.ts +++ b/test/lambda-event.test.ts @@ -31,6 +31,7 @@ test('Can parse URLs with duplicate parameters', () => { httpMethod: 'GET', path: '/lifeomic/dstu3/Questionnaire', queryStringParameters: { + _tag: 'http://lifeomic.com/fhir/questionnaire-type|survey-form,http://lifeomic.com/fhir/dataset|0bb18fef-4e2d-4b91-a623-09527265a8b3,http://lifeomic.com/fhir/primary|0343bfcf-4e2d-4b91-a623-095272783bf3', pageSize: '25', }, multiValueQueryStringParameters: { @@ -39,6 +40,7 @@ test('Can parse URLs with duplicate parameters', () => { 'http://lifeomic.com/fhir/dataset|0bb18fef-4e2d-4b91-a623-09527265a8b3', 'http://lifeomic.com/fhir/primary|0343bfcf-4e2d-4b91-a623-095272783bf3', ], + pageSize: ['25'], }, })); assertRequestId(result);